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 命令
可观测性 记录调用日志/耗时 无法定位性能瓶颈
相关推荐
无心水25 分钟前
15、云原生架构设计理论与实践 核心考点与学习笔记
笔记·学习·云原生·架构师·软考·系统架构设计师·软考系统架构设计师
动词ing37 分钟前
【学习笔记】51单片机 独立按键控制LED显示二进制
笔记·学习·51单片机
叼烟扛炮1 小时前
Linux 学习笔记(三十九):网络基石——TCP/IP 模型与 UDP 实战
linux·运维·网络·笔记·学习·tcp/ip
前进的李工1 小时前
Agent 学习笔记 04:KV Cache 与上下文缓存
笔记·学习·缓存·agent·注意力机制·kv cache·prompt cache
Z21-X1 小时前
云原生运维笔记:打通OpenStack的任督二脉——从Neutron网络踩坑到Swift与Heat硬核实战
运维·笔记·学习·云原生
旖旎夜光1 小时前
LCR 170:交易逆序对的总数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法
小向是个Der10 小时前
嵌入式进阶——MCU上电后的动作
c语言·单片机·mcu·学习·链接脚本
辣知14 小时前
辣知·化智93 被历史尘封的鬻子
学习
每天题库16 小时前
西藏安全员 A 证备考真题题库 强化重点知识刷题提升通过率
学习·安全·考试·题库·考证
Be for thing16 小时前
PyTorch基础|Tensor张量详解,张量创建、数据类型与常用操作
pytorch·学习·1024程序员节