先看一个场景,感受Agent的魅力假设你给AI布置一个任务:
传统RAG能做到的:根据你的知识库回答一些历史问题。 AI Agent能做到的:
这就是Agent的威力——它不再是被动回答问题的对话工具,而是主动完成任务的数字助手。 第一章:Agent到底是什么?——用一个比喻讲清楚在动手之前,我们先建立对Agent的直观认知。 1.1 Agent = 大脑 + 手脚┌─────────────────────────────────────────────────┐ │ AI Agent │ │ │ │ ┌─────────────┐ ┌────────────────────────┐ │ │ │ 大脑 │ │ 手脚 │ │ │ │ (大模型) │ │ (工具集) │ │ │ │ │ │ │ │ │ │ 思考策略 │◄──►│ 搜索引擎 │ │ │ │ 分解任务 │ │ 代码执行器 │ │ │ │ 决策判断 │ │ API调用 │ │ │ │ 反思复盘 │ │ 数据库查询 │ │ │ └─────────────┘ │ 文件读写 │ │ │ └────────────────────────┘ │ └─────────────────────────────────────────────────┘ 核心逻辑:大模型(大脑)决定"做什么",工具集(手脚)负责"怎么做"。 1.2 三种主流架构模式目前Agent有三种主流实现范式,我帮你梳理好了:
新手建议:从ReAct开始,这是最经典也最易理解的模式。本文也重点围绕ReAct展开。 第二章:实战——从零搭建一个ReAct Agent我们用LangChain实现一个最简单的Agent,让它具备搜索+计算两种能力。 2.1 准备工作pip install langchain langchain-openai langchain-community tavily-python
2.2 定义工具(Agent的"手脚")from langchain.tools import tool from langchain_community.tools.tavily_search import TavilySearchResults import math # 内置工具:搜索 search_tool = TavilySearchResults( api_key="你的Tavily密钥", max_results=3, include_answer=True ) # 自定义工具:计算器 @tool def calculator(expression: str) -> str: """ 用于执行数学计算。输入一个数学表达式,返回计算结果。 例如:输入 "2 + 3 * 4",返回 "14" """ try: # 安全计算(仅允许数字和基本运算符) allowed = set("0123456789+-*/.() ") if not all(c in allowed for c in expression): return "错误:表达式包含非法字符" result = eval(expression) return f"计算结果:{result}" except Exception as e: return f"计算错误:{str(e)}" # 工具列表 tools = [search_tool, calculator] 2.3 构建Agent(核心部分)from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor from langchain.prompts import PromptTemplate # 初始化大模型 llm = ChatOpenAI( model="gpt-4o-mini", # 推荐用GPT-4级模型,推理能力强 temperature=0, api_key="你的OpenAI密钥" ) # ReAct提示词模板 react_prompt = PromptTemplate.from_template(""" 你是一个能调用工具的智能助手。你拥有以下工具: {tools} 工具名称:{tool_names} 请使用以下格式回答: Question: 用户的问题 Thought: 你需要思考下一步做什么 Action: 你要调用的工具名称,必须是 [{tool_names}] 中的一个 Action Input: 传给工具的输入参数 Observation: 工具返回的结果 ...(Thought/Action/Action Input/Observation 可以重复多次) Thought: 我现在知道最终答案了 Final Answer: 给用户的最终回答 开始! Question: {input} Thought: {agent_scratchpad} """) # 创建Agent agent = create_react_agent( llm=llm, tools=tools, prompt=react_prompt ) # Agent执行器(负责运行循环) agent_executor = AgentExecutor( agent=agent, tools=tools, verbose=True, # 打印思考过程,方便调试 max_iterations=5, # 防止死循环 handle_parsing_errors=True ) 2.4 测试运行# 测试问题 result = agent_executor.invoke({ "input": "2024年诺贝尔物理学奖得主是谁?他/她的年龄是多少?" }) print("\n=== 最终答案 ===") print(result["output"]) 运行效果(Verbose模式输出): > Entering new AgentExecutor chain...
Thought: 我需要搜索2024年诺贝尔物理学奖得主的信息
Action: tavily_search_results_json
Action Input: "2024年诺贝尔物理学奖得主"
Observation: [{'title': '2024年诺贝尔物理学奖...', 'content': 'John J. Hopfield 和 Geoffrey E. Hinton...'}]
Thought: 现在我知道得主是John J. Hopfield和Geoffrey E. Hinton,我需要查他们的年龄。
Action: tavily_search_results_json
Action Input: "John J. Hopfield 出生日期"
Observation: John J. Hopfield 出生于1933年7月15日...
Thought: 我现在可以计算年龄了。
Action: calculator
Action Input: "2024 - 1933"
Observation: 计算结果:91
Thought: 我现在知道最终答案了。
Final Answer: 2024年诺贝尔物理学奖得主是John J. Hopfield(91岁)和Geoffrey E. Hinton(76岁)。这就是一个完整的ReAct Agent工作流程。它自己决定该搜索什么、什么时候需要计算,最终给出综合答案。
Powered by Discuz! X3.5 © 2001-2026 Discuz! Team. |