LangChain Agent 详解:原理、类型与实战应用
什么是 Agent?
在人工智能领域,大语言模型(LLM)虽然拥有强大的推理和生成能力,但其本身缺乏执行外部操作的能力。Agent(智能体)正是为了解决这一问题而诞生的概念。简单来说,Agent 是 LLM 的'身体',负责接收 LLM 的指令并执行具体任务。
如果把 LLM 比作大脑,它负责思考、规划和决策;那么 Agent 就是身体,负责感知环境、调用工具并执行动作。通过 Agent,我们可以让 LLM 走出封闭的训练数据,访问实时信息、操作数据库或控制其他软件系统。
为什么需要 Agent?
- 突破知识截止限制:LLM 的知识来源于训练数据,无法获取实时新闻或最新股价。Agent 可以通过联网搜索工具获取最新信息。
- 执行复杂任务:LLM 擅长文本生成,但不擅长直接修改文件、发送邮件或查询数据库。Agent 可以组合多个工具完成这些操作。
- 自主规划与反思:复杂的任务往往需要分解步骤。Agent 具备自我反思能力,可以在执行失败时调整策略。
Agent 的基本工作原理
Agent 的核心是一个循环过程,通常被称为 Thought-Action-Observation Loop。其工作流程如下:
- 输入处理:用户提出问题或指令,Agent 将其传递给 LLM。
- 推理与决策:LLM 分析当前状态,判断是否需要使用工具。如果需要,它会选择工具名称并生成参数。
- 工具执行:Agent 接收到 LLM 的指令,调用对应的 Python 函数或 API。
- 结果反馈:工具的执行结果返回给 LLM。
- 总结输出:LLM 根据工具返回的结果,生成最终的自然语言回答。
如果任务复杂,LLM 可能会多次重复步骤 2 到 4,逐步解决问题,直到达到终止条件(如 Final Answer)。
代码实现示例
以下是一个使用 LangChain 创建结构化聊天 Agent 的完整示例。该示例展示了如何定义工具、配置 Prompt 以及执行 Agent。
import os
from datetime import datetime
from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor
from langchain.tools import tool
from langchain_community.chat_models.fireworks import ChatFireworks
# 设置环境变量
os.environ["FIREWORKS_API_KEY"] = "YOUR_FIREWORKS_API_KEY"
# 定义工具:获取当前时间
@tool
def get_current_time() -> str:
"""Get the current time."""
(datetime.now().strftime())
fw_chat = ChatFireworks(model=)
tools = [get_current_time]
prompt = hub.pull()
agent = create_structured_chat_agent(fw_chat, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=)
result = agent_executor.invoke({: })
(result[])


