赞
踩
开源大型语言模型 (LLMs) 现已达到一种性能水平,使它们适合作为推动智能体工作流的推理引擎: Mixtral 甚至在我们的基准测试中 超过了 GPT-3.5,并且通过微调,其性能可以轻易的得到进一步增强。
针对 因果语言建模 训练的大型语言模型 (LLMs) 可以处理广泛的任务,但它们经常在逻辑、计算和搜索等基本任务上遇到困难。最糟糕的情况是,它们在某个领域,比如数学,表现不佳,却仍然试图自己处理所有计算。
为了克服这一弱点,除其他方法外,可以将 LLM 整合到一个系统中,在该系统中,它可以调用工具: 这样的系统称为 LLM 智能体。
在这篇文章中,我们将解释 ReAct 智能体的内部工作原理,然后展示如何使用最近在 LangChain 中集成的 ChatHuggingFace
类来构建它们。最后,我们将几个开源 LLM 与 GPT-3.5 和 GPT-4 进行基准测试。
LLM 智能体的定义非常宽泛: 它们指的是所有将 LLMs 作为核心引擎,并能够根据观察对其环境施加影响的系统。这些系统能够通过多次迭代“感知 ⇒ 思考 ⇒ 行动”的循环来实现既定任务,并常常融入规划或知识管理系统以提升其表现效能。你可以在 Xi et al., 2023 的研究中找到对智能体领域综述的精彩评述。
今天,我们将重点放在 ReAct 智能体 上。ReAct 采用一种基于“推理 (Reasoning)”与“行动 (Acting)”结合的方式来构建智能体。在提示词中,我们阐述了模型能够利用哪些工具,并引导它“逐步”思考 (亦称为 思维链 行为),以规划并实施其后续动作,达成最终的目标。
上述图解虽显得有些抽象,但其核心原理其实相当直接。
参见 此笔记本: 我们借助 Transformers 库展示了一个最基础的工具调用实例。
本质上,LLM 通过一个循环被调用,循环中的提示包含如下内容:
这里是一个问题: “{question}”
你可以使用这些工具: {tools_descriptions}。
首先,你需要进行‘思考: {your_thoughts}’,接下来你可以:
- 以正确的 JSON 格式发起工具调用,
- 或者,以‘最终答案:’为前缀来输出你的答案。
接下来,你需要解析 LLM 的输出:
‘最终答案:’
字符串,循环便结束,并输出该答案;例如,LLM 的输出在回答问题: 1:23:45 中有多少秒?
时可能看起来像这样:
思考: 我需要将时间字符串转换成秒。 动作: { "action": "convert_time", "action_input": { "time": "1:23:45" } }
鉴于此输出未包含 ‘最终答案:’
字符串,它代表进行了工具调用。因此我们解析该输出,获取工具调用的参数: 以参数 {"time": "1:23:45"}
调用 convert_time
工具,执行该工具调用后返回 {'seconds': '5025'}
。
于是,我们将这整个信息块追加至提示词中。
更新后的提示词现在变为 (更为详尽的版本):
这是一个问题: “1:23:45 包含多少秒?” 你可以使用以下工具: - convert_time: 将小时、分钟、秒格式的时间转换为秒。 首先,进行“思考: {your_thoughts}”,之后你可以: - 使用正确的 JSON 格式调用工具, - 或以“最终答案:”为前缀输出你的答案。 思考: 我需要把时间字符串转换成秒数。 行动: { "action": "convert_time", "action_input": { "time": "1:23:45" } } 观测结果: {'seconds': '5025'}
➡️ 我们用这个新的提示再次调用 LLM,鉴于它可以访问工具调用结果中的 观测结果
,LLM 现在最有可能输出:
思考: 我现在有了回答问题所需的信息。
最终答案: 1:23:45 中有 5025 秒。
任务就这样完成了!
一般来说,运行 LLM 引擎的智能体系统的难点包括:
“大于 30,000 的最小质数是什么?”
时,智能体可能会调用“K2 的高度是多少?”
的Search
工具,但这并无帮助。Calculator
工具,通过distance
除以time
来计算: 即便你的 Calculator 工具接受 JSON 格式的调用{“tool”: “Calculator”, “args”: “3km/10min”}
,也存在许多陷阱,例如:“calculator”
或“Compute”
是无效的“args”: “distance/time”
“args": "3km in 10minutes”
那么,完整的智能体设置会是怎样的呢?
我们刚刚在
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。