高级用法
把网关用出生产力的几个进阶主题。
函数调用 / 工具(Function Calling)
定义 tools,模型会倾向返回结构化 tool_calls;你执行本地函数后把结果作为 tool 消息回传,再让模型总结。
{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "北京现在天气怎么样?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询某城市天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}]
}
结构化输出(JSON Mode / Schema)
{
"model": "gpt-4o-mini",
"response_format": {"type": "json_object"},
"messages": [
{"role": "system", "content": "只输出 JSON。"},
{"role": "user", "content": "把张三、28岁、工程师 抽成 JSON"}
]
}
提示
使用 JSON 输出时务必在系统提示里明确「只输出 JSON」,并对结果做解析容错。部分上游支持
json_schema 严格模式。推理型模型
推理模型会先"思考"再作答,延迟更高但复杂任务更强。部分模型需用 max_completion_tokens 或特定参数,阅读对应模型说明。响应里可能出现 reasoning 字段(视上游)。
RAG 检索增强
- 用
/v1/embeddings把文档切块转向量,存入向量库(如 pgvector / Milvus / Qdrant)。 - 用户提问时也转向量,做相似度检索取回 top-k 片段。
- 把片段拼进 prompt 的 system 上下文,再让模型基于资料作答并标注引用。
稳定性与重试
- 对
429/5xx做指数退避重试(如 0.5s、1s、2s,加随机抖动)。 - 流式请求注意处理半截断开:记录已输出内容,必要时从头重试。
- 设置合理超时;长输出用流式降低首字节等待。
- 关键路径准备备用模型,主模型失败时降级。
import time, random
def call_with_retry(fn, tries=4):
for i in range(tries):
try:
return fn()
except Exception as e:
if i == tries - 1: raise
time.sleep((2 ** i) * 0.5 + random.random() * 0.3)
提示词缓存(若上游支持)
把稳定的长系统提示放在最前、易变内容放后面,有助于命中原生提示词缓存,降低费用与延迟。
长上下文与截断
超出模型上下文窗口会被上游拒绝或截断。建议:先对历史对话做摘要再拼接;对超长文档分块分步处理,而不是一次塞入。