系列文章目录



前言


一、现代智能体

  • 之前学会提示工程,学会了怎么让大模型说话,但是这远远不够,大模型的潜力才开发了一点,智能体是让大模型真正能够提供实际作用的途径。

  • 聚焦于其中最具代表性的三种,并一步步从零实现它们:

ReAct (Reasoning and Acting): 一种将“思考”和“行动”紧密结合的范式,让智能体边想边做,动态调整。
Plan-and-Solve: 一种“三思而后行”的范式,智能体首先生成一个完整的行动计划,然后严格执行。
Reflection: 一种赋予智能体“反思”能力的范式,通过自我批判和修正来优化结果。

1.1 环境准备与基础工具定义

  • 安装依赖库
pip install openai python-dotenv
  • 通过环境变量配置 API 密钥
# .env file
LLM_API_KEY="YOUR-API-KEY"
LLM_MODEL_ID="YOUR-MODEL"
LLM_BASE_URL="YOUR-URL"
  • 按照教程代码封装 LLM 调用函数并测试

在这里插入图片描述

二、ReAct

ReAct 由 Shunyu Yao 于 2022 年提出,其核心思想是模仿人类解决问题的方式,将推理 (Reasoning)行动 (Acting) 显式地结合起来,形成一个“思考-行动-观察”的循环。

2.1 为什么提出 ReAct

  • 举个例子,要查"华为最新手机",大模型很可能给出下面这样的案例
  1. 纯思维链(CoT):
模型直接推理:"我记得2023年是Mate 60...所以最新应该是Mate 70"
  • 问题:它的知识冻结在训练截止日,可能给出过时答案,甚至编造不存在的型号(幻觉)。
  1. 纯行动(直接调工具):
模型一上来就调搜索:Search[华为手机]
  • 问题:搜出来一堆结果,它不知道该关注"最新"还是"性价比",可能直接把搜索摘要当答案甩给你。

  • 想想如果是我们面对这个问题会怎么办,反正我是这么想的:

① 先想"我需要查最新款" 
    |→ ② 搜索"华为2024最新手机" 
           |→ ③ 看到结果发现有Mate 70和Pura 70 
           	    |→ ④ 再想"哪个更新?" 
           	          |→ ⑤ 二次搜索确认 
           	                  |→ ⑥ 综合得出答案。
  • 这也正是 ReAct 的思考路径。

2.2 ReAct核心循环

核心循环:Thought → Action → Observation

在这里插入图片描述

步骤 ReAct对应 案例体现
Thought 分析现状、规划下一步 Thought: 需要搜索华为2024年发布的旗舰机型
Action 调用工具 Action: Search[华为最新手机型号]
Observation 工具返回结果 Observation: [1] Mate 70于2024年11月发布...
  • 关键在于 : Observation 会成为下一轮 Thought 的输入。

2.3 工具的定义与实现

  • 之前学过 SHRDLU 的物理机械臂,ReAct 的工具就是它的现代智能数字版:
智能体组件 比喻 Search工具
LLM 大脑 负责思考"该搜什么"
Tools 手脚 负责执行搜索、计算等
ReAct 循环 神经系统 把大脑指令传给手脚,把感官反馈传回大脑

借助 SerpApi 实现结构化搜索

  • 首先,需要安装依赖库:
pip install google-search-results
  • 同时,需要前往 SerpApi官网 注册一个免费账户,获取API密钥,并将其添加项目根目录下的 .env 文件中:
# .env file
# ... (保留之前的LLM配置)
SERPAPI_API_KEY="YOUR_SERPAPI_API_KEY"
  • 实现搜索工具的核心逻辑
  • 一个良好定义的工具应包含以下三个核心要素:
要素 说明 举例
名称 (Name) 一个简洁、唯一的标识符,供智能体在 Action 中调用 例如 Search
描述 (Description) 一段清晰的自然语言描述,说明这个工具的用途。
这是整个机制中最关键的部分,因为大语言模型会依赖这段描述来判断何时使用哪个工具。
还要设定清晰的边界
“一个实时网页搜索引擎。当你需要回答时事新闻、产品参数、股价、天气等时效性信息,或你的内部知识可能已过时时,必须使用此工具。不要用于回答常识性问题(如’地球有几大洲’)。”
执行逻辑 (Execution Logic) 真正执行任务的函数或方法 通过代码实现
  • 运行教程代码,这时已经测试通了调用工具获取外部搜索信息
    在这里插入图片描述

2.4 实现 ReAct agent

  • 下面来一一拆解

  • 提示词

在这里插入图片描述

  • 使用了 Python 多行字符串(三引号)定义模板
  • 采用占位符 {tools} 、 {question} 和 {history} 实现动态内容注入
  • 严格定义了输出格式,要求 LLM 按照 Thought: 和 Action: 的结构输出
  • 明确了两种 Action 类型:工具调用和最终回答

2.5 调式技巧

  • 打印完整提示词,防止出现历史记录污染。
  • 必看原始输出,别太相信解析器 parse_out
  • 工具的输入要做清洗,尤其是前后空格和感叹号

2.6 评价一下 ReAct


三、Plan-and-Solve


四、Reflection


总结

在这里插入图片描述

  1. 某电商初创公司现在希望使用"客服智能体"来代替真人客服实现降本增效,它需要具备以下功能:
    a. 理解用户的退款申请理由
    b. 查询用户的订单信息和物流状态
    c. 根据公司政策智能地判断是否应该批准退款
    d. 生成一封得体的回复邮件并发送至用户邮箱
    e. 如果判断决策存在一定争议(自我置信度低于阈值),能够进行自我反思并给出更审慎的建议

    • 此时作为该产品的负责人:
      • 你会选择本章的哪种范式(或哪些范式的组合)作为系统的核心架构?
      • 这个系统需要哪些工具?请列出至少3个工具及其功能描述。
      • 如何设计提示词来确保智能体的决策既符合公司利益,又能保持对用户的友好态度?
      • 这个产品上线后可能面临哪些风险和挑战?如何通过技术手段来降低这些风险?

答:

  • 选择 ReAct + Reflection组合起来一起作为系统的核心架构
  • 工具:
    1. UserInfo,根据用户标识符识别具体用户;
    2. UserOrder
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐