第九章:问答之术——对话能力养成

多轮对话接拆招,思维链推理步步高。
在这里插入图片描述

【本章导读】

真正的对话不是一问一答,而是多轮交互。模型需要记住上下文,理解对话历史,才能接招拆招,应对自如。


一、多轮对话:接招拆招

【对话格式】

####
你好,我想了解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%

【如何激发思维链】

  1. Few-shot提示:在提示中给出思维链示例
  2. Zero-shot提示:告诉模型"让我们一步步思考"
  3. 训练数据:在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的最佳实践】

  1. 示例数量:通常3-5个示例效果最好
  2. 示例选择:选择代表性、多样性的示例
  3. 示例顺序:重要示例放后面
  4. 格式一致:所有示例格式保持一致

四、角色扮演:千面化身

【角色扮演心法】

通过系统提示,让模型扮演特定角色,适应不同场景。

【系统提示】

系统: 你是一位资深的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时代最前沿的认知盛宴
在这里插入图片描述
【下一章预告】

下一章,我们将学习多任务微调,探讨如何让模型成为多才多艺的全能选手。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐