Agent 学习笔记(1-5)

7 阅读6分钟

参考视频: 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] 记忆上下文

流程详解:

  1. 用户输入

    • 用户提出问题,例如:“北京今天天气怎么样?”
    • Agent 接收原始文本。
  2. 理解意图

    • LLM 分析语义,提取关键信息(如城市名“北京”)。
    • 判断是否需要调用外部工具。
  3. 选择工具

    • 根据工具描述(description)匹配最合适的 Tool。
    • 示例:heweather() 对应天气查询。
  4. 执行工具

    • 调用对应的函数,发送请求至 API。
    • 如:requests.get("https://devapi.qweather.com/...")
  5. 返回结果

    • 获取工具返回的数据(JSON),解析后形成答案。
    • 示例输出:"北京当前天气:阴天,温度32°C,风向南风"
  6. 记忆上下文

    • 将本次对话记录下来,供后续对话使用。
    • 提升连续性与个性化体验。
    • 注意:默认内存有限,需配合 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

步骤内容
ThoughtLLM 分析当前状态,决定下一步动作
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 模型资源参考

  • 地址:huggingface.co/models

  • 搜索关键词: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、记忆增强、多轮对话、成本优化

十、学习建议

  1. 先实现一个简单的 Agent(如天气查询)
  2. 逐步增加工具数量(如百科、计算器)
  3. 加入记忆模块,实现多轮对话
  4. 尝试接入真实 API 并处理异常
  5. 探索 LangChain 的其他 Agent 类型(如 ZeroShotAgent)

参考资料