大语言模型智能体 (LLM Agents) 入门指南
人类具备一项非凡的能力,那就是能够持续吸收信息、做出决策、采取行动、观察变化,并由此做出下一个决策。我们的整个生命就是一个永无止境的观察、思考和行动的循环。研究人员希望将这个概念应用到大型语言模型(LLM)中,使其能够不断做出新的决策,逐步接近具备解决复杂问题的能力。
介绍大语言模型智能体(LLM Agents)的核心概念、构建原理及实现方式。通过分解复杂任务、利用工具集和思维链技术,智能体能够自主决策并执行多步骤操作。文章涵盖智能体定义、工具箱机制、执行器类型及 LangChain 框架下的应用示例,旨在帮助开发者理解如何构建具备自主解决问题能力的 AI 系统。

人类具备一项非凡的能力,那就是能够持续吸收信息、做出决策、采取行动、观察变化,并由此做出下一个决策。我们的整个生命就是一个永无止境的观察、思考和行动的循环。研究人员希望将这个概念应用到大型语言模型(LLM)中,使其能够不断做出新的决策,逐步接近具备解决复杂问题的能力。
科幻电影和间谍电影中经常出现一种中央人工智能,它与主角交流,搜索互联网和各种秘密数据库,引导主角完成任务。例如电影《钢铁侠》中的贾维斯(J.A.R.V.I.S.)就是一个典型例子。
是什么让贾维斯如此特别?钢铁侠甚至不需要告诉它如何解决问题,它会自己找到方法。这正是我们希望通过智能体实现的目标。
核心毫无疑问是超级强大的大型语言模型,它能够理解问题、观察环境并基于此做出决策。除此之外,再加上一些将语音转换为文本的模型以及解释图像内容的模型,我们就拥有了构建自己的'贾维斯'所需的一切。
智能助手需要掌握的技能包括:
智能体是一种可访问一系列工具的组件。其主要特征在于它能够做出明智的决策并利用适当的工具,直到找到足够好的答案。
在大型语言模型应用方面,智能体的概念可能是最引人注目的进展。它让我们梦想着拥有一个能够自主控制流程、进行研究或通过找到生存概率最高的方案来拯救超级英雄的人工智能。
当我们应用智能体的概念时,我们不仅仅使用大型语言模型来回答问题,而是将其作为大脑,处理它看到的观察结果并决定接下来要做什么。我们人类一直在做着同样的事情:面对要解决的任务,寻找能够帮助我们尽可能轻松地完成任务的方法和工具。
通过应用这种概念和使用正确的工具,计算机也能够解决复杂的查询。例如,如果我们使用大型语言模型将文本转换为 SQL,当执行生成的 SQL 时发生错误,LangChain 的 SQLAgent 不会轻易放弃,而是尝试解释错误并修正问题。
刚刚提到的 SQL 智能体使用了一套名为 SQLDatabaseToolkit 的 LangChain 工具。目前可用的工具并不局限于 SQL。本文将在下面详细介绍 LangChain 已经提供的工具,不过请记住,工具可以是任何东西。之前提及大型语言模型在简单的分析计算方面有时表现不佳,因此解决这类问题需要的是一个能够识别分析任务并使用计算器解决问题的智能体。
OpenAI 的 ChatGPT 已经做到了这一点。如果你通过 Plus 订阅发送请求,你会看到一个分析步骤,聊天机器人根据分析的结果决定如何响应请求。它会从一系列工具中进行选择,例如 Python REPL 用于解决分析任务,需要最新信息时使用网络搜索,用户要求创建图像时使用 Dall-E3 等等。
人类的一大优势就是能够吸收大量的信息,过滤掉不重要的细节,并基于关键信息做出决策。我们通常首先将大问题分解为假设,然后尝试通过观察逐步支持或反驳这些假设。
我们使用'思维链提示'模拟这一过程,将多步骤问题分解为中间步骤。
它可以用 3 个简单步骤来描述:
因此,如果要实现类似功能,首先需要一个潜在行动的集合。LangChain 以'工具箱'的形式来提供可能的功能组合。
这些工具箱提供各种函数或功能供大型语言模型根据当前任务进行选择。
工具的描述方式需要让智能体清楚地知道每个工具的用途。 这合乎常理,因为大型语言模型和智能体无法施展魔法,它们至少需要这些描述作为输入,才能决定使用哪些工具完成任务。
LangChain 已经提供了一些内置工具,同时也允许你创建自己的工具集。
那么还剩下哪些内容有待了解呢?我们需要一个使用这些工具的'执行者',这就是智能体执行器 (Agent Executor)。
智能体能够连续使用正确的工具,持续观察结果,然后决定下一步需要哪些工具。这种迭代执行功能的操作由所谓的智能体执行器完成。
整个过程会反复进行,直到达到预定义的终止条件。下图展示了一个例子,使用 LangChain 中的 SQLDatabaseToolkit 来找到'我们的数据库中有多少客户'这个问题的答案。
这个例子中的数据库包含三个表格:
让我们看看智能体如何尝试找到问题的答案。
刚刚描述的智能体执行器实际上只是众多可选方案之一。你也可以选择其他智能体执行器,例如:
每个智能体执行器都有自己的执行任务和做出决策的方法和模式。选择哪种运行时取决于具体任务的特定要求、决策过程的复杂性以及你希望智能体展现的自主性或智能程度。
总而言之:
为了更直观地理解智能体的工作流,以下是一个基于 LangChain 和 Python 的简化实现示例。该示例展示了如何定义一个简单的计算器工具,并让智能体利用该工具解决数学问题。
from langchain.agents import Tool, AgentExecutor, LLMSingleActionAgent, AgentOutputParser
from langchain.prompts import StringPromptTemplate
from langchain.llms import OpenAI
from langchain.utilities import PythonREPL
# 1. 定义工具:Python REPL
python_repl = PythonREPL()
def python_repl_tool(code: str):
"""使用 Python REPL 执行代码并返回结果"""
try:
result = python_repl.run(code)
return result
except Exception as e:
return f"Error: {e}"
# 2. 注册工具
tools = [
Tool(
name="Calculator",
func=python_repl_tool,
description="Useful for when you need to answer questions about math or calculations. Input should be a valid Python expression."
)
]
# 3. 设置 Prompt 模板
prompt_template = """Answer the following questions as best you can. You have access to the following tools:
{tools}
The way you use the tools is by specifying a json blob.
Specifically, this json should have a `action` key (with the name of the tool to use) and an `action_input` key (with the input to the tool).
Here is the output format:
Thought: Do I need to use a tool? Yes
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin! Remember to follow the format strictly.
Question: {input}
Thought: {agent_scratchpad}"""
# 4. 初始化 LLM 和 Agent
llm = OpenAI(temperature=0)
prompt = StringPromptTemplate.from_template(prompt_template)
# 5. 创建 Agent 和 Executor
agent = LLMSingleActionAgent(llm=llm, prompt=prompt, output_parser=None, tools=tools)
agent_executor = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True)
# 6. 运行智能体
response = agent_executor.run("What is 123 + 456?")
print(response)
上述代码展示了智能体如何通过工具调用来解决超出其直接生成能力的任务。在实际生产中,你需要配置安全的沙箱环境,并对工具输入进行严格的校验。
我们人类将复杂问题分解成更小的子任务和假设,并试图一步一步地证明或证伪它们,以逐步接近解决更大的难题。我们希望通过使用智能体的概念,用大型语言模型模拟这种行为。通过为智能体提供正确的工具,智能体能够自主决定下一步采取什么行动,以更接近最终的解决方案。
这一切非常令人兴奋,因为如果智能体真的变得足够智能,能够模仿人类的独创性和研究技能,我们就能在这些领域取得巨大的进步。在发明新事物和探索世界奥秘方面,人类不再会成为瓶颈。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online