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 命令
可观测性 记录调用日志/耗时 无法定位性能瓶颈
相关推荐
·醉挽清风·1 天前
学习笔记—MySQL—库表操作
笔记·学习·mysql
白小沫1 天前
TortoiseSVN是什么?
学习
weixin_451431561 天前
【学习笔记】微博视频页面ajax请求与响应数据分析
笔记·学习·音视频
清辞8531 天前
尾盘选股法程序开发学习初期
学习
Century_Dragon1 天前
让实训“活”起来——信息化综合实训考核平台助力汽车专业教学
学习
nashane1 天前
HarmonyOS 6学习:PanGesture手势驱动月亮半圆轨迹“滚动”术
学习·harmonyos 5
叶~小兮1 天前
K8S进阶核心综合学习笔记(持久化存储+特殊容器+调度管理)
笔记·学习·kubernetes
li星野1 天前
位运算 & 数学 & 高频进阶九题通关(Python + C++)
c++·python·学习·算法
y = xⁿ1 天前
Java并发八股学习日记
java·开发语言·学习
@codercjw1 天前
工程图制图经验
学习