news 2026/6/11 11:05:24

Agent 结构(LLM + Tool + Executor)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Agent 结构(LLM + Tool + Executor)

day29:理解Agent 结构(LLM + Tool + Executor)

一、Agent定义 简单介绍

  • Agent = 能“思考 → 决策 → 调用工具 → 再思考”的 LLM 程序

公式化一点就是:

Agent = LLM + Tools + Executor

它和「问 → 答」最大的区别是:

LLM 不再只是生成文本,而是在“做事”

二、Agent 结构总览

┌─────────────────────┐ │ User │ └─────────┬───────────┘ │ ┌─────────▼───────────┐ │ Agent │ │ │ │ ┌──────────────┐ │ │ │ LLM │ │ ← 决策中枢(大脑) │ └──────┬───────┘ │ │ │ Thought │ │ ┌──────▼───────┐ │ │ │ Tools │ │ ← 外部能力 │ └──────┬───────┘ │ │ │ Action │ │ ┌──────▼───────┐ │ │ │ Executor │ │ ← 执行与控制循环 │ └──────────────┘ │ └─────────────────────┘

三、Agent 的三个核心组件(重点)

1️⃣ LLM(大脑)

在 Agent 中,LLM 不只是“回答问题”

它负责:

  • 🤔 思考(Thought)

  • 🧭 决策(是否用工具)

  • 🧠 规划(先做什么,再做什么)

典型提示词结构(你不写,LangChain 会自动帮你写):

Thought: 我需要查询时间 Action: get_current_time Action Input: {} Observation: 2025-12-13 Thought: 我可以回答了 Final Answer: 现在是 2025-12-13
  • 👉 Agent 的本质是让 LLM 输出“结构化思考过程”

2️⃣ Tool(工具)

Tool 是什么?

Tool = Agent 能调用的 Python 函数

例如:

- 搜索 - 计算 - 查数据库 - 调 API - 查文件 - 调你写的业务函数

在 LangChain 中,一个 Tool 至少包含:

name descriptioncallablefunction

LLM 通过 description 来判断“该不该用这个工具”


3️⃣ Executor(执行器)

  • Executor 是 Agent 的“循环控制器”

它负责:

  • 把 LLM 输出解析成:

    • Thought

    • Action

    • Action Input

  • 调用 Tool

  • 把结果塞回给 LLM

  • 再让 LLM 思考

  • 直到得到 Final Answer

可以理解为:

Executor = Agent 的 runtime

四、LangChain 中的 Agent 类型(认识不分)

✅ ReAct Agent(最重要)

ReAct = Reason + Act

Thought → Action → Observation → Thought → Final

👉 这是 LangChain 默认 & 最稳定 & 最好理解 的 Agent 结构
后面你学的基本都是它的变体。


五、从 0 到 1:一个最小 LangChain Agent Demo(Qwen-Plus)

Step 0:安装依赖

langchain>=0.1.0langchain-openai langchain_classic pip install-r requirements.txt
importdatetimefromlangchain_classic.agentsimportinitialize_agent,AgentTypefromlangchain_core.toolsimporttoolfromlangchain_openaiimportChatOpenAI llm=ChatOpenAI(model="qwen-plus-latest",temperature=0,api_key="sk-YOUR-API-KEY",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)@tooldefget_current_time(query:str)->str:"""获取当前时间"""returnstr(datetime.datetime.now())tools=[get_current_time]agent=initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True,handle_parsing_errors=True)defmain():res=agent.invoke({"现在是什么时间?"})print(res["output"])if__name__=="__main__":main()# (day29venv) PS E:\code\xsun_ai_study\week5\day29> python main.py# E:\code\xsun_ai_study\week5\day29\main.py:23: LangChainDeprecationWarning: LangChain agents will continue to be supported, but it is recommended for new use cases to be built with LangGraph. LangGraph offers a more flexible and full-featured framework for building agents, including support for tool-calling, persistence of state, and human-in-the-loop workflows. For details, refer to the [LangGraph documentation](https://langchain-ai.github.io/langgraph/) as well as guides for [Migrating from AgentExecutor](https://python.langchain.com/docs/how_to/migrate_agent/) and LangGraph's [Pre-built ReAct agent](https://langchain-ai.github.io/langgraph/how-tos/create-react-agent/).# agent = initialize_agent(tools,### > Entering new AgentExecutor chain...# 需要获取当前时间# Action: get_current_time# Action Input: {"query": "current time"}# Observation: 2025-12-14 14:52:24.744312# Thought:Final Answer: 现在是2025年12月14日14点52分24秒。## > Finished chain.# 现在是2025年12月14日14点52分24秒。

你会看到完整的 Agent 思考链:

Thought: 我需要知道当前时间 Action: get_current_time Action Input: {} Observation: 2025-12-13 10:32:11 Thought: 我已经知道时间了 Final Answer: 现在是 2025-12-13 10:32:11

六、这个 Demo 背后发生了什么(非常重要)

组件做了什么
LLMQwen-Plus
ToolPython 函数
AgentReAct 推理模板
Executor控制调用循环

👉 这是 90% LangChain Agent 的通用骨架

七、Agent 和你之前 RAG 的关系

RAGAgent
查资料 → 回答思考 → 决策 → 行动
单次生成多轮内部循环
被动主动
无状态或弱状态可引入 Memory

👉 Agent 可以“用 RAG 作为工具”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:48:10

34、Bash脚本中的循环控制与故障排查

Bash脚本中的循环控制与故障排查 1. 循环控制 在Bash脚本中,循环是一种强大的工具,可用于重复执行特定的代码块。下面将介绍 while 、 until 循环以及如何在循环中控制程序流程。 1.1 while 循环 while 循环会在条件为真时持续执行代码块。以下是一个简单菜单程序…

作者头像 李华
网站建设 2026/6/4 14:49:24

直接撸起袖子开干!今天咱们聊聊怎么用LabVIEW整一个带报警记录的上位机监控系统。这玩意儿在工业现场特别实用,尤其是需要24小时盯着设备状态的时候

labview上位机监测报警记录,状态显示。 报警记录存储,存储格式txt。 csv保存文件。先看状态显示部分。LabVIEW的前面板放几个指示灯控件就能实时反映设备状态,比如用绿色圆形表示正常,红色三角表示报警。背后用个While循环不断读取…

作者头像 李华
网站建设 2026/6/10 5:00:02

基于A*算法的无人机三维动态避障路径规划设计,MATLAB编程实现

基于A* 算法的无人机三维路径规划算法,可以动态避障,自己可以规定设计障碍物位置,MATLAB编程实现。 无人机在三维空间耍杂技这事儿,靠的就是路径规划的真功夫。今天咱们来聊个硬核玩法——基于MATLAB实现的A*算法三维动态避障系统…

作者头像 李华
网站建设 2026/6/9 20:52:17

基于vue的宠物寄养机构管理系统_96zn64i1_springboot php python nodejs

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/6/10 11:52:02

20、GTK+ Tree View 开发指南

GTK+ Tree View 开发指南 1. 引言 在 GTK+ 开发中,Tree View 是一个非常重要的组件,它实现了 MVC(Model-View-Controller)模式中的视图部分。用户可以通过 Tree View 与数据进行交互,如选择行、展开或折叠树等。本文将详细介绍 GTK+ 中 Tree View 的相关函数、属性、信号…

作者头像 李华
网站建设 2026/6/5 22:58:24

22、文本缓冲区操作全解析

文本缓冲区操作全解析 1. 文本缓冲区基础 1.1 基本特性 文本缓冲区采用 UTF - 8 编码,这使得字节计数(索引)和字符计数(偏移量)有所不同。一个文本缓冲区至少包含一行(可能为空),除最后一行外,每行以行分隔符结尾,行分隔符被视为一个字符,它可以是 Unix 换行符、…

作者头像 李华