想在自己的硬件上运行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 OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1", # Ollama本地API
api_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指向第三方模型。
以下是使用LiteLLM的Python代理SDK示例:
import asyncio
from agents import Agent, Runner, function_tool, set_tracing_disabled
from agents.extensions.models.litellm_model import LitellmModel
set_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())