菜单

聊天补全和流式传输

相关源文件

本文档介绍了使用 OpenAI 聊天补全 API 的基本模式,包括基本消息处理、流式响应和安全控制。它演示了如何实现与 OpenAI 模型的基于聊天的交互,通过流式传输优化响应交付,并通过内容审查和护栏保护应用程序。

有关高级函数调用和工具集成,请参阅函数调用和工具集成。有关检索增强生成模式,请参阅检索增强生成 (RAG)

基本聊天补全

OpenAI 聊天补全 API 为对话式 AI 应用程序提供了基础。基本模式涉及向模型发送结构化消息并接收生成的响应。

核心 API 结构

聊天补全的 API 请求流程

client.chat.completions.create() 方法接受多个关键参数,这些参数控制模型行为和响应格式。messages 参数包含一个消息对象数组,其中包含 rolecontent 字段。

来源:examples/How_to_stream_completions.ipynb46-51 examples/gpt4o/introduction_to_gpt4o.ipynb89-98

消息结构和角色

角色目的使用示例
系统 (system)提供上下文和指令设置助手的个性和约束
用户 (user)包含用户输入或问题用户查询和请求
助手 (assistant)模型生成的响应对话中之前的 AI 响应

基本消息结构遵循此模式

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello! Could you solve 2+2?"}
]

来源:examples/gpt4o/introduction_to_gpt4o.ipynb92-94

流式响应

流式传输实现了实时响应交付,减少了长时间补全的感知延迟。应用程序不再需要等待整个响应,而是接收模型生成时的增量块。

流式传输实现模式

流式响应处理流程

流式响应的关键区别在于访问 delta.content 而不是 message.content。响应以 ChatCompletionChunk 对象的迭代器形式到达,每个对象在 delta 字段中包含增量内容。

来源:examples/How_to_stream_completions.ipynb172-189

流式传输中的令牌使用情况

要获取流式响应的令牌使用统计信息,请设置 stream_options={"include_usage": True}。这将添加一个包含使用信息的最终块

  • 除最后一个块外,所有块的 Usage 字段均为 null
  • 最终块包含完整的使用统计信息
  • 最终块具有空的 choices 数组

来源:examples/How_to_stream_completions.ipynb579-584 examples/How_to_stream_completions.ipynb614-630

性能比较

流式传输显著改善了长响应的用户体验

  • 首个令牌时间:流式传输约 0.1 秒,而非流式传输为完整补全时间
  • 后续令牌:令牌之间约 0.01-0.02 秒
  • 总补全时间:两种方法相似
  • 用户感知:即时反馈 vs 等待完整响应

来源:examples/How_to_stream_completions.ipynb566-571

内容审查和安全

内容审查提供了对输入和输出中潜在有害内容的自动检测。审查 API 分析文本和图像是否存在跨多个类别的政策违规。

审查 API 集成

审查 API 请求和响应结构

审查检查返回一个布尔值 flagged 结果以及特定类别的标志。对于图像审查,使用 omni-moderation-latest 模型,图像 URL 作为输入格式。

来源:examples/How_to_use_moderation.ipynb90-93 examples/How_to_use_moderation.ipynb194-217

异步审查模式

异步输入和输出审查流程

异步模式允许审查和聊天补全并行运行,如果审查标记了输入,则取消昂贵的聊天请求。输出审查会在将生成的响应返回给用户之前进行检查。

来源:examples/How_to_use_moderation.ipynb108-135 examples/How_to_use_moderation.ipynb316-351

护栏实现

护栏提供了超越基本审查的自定义内容控制,通过自定义提示和逻辑实现对输入和输出的应用程序特定验证。

主题护栏模式

自定义护栏实现流程

护栏使用单独的模型调用来根据自定义标准评估内容。主题护栏示例使用分类提示将对话限制在特定领域(猫和狗)。

来源:examples/How_to_use_guardrails.ipynb116-131 examples/How_to_use_guardrails.ipynb133-152

输出审查护栏

审查护栏模式使用自定义评分标准评估生成的内容

moderation_system_prompt = """
Your role is to assess whether the user question is allowed or not. 
The allowed topics are {domain}.
Criteria: {scoring_criteria}
Instructions: {scoring_steps}
"""

此模式允许对通过验证的内容进行精细控制,具有可配置的阈值和特定领域规则。

来源:examples/How_to_use_guardrails.ipynb284-302 examples/How_to_use_guardrails.ipynb312-327

实现模式

错误处理与速率限制

流式应用程序必须优雅地处理连接中断和模型错误。主要考虑因素包括

  • 部分内容处理:存储累积的块以保留部分响应
  • 超时管理:为流式传输和审查调用设置适当的超时
  • 回退策略:当审查或护栏失败时提供默认响应
  • 成本优化:当输入审查触发时取消昂贵的聊天调用

来源:examples/How_to_stream_completions.ipynb18-21

生产注意事项

部署带有流式传输和安全控制的聊天补全系统时

  • 延迟优化:使用异步模式以最大程度地减少用户等待时间
  • 安全阈值:根据用例平衡误报与漏报
  • 监控:跟踪审查触发率和护栏有效性
  • 内容日志记录:保留标记内容以进行分析和模型改进

异步方法支持复杂的流程,其中安全检查与内容生成并行运行,从而提供安全性和性能。

来源:examples/How_to_use_moderation.ipynb53-57 examples/How_to_use_guardrails.ipynb257-262