大模型 API 流式输出与 Function Calling 怎么用?OpenAI 兼容接口开发指南
详解大模型 API 流式输出(Streaming)和函数调用(Function Calling)的实现原理与代码示例,基于 OpenAI 兼容接口,适用于 DeepSeek、千问等主流国产模型。
流式输出:为什么你的 AI 应用需要 Streaming
当大模型生成的文本较长时,如果等待全部内容生成完毕再返回,用户可能要等好几秒甚至更久,体验很差。流式输出(Streaming)通过 SSE(Server-Sent Events)协议,让模型每生成一段内容就立即推送给客户端,用户看到的是逐字蹦出来的效果,首字返回时间(TTFT)大幅缩短。
几乎所有主流大模型都支持流式输出,且在 OpenAI 兼容接口下用法一致:只需在请求中设置 stream=True 即可。
流式输出代码示例
使用 OpenAI Python SDK 调用支持流式的兼容接口:
from openai import OpenAI
client = OpenAI(
api_key='your-api-key',
base_url='https://api.bumo.cc/v1'
)
stream = client.chat.completions.create(
model='deepseek-chat',
messages=[{'role':'user','content':'解释一下什么是闭包'}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end='')这段代码会逐字打印模型输出,无需等待全部生成完毕。需要注意的是,流式模式下 OpenAI 协议默认不返回 Token 消耗量,如果需要统计用量,可以设置 stream_options={'include_usage': True},最后一个数据块会包含 Token 消耗信息。
Function Calling:让大模型调用外部工具
Function Calling(函数调用)是构建 AI Agent 的核心能力。通过在请求中传入 tools 参数,模型能理解你定义的函数签名,并在需要时返回函数名和参数,由你的代码执行实际操作后将结果回传给模型。
tools = [{
'type': 'function',
'function': {
'name': 'get_weather',
'description': '查询指定城市的天气',
'parameters': {
'type': 'object',
'properties': {
'city': {'type': 'string', 'description': '城市名称'}
},
'required': ['city']
}
}
}]
resp = client.chat.completions.create(
model='deepseek-chat',
messages=[{'role':'user','content':'北京今天天气怎么样?'}],
tools=tools
)
# 模型会返回 tool_calls,包含函数名和参数
print(resp.choices[0].message.tool_calls)拿到模型返回的函数名和参数后,由你的代码执行对应函数(如调用天气 API),再把结果以 tool 角色的消息传回模型,模型会基于结果生成自然语言回复。
流式输出与 Function Calling 的注意事项
- 增量拼接:流式模式下 Function Calling 的参数也是分块返回的,需要自己在客户端做 buffer 拼接,等完整参数到达后再执行 JSON 解析。
- 超时设置:流式请求建议设置 60 秒以上的超时,避免长文本生成中途断开。
- 反向代理缓冲:如果中间有 Nginx 等反向代理,注意关闭响应缓冲(proxy_buffering off),否则流式输出会被攒成批量返回。
选择兼容接口稳定的调用入口
流式输出和 Function Calling 对网络稳定性要求很高——一个请求超时,整个交互就断了。选择 API 服务时,稳定性和低延迟比价格更重要。
如果你需要一个同时支持流式输出和 Function Calling 的稳定调用入口,不墨 AI API 提供了完整的 OpenAI 兼容接口,支持 DeepSeek、千问等主流模型的流式调用和函数调用功能,接口参数与 OpenAI 官方完全对齐,现有代码只需改 base_url 即可无缝迁移。
无论你是在构建聊天机器人、RAG 系统还是 AI Agent,流式输出和 Function Calling 都是必备能力。通过 不墨 AI API 的统一兼容接口,你可以用一套代码同时调用多个模型,在不同场景下灵活选择最优模型,同时享受稳定的流式传输和完整的工具调用支持。
