为了研究 AgentLM 的训练数据,我专门写了个程序来查看数据集(上图),我们先简单介绍下 AgentLM 的信息,后面讲数据的时候我们细看。
Agent LM 是什么
AgentLM 由 Llama2-chat 开源系列模型之上训练的到的,这个虽然是清华和智谱开源的,但是小伙伴注意不是在 ChatGLM 之上训练的哦。
训练方法
关于训练方法大家可以去 AgentTuning[1] 这个项目仔细看。
AgentTuning 是首次利用多个 Agent 任务交互轨迹对 LLM 进行指令调整的方法。评估结果表明,AgentTuning 让 LLM 在未见过的 Agent 任务中也展现出强大的泛化能力,同时通用语言能力也基本保持不变。
• 论文下载:AgentTuning:为LLM启用通用代理能力[2]
• 在线阅读:AgentTuning: Enabling Generalized Agent Abilities For LLMs[3]
数据集
AgentLM 是使用了两个数据集的混合数据集进行微调得到的:代理数据集 AgentInstruct 和通用数据集 ShareGPT 。
模型遵循 Llama-2-chat 的对话格式,系统提示词固定为
You are a helpful, respectful and honest assistant。
为什么用两个数据集
首先 AgentInstruct 数据集肯定是为了让基础模型获得 Agent 的能力,只有通过大量的 Agent 数据的训练,才能获取比较好的 Agent 性能。
但是如果只用 Agent 的指令数据训练,会有两个缺点:
1. 模型只能解决 Agent 训练数据相关的任务,如果每个领域的任务没有经过训练,解决效果不好;
2. 很容易让模型忘了如何理解和完成通用任务,这样的话虽然专业课能力上去了,但是公共课的成绩就变差了。
无论是上面那种结果,都不算是一个合格的 Agent 大模型。
而加入通用数据集的训练,就能让模型比较好保持着之前的语言能力,同时能让在 Agent 专有指令的训练下,让模型的学习可以举一反三,触类旁通。把这部分 Agent 能力应用到其他领域的 Agent 任务。
AgentInstruct 数据集
AgentLM 训练所用到最重要的数据集,就是 AgentInstruct, AgentInstruct 数据集开源在 🤗Huggingface 仓库[4]。
PS: Hugging Face 网站最近好像访问偶尔异常。
• 🔍 思维链 - 采用 ReAct 提示词策略,为每步操作提供详细的思维链,深入理解模型决策过程
• 🌍 多样性 - 涵盖 6 个现实世界场景,包括日常家务到操作数据库,平均回合数 5 ~ 35 不等。
• 🎯 精确性 - GPT-4 也不能完全做对智能体任务,使用轨迹奖励机制对数据严格筛选,确保每条数据的质量。
• ✅ 泛化性 - 严格检查,避免数据泄露,保证数据的泛化性
我们今天介绍的主角也就是这个数据集。
我们先看一下这个数据集的整体情况:
他总共有六个类型的任务,分别是:
• 家务劳动、
• 网上购物、
• 网页对话、
• 知识图谱、
• 操作系统、
• 数据库操作。
加起来一共 1866 组对话。
每组会有多轮对话,每轮对话就是指一问一答。
开源数据集的格式是 parquet 格式,你可以在 Hugging Face 上查看用他的查看器查看:
由于查看不方便,我把他转化成 JSON 格式并做了一个 UI 来进行研究学习。
数据一共有六种类型,我们一个一个的看一下。
一、数据库
先看一下数据库的第一个轮数据问答,刚开始显示为 AI 设定角色,然后进行少样本提示。 具体的格式和要求也都一一明确指出,这个和我们之前讲的提示词最佳实践一样。
为了避免大模型的幻觉,提示词还特别说明不要让它胡说八道:除非您确定答案,否则不要写此模式。
最后,由于过程中无法进行实际的数据库交互,但是为了让模型能正确处理原始数据库响应,提示语最后还不忘交代一下: 你的输入将是原始的 MySQL 响应,你必须自己处理它。
我们继续往下看。紧接着,用户就给出了问题『有多少法国车手的圈速低于 01:00.00?』,以及对应的上下文:数据表和字段信息。
然后 GPT 给出了 SQL 回答:
用户执行了 SQL 语句,把 MYSQL 的原始输出(看格式应该是 Python 的SQL返回值)给 GPT,最后 GPT 根据这个结果返回了前面问题的答案。
至此,这一轮问答圆满结束结束。
我们接下来看第二个数据库任务数据:
刚开始还是明确角色设定、格式等要求。
第二步仍然是 提出问题 并 告诉 AI 环境(数据表)信息:
第三步也就是最后一步,把 MySQL的原始输出告诉 AI,让 AI 给你正确的答案。
我们再看一条数据库任务数据,比如 512(我自己编的号):
角色设定提示语还是同样的,我们直接看任务描述,这次的任务是更新 John 的电子邮件地址,GPT 也是很顺利给出了 SQL:
SQL 的执行结果是空,然后训练数据给出了「更新成功」的回复。一条完整的任务对话结束。
比如数据库任务的训练数据,如果是我来审查编写,我就会在
• 执行成功的时候返回:
[1]• 执行失败的时候返回:
[0]
也就是返回更新记录的行数,因为在我们很多业务里面更新指令是因为各种原因有可能找不到数据进行更新的。
当然,这个和你的业务场景,或者说未来 工具(Tools) 的实现有关。
更重要的一点是,保证数据格式的一致性:
如果更新成功是 [] ,那么所有样例中都应该是这样的,最好在编写数据之前就确定规范。
知识图谱任务
我们在看一条知识图谱的任务:
经过前面数据库任务对话的学习之后,就发现再看别的任务就很简单了。刚开始仍然是进行角色设定、把要求和格式描述清楚。注意最后一句话,用了 ReAct 的提示方法,ReAct 提示技术的详细信息可以参考我之间的文章: PromptEngineering:ReAct 框架(LangChain 使用的 Agents 框架)
我们看看前面几轮对话,好我们当时讲解 ReAct 的流程一样,
• 用户提出问题
• GPT 给出想法和行动,
• 用户执行行动,给出观察结果
• ...(重复上面两个步骤知道问题解决)
由于这个任务的对话轮数比较长,我们直接跳到最后,AI 根据最后一轮的观察,得出了最终答案, 也就是「克莱斯勒制造的支持“近地轨道”的火箭」。
网上购物
双十一快到了,我们再看一下网上购物任务的对话,网上购物数据集有 351 条数据,我们随机找一条查看。
同样我们先学习一下人家怎么进行角色设定的,
您正在网上购物。我将指导您做什么。您必须按照说明进行操作。
每一轮我都会给你一个观察结果和一个可用动作列表,
你必须根据状态和指令响应一个动作。如果搜索可用,您可以使用搜索操作。
您可以单击可单击项中的按钮之一。操作应具有以下结构:
search[keywords] click[value]
如果操作无效,则不执行任何操作。搜索中的关键字由您决定,
但点击中的值必须是可用操作列表中的值。
请记住,搜索中的关键字应该仔细设计。您的回复应使用以下格式:
想法:我认为...
操作:单击[某事]
先给机器人立人设:买东西真简单,搜索+点击。
接下来用户,说我要买 50块以下的种子油沐浴露,GPT 爽快地告诉你给我搜索:
接下来搜出来一堆沐浴露,GPT 告诉你给我点 B07VNGPR39。
吐槽一下这个电商平台不靠谱,第一个商品竟然是 53.95 这么贵,肯定打广告了。
用户一如既往重复下要买啥,然后给你点击之后的界面,机器人直接分析:买买买。
至此愉快的购物结束,铁子们不要说咋不付款就结束了?因为付款留言抢优惠券啥的不是咱们训练的任务目标。
可以预见不久的将来
每个企业可以拥有自己的大模型,甚至有多个模型来服务自己不同的业务, 这个目标在半年前听起来是很玄幻的事情,如今大家再去衡量的话便会发现这个已经慢慢在变成现实。
拥有自己的定制(微调)模型,整体上来说有对普通人三个难点,已经都有了很好的解决方案:
1. 微调数据的准备:这个可能是以后唯一需要自己提供的东西,但是数据准备回变得越来越简单,给你个 Excel、或者在线表单,然后根据不同任务类型的样例照猫画虎即可;
2. 模型微调和导出:微调可能是这三步中技术难度最高的了,不过好在 MaaS 厂商如今已经极大简化了微调过程,上传数据点击即可训练即可,以后大家会向用淘宝和抖音一样用这些 MaaS 服务。
3. 模型的私有运行:同样的,大模型基础设施的厂商不经帮你微调,部署运行也同样提供了服务。自己部署一个大模型服务会比开一个网店更简单。
其他数据集包括操作系统、家务、网页问答,模式上和我们刚才介绍的数据库、知识图谱、网上购物都一样,我就不一个一个讲了。 相信很多人看到这里肯定会灵感爆发,已经计划训练一个自己的专属模型了吧,有同感的可以留言或者私信跟大家分享一下, 我后面也会微调一个模型并配套一个应用的实现来实践一下。
ShareGPT 数据集
前面提到除了代理用的数据集之外,AgentLM 还混合了一些通用数据集。这些数据由产品人员精心挑选,共同造就了 AgentLM。我简单介绍下 ShareGPT, 没有接触过这个网站的同学可以有个大致了解。
ShareGPT[5] 是一个专门分享 ChatGPT 对话的一个应用,迄今为止已经分享了 386,310 条对话。
你可以在上面分享自己觉得有用的 ChatGPT 对话历史。
用作 AgentLM 训练的通用数据由产品经理在该网站上精心挑选,当然具体是那些我们不得而知了。
ShareGPT 上有很多很棒的对话,无论是知识学习还是学习提示语我觉得都很不错,推荐大家都去看看。
写在最后
当时学习 AgentInstruct 数据集的时候我并没有想太多,但是写完这篇文章, 回想半年前的 AI 浪潮,接头巷尾的讨论,到如今这个很多人已经无心关注的已然崛起的市场,又有了诸多感慨。
当然还是先希望这篇介绍数据集的文章能帮助到大家,其他的下次单独跟大家聊一聊,
引用链接
[1] AgentTuning: https://github.com/THUDM/AgentTuning[2] AgentTuning:为LLM启用通用代理能力: https://arxiv.org/pdf/2310.12823v1.pdf[3] AgentTuning: Enabling Generalized Agent Abilities For LLMs: https://thudm.github.io/AgentTuning/[4] 🤗Huggingface 仓库: https://huggingface.co/datasets/THUDM/AgentInstruct[5] ShareGPT: https://sharegpt.com/
--- END ---

