第01章 AI的进化:从问答机器到自主行动者

第01章 AI的进化:从问答机器到自主行动者

“ChatGPT是一本会说话的百科全书。Agent是一个会干活的员工。区别不在于智力,在于能否行动。” —— 某AI工程师


你打开ChatGPT,问它"如何用Python管理Cloudflare DNS记录"。它给了你一段详细的代码和步骤说明。

很有用。但代码还没运行。结果还没验证。下次你遇到同样的问题,你还得重新描述一遍。

这就是响应式AI的边界。


1.1 三代AI系统的演进

# 用代码来理解三代AI系统的区别

# ===== 第一代:规则系统(1950s-2010s)=====
class RuleBasedSystem:
    """
    完全确定性的决策树
    - 优点:可预测、可解释
    - 缺点:无法处理规则外的情况
    """
    def respond(self, user_input: str) -> str:
        if "天气" in user_input:
            return "请查看天气预报网站"
        elif "帮助" in user_input:
            return "输入'菜单'查看所有命令"
        else:
            return "抱歉,我不理解您的问题"

# ===== 第二代:对话式LLM(2020-至今)=====
class ConversationalLLM:
    """
    强大的问答系统
    - 优点:理解自然语言,知识广博
    - 缺点:只能"说",不能"做";无持久记忆;每次从零开始
    """
    def respond(self, user_input: str, context: list = None) -> str:
        # 调用LLM API,返回文本响应
        # 但不能执行代码,不能访问外部系统,不能保存状态
        response = llm_api.call(
            messages=context + [{"role": "user", "content": user_input}]
        )
        return response.text  # 仅仅是文本

# ===== 第三代:自主Agent(2024-)=====
class AutonomousAgent:
    """
    能够自主完成任务的AI系统
    - 感知:理解用户目标(不只是当前问题)
    - 思考:制定行动计划,选择工具
    - 执行:调用真实的工具、API、命令
    - 验证:检查结果,必要时重试或调整
    - 学习:把成功的方法记为技能,下次复用
    """
    def __init__(self):
        self.tools = [dns_manager, email_sender, file_manager, terminal]
        self.skills = SkillLibrary()  # 持久化技能存储
        self.memory = WorkingMemory()  # 当前任务上下文
    
    async def complete_task(self, goal: str) -> dict:
        # 1. 感知:理解目标
        plan = await self.think(goal)
        
        # 2. 执行循环
        results = []
        for step in plan.steps:
            tool = self.select_tool(step)
            result = await tool.execute(step.params)
            results.append(result)
            
            # 3. 验证:结果不对就调整
            if not self.verify(step, result):
                await self.recover(step, result)
        
        # 4. 学习:成功了就记下来
        if all(r.success for r in results):
            self.skills.save(goal, plan)
        
        return {"status": "done", "results": results}

这三代系统的根本区别不是"聪明程度",而是行动能力

维度 规则系统 对话式LLM 自主Agent
理解语言
执行工具 ✅(预设的) ✅(动态选择)
持久记忆 ✅(数据库) ✅(技能+知识库)
处理意外 文字建议 ✅(自动重试/调整)
自主规划

1.2 什么让Agent成为"Agent"

一个LLM不管多聪明,只要它只能输出文字,就不是Agent。Agent的本质是把语言理解转化为真实世界的行动

# Agent的核心循环(ReAct框架)
# Reasoning(推理)+ Acting(行动)的结合

async def agent_loop(goal: str, tools: list, max_steps: int = 10) -> str:
    """
    这是所有现代Agent系统的核心模式
    """
    messages = [
        {
            "role": "system",
            "content": f"""你是一个自主Agent。
            你有以下工具可以使用:{[t.description for t in tools]}
            完成用户的目标,必要时多次使用工具。
            每次行动前,先在<思考>标签中说明你的推理。"""
        },
        {"role": "user", "content": goal}
    ]
    
    for step in range(max_steps):
        # 1. 思考:LLM决定下一步
        response = await llm.complete(messages, tools=tools)
        
        # 2. 检查是否有工具调用
        if response.tool_calls:
            for tool_call in response.tool_calls:
                # 3. 执行工具
                result = await execute_tool(tool_call)
                
                # 4. 把结果反馈给LLM
                messages.append({
                    "role": "tool",
                    "content": str(result)
                })
        else:
            # 没有更多工具调用 = 任务完成
            return response.content
    
    return "已达到最大步数限制"

注意这个循环的关键特征:

  1. LLM驱动决策:每一步做什么,由LLM根据当前状态判断
  2. 工具执行真实操作:不是模拟,是真正的DNS操作、文件写入、API调用
  3. 结果反馈:工具的输出会回到LLM,影响下一步判断
  4. 循环直到完成:不是一次就结束,而是持续行动直到目标达成

1.3 一个真实的对比:同一个任务的两种处理

场景:用户说"帮我把 blog.example.com 指向 1.2.3.4"

对话式LLM的处理

用户:帮我把 blog.example.com 指向 1.2.3.4

ChatGPT:
以下是使用Cloudflare API添加DNS记录的步骤:
1. 登录Cloudflare Dashboard...
2. 选择你的域名...
3. 点击DNS设置...
4. 或者使用API:
   curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \
   -H "Authorization: Bearer {token}" \
   -d '{"type":"A","name":"blog","content":"1.2.3.4"}'

(用户还需要:找zone_id、运行命令、验证结果)

自主Agent(Hermes)的处理

# 用户发出指令后,Agent自动执行以下步骤:

步骤1: [思考] 需要添加DNS的A记录,先获取zone_id
步骤2: [执行] cf_dns.get_zone_id("example.com") → "abc123"
步骤3: [执行] cf_dns.add_record("blog", "A", "1.2.3.4", "abc123") → 成功
步骤4: [执行] cf_dns.verify("blog.example.com") → 解析到1.2.3.4 ✅
步骤5: [学习] 保存技能"add-dns-a-record"到技能库

输出:
"已完成。blog.example.com 现在解析到 1.2.3.4。
记录ID: record_xyz,生效时间约1-5分钟。"

用户的认知负担:前者需要你执行每一步;后者只需要说出目标。


1.4 为什么"现在"是Agent的时代

# 2020-2025年:Agent成立的四个技术条件都已就绪

AGENT_PREREQUISITES = {
    "强大的推理能力": {
        "状态": "✅ 已具备",
        "代表": "GPT-4o, Claude 3.5, Qwen2.5-72B",
        "关键": "LLM能够规划多步任务、处理工具输出、从失败中调整",
    },
    "标准化的工具调用": {
        "状态": "✅ 已具备",
        "代表": "OpenAI function calling, Anthropic tool_use",
        "关键": "LLM和工具之间有了统一的通信语言",
    },
    "成熟的工具生态": {
        "状态": "✅ 已具备",
        "代表": "几乎所有服务都有REST API(Cloudflare、Stripe、GitHub...)",
        "关键": "Agent可以接入真实世界的绝大多数服务",
    },
    "可负担的推理成本": {
        "状态": "✅ 已具备",
        "代表": "GPT-4o-mini:$0.15/1M tokens",
        "关键": "一个Agent完成一项任务的成本降到了$0.01以内",
    },
}

# 这四个条件在2023年底前后同时成立
# 这解释了为什么Agent在2024年突然"爆发"

本章小结

五个核心认知:

  1. Agent ≠ 更聪明的Chatbot:区别在于行动能力,不在于对话质量;能回答"如何做"和能"自己去做"是两种完全不同的系统

  2. Agent的本质是循环:感知 → 思考 → 执行 → 验证 → 学习,循环直到目标完成;而不是一问一答

  3. 工具是Agent的躯体:没有工具的LLM只能产出文字;工具让Agent能触碰真实世界(文件、API、数据库、命令行)

  4. 现在是Agent最好的时代:推理能力、工具调用标准、服务API、成本——四个条件在2024年同时成熟,Agent从实验室走向了生产

  5. Agent改变的是你的认知负担:你只需要描述目标,而不是描述每一步;这是效率的量级差距,不是程度差距

核心行动

# 今天就尝试:
# 打开你常用的LLM,给它一个需要"多步骤"的真实任务
# 观察它在哪个步骤"卡住"(通常是需要执行真实操作的地方)
# 那个卡点,就是Agent要解决的问题

本章提示词模板

模板一:探索Agent的能力边界

我有一个任务:[描述一个你工作中的复杂多步骤任务]

请分析:
1. 哪些步骤你(作为ChatGPT)可以直接帮我完成?
2. 哪些步骤需要我自己去操作?
3. 如果我有一个自主Agent,它需要哪些工具来完成这个任务?
4. 整个任务可能需要多少步?哪步最可能出错?

帮我理解:这个任务是否值得用Agent自动化?评估标准:
- 执行频率(每天/每周/偶尔)
- 步骤数(>5步就值得考虑)
- 出错代价(高代价需要人工确认)

模板二:从Chatbot到Agent的思维转换

我习惯于用ChatGPT来[描述你的使用场景]。

我想了解:如果我有一个自主Agent可以接入[你的工具列表],
同样的场景下,交互方式会如何变化?

请对比:
1. Chatbot模式:我需要说什么、做什么
2. Agent模式:我只需要说什么,Agent会自动做什么
3. 在Agent模式下,什么时候我仍然需要介入?
4. 在Agent模式下,最大的风险是什么?

用具体的例子说明,不要泛泛而谈。

→ 第02章:Agent的三要素:感知、思考与执行