社区投稿

发布于 2026 年 07 月 28 日 星期二

大模型 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 的统一兼容接口,你可以用一套代码同时调用多个模型,在不同场景下灵活选择最优模型,同时享受稳定的流式传输和完整的工具调用支持。