参考视频: www.bilibili.com/video/BV1zu…
一、Agent 核心组件
| 组件 | 作用说明 | 补充说明 |
|---|---|---|
| Tool(工具) | 单个功能模块,如查天气、查汇率。每个工具专注做一件事。 | 工具是 Agent 的“手”,负责完成具体任务。 可以是 API 调用、数据库查询、文件读取等。 常见工具:weather_tool, wiki_search, calculator, web_search 等。 |
| AgentType(代理类型) | 决定 Agent 如何“思考”和“推理”。常见有 ReAct(反应式推理)。 | ReAct 架构 = Reasoning + Acting 先思考(Reason),再调用工具(Act)支持多轮交互,提升准确性 |
| LLM(大模型) | Agent 的“大脑”,负责理解意图、逻辑推理、生成指令。常用模型如 qwen-turbo、DeepSeek、GPT-3.5/4。 | LLM 是 Agent 的核心决策引擎。 需要接入 API Key 或本地部署模型(如通过 vLLM、llama.cpp)。 推荐使用轻量级模型(如 qwen-turbo)用于快速原型开发。 |
| initialize_agent | 将 LLM 和 Tools 组合起来,生成可运行的智能助手。 | 类似于“组装机器人”: → 输入 LLM、Tools、AgentType → 输出一个完整的 Agent 实例 |
小结:Agent = 大脑(LLM)+ 手(Tools)+ 思维方式(AgentType)
二、Agent 工作机制(6 步流程)
[01] 用户输入 → [02] 理解意图 → [03] 选择工具 → [04] 执行工具 → [05] 返回结果 → [06] 记忆上下文
流程详解:
-
用户输入
- 用户提出问题,例如:“北京今天天气怎么样?”
- Agent 接收原始文本。
-
理解意图
- LLM 分析语义,提取关键信息(如城市名“北京”)。
- 判断是否需要调用外部工具。
-
选择工具
- 根据工具描述(description)匹配最合适的 Tool。
- 示例:
heweather()对应天气查询。
-
执行工具
- 调用对应的函数,发送请求至 API。
- 如:
requests.get("https://devapi.qweather.com/...")
-
返回结果
- 获取工具返回的数据(JSON),解析后形成答案。
- 示例输出:
"北京当前天气:阴天,温度32°C,风向南风"
-
记忆上下文
- 将本次对话记录下来,供后续对话使用。
- 提升连续性与个性化体验。
- 注意:默认内存有限,需配合 RAG 或数据库增强记忆。
整个过程可能循环多次(尤其是复杂任务),直到得出最终答案。
三、代码实践:两个典型工具函数
✅ 1. 查天气工具:heweather(city_name)
def heweather(city_name):
try:
# 第一步:获取城市ID
location_url = f"https://geoapi.qweather.com/v2/city/lookup?location={city_name}&key={heweather_key}"
loc_resp = requests.get(location_url).json()
if "location" not in loc_resp or len(loc_resp["location"]) == 0:
return f"未找到城市:{city_name}"
city_id = loc_resp["location"][0]["id"]
city_name_std = loc_resp["location"][0]["name"]
# 第二步:查询天气
weather_url = f"https://devapi.qweather.com/v7/weather/now?location={city_id}&key={heweather_key}"
weather_resp = requests.get(weather_url).json()
weather = weather_resp["now"]
return f"{city_name_std}当前天气:{weather['text']},温度:{weather['temp']}°C,风向:{weather['windDir']}"
except Exception as e:
return f"天气查询失败:{str(e)}"
功能说明:
- 使用高德或和风天气 API 查询实时天气
- 包含异常处理(防止网络错误导致崩溃)
- 返回格式化字符串便于展示
2. 百科搜索工具:wiki_search(query)
def wiki_search(query):
try:
wikipedia.set_lang("zh")
summary = wikipedia.summary(query, sentences=2)
return summary
except:
return "找不到相关的百科内容"
功能说明:
- 使用
wikipedia库进行中文维基摘要提取- 设置语言为中文,返回前两句话摘要
- 异常捕获避免程序中断
四、Agent 的核心构建逻辑
1. 初始化 Agent
from langchain.agents import initialize_agent
from langchain.llms import Qwen
# 定义工具列表
tools = [
Tool(
name="heweather",
description="查询指定城市的实时天气",
func=heweather
),
Tool(
name="wiki_search",
description="搜索维基百科相关内容",
func=wiki_search
)
]
# 创建 LLM 实例
llm = Qwen(temperature=0.7, model_name="qwen-turbo")
# 初始化 Agent
agent = initialize_agent(
tools=tools,
llm=llm,
agent_type="react",
verbose=True
)
📌 关键点:
agent_type="react":启用 ReAct 架构verbose=True:打印中间推理过程(调试用)- 工具必须注册描述(description),否则无法被正确选择
五、Agent 的思考与决策机制(ReAct 架构)
ReAct = Reasoning + Acting
| 步骤 | 内容 |
|---|---|
| Thought | LLM 分析当前状态,决定下一步动作 |
| Action | 调用某个工具(如 heweather) |
| Observation | 工具返回结果 |
| Thought | 结合观察结果继续推理 |
| Final Answer | 输出最终回答 |
Thought: 我需要查询北京的天气。
Action: heweather("北京")
Observation: 北京当前天气:阴天,温度32°C,风向南风
Thought: 我现在知道最终答案了。
Final Answer: 北京现在的天气是阴天,温度为32°C,风向为南风。
六、拓展思考(进阶问题)
1. 如果接入真实 API,要考虑哪些问题?
| 问题 | 解决方案 |
|---|---|
| API 请求频率限制 | 使用缓存(Redis)、限流控制 |
| API 密钥安全 | 不硬编码 key,使用 .env 文件管理 |
| 数据格式不一致 | 增加数据清洗与转换层 |
| 网络不稳定 | 添加重试机制(如 retry 库) |
| 成本控制 | 优先使用免费 tier 或低 token 消耗模型 |
2. 如果多个工具都能回答,Agent 怎么选?
- 依赖工具描述(description) :LLM 会根据描述判断哪个更合适。
- 优先级设置:可通过
tool_choice控制首选工具。 - 成本评估:某些工具更贵(如 GPT-4),可优先选便宜的。
- 上下文感知:历史对话中已知的信息可以减少工具调用。
建议:为每个工具写清晰、准确的描述!
3. 如何提升 Agent 的“记忆能力”?
| 方法 | 说明 |
|---|---|
使用 Memory 模块(如 ConversationBufferMemory) | 保存对话历史,支持多轮问答 |
| 集成 RAG(检索增强生成) | 从文档库中检索相关信息,增强上下文 |
| 使用向量数据库(如 Chroma、Pinecone) | 存储知识,支持语义搜索 |
| 自定义状态管理 | 用数据库或 Redis 记录用户偏好、任务进度等 |
示例:当用户说“昨天说的那本书”时,Agent 能回忆起之前提到的书名。
七、补充知识点
LLM 能力增强方向
| 技术 | 作用 |
|---|---|
| RAG(Retrieval-Augmented Generation) | 增强大模型的知识广度,解决“幻觉”问题 |
| 微调(Fine-tuning) | 内化特定领域知识,提高专业性 |
| Prompt Engineering | 优化提示词,引导更好输出 |
| 多模态支持 | 支持图像、语音输入(如 DeepSeek-VL) |
推荐组合:微调 + RAG → 最佳业务场景解决方案
八、Hugging Face 模型资源参考
-
搜索关键词:
deepseek,qwen,llama,mistral -
推荐模型:
Qwen/Qwen3-Embedding-0.6B-GGUF:适合嵌入式应用deepseek-ai/DeepSeek-R1-0528:高性能推理模型google/gemma-3n-E4B-it-litert-preview:轻量化开源模型
使用建议:
- 开发阶段可用在线 API(如 Qwen Turbo)
- 生产环境可考虑本地部署(如 Ollama、vLLM)
九、总结
| 模块 | 核心要点 |
|---|---|
| Agent 架构 | LLM + Tools + AgentType = 智能体 |
| 工作流程 | 输入 → 意图识别 → 工具选择 → 执行 → 结果返回 → 记忆 |
| 关键技术 | ReAct、Tool 描述、API 接入、异常处理 |
| 进阶方向 | RAG、记忆增强、多轮对话、成本优化 |
十、学习建议
- 先实现一个简单的 Agent(如天气查询)
- 逐步增加工具数量(如百科、计算器)
- 加入记忆模块,实现多轮对话
- 尝试接入真实 API 并处理异常
- 探索 LangChain 的其他 Agent 类型(如 ZeroShotAgent)
参考资料: