大模型修炼秘籍 第九章:问答之术——对话能力养成
第九章:问答之术——对话能力养成
多轮对话接拆招,思维链推理步步高。
【本章导读】
真正的对话不是一问一答,而是多轮交互。模型需要记住上下文,理解对话历史,才能接招拆招,应对自如。
一、多轮对话:接招拆招
【对话格式】
#### 你好,我想了解Python编程。 #### 你好!Python是一门非常适合初学者的编程语言。你想了解Python的哪个方面呢? #### 我想学习Python的基础语法,能给我一些建议吗? #### 当然!学习Python基础语法,我建议从以下几个方面入手...【上下文窗口】
多轮对话需要将历史对话作为上下文输入:
第1轮: 用户: 你好 助手: 你好!有什么可以帮助你的? 第2轮: 输入: [第1轮对话] + 用户: 你叫什么名字? 助手: 我是一个AI助手... 第3轮: 输入: [第1轮对话] + [第2轮对话] + 用户: 你能做什么? 助手: 我可以帮助你...【上下文长度管理】
| 策略 | 描述 | 优缺点 |
|---|---|---|
| 截断 | 只保留最近N轮 | 简单但丢失信息 |
| 摘要 | 将历史对话压缩为摘要 | 保留关键信息 |
| 滑动窗口 | 固定窗口大小滑动 | 平衡效果 |
二、思维链:步步为营
【思维链心法】
复杂问题需要分步骤推理。思维链(Chain-of-Thought, CoT)让模型展示推理过程,步步为营,提高复杂问题的解决能力。
【思维链示例】
问题: 小明有5个苹果,给了小红2个,又买了3个,现在有几个? 普通回答: 6个 思维链回答: 让我一步步思考: 1. 小明最初有5个苹果 2. 给了小红2个,剩下 5 - 2 = 3个 3. 又买了3个,现在有 3 + 3 = 6个 答案是6个。【思维链的效果】
| 任务 | 无CoT | 有CoT | 提升 |
|---|---|---|---|
| GSM8K(数学) | 17% | 58% | +41% |
| AQuA(数学) | 24% | 35% | +11% |
| StrategyQA | 54% | 65% | +11% |
【如何激发思维链】
- Few-shot提示:在提示中给出思维链示例
- Zero-shot提示:告诉模型"让我们一步步思考"
- 训练数据:在SFT数据中包含思维链
三、Few-shot学习:举一反三
【Few-shot心法】
Few-shot学习让模型从少量示例中学习新任务,如同武学高手举一反三,触类旁通。
【Few-shot格式】
任务: 情感分类 示例1: 输入: 这部电影太精彩了! 输出: 正面 示例2: 输入: 服务态度很差,再也不来了。 输出: 负面 示例3: 输入: 今天天气不错。 输出: 中性 现在请分类: 输入: 这家餐厅的菜很好吃,就是有点贵。 输出: ?【Few-shot vs Zero-shot vs Fine-tuning】
| 方法 | 需要示例 | 需要训练 | 灵活性 |
|---|---|---|---|
| Zero-shot | 否 | 否 | 最高 |
| Few-shot | 少量 | 否 | 高 |
| Fine-tuning | 大量 | 是 | 低 |
【Few-shot的最佳实践】
- 示例数量:通常3-5个示例效果最好
- 示例选择:选择代表性、多样性的示例
- 示例顺序:重要示例放后面
- 格式一致:所有示例格式保持一致
四、角色扮演:千面化身
【角色扮演心法】
通过系统提示,让模型扮演特定角色,适应不同场景。
【系统提示】
系统: 你是一位资深的Python编程专家,擅长用简单易懂的方式解释复杂的编程概念。 用户: 什么是装饰器? 助手: 装饰器是Python中一个非常优雅的特性,它允许我们在不修改原函数代码的情况下,给函数添加额外的功能。 ...【角色扮演的应用】
| 角色 | 应用场景 |
|---|---|
| 编程专家 | 代码编写、调试 |
| 翻译专家 | 多语言翻译 |
| 写作助手 | 文章创作、润色 |
| 学习导师 | 知识讲解、答疑 |
| 客服助手 | 问题解答、服务 |
五、工具调用:神兵利器
【工具调用心法】
模型本身能力有限,通过调用外部工具,可以获得更强的能力,如同武林高手配备神兵利器。
【工具类型】
| 工具 | 功能 | 示例 |
|---|---|---|
| 搜索引擎 | 获取实时信息 | 搜索最新新闻 |
| 代码执行 | 运行代码 | 计算复杂数学 |
| API调用 | 访问外部服务 | 查询天气 |
| 数据库 | 查询数据 | 检索知识库 |
【工具调用流程】
用户: 北京今天天气怎么样? 模型思考: 我需要调用天气API来获取北京的天气信息。 模型输出: { "tool": "weather_api", "parameters": { "city": "北京" } } 系统执行工具,返回结果: { "temperature": "25°C", "weather": "晴", "humidity": "45%" } 模型输出: 北京今天天气晴朗,气温25°C,湿度45%,非常适合外出活动!【Function Calling】
现代大模型支持结构化的函数调用:
tools=[{"name":"get_weather","description":"获取指定城市的天气信息","parameters":{"type":"object","properties":{"city":{"type":"string","description":"城市名称"}},"required":["city"]}}]response=model.chat(messages,tools=tools)六、本章心法总结
【口诀】
多轮对话接拆招,思维链推理步步高。
Few-shot举一反三,工具调用神兵到。
【要点回顾】
| 要点 | 说明 |
|---|---|
| 多轮对话 | 管理上下文,记住历史 |
| 思维链 | 分步骤推理,提高复杂问题解决能力 |
| Few-shot | 从少量示例中学习 |
| 角色扮演 | 通过系统提示定义模型角色 |
| 工具调用 | 扩展模型能力边界 |
带你进入AI时代最前沿的认知盛宴
【下一章预告】
下一章,我们将学习多任务微调,探讨如何让模型成为多才多艺的全能选手。
