https://github.com/datawhalechina/hello-agents
目录
- (1)什么是Agent?
- (2)Agent为什么会思考?
-
- [为什么 ReAct 这么重要?](#为什么 ReAct 这么重要?)
- [Agent 的每一次循环叫什么?](#Agent 的每一次循环叫什么?)
- [那这些 Thought 是不是一定会显示给用户?](#那这些 Thought 是不是一定会显示给用户?)
- [一个完整的 Agent 流程](#一个完整的 Agent 流程)
- [(3)手写人生第一个 Agent](#(3)手写人生第一个 Agent)
-
- [Tool 长什么样?](#Tool 长什么样?)
- Agent真正的作用
- [(4)Function Calling(函数调用)](#(4)Function Calling(函数调用))
- [(5)手写一个 Mini Agent](#(5)手写一个 Mini Agent)
(1)什么是Agent?
Agent = 一个能够自主完成任务 的大模型系统。
Agent:不仅回答问题,而是为了完成任务。
Agent的五个组成
第一:Brain(大脑)
第二:Memory(记忆)
第三:Tool(工具)
第四:Planning(规划)
第五:Action(行动)
Agent与Workflow的区别
| Workflow | Agent |
|---|---|
| 固定流程 | 动态决策 |
| 每次执行一样 | 每次可能不同 |
| 规则明确 | 需要推理 |
| 自动化流程 | 智能体 |
(2)Agent为什么会思考?
为什么 ReAct 这么重要?
LLM 不需要一次就想明白所有事情。
ReAct:通过"思考 → 行动 → 观察"循环推进任务。
Agent 的每一次循环叫什么?
一个 Step(一步)
那这些 Thought 是不是一定会显示给用户?
不一定。实际上,大多数商业 Agent(包括 ChatGPT)不会把完整内部推理展示给用户。模型会进行内部推理,但最终只输出结果或必要的执行过程。这既是为了安全,也是为了避免暴露冗长的内部思考。因此,我们学习 ReAct 时,更重要的是理解这种工作机制,而不是认为所有 Agent 都会把每一步 Thought 原样打印出来。
一个完整的 Agent 流程
用户提出任务
│
▼
LLM 理解任务
│
▼
判断是否需要工具
│
┌────┴────┐
│ │
不需要 需要
│ │
直接回答 调用工具
│
▼
获取工具结果
│
▼
判断任务是否完成
│
┌────┴────┐
│ │
否 是
│ │
继续思考 输出答案
(3)手写人生第一个 Agent
其实最简单的Agent只有四步。
用户输入
↓
LLM思考
↓
调用工具(如果需要)
↓
返回答案
Tool 长什么样?
Agent Tool 本质就是 Python 函数。
Tool:本质上就是可被调用的能力(很多时候就是 Python 函数)。
Agent真正的作用
LLM 负责决策,Tool 负责执行。
(4)Function Calling(函数调用)
把 Tool 的信息告诉 LLM,让 LLM 自己决定调用哪个 Tool。(LLM 输出"我要调用哪个函数"。)
现代 Agent 就是:LLM 不断调用 Tool。
Function Calling:LLM 根据工具描述决定调用哪个工具,并给出参数;真正执行工具的是程序,而不是 LLM 本身。
(5)手写一个 Mini Agent
用户输入
│
▼
Agent
│
▼
判断调用哪个 Tool
│
▼
执行 Tool
│
▼
返回结果
第一步:建立项目
新建一个文件夹:
hello_agent/
│
├── main.py(程序入口负责启动)
├── tools.py(所有工具放到这里)
└── agent.py(agent自己来判断调用哪个tool)
第二步:先写 Tool
Tool = Python Function
py
def calculator(a, b):
"""加法计算器"""
return a + b
def get_time():
"""获取当前时间"""
from datetime import datetime
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
第三步:写 Agent
py
from tools import calculator, get_time
class Agent:
def run(self, question):
if "几点" in question:
return get_time()
elif "+" in question:
nums = question.split("+")
a = int(nums[0])
b = int(nums[1])
return calculator(a, b)
else:
return "我不会。"
第四步:启动程序
py
from agent import Agent
agent = Agent()
while True:
question = input("请输入:")
answer = agent.run(question)
print(answer)
我们把 Tool 注册起来
Tool Registry(工具注册表)
py
TOOLS = {
"calculator": calculator,
"time": get_time
}
为什么要注册?
以后增加:
py
weather()
你不用改 Agent。只需要:
py
TOOLS["weather"] = weather
Agent 自动就有了。
这就是:开放封闭原则(Open/Closed Principle)。
总结
main.py
│
▼
Agent.run()
│
▼
判断需要哪个 Tool
│
┌────────────┴────────────┐
▼ ▼
Calculator Tool Time Tool
▼ ▼
└────────────┬────────────┘
▼
返回结果