菜单

聊天应用

相关源文件

本文档在“初学者生成式AI”课程中,将介绍如何使用大型语言模型(LLM)构建基于聊天的应用程序。聊天应用程序与文本生成应用程序(在文本生成应用程序中介绍)的区别在于,它们可以维护对话上下文,并实现交互式的、持续的对话,而不是一次性的响应。

聊天应用程序中的关键概念

聊天应用程序已融入我们的日常生活,提供的功能远不止于闲聊。它们被用于客户服务、技术支持和复杂的咨询系统。生成式AI通过提供更自然、更具上下文感知的交互来增强这些应用程序。

与遵循预设脚本的传统聊天机器人不同,生成式AI驱动的聊天应用程序能够:

  • 在多个回合中保持对话上下文
  • 生成动态、自然的响应
  • 理解并适应用户意图
  • 提供个性化交互

来源:[07-building-chat-applications/README.md]

聊天应用程序与传统聊天机器人的区别

理解基于规则的传统聊天机器人与生成式AI驱动的聊天应用程序之间的区别至关重要。

传统聊天机器人生成式AI驱动的聊天应用程序
面向任务且基于规则上下文感知且适应性强
通常集成到更大的系统中可以托管一个或多个聊天机器人
仅限于编程功能集成生成式AI模型
专业的、结构化的交互能够进行开放域讨论

来源:[07-building-chat-applications/README.md], [07-building-chat-applications/translations/cn/README.md]

聊天应用程序的架构

生成式AI驱动的聊天应用程序通常包含以下组件:

来源:[07-building-chat-applications/README.md], [11-integrating-with-function-calling/README.md]

使用OpenAI构建聊天应用程序

构建聊天应用程序最常见的方式是使用OpenAI API或Azure OpenAI服务。两者都提供类似的功能,只是实现略有不同。

设置OpenAI客户端

对于Azure OpenAI服务

来源:[07-building-chat-applications/README.md], [06-text-generation-apps/README.md]

聊天补全与文本补全

聊天应用程序使用 chat.completions.create() 而不是文本生成中使用的 completions.create()。主要区别在于消息的结构方式。

来源:[06-text-generation-apps/README.md], [07-building-chat-applications/README.md]

聊天补全的消息结构

聊天补全API需要一个结构化的消息数组,每条消息都有一个角色(role)和内容(content)。

不同的消息角色包括:

  • system:设置助手行为的指令。
  • user:包含来自最终用户的消息。
  • assistant:包含来自AI助手的消息(先前的响应)。
  • function:包含调用外部函数时的输出(与函数调用一起使用)。

来源:[07-building-chat-applications/README.md], [11-integrating-with-function-calling/README.md]

在对话中维护上下文

聊天应用程序的关键方面之一是随时间维护对话上下文。这通过保存和更新消息历史来实现。

典型的实现模式

来源:[07-building-chat-applications/README.md]

系统消息和定制

系统消息是定制聊天应用程序行为的强大方法。微软推荐了一个有效的系统消息框架:

  1. 定义模型的身份及其能力/限制。
  2. 定义模型的输出格式。
  3. 提供预期的行为的具体示例。
  4. 提供额外的行为保护。

有效的系统消息示例

You are an educational assistant specializing in computer science concepts.
Your responses should be clear, accurate, and suitable for students.
Always provide examples when explaining coding concepts.
Format complex code in code blocks.
If you're unsure about something, acknowledge the limitations and suggest reliable sources for further reading.
Do not provide answers to specific homework problems or exams.

来源:[07-building-chat-applications/README.md], [07-building-chat-applications/translations/cn/README.md]

用户体验考量

构建有效的聊天应用程序需要关注用户体验。

  1. 解决歧义:当模型提供模糊的响应时,提供机制让用户澄清。
  2. 上下文保持:允许用户控制和管理上下文。
  3. 个性化:根据用户偏好或历史记录定制体验。

来源:[07-building-chat-applications/README.md], [12-designing-ux-for-ai-applications/README.md]

聊天应用程序中的函数调用

高级聊天应用程序通常需要与外部系统集成。函数调用使模型能够:

  • 调用外部函数/API。
  • 处理结构化数据。
  • 访问最新信息。
  • 代表用户执行操作。

这可以通过在API调用中定义函数来实现。

来源:[11-integrating-with-function-calling/README.md]

监控与负责任的AI

维护高质量的聊天应用程序需要监控关键指标并遵守负责任的AI原则。

指标/原则描述开发人员考量
正常运行时间衡量应用程序运行和可访问用户的时间。您将如何最大限度地减少停机时间?
响应时间应用程序回复用户查询所需的时间。如何优化查询处理?
精确率真实阳性预测数与总阳性预测数之比。您将如何验证模型的准确性?
公平性AI系统应对所有人都公平。确保聊天应用程序不基于用户数据进行歧视。
可靠性与安全性AI系统应可靠且安全地运行。实施测试和保护措施以尽量减少错误。
隐私与安全AI系统应安全并尊重隐私。实施强大的加密和数据保护。
包容性AI系统应赋能所有人并吸引人们。设计适用于不同受众的UI/UX。
透明度AI系统应易于理解。为AI响应提供清晰的文档。
问责制人们应对AI系统负责。建立清晰的审计和改进AI决策的流程。

来源:[07-building-chat-applications/README.md], [07-building-chat-applications/translations/cn/README.md]

聊天应用程序的最佳实践

  1. 将API密钥与代码分开。

    • 使用环境变量或安全的密钥管理系统。
    • 切勿将API密钥提交到公共存储库。
  2. 高效地管理令牌。

    • 了解输入和输出的令牌限制。
    • 实施处理长对话的策略(例如,总结或截断较早的消息)。
  3. 优化温度设置。

    • 较低的温度(接近0):更确定、更专注的响应。
    • 较高的温度(接近1):更具创意、更多样化的响应。
  4. 实施错误处理。

    • 处理API速率限制和服务中断。
    • 在模型失败时提供优雅的降级方案。
  5. 确保负责任的AI集成。

    • 实施内容审核。
    • 提供清晰的用户指南和期望。
    • 考虑潜在的偏见和伦理影响。

来源:[06-text-generation-apps/README.md], [07-building-chat-applications/README.md], [12-designing-ux-for-ai-applications/README.md]

有关构建聊天应用程序的更多信息,请参阅: