Skip to main content

第 1 课:Agent Core

下面是 Agent Core(智能体本体) 在“工程应用层面必须掌握的 完整知识清单”。

我把所有知识分为 10 大模块(每一项都是工程必备)。 这是专业 Agent 系统(AutoGPT、DeepSeek-R1、LangGraph、OpenAI Swarm、Meta Agent)共同需要的核心能力。

(一)什么是 Agent

1. 什么是 Agent

一个 LLM 模型只能在对话中给你提供信息,相当于很聪明的顾问,却只能在一问一答的模式中提供答案,不能联网,不能记忆,不能执行具体的任务(比如去按下某个web 页面中的某个 Submit 按钮)。

而 Agent 则是一个能自主完成任务的“智能执行者”。他以 LLM 模型 作为核心的决策系统(类似于人的大脑),但是给其配置了可以解决现实问题的工具(类似于人的身体四肢)。由此以来, LLM 不再仅仅停留在 “只能想不能做”,而是可以真正被整合到工作流中,成为 行为体(Actor),可以进行任何计算机上的操作,包括:推理需求,规划任务步骤,调用搜索引擎,运行代码,存储记忆,自动纠正Bug,控制状态机。


2. Agent 的架构

  • “认知”:Agent 的“大脑”来自 LLM(如 GPT-4、Llama 3),负责:推理,判断,做决定,拆解任务

  • “工具”:Agent 能调用 API / 浏览网页 / 执行代码,一般会打包成 工具函数

  • “记忆”:长期/短期记忆让 Agent 不忘事
    • 短期记忆:对话中最近的内容
    • 长期记忆:通过向量数据库保存知识
    • 反思记忆:Reflexion 策略记录失败经验
  • “行动循环”:Reason → Act → Observe

3. 现实中的例子

自动购买机票的 Agent(行动型任务)**

你告诉 Agent:

帮我查最近从芝加哥到洛杉矶的最便宜机票,并帮我预定。

Agent 会:

  1. 调用 LLM 分析需求,确认需求和 操作流程
  2. 使用浏览器工具打开 Expedia
  3. 输入日期和城市
  4. 抓取价格
  5. 比较不同航班
  6. 选择最便宜的
  7. 自动填入你的常旅客信息
  8. 下单
  9. 返回订单号

这是“自动化执行者”。



(二)基本 API 调用

我们使用 CometAPI 作为演示。这个平台整合了多家的 API,并且统一使用 Open AI 的 协议。

1. 可用模型 ID

查询你当前账号在 CometAPI 上“可用的所有模型 ID”

Endpoint

GET https://api.cometapi.com/api/models

返回格式

{
  "data": [ 
    {
      "id": "gpt-4o",         #模型的唯一标识符
      "object": "model",      #表示这是一个 model 对象,不用管
      "created": 1626777600,  #这个模型“记录”创建时间,可用于“选最新模型”
      "owned_by": "openai",
      "permission": [
      	  {
            "allow_sampling": true,     #能不能生成文本
            "allow_logprobs": true,     #是否支持 logprobs
            "allow_fine_tuning": false, #是否允许微调(一般 false)
            ...
          }
      ],
      "root": "gpt-4o",       #该模型所属的“根模型”
      "parent": null
    }
    ...模型列表... ],
  "success": true
}

调用代码

import requests
import json

BASE_URL = "https://api.cometapi.com"

def get_models():
    url = f"{BASE_URL}/api/models"
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }

    resp = requests.get(url, headers=headers, timeout=10)
    resp.raise_for_status()   # 非 200 会抛异常
    data = resp.json()

    if not data.get("success", False):
        raise RuntimeError("Failed to fetch models")

    return data["data"]

if __name__ == "__main__":
    models = get_models()
    # print(json.dumps(models, indent=2, ensure_ascii=False))  # 格式化输出字典结构
    model_id_list = [model["id"] for model in models]
    print(", ".join(model_id_list))

2. 单次对话

macOS / Linux 先在系统里设置环境变量

export COMET_API_KEY="你的新 Key"
import os
import requests
import json
import time

API_KEY = os.getenv("COMET_API_KEY")  
BASE_URL = "https://api.cometapi.com/v1/chat/completions"

if not API_KEY:
    raise RuntimeError("COMET_API_KEY not set")

def single_chat(prompt: str):
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }

    payload = {
        "model": "gpt-4o",
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": prompt},
        ],
        "temperature": 0.2,
        "max_tokens": 300,
    }

    resp = requests.post(
        BASE_URL,
        headers=headers,
        json=payload,
        timeout=30,
    )
    resp.raise_for_status()
    data = resp.json()

    return data["choices"][0]["message"]["content"]


if __name__ == "__main__":
    time_set = time.time()
    reply = single_chat("What is an AI agent?")
    time_end = time.time()
    print(reply)
    print(f"Time Used:{time_end - time_set}")


3. 多次对话

同一个 messages 列表持续累积(这就是“记忆性”的本质)。

示例会进行 三轮对话,并在第 3 轮明确引用第 1 轮你告诉它的信息,从而验证它“记住了”。

说明:这属于 短期记忆(Short-term memory),即通过 messages 传回完整历史实现。长期记忆(向量库)是下一步。

import os
import requests

API_KEY = os.getenv("COMET_API_KEY")
BASE_URL = "https://api.cometapi.com/v1/chat/completions"

if not API_KEY:
    raise RuntimeError("COMET_API_KEY not set. In Jupyter, use: os.environ['COMET_API_KEY']='...' or %env")

def chat_once(messages, model="gpt-4o", max_tokens=120, temperature=0.2):
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }
    payload = {
        "model": model,
        "messages": messages,
        "max_tokens": max_tokens,
        "temperature": temperature,
    }
    r = requests.post(BASE_URL, headers=headers, json=payload, timeout=30)
    r.raise_for_status()
    data = r.json()
    return data["choices"][0]["message"]["content"]  # 获取回答

if __name__ == "__main__":
    # 1) 初始化对话(系统提示 + 第一轮用户)
    messages = [
        {"role": "system", "content": "You are a concise assistant. Keep answers short."},
        {"role": "user", "content": "My name is HeiHe. Im an engineer."}
    ]

    # 第 1 轮
    a1 = chat_once(messages)
    messages.append({"role": "assistant", "content": a1})
    print("Round1 Assistant:", a1)

    # 第 2 轮:引入一个偏好(让“记忆性”更明显)
    messages.append({"role": "user", "content": "When explaining, use bullet points."})   # 加入问题
    a2 = chat_once(messages)
    messages.append({"role": "assistant", "content": a2})  # 加入回答
    print("\nRound2 Assistant:", a2)

    # 第 3 轮:验证它能利用前两轮信息(名字 + 偏好)
    messages.append({"role": "user", "content": "What is my name, and summarize our conversation so far in 2 bullet points."}) 
    a3 = chat_once(messages, max_tokens=140)
    messages.append({"role": "assistant", "content": a3})
    print("\nRound3 Assistant:", a3)

这段代码“记忆性”体现在哪里?

  • 关键在于:每一轮都把历史消息(含 assistant 的回复)追加回 messages
  • 第 3 轮询问“我叫什么 + 总结对话”,模型能答出来,是因为它在当前请求里看到了第 1、2 轮的内容。

(三)Agent 架构模式

后续我们的学习会按照 十个 模块进行

  • 模块 1:LLM 作为决策引擎(Decision Engine)

  • 模块 2:ReAct 架构(Reason + Act)

  • 模块 3:Chain-of-Thought(CoT Agent)

  • 模块 4:Reflexion 架构(带反思的 Agent)

  • 模块 5:Memory(记忆系统)

  • 模块 6:Tool Use(工具调用)

  • 模块 7:Planner(规划器)与 Executor(执行器)

  • 模块 8:状态机(State Machine)与可控 Agent

  • 模块 9:Agent 日志、可视化与调试

  • 模块 10:Agent Core 的整体架构模式

行业中所有 Agent 系统都来自以下 4 个核心架构:


架构 A:ReAct Agent(最基础)

优点:简单,可控 缺点:容易跑偏,不知道自己错了


架构 B:Reflexion Agent(会反思)

优点:能修正错误 缺点:速度变慢


架构 C:Planner–Executor(最强工程架构)

像 ChatGPT 的 Tool Use 一样:

  • 一个 Planner 做计划
  • Executor 执行工具
  • 最终结果由 Planner 整理

优点: ✓ 稳定 ✓ 可控 ✓ 适合复杂任务


架构 D:状态机 / LangGraph(企业级)

每个节点 = 一个 Agent。 可形成图结构(Graph)。 适用于:

  • 分布式爬虫
  • 舆情分析
  • 多 agent 协作
  • 自动化 pipeline(如 MemeMiner)