
使用Scala Play框架构建REST API
一句话总结:十分钟、一杯奶茶的功夫,让 120B 参数巨兽与 20B 轻量快刀同时在你电脑上咆哮,Python 代码不超过 30 行。
2025 年 8 月 6 日,OpenAI 重返开源战场,一次性甩出 Apache 2.0 许可的 GPT-OSS-120B 与 GPT-OSS-20B,直接把“大模型平民化”从口号变成事实:
维度 | GPT-OSS-20B | GPT-OSS-120B | 备注 |
---|---|---|---|
参数量 | 21 B | 117 B | MoE,仅 3.6-5.1 B 活跃 |
上下文 | 128 K | 128 K | 全开源最长之一 |
本地显存 | 16 GB | 80 GB | RTX 4090 vs H100 |
云端价格 | $0.05 / 1K in | $0.10 / 1K in | 比 GPT-4.1 便宜 5-10× |
许可证 | Apache 2.0 | Apache 2.0 | 可商用、可微调 |
一句话:“闭源模型给答案,开源模型给自由。”
官方主页:openai.com/gpt-oss
平台 | 场景 | 地址 | 免费额度 |
---|---|---|---|
Novita AI | 免翻墙、支付宝、120B 云端直调 | novita.ai | 1 万 token |
OpenRouter | 多模型路由、统一账单 | openrouter.ai | 1 美元 |
Ollama | 本地 16 GB 起、零延迟 | ollama.ai | ∞ |
以下示例以 Novita AI 为主,代码同样适用于 OpenRouter 与 Ollama,仅需替换 base_url
与 api_key
。
curl -fsSL https://ollama.ai/install.sh | sh
ollama pull gpt-oss:20b
ollama serve &
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # 本地无校验
)
resp = client.chat.completions.create(
model="gpt-oss:20b",
messages=[{"role": "user", "content": "用三句话解释量子纠缠"}],
max_tokens=128,
temperature=0.1
)
print(resp.choices[0].message.content)
输出:
量子纠缠是粒子间一种超越时空的关联;
改变一个粒子,另一个瞬时改变;
它是量子计算、量子通信的核心资源。
from openai import OpenAI
client = OpenAI(
base_url="https://api.novita.ai/v3/openai",
api_key="sk-nov-你的key"
)
resp = client.chat.completions.create(
model="openai/gpt-oss-120b",
messages=[{"role": "user", "content": "设计一个支持百万并发的 IM 系统"}],
max_tokens=2048,
temperature=0.3
)
print(resp.choices[0].message.content)
输出包含完整的链式思维,可直接 Ctrl+C / Ctrl+V 进 PPT。
stream = client.chat.completions.create(
model="gpt-oss:20b",
messages=[{"role": "user", "content": "写一首关于夏天的俳句"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询城市天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
}
}]
resp = client.chat.completions.create(
model="gpt-oss-20b",
messages=[{"role": "user", "content": "北京天气如何?"}],
tools=tools,
tool_choice="auto"
)
tool_call = resp.choices[0].message.tool_calls[0]
if tool_call.function.name == "get_weather":
city = json.loads(tool_call.function.arguments)["city"]
result = get_weather(city) # 本地函数
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Prompt(BaseModel):
text: str
@app.post("/chat")
def chat(p: Prompt):
resp = client.chat.completions.create(
model="openai/gpt-oss-20b",
messages=[{"role": "user", "content": p.text}],
max_tokens=512
)
return {"answer": resp.choices[0].message.content}
uvicorn main:app --reload
并发 | 模型 | 首 token 延迟 | 成功率 | 成本 (1K in/out) |
---|---|---|---|---|
1 | 20B 本地 | 0.8 s | 100 % | $0 |
10 | 20B 本地 | 1.1 s | 100 % | $0 |
100 | 120B 云端 | 2.3 s | 99.8 % | $0.10 / $0.50 |
测试环境:MacBook Pro M2 Max 32 GB vs 云 H100。
pip install transformers datasets peft
python -m gpt_oss.finetune gpt-oss-20b my_dataset.jsonl
git clone https://github.com/yourname/gpt-oss-python-demo.git
cd gpt-oss-python-demo
pip install -r requirements.txt
python main.py
仓库包含:
从 20B 的轻量利刃,到 120B 的推理巨兽,再到 Apache 2.0 的自由之翼,OpenAI OSS 让“大模型”第一次不再是巨头的专利,而是你我键盘下的日常工具。
下一次,当老板问你“这个功能 AI 能不能做”时,你可以微笑着回答:
“给我 30 秒,Python 搞定。”