Agent学习二:智能体(Agent)开发核心原理

设计目标 :建立系统化认知框架,理解 Agent 与传统程序的本质差异,掌握 ReAct 思维链、工具调用等核心范式,为后续编码实践奠定理论基石。避免"只会调 API 不懂原理"的陷阱。

2.1 Agent 本质:从"程序"到"自主实体"的范式跃迁

🔑 核心定义(对比传统 Linux 应用)

表格

维度 传统 Linux 应用 智能体(Agent) 为什么重要
执行模型 确定性流程(if-else/循环) 概率性推理 + 工具调用 Agent 需处理模糊指令
输入 结构化参数(CLI 参数/配置文件) 自然语言指令 + 环境上下文 需解析人类意图
决策 预设逻辑分支 LLM 推理 + 工具选择 动态生成执行路径
输出 固定格式结果(stdout/文件) 多模态响应(文本/动作/反思) 需适应用户需求
状态管理 进程内存/文件系统 对话历史 + 工具状态缓存 支持多轮交互

2.2 Agent 核心组件深度解析(附代码骨架)

🧠 三元架构模型

1. 感知层(Perception)
  • 输入:用户指令 + 工具输出 + 历史对话
  • 关键处理
    • 指令解析(提取意图/参数)
    • 上下文压缩(避免 token 溢出)
    • 敏感信息过滤(安全前置)
2. 决策层(Reasoning)← 核心创新区
  • 思维链(Chain-of-Thought):LLM 生成推理步骤
  • 工具选择(Tool Selection):根据当前状态选择技能
  • 错误恢复:检测工具调用失败并重试/换工具
3. 行动层(Action)
  • 工具执行:调用预定义函数(如搜索、计算)
  • 结果格式化:将工具输出转为 LLM 可理解的文本
  • 状态更新:持久化关键中间结果

2.3 ReAct 框架:推理与行动的黄金标准

📜 原理精解(对比 CoT)

方法 思维链 行动能力 适用场景
CoT "因为...所以..." ❌ 无 纯推理问题
ReAct "思考→行动→观察→再思考" ✅ 工具调用 需外部知识/操作的任务

最小可运行 ReAct 示例(纯 Python + requests)

python 复制代码
import requests
import json

class ReActAgent:
    def __init__(self, llm_api_key):
        self.llm_api_key = llm_api_key
        self.history = []
    
    def think(self, query: str) -> str:
        """生成 ReAct 思维链(简化版)"""
        prompt = f"""
当前任务:{query}
历史行动:
{chr(10).join(self.history[-3:]) if self.history else '无'}

请按格式输出:
Thought: [你的推理]
Action: [工具名] [参数]
Observation: [等待工具返回]
"""
        # 实际项目应调用 LLM API(此处简化)
        return "Thought: 需要查询天气 → Action: get_weather Beijing"
    
    def act(self, action: str) -> str:
        """执行工具调用"""
        if action.startswith("get_weather"):
            city = action.split()[1]
            # 模拟天气 API 调用
            return f"Observation: {city} 当前晴,25°C"
        return "Observation: 未知工具"
    
    def run(self, query: str, max_steps=3):
        for step in range(max_steps):
            thought_action = self.think(query)
            print(f"🔄 Step {step+1}: {thought_action}")
            
            if "Action:" in thought_action:
                action = thought_action.split("Action:")[1].strip()
                obs = self.act(action)
                self.history.append(f"{thought_action}\n{obs}")
                print(f"✅ {obs}")
                
                if "Answer:" in obs:  # 终止条件
                    return obs.split("Answer:")[1].strip()
            else:
                return thought_action  # 直接回答
        
        return "⚠️ 达到最大推理步数"

# 使用示例
if __name__ == "__main__":
    agent = ReActAgent(llm_api_key="sk-...")
    result = agent.run("北京明天适合户外活动吗?")
    print(f"\n🎯 最终答案: {result}")

2.4 🛠️ Skill(工具)设计黄金法则

原则 说明 反面案例
单一职责 一个 Skill 只做一件事 "全能工具"包含搜索/计算/翻译
幂等性 多次调用相同参数结果一致 调用"随机数生成器"导致结果不可复现
明确边界 参数校验 + 错误提示 未校验城市名导致 API 404
安全沙箱 隔离危险操作(如文件系统) 直接执行用户输入的 shell 命令
可观测性 记录调用日志/耗时 无法定位性能瓶颈
相关推荐
炽烈小老头9 分钟前
【 每天学习一点算法 2026/04/22】四数相加 II
学习·算法
uncle_ll16 分钟前
LangChain基础学习笔记
笔记·学习·langchain·llm·rag
三品吉他手会点灯30 分钟前
C语言学习笔记 - 14.C编程预备计算机专业知识 - 本讲内容概述
c语言·笔记·学习
Thanwind32 分钟前
从0开始的机器学习之旅(二):监督学习,从线性回归说起
学习·机器学习·线性回归
2501_9423264434 分钟前
易速乐考,轻松备考
学习·教育电商
菜鸟‍36 分钟前
【CVPR 2026】LitePT:更轻、更强的点云 Transformer【论文学习】
深度学习·学习·transformer
斯维赤1 小时前
每天学习一个小算法:归并排序
学习·算法·排序算法
椰羊~王小美1 小时前
实践项目来串联概念(嵌入式、网络、后端、前端、AI)
学习
三品吉他手会点灯2 小时前
C语言学习笔记 - 15.C编程预备计算机专业知识 - CPU 内存条 硬盘 显卡 主板 显示器 之间的关系
c语言·笔记·学习
三品吉他手会点灯2 小时前
C语言学习笔记 - 11.C语言简介 - VSCode(C/C++)环境安装与配置
c语言·笔记·学习