如何使用Ollama在本地运行gpt-oss
想在自己的硬件上运行OpenAI的GPT-OSS模型?本指南将手把手教你如何用Ollama本地部署GPT-OSS-20B或GPT-OSS-120B,实现离线对话、API调用,甚至连接Agents SDK。
注意:本指南针对消费级硬件(如PC/Mac)运行模型的情况。
选择模型
Ollama支持两种规格的GPT-OSS模型:
- gpt-oss-20b
- 较小模型
- 建议≥16GB显存或统一内存
- 适合高端消费级GPU或苹果M系列芯片
- gpt-oss-120b
- 完整大模型
- 建议≥60GB显存或统一内存
- 适合多GPU或工作站配置
注意事项:
- 当前仅提供MXFP4量化版本
- 显存不足时可卸载到CPU运行(但速度会降低)
快速安装
- 安装Ollama → 下载地址
- 拉取所需模型:
# 20B版本
ollama pull gpt-oss:20b# 120B版本
ollama pull gpt-oss:120b
开始对话
通过应用或终端启动聊天:
ollama run gpt-oss:20b
Ollama默认采用OpenAI和谐模式的对话模板,直接输入内容即可交流。
API调用
Ollama提供兼容OpenAI的Chat Completions API,无需修改即可使用OpenAI SDK。Python示例:
from openai import OpenAIclient = OpenAI(base_url="http://localhost:11434/v1", # Ollama本地APIapi_key="ollama" # 虚拟密钥
)response = client.chat.completions.create(model="gpt-oss:20b",messages=[{"role": "system", "content": "你是一个助人为乐的AI助手。"},{"role": "user", "content": "解释什么是MXFP4量化?"}]
)print(response.choices[0].message.content)
熟悉OpenAI SDK的用户可无缝切换。也可直接使用Ollama的Python/JavaScript SDK。
工具调用
Ollama支持:
- 函数调用
- 内置浏览器工具(应用中)
函数调用示例:
tools = [{"type": "function","function": {"name": "get_weather","description": "获取指定城市当前天气","parameters": {"type": "object","properties": {"city": {"type": "string"}},"required": ["city"]},},}
]response = client.chat.completions.create(model="gpt-oss:20b",messages=[{"role": "user", "content": "柏林现在天气如何?"}],tools=tools
)print(response.choices[0].message)
由于模型通过思维链(CoT)实现工具调用,需将API返回的推理结果反馈给工具调用接口,循环直至获得最终答案。
Responses API 替代方案
目前 Ollama 尚未原生支持 Responses API。
若您希望使用 Responses API,可以通过 Hugging Face 的 Responses.js 代理工具将 Chat Completions 转换为 Responses API 格式。
对于基础使用场景,您也可以运行我们提供的 Python 示例服务器(以 Ollama 为后端)。该服务器仅为基础示例,暂未实现…
pip install gpt-oss
python -m gpt_oss.responses_api.serve \--inference_backend=ollama \--checkpoint gpt-oss:20b
代理SDK集成
想在OpenAI代理SDK中使用gpt-oss?
两种代理SDK都允许您覆盖OpenAI基础客户端,通过聊天补全功能指向Ollama,或使用Responses.js代理本地模型。您也可以使用内置功能将代理SDK指向第三方模型。
- Python:使用LiteLLM通过LiteLLM代理到Ollama
- TypeScript:使用AI SDK搭配ollama适配器
以下是使用LiteLLM的Python代理SDK示例:
import asyncio
from agents import Agent, Runner, function_tool, set_tracing_disabled
from agents.extensions.models.litellm_model import LitellmModelset_tracing_disabled(True)@function_tool
def get_weather(city: str):print(f"[debug] getting weather for {city}")return f"The weather in {city} is sunny."async def main(model: str, api_key: str):agent = Agent(name="Assistant",instructions="You only respond in haikus.",model=LitellmModel(model="ollama/gpt-oss:120b", api_key=api_key),tools=[get_weather],)result = await Runner.run(agent, "What's the weather in Tokyo?")print(result.final_output)if __name__ == "__main__":asyncio.run(main())