AI Agents实战项目第1篇:从传统工具到决策系统的演进

写在前面
欢迎来到"AI Agents(智能体)实战项目",本项目是在 LangChain 官方的教程 Agents From Scratch 演进而来,并在AI辅助下完成,旨在为大家提供一个基础的、实用的、连贯的实战项目。如果你对AI智能体这个概念还不太清楚,或者想了解它能为我们带来什么价值,这个系列会为你提供一个清晰的学习路径。所有的文章和代码都是开源的,地址为:https://github.com/simfeng/agents-from-scratch,欢迎 Star。
整个实战项目大概会有7-10节内容,每节内容都会有一篇文章和一个可直接运行的notebook,如果有必要的话,还会有完整的项目文件。我们将从基础概念开始,逐步引导你构建实用的AI智能体。
本节内容notebook地址为:https://github.com/simfeng/agents-from-scratch/blob/main/01-agents-intro/notebook.ipynb
什么是智能体?一个让人意外的答案
从你最熟悉的软件说起
在今天这篇开篇文章中,我想先和你探讨一个值得思考的问题:你每天使用的软件,比如微信、浏览器、音乐播放器,它们可以被称为"Agents(智能体)"吗?
如果按照Agent这个词的字面意思——"一个可以执行任务的实体"——来看,微信确实符合这个定义。它能帮你发消息、打电话、支付。不仅是微信,你手机里的每个App其实都可以算作Agent:
- 浏览器:网络世界的向导,帮你找到需要的信息
- 打车软件:出行助手,帮你找到最近的司机
- 音乐播放器:个人音乐管理器,播放你喜欢的歌曲
这样看来似乎很合理。但这里有个值得深思的问题——如果这些软件都算是"智能体",那为什么直到这两年,"AI智能体"这个概念才开始受到关注呢?
答案在于:这些传统软件缺少了最关键的组件——"大脑"。
传统工具的"智商"有多高?
让我们通过一个具体例子来理解这个问题。当你在浏览器中输入"python教程"并按下回车时,浏览器会做什么?
它会按照指令搜索"python教程",然后把结果展示给你。但它不会询问:
- "你是想学编程语言Python,还是想了解蟒蛇(python的中文意思是蟒蛇)?"
- "你是初学者还是有一定基础?"
- "你更喜欢视频教程还是文字教程?"
这就像是一个严格按照指令执行但缺乏灵活性的助手。你说什么,它就做什么,不会主动思考。
再看看打车软件,当你点击"叫车"时,它会按照预设的算法为你匹配司机。但它不会根据你今天的心情、天气情况、或者你的历史偏好来主动调整服务策略。
这就是传统工具的本质:它们是基于预设逻辑的执行者,而不是具备思考能力的决策者。
AI智能体:给工具装上"大脑"
那么,是什么改变了这一切呢?答案是大语言模型(Large Language Model, LLM)的出现。
设想一下,如果我们给传统的工具装上一个"大脑",会发生什么?这个"大脑"可以:
- 理解你的真实意图
- 分析当前的情况
- 制定执行策略
- 选择合适的工具
- 根据结果调整下一步行动
这就是AI智能体的核心理念:
让LLM充当"大脑",统筹调度那些原本只会按程序执行的工具。
如果用公式来表示这种变化:
- 传统工具:输入 → 固定规则 → 输出
- AI智能体:输入 → LLM分析思考 → 选择工具 → 执行 → 评估结果 → 输出
这种变化带来的不仅仅是功能的增强,更是从"被动执行"到"主动思考"的根本转变。
开始动手之前:先想清楚要做什么
现在你已经理解了AI智能体的基本概念,可能想要开始构建一个。在此之前,让我分享一个重要的经验:
构建智能体的第一步,不是写代码,而是明确你要让它完成什么任务。
注意,这里我说的是"完成什么任务",是你想要的结果,而不是你告诉他中间的步骤该怎么做。
任务导向的思维方式会让你的智能体更加实用和可控。就像你委托一个助手,你会告诉他"帮我整理好这些文件",而不是"你要先把文件按类型分类,接着。。。"。
技术演进之旅:从聊天机器人到智能助手
理论部分已经介绍得差不多了,现在让我们进入实践环节——动手构建。
我将带你了解一个完整的技术演进过程,看看AI应用是如何从简单的聊天机器人逐步发展成真正智能的助手的。这个过程就像观察一个系统的成长,每个阶段都有其独特的特点。
我们会用到LangChain和LangGraph这两个框架。如果你之前没有接触过,不用担心,我会逐步为你介绍。
第一阶段:Chat Models - 会聊天的AI
让我们从最基础的开始——一个只会聊天的AI。这是AI世界的"Hello World",简单但是必要的第一步,是基于大语言模型的一个应用。
Chat Models 是 LangChain 中对大语言模型(LLM)的统一称谓,比如GPT、Claude、Qwen、DeepSeek等。它们的工作方式很直接:你给它一段文字,它给你回复一段文字。
环境搭建
下面这部分代码介绍了在 LangChain 中如何初始化一个聊天模型。
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
# 加载配置文件
load_dotenv("../.env", override=True)
model_name = os.getenv("OPENAI_MODEL")
model_provider = os.getenv("MODEL_PROVIDER")
# 初始化模型
llm = init_chat_model(model_name, model_provider=model_provider, temperature=0)
两种和AI对话的方式
LangChain提供了两种和AI对话的方式,分别是:
方式1:一问一答模式 invoke
# 问一个问题,等完整的回答
result = llm.invoke('什么是智能体?')
print(result.content) # AI会给你一个完整的回答
方式2:流式对话模式 stream
# 像聊天一样,AI逐字回复
for chunk in llm.stream("什么是智能体?"):
print(chunk.content, end="") # 你会看到AI逐字输出回答
这个阶段的局限性
现在我们有了一个会聊天的AI,但它就像一个只能提供理论知识的顾问:
- ✅ 能回答各种问题
- ❌ 不能帮你发邮件
- ❌ 不能帮你查天气
- ❌ 不能帮你订外卖
换句话说,它只能"说",不能"做"。这就引出了我们的下一个阶段——给AI装上"手脚"。
第二阶段:Tools - 给AI装上"手脚"
第一阶段基于LLM的应用,只会"说"不会"做"。现在让我们给它装上"手脚"——也就是工具(Tools)。
设想一下,如果你有一个非常聪明的朋友,但他被限制在一个房间里,只能通过对讲机和你交流。现在,我们要给他一些"遥控器",让他可以帮你做实际的事情——发邮件、查天气、订外卖等等。
工具是怎么工作的?
在AI智能体的世界里,分工很明确:
- LLM的工作:思考"我应该用什么工具?怎么用?"
- 工具的工作:按照指令执行具体的操作
- 整个流程:LLM动脑 → 选择工具 → 工具干活 → 返回结果
这就像你是一个项目经理(LLM),手下有各种专业的员工(工具),你负责决策,他们负责执行。
创建第一个工具
LangChain让创建工具变得很简单,通过 @tool
装饰器来实现:
from langchain.tools import tool
@tool
def write_email(to: str, subject: str, content: str) -> str:
"""撰写并发送邮件"""
return f"邮件已发送给 {to},主题为 {subject},内容为 {content}"
# 查看这个工具的信息
print(f"工具名称: {write_email.name}") # write_email
print(f"工具描述: {write_email.description}") # 撰写并发送邮件
print(f"工具参数: {write_email.args}") # 参数信息
通过 @tool
定义的函数,LangChain 会将函数的 name
、description
、args
等信息提取出来,作为提示词传给 LLM。
让AI学会使用工具
现在我们有了工具,但AI还不知道怎么用。我们需要教会它,这个过程分为三个步骤:
步骤1:告诉AI有哪些工具可以用
# 为AI提供工具箱
model_with_tools = llm.bind_tools(
[write_email],
tool_choice="any", # 告诉AI:"你必须使用工具"
parallel_tool_calls=False # "一次只能用一个工具"
)
步骤2:让AI做决定
# 给AI一个任务,观察它的选择
output = model_with_tools.invoke(
"写一封邮件给张三,主题是关于项目进展,内容是:我们正在按照计划推进项目,预计下周完成。"
)
# 查看AI的决定
print("AI选择了:", output.tool_calls[0]['name']) # write_email
print("AI准备的参数:", output.tool_calls[0]['args'])
步骤3:执行AI的决定
# 获取AI准备的参数
args = output.tool_calls[0]['args']
# 可能是这样的:{'to': '张三', 'subject': '关于项目进展', 'content': '我们正在按照计划推进项目,预计下周完成。'}
# 执行工具
result = write_email.invoke(args)
print(result) # 邮件已发送给 张三,主题为 关于项目进展,内容为 我们正在按照计划推进项目,预计下周完成。
这个过程到底发生了什么?
让我们通过一个具体例子来理解:
- 你说:"我想给张三发个邮件说项目进展"
- AI想:"用户想发邮件,我有write_email这个工具,需要收件人、主题、内容三个参数"
- AI决定:"我要用write_email工具,参数是to='张三', subject='关于项目进展', content='我们正在按照计划推进项目,预计下周完成。'"
- 工具执行:"邮件发送完成"
这个阶段的特点
现在我们的AI已经升级了,它可以:
- ✅ 理解你的意图
- ✅ 选择合适的工具
- ✅ 执行具体的任务
但是,它还有一个限制:只能做一件事就结束了。如果你想让它发完邮件后再做其他事情,它就不知道该怎么办了。这就引出了我们的下一个阶段——让AI学会制定计划。
第三阶段:Workflows - 让AI学会制定计划
第二阶段的AI只能做一件事就结束了。现在让我们教会它制定计划,根据不同情况选择不同的行动路径。
设想一下,你有一个助手,你对他说:"帮我处理一下今天的工作"。一个聪明的助手会先询问:"你今天主要想做什么?回复邮件?准备会议?还是写报告?"然后根据你的回答选择不同的工作流程。
这就是Workflows的核心思想——给AI一个决策树,让它根据情况选择不同的路径。
Workflows比单纯的工具调用强在哪里?
让我们对比一下:
第二阶段(单纯工具调用):
- 你:"发邮件给张三"
- AI:"好的,邮件发送完成"
- 结束
第三阶段(Workflows):
- 你:"处理一下工作邮件"
- AI:"让我先看看...这是要回复邮件还是发送新邮件?"
- AI:"看起来是要回复,我来帮你处理"
- AI:"邮件回复完成,还需要我做其他的吗?"
可以看到,Workflows让AI有了判断能力和规划能力。
Workflows是怎么工作的?
一个典型的Workflow就像一个流程图:
-
第一步:分析情况
- 用户说了什么?
- 当前是什么情况?
- 应该走哪条路?
-
第二步:选择路径
- 如果是A情况 → 执行A流程
- 如果是B情况 → 执行B流程
- 如果是C情况 → 执行C流程
-
第三步:执行具体操作
- 调用相应的工具
- 完成具体任务
智能程度上的权衡
随着我们的AI越来越智能,我们面临一个需要权衡的问题:
- 第一阶段(Chat Models):完全可预测,但只能聊天
- 第二阶段(Tools):基本可预测,能做具体事情
- 第三阶段(Workflows):部分可预测,能根据情况调整
- 第四阶段(Agents):不太可预测,但非常灵活
这就像培养一个员工:刚开始你给他详细的操作手册(可预测),慢慢地你只需要告诉他目标,他自己想办法完成(灵活但不可预测)。
第四阶段:Agents - 真正的AI助手诞生了
终于到了最重要的阶段。如果说前面三个阶段是在教AI各种技能,那么Agents就是让AI真正"活"起来的阶段。
设想一下,你对一个真正聪明的助手说:"帮我准备明天的重要会议"。他不会询问你具体怎么做,而是会自己想办法:
- 先查看会议议程
- 准备相关资料
- 发邮件确认参会人员
- 预订会议室
- 准备演示文稿
- 检查设备是否正常
- ...
这就是Agent的特点——它会自己想办法,直到把任务完成为止。
Agents的核心能力
Agent有三个重要特点:
- 会循环思考:做完一件事后,会想"接下来该做什么?"
- 会自我调整:如果发现当前方法不行,会换个思路
- 有目标导向:不会停下来,直到任务真正完成
这就像一个持续工作的问题解决者。
什么时候用Agents,什么时候用Workflows?
这是一个实际的问题。让我们通过具体例子来理解:
用Workflows的场景(流程相对固定):
- "帮我处理客户投诉" → 有标准流程可循
- "每天早上发送日报" → 步骤基本固定
- "审核用户注册信息" → 有明确的检查清单
用Agents的场景(需要灵活应变):
- "帮我策划一个产品发布会" → 需要创造性思考
- "分析竞争对手的策略" → 需要多角度分析
- "解决这个复杂的技术问题" → 可能需要尝试多种方案
简单来说:
- 如果你能提前画出流程图 → 用Workflows
- 如果你也不知道具体怎么做 → 用Agents
实战选择指南:我应该用哪种方案?
现在你已经了解了四个阶段的技术,但在实际项目中,应该选择哪种方案呢?这里有一些实用的建议:
根据任务复杂度来选择
可以把这个过程想象成招聘不同岗位的员工:
-
简单问答任务:用Chat Models
- 类似客服机器人,回答常见问题
- 例子:"我们公司的营业时间是什么?"
-
单一操作任务:用Tools
- 类似专业技师,完成一件事
- 例子:"帮我发送这封邮件"
-
多步骤标准流程:用Workflows
- 类似有经验的员工,按流程办事
- 例子:"处理新用户注册流程"
-
复杂创造性任务:用Agents
- 类似高级顾问,自己想办法解决问题
- 例子:"帮我制定市场推广策略"
根据控制需求来选择
-
需要严格控制:选择Tools或Workflows
- 适合金融、医疗等对准确性要求极高的场景
-
需要一定灵活性:选择Workflows
- 适合大部分商业应用
-
需要最大灵活性:选择Agents
- 适合创新型项目和研究场景
根据开发阶段来选择
- 刚开始探索:从Chat Models开始,快速验证想法
- 功能验证:用Tools实现核心功能
- 产品化:用Workflows构建稳定的业务流程
- 高级功能:用Agents处理复杂场景
给新手的实用建议
工具设计的基本原则
-
一个工具只做一件事
- 不要让一个工具既能发邮件又能查天气
- 就像厨房里的刀具,每把刀都有专门的用途
-
给工具写清楚说明
- AI需要知道这个工具是干什么的
- 就像给新员工写岗位职责一样详细
-
做好错误处理
- 工具出错时要有合理的提示
- 不要让AI无法继续工作
与AI沟通的技巧
-
说话要具体
- ❌ "帮我处理邮件"
- ✅ "帮我回复今天收到的客户咨询邮件"
-
给出例子
- 告诉AI你期望的结果是什么样的
- 就像给员工看样品一样
-
设定边界
- 明确告诉AI什么能做,什么不能做
- 避免AI超出预期范围
测试你的AI助手
-
单独测试每个工具
- 确保每个工具都能正常工作
-
测试AI和工具的配合
- 看AI是否能正确选择和使用工具
-
测试完整的用户场景
- 模拟真实用户的使用情况
总结
我们一起走过了从零构建AI Agents的第一节内容,让我来回顾一下我们都学到了什么:
我们发现的核心要点
- AI智能体的本质:其实就是给传统工具装上一个会思考的"大脑"(LLM)
- 演进的四个阶段:从只会聊天 → 能使用工具 → 会制定计划 → 完全自主决策
- 智能与控制的平衡:越智能的AI越难预测,这是一个需要权衡的问题
- 选择的智慧:不同的任务需要不同级别的AI,没有万能的解决方案
你现在掌握的知识
通过这篇文章,你现在已经:
- ✅ 理解了AI智能体的本质和价值
- ✅ 掌握了四种不同级别的AI应用方式
- ✅ 学会了如何根据实际需求选择合适的技术方案
- ✅ 获得了构建AI应用的实用建议和最佳实践
下一节:LangGraph的深度探索
这只是我们"AI智能体实战项目"系列的第一步。在下一篇文章中,我们将深入LangGraph框架。