生成式 AI 聊天应用开发实战:从 API 集成、体验设计到微调与质量监控——generative-ai-for-beginners 第 7 课深度解读
【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners
本篇指南对应
generative-ai-for-beginners课程第 7 课(源文档位于 translations/fa/07-building-chat-applications/README.md,英文原版位于 07-building-chat-applications/README.md)。你将系统掌握「聊天机器人 vs 生成式 AI 聊天应用」的架构差异、基于 SDK/API 的快速集成方法、聊天场景特有的 UX 设计原则、面向垂直领域的 DSL 模型与微调策略,以及评判聊天应用质量的关键指标与负责任 AI 的落地框架。学完本课,你可以据此在课程配套的多语言工程示例(Python、JavaScript、TypeScript、.NET)之上,独立规划并交付一个可持续监控的高质量 AI 聊天应用。
本课讲什么:从"会生成文本"到"能承接对话"
第 6 课解决了"如何构建文本生成应用",而聊天应用把问题从"生成一段内容"升级为"维持一场有上下文的对话"。聊天应用早已超越休闲聊天的范畴,成为客户服务、技术支持乃至复杂咨询系统的基础设施。当生成式 AI 被引入这类平台时,复杂度与挑战也随之上升。本课围绕两个核心问题展开:
- 如何构建(Building the app):怎样高效地构建并针对特定使用场景无缝集成这些 AI 驱动的应用?
- 如何监控(Monitoring):部署之后,如何监控并确保应用在功能层面与遵循微软负责任 AI 六大原则两方面都保持最高质量水准?
在自动化与人机无缝交互的时代,理解生成式 AI 如何改变聊天应用的广度、深度与自适应性是必要的。课程将考察支撑这类复杂系统的架构要素、面向特定领域任务的微调方法,并评估与负责任部署相关的指标与考量。
学习目标
学完本课,你将能够:
- 说明在既有系统中构建与集成聊天应用时的考量;
- 针对特定使用场景定制聊天应用;
- 识别用于有效监控并维持 AI 聊天应用质量的关键指标与注意事项;
- 确保聊天应用以负责任的方式利用 AI 技术。
架构地基:聊天机器人(Chatbot)与 AI 聊天应用(Chat Application)
在动手编码之前,必须厘清两个常被混用的概念。聊天机器人的核心目标是自动化特定会话任务(如回答 FAQ、跟踪包裹),通常由基于规则的逻辑或复杂 AI 算法驱动;而生成式 AI 聊天应用是一个宽泛得多的环境,用于承载人与人之间的文本、语音、视频等多种数字通信形态,其标志性特征是集成了生成式 AI 模型——它可以模拟细腻、类人的对话,基于多样化输入与上下文线索生成回复,参与开放领域讨论、适应不断演进的对话语境,甚至产出创造性或复杂的对话。
下表概括了两者的关键差异:
| 聊天机器人 Chatbot | 生成式 AI 聊天应用 |
|---|---|
| 任务聚焦、基于规则 | 语境感知(Context-aware) |
| 常被嵌入更大的系统 | 可承载一个或多个聊天机器人 |
| 局限于预设功能 | 集成生成式 AI 模型 |
| 专业化、结构化的交互 | 支持开放领域讨论 |
这一区分决定了后续所有技术选型:当你的目标只是"自动化一个固定流程"时,简单机器人足够;当目标是"创造一个能与用户自由对话、记忆上下文、风格可调的产品"时,你实际上在构建一个生成式 AI 聊天应用,需要走完本课余下的全部流程。
复用预制能力:基于 SDK 与 API 构建聊天应用
构建聊天应用的第一个正确动作,不是从零造轮子,而是"盘点现有什么"。集成文档完善的 SDK 与 API 是颇具优势的策略,它让应用在可扩展性与可维护性上具备长期成功的起点,理由如下:
- 加速开发、降低开销:依赖现成能力而不是昂贵地从零构建,可以把精力投放在更重要的业务逻辑上;
- 性能更优:从零实现规模扩展是难题("能扛住用户暴涨吗?"),而维护良好的 SDK/API 通常内置了这类方案;
- 更易维护:大多数 API/SDK 在发布新版本时只需升级库即可同步更新与改进;
- 触及前沿技术:直接复用在海量数据上完成训练与精调的模型,为应用带来开箱即用的自然语言能力。
使用 SDK/API 通常需要获取访问授权,形式多为唯一 Key 或身份认证令牌。下面用 OpenAI Python 库展示这一过程(本课配套的 OpenAI 作业笔记本 与 Azure OpenAI 作业笔记本 均可亲测):
import os from openai import OpenAI API_KEY = os.getenv("OPENAI_API_KEY","") client = OpenAI( api_key=API_KEY ) chat_completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Suggest two titles for an instructional lesson on chat applications for generative AI."}] )注意:上述示例在调用前必须先完成 API Key 的设置(示例中通过环境变量OPENAI_API_KEY读取),否则会收到鉴权错误。
仓库中的最新调用形态:Responses API 与 GPT-4o mini
需要指出的是,课程仓库已在持续演进。英文原版与配套 Python 笔记本中,同一能力的调用已升级为Responses API + gpt-4o-mini:
response = client.responses.create( model="gpt-4o-mini", input=[{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Should oxford commas always be used?"}], store=False) print(response.output_text)在 oai-assignment.ipynb 中可以看到:先import os与from dotenv import load_dotenv加载.env,通过API_KEY = os.getenv("OPENAI_API_KEY","")读取凭据并用assert API_KEY, "ERROR: OpenAI Key is missing"做前置校验,随后以messages=[{role: "system"...}, {role: "user"...}]的形式传入多角色消息——其中system角色用于设定助手人格(如 "You are a helpful assistant."),这正是后续"系统消息框架"一节的工程雏形。笔记本还用同一段文本做了多次重复调用以观察结果差异,并演示了文本摘要(追加Tl;dr)、文本分类(给定[Pricing, Hardware Support, Software Support]分类)、产品命名等后续练习。
对接 Azure OpenAI / Microsoft Foundry 的差异
若改用 Azure OpenAI,客户端配置有两个关键差异:一是凭据变为AZURE_OPENAI_ENDPOINT+AZURE_OPENAI_API_KEY,二是必须把 base_url 指向<your-endpoint>/openai/v1/。见 aoai-assignment.ipynb 的实际写法:
endpoint = os.environ['AZURE_OPENAI_ENDPOINT'] client = OpenAI( api_key=os.environ['AZURE_OPENAI_API_KEY'], base_url=f"{endpoint.rstrip('/')}/openai/v1/", )TypeScript 示例 chat-completions-app/src/main.ts 采用相同模式:用dotenv.config()加载配置,baseURL拼接为${endpoint.replace(/\/$/, '')}/openai/v1/,部署名默认为gpt-4o-mini,并通过max_output_tokens、store等参数控制输出长度与是否存储:
const result = await client.responses.create({ model: deploymentName, input: [ { role: "system", content: "You're the president of France" }, { role: "system", content: "You have just resigned" }, { role: "user", content: "What tasks needs doing?" } ], max_output_tokens: 100, store: false, }); console.log(result.output_text);用 Azure AI Inference SDK 切换多厂商模型
如果希望在同一套代码里横向对比 OpenAI、Meta(Llama)、Mistral、Cohere、Microsoft(Phi)等多个厂商模型,仓库提供了基于@azure-rest/ai-inference的 JavaScript 示例 js-githubmodels/app.js。它要求两个环境变量并显式校验缺失即抛错:
const token = process.env["AZURE_INFERENCE_CREDENTIAL"]; const endpoint = process.env["AZURE_INFERENCE_ENDPOINT"];随后以/chat/completions路径发起请求,modelName变量决定了命中的模型,例如gpt-4o-mini:
const response = await client.path("/chat/completions").post({ body: { messages: [ { role: "system", content: "You're the president of France"}, { role: "system", content: "You have just resigned" }, { role: "user", content: "What tasks needs doing?" }, ], model: modelName, } }); if (response.status !== "200") { throw response.body.error; }从源码注释可以推断其设计意图:通过修改modelName即可在不同模型间切换实验,示例中已列出微软模型目录中可用的 Cohere、Meta Llama 3.1、Mistral、OpenAI 与 Phi 系列——这为"先评估再选型"的工程路线提供了最小可运行脚手架。相关的 TypeScript 工程配置位于 package.json,JavaScript 依赖清单位于 js-githubmodels/package.json。
体验为王:聊天应用特有(且被机器学习放大)的 UX 考量
通用 UX 原则对聊天应用依然适用,但因引入了机器学习组件,以下三点变得格外重要。
- 歧义澄清机制(addressing ambiguity):生成式 AI 偶尔会给出含混回答。为用户提供"请再说清楚一点"的追问能力,能有效兜底这类问题。
- 上下文保留(context retention):先进模型能记住对话中的语境,这对体验几乎是必需品。但把"管理/控制上下文"的能力交给用户会提升体验,也带来敏感信息留存风险——因此要考虑信息保留多久,例如引入留存策略(retention policy),在"需要上下文"与"保护隐私"之间取得平衡。
- 个性化(personalization):具备学习与自适应能力的模型能为用户提供个性化体验。通过用户画像等功能量身定制,不仅让用户感到"被理解",还能帮他更快定位答案,使交互更高效、更令人满意。
个性化的典型例子是 OpenAI ChatGPT 的 "Custom instructions"(自定义指令)设置——允许你提供关于自身的重要上下文信息,使其进入后续每次提示。
下图中可以看到,这份"画像"促使 ChatGPT 为用户生成关于链表(linked lists)的课程计划,且模型会依据该用户的经验背景判断"可能需要一份更深入的教案"——这正是"模型感知语境"的直观演示。
微软大语言模型系统消息框架
当要约束 LLM 的回复风格时,需要学会写好system消息。微软提供了系统消息写作指导,将其拆分为四个区域:
- 定义模型的服务对象:它为谁服务,以及它的能力与局限;
- 定义模型输出格式:结构化约束(如 JSON、特定长度);
- 给出具体示例:用少样本示范模型应有的行为;
- 提供额外的行为护栏(guardrails):明确禁止项与边界。
上述仓库代码里出现的role: "system"就是这四个区域的载体,例如"You are a helpful assistant."属于第 1 区,而带约束的指令与示范对应第 2、3、4 区。
无障碍(Accessibility)
无论用户存在视觉、听觉、运动还是认知障碍,一个设计良好的聊天应用都应人人可用。针对不同障碍类型的增强特性包括:
- 视觉障碍:高对比度主题、可缩放文字、屏幕阅读器兼容;
- 听觉障碍:文本转语音与语音转文本、音频通知的视觉线索;
- 运动障碍:键盘导航支持、语音指令;
- 认知障碍:简化语言选项。
面向垂直领域的定制:DSL 模型与微调(Fine-tuning)
设想一个"听得懂公司黑话、能预判用户常问问题"的聊天应用,两种思路值得关注:
- 使用 DSL 模型:DSL(Domain Specific Language,领域特定语言)。借助在特定领域上训练过的所谓 DSL 模型去理解该领域的概念与场景;
- 应用微调:用特定数据对模型进行进一步训练。
定制路线一:使用 DSL 模型
DSL 模型在特定领域、行业或主题上经过训练或微调,能理解并生成该领域的文本,从而以专业化、语境相关的交互提升用户参与度。其可选范围跨度很大:从完全从头训练一个模型,到通过 SDK/API 直接使用现成模型,再到对已有预训练模型做领域适配(即微调)。
定制路线二:应用微调
微调通常在一个预训练模型面对专业领域或特定任务力不从心时被启用。例如医疗问题天生复杂、极其依赖上下文:医生诊断要综合生活方式、既有病史,甚至查阅最新医学期刊来佐证。在这种精细场景下,通用 AI 聊天应用无法成为可靠信源。
场景推演:一个医疗辅助应用。设想一个帮助医生快速查询治疗指南、药物相互作用或最新研究发现的聊天应用:
- 通用模型也许足以回答基础医疗问题或提供泛化建议,但在以下情况会翻车:
- 高度特殊或复杂的病例。例如神经科医生提问:"治疗儿童患者耐药性癫痫的当前最佳实践是什么?"(What are the current best practices for managing drug-resistant epilepsy in pediatric patients?)
- 缺乏最新进展。通用模型难以给出融合神经学与药理学最新成果的现时答案。
针对这类场景,用专业医疗数据集对模型做微调,能显著提升其准确、可靠处理复杂医学问询的能力——前提是你拥有一个体量充足、相关性强、能代表领域特定挑战与问题的数据集。本仓库在第 18 课(18-fine-tuning)提供了完整的微调实操指南,可以作为本课的延伸学习材料。
如何定义并守护"高质量":关键指标与负责任 AI
高质量聊天应用的标准,既包括可行动的指标采集,也包括负责任地使用 AI 技术的框架遵循。
关键指标清单
为维持应用的高质量表现,必须持续跟踪下列指标——它们既保障应用功能,也评估 AI 模型质量与用户体验:
| 指标 | 定义 | 聊天开发者应思考 |
|---|---|---|
| 正常运行时间(Uptime) | 应用保持可运行、可被用户访问的时间 | 如何把停机时间降到最低? |
| 响应时间(Response Time) | 应用回应用户查询所花的时间 | 如何优化查询处理以改善响应时间? |
| 精确率(Precision) | 真正例预测数占全部正预测数的比例 | 如何验证模型精确率? |
| 召回率/灵敏度(Recall, Sensitivity) | 真正例预测数占实际正例数的比例 | 如何度量并提升召回率? |
| F1 分数 | 精确率与召回率的调和平均,权衡两者取舍 | F1 目标值是多少?如何平衡精确率与召回率? |
| 困惑度(Perplexity) | 度量模型预测的概率分布与数据真实分布的吻合程度 | 如何最小化困惑度? |
| 用户满意度指标 | 度量用户对应用的感知,多通过调查问卷采集 | 多久收集一次用户反馈?如何据此迭代? |
| 错误率(Error Rate) | 模型在理解或输出上出错的比率 | 有哪些降低错误率的策略? |
| 再训练周期(Retraining Cycles) | 模型融合新数据与新洞察的更新频率 | 多久再训练一次?什么事件会触发再训练? |
| 异常检测(Anomaly Detection) | 识别不符合预期行为的异常模式的工具与技术 | 出现异常时如何响应? |
在聊天应用中落实负责任 AI:微软六大原则
微软的负责任 AI 方法确立了应指导 AI 开发与使用的六项原则,聊天开发者应逐条对照落地:
| 原则 | 微软定义 | 聊天开发者考量 | 为何重要 |
|---|---|---|---|
| 公平(Fairness) | AI 系统应公平对待所有人 | 确保聊天应用不基于用户数据产生歧视 | 建立用户信任与包容性;规避法律风险 |
| 可靠与安全(Reliability & Safety) | AI 系统应可靠、安全地运行 | 实施测试与故障兜底机制,最小化错误与风险 | 保障用户满意度,防止潜在伤害 |
| 隐私与安全(Privacy & Security) | AI 系统应安全并尊重隐私 | 实施强加密与数据保护措施 | 保护敏感用户数据并符合隐私法规 |
| 包容(Inclusiveness) | AI 系统应赋能所有人并使人参与 | 设计面向多元受众、无障碍且易用的 UI/UX | 确保更广泛人群能有效使用应用 |
| 透明(Transparency) | AI 系统应可被理解 | 为 AI 回复提供清晰文档与理由说明 | 用户理解决策如何做出时更愿意信任系统 |
| 问责(Accountability) | 人应为 AI 系统负责 | 建立审计与改进 AI 决策的清晰流程 | 支持持续改进,出错时可采取纠正措施 |
值得说明的是,本仓库第 3 课(03-using-generative-ai-responsibly)专门讨论了这六项原则的完整内涵与缓解手段,可与本节指标框架配合阅读,形成"指标度量 + 原则约束"的双轨质量保障体系。
动手练习:本课配套作业与多语言实现
本课作业位于 07-building-chat-applications/python,会带你完成从运行第一条聊天提示、到文本分类与摘要等一连串练习。作业覆盖多种语言形态,便于对照:
- Python 笔记本:OpenAI(oai-assignment.ipynb)、Azure OpenAI(aoai-assignment.ipynb)、GitHub Models(githubmodels-assignment.ipynb),以及各自的 simple 入门版;
- JavaScript:js-githubmodels/app.js(Azure AI Inference SDK);
- TypeScript:chat-completions-app/src/main.ts;
- .NET:dotnet/notebook-azure-openai.dib。
下一步
完成本课之后,可以继续学习第 8 课,了解如何基于聊天能力构建搜索应用(RAG);若想了解微调模型的数据准备与完整流程,可直接跳至第 18 课微调实操。
说明:本课程正文以英文原版(07-building-chat-applications/README.md)为权威来源,并已配套提供波斯语译本(translations/fa/07-building-chat-applications/README.md)等多语言版本;本文对代码示例的说明以仓库当前实际源码为准。
【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考