一文搞懂 AI Agent:从概念、原理到你的第一个可运行 Demo(入门篇)

适合人群:刚接触 AI Agent 的开发者 / 想系统理解 Agent 的产品与技术人员


📌 为什么人人都在聊 Agent?

如果你关注 AI 圈,会发现 Agent 这个词出现的频率高得吓人:OpenAI 发布 Agent SDK、Anthropic 提出 MCP 协议、各大厂都在推"智能体平台"。

但很多人对 Agent 的理解仍然模糊——它和 ChatGPT 有什么区别?和 RAG 是什么关系?为什么说它是"大模型的下一个形态"?

这篇文章会用最直白的方式,把 AI Agent 讲透,并带你写出第一个真正可运行的 Agent 代码。看完你会明白:Agent 不是玄学,它就是"会自己动脑、会自己动手的大模型"。


一、什么是 AI Agent?

1.1 一句话理解

AI Agent(智能体)= 大语言模型(大脑)+ 工具(手脚)+ 目标(使命)。

传统 ChatGPT 是"你问一句,它答一句"的被动问答;而 Agent 是给它一个目标,它自己规划步骤、调用工具、检查结果、修正方向,直到把任务做完的主动执行者

1.2 一个生活化的比喻

把 AI 比作一个员工:

  • ChatBot:像客服接线员——你问什么它答什么,从不主动做事;
  • RAG:像配了资料库的客服——答得更准,但还是被动回答;
  • Agent:像真正的项目经理——你交代"把三季度报表做出来",它会自己拆任务、查数据、写文档、检查格式,最后交付成品。

差别不在"聪明多少",而在是否具备自主完成任务的能力


二、Agent vs ChatBot vs RAG vs 工作流

这是面试和文章里最高频的对比,一张表说清:

维度ChatBot(聊天机器人)RAG(检索增强生成)工作流 WorkflowAI Agent
驱动方式单轮/多轮对话对话 + 检索预定义流程目标驱动
是否自主规划❌(流程写死)
是否调用外部工具仅检索按固定顺序✅ 按需自主
能否动态调整不能不能不能✅ 能反思纠错
典型场景闲聊、客服私域知识问答固定业务流水线复杂任务自动执行

一句话记忆:RAG 是给模型"喂资料",Agent 是给模型"派活"。


三、Agent 的四大核心要素

一个完整的 Agent,通常由四部分组成:

3.1 🧠 规划(Planning)

把大目标拆成小步骤。例如"帮我订三亚的行程"会被拆成:查机票 → 查酒店 → 排日程 → 生成清单。

常见规划方式:ReAct(边想边做)、Plan-and-Execute(先出完整计划再执行)、Reflexion(失败后自我反思重来)。

3.2 💾 记忆(Memory)

  • 短期记忆:当前任务的上下文(对话历史、中间结果);
  • 长期记忆:跨任务的知识沉淀(用户偏好、历史经验),通常用向量数据库存储。

3.3 🛠️ 工具(Tools)

Agent 的"手脚":搜索、调用 API、执行代码、读写数据库、发邮件……工具决定了 Agent 能做什么,也是本轮 AI Agent 浪潮的核心创新——让模型从"只会说"变成"会做"。

3.4 ⚡ 行动(Action)

把规划结果落地的过程:调用工具、获取反馈、判断是否完成,未完成则继续下一轮循环。


四、经典范式:ReAct(让 Agent 转起来的关键)

ReAct = Reasoning(推理)+ Acting(行动)交替进行。

它的循环本质上是:

用户目标
   ↓
模型思考(Thought):我现在该做什么?
   ↓
模型行动(Action):调用工具 / 查询资料
   ↓
观察结果(Observation):拿到工具返回
   ↓
(回到思考,直到认为任务完成)
   ↓
最终回答(Final Answer)

💡 原理出处:论文《ReAct: Synergizing Reasoning and Acting in Language Models》(Yao et al.)。


五、Agent 生态一览:框架与平台怎么选?

类别代表特点适合谁
编程框架LangChain / LangGraph生态最全,编排灵活有开发能力的团队
多智能体框架AutoGen / CrewAI让多个 Agent 协作需要角色分工的场景
官方 SDKOpenAI Agent SDK与 GPT 深度绑定,轻量快速上手 OpenAI
低代码平台Coze / Dify / 扣子拖拽搭建,无需写码非程序员 / 快速验证

选择建议:想学原理用 LangGraph,想快速落地用低代码平台,想深度定制自己写框架。


六、实战:写出你的第一个 Agent(附完整代码)

下面我们用 OpenAI 的 Function Calling(工具调用) 实现一个 Agent:它有一个"查天气"工具和一个"计算器"工具,用户一句话,Agent 自动决定调用哪个。

6.1 准备工作

pip install openai

并设置环境变量(或直接写进代码):

set OPENAI_API_KEY=你的Key   # Windows
export OPENAI_API_KEY=你的Key  # macOS / Linux

6.2 完整代码

from openai import OpenAI
import json

client = OpenAI()  # 自动读取 OPENAI_API_KEY

# ---------- 工具 1:查天气 ----------
def get_weather(city: str) -> str:
    """模拟天气查询(真实项目可换成天气 API)"""
    table = {"北京": "晴 26°C", "上海": "多云 29°C", "深圳": "雷阵雨 31°C"}
    return table.get(city, f"暂无 {city} 的天气数据")

# ---------- 工具 2:计算器 ----------
def calculator(expr: str) -> str:
    """计算数学表达式(演示用,生产环境请勿直接使用 eval)"""
    return str(eval(expr))

# ---------- 向模型声明可用工具 ----------
TOOLS = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "查询指定城市的天气情况",
            "parameters": {
                "type": "object",
                "properties": {"city": {"type": "string", "description": "城市名,如:北京"}},
                "required": ["city"],
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "calculator",
            "description": "计算数学表达式",
            "parameters": {
                "type": "object",
                "properties": {"expr": {"type": "string", "description": "数学表达式,如:23*47"}},
                "required": ["expr"],
            },
        },
    },
]

def run_agent(user_input: str) -> str:
    """Agent 主循环:思考 -> 调工具 -> 观察 -> 直到给出最终回答"""
    messages = [{"role": "user", "content": user_input}]

    for _ in range(10):  # 最多迭代 10 轮,防止死循环
        resp = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=messages,
            tools=TOOLS,
        )
        msg = resp.choices[0].message

        # 模型没有要求调用工具 => 任务完成
        if not msg.tool_calls:
            return msg.content

        # 先把模型的"调用请求"加入对话历史
        messages.append(msg)

        # 逐个执行模型请求的工具调用
        for call in msg.tool_calls:
            name = call.function.name
            args = json.loads(call.function.arguments)
            print(f"🤖 Agent 调用工具:{name}{args}")

            if name == "get_weather":
                result = get_weather(args["city"])
            elif name == "calculator":
                result = calculator(args["expr"])
            else:
                result = "未知工具"

            # 把工具执行结果回传给模型
            messages.append({
                "role": "tool",
                "tool_call_id": call.id,
                "content": str(result),
            })

    return "已达最大迭代次数,任务未完成。"

if __name__ == "__main__":
    answer = run_agent("北京天气怎么样?顺便帮我算一下 23*47 等于多少")
    print(f"🤖 最终回答:{answer}")

6.3 运行效果

🤖 Agent 调用工具:{'city': '北京'}
🤖 Agent 调用工具:{'expr': '23*47'}
🤖 最终回答:北京天气晴朗,气温 26°C。
另外,23*47 的结果是 1081。

注意观察:我们全程没有告诉模型"先查天气再计算",是 Agent 自己判断需要哪个工具、按什么顺序调用——这就是"自主性"最直观的体现。

6.4 两点安全提醒

  1. eval 有代码注入风险,仅用于演示。生产环境请改用 ast.literal_eval 或专用解析库;
  2. 真实项目中,工具函数需要做权限控制与入参校验

七、Agent 能干什么?典型应用场景

  • 🛒 电商导购:理解需求 → 搜索比价 → 推荐下单;
  • 📊 数据分析:查库 → 生成图表 → 输出分析结论;
  • 💻 编程助手:读代码 → 定位 bug → 改代码 → 跑测试;
  • 📅 日程管理:读邮件 → 排日程 → 自动发送提醒;
  • 🏥 医疗/政务:表单填写、材料初审、智能导办(我也在持续跟进这类落地案例)。

八、写给新手的三个建议

  1. 先跑通一个 Demo,再研究原理:动手把上面的代码跑起来,比看十篇文章都有用;
  2. 别一上来就上多 Agent:单体 Agent 都没跑稳,多个 Agent 协作只会放大混乱;
  3. 把 Agent 当作"需要被管理的新员工":好 Agent = 好工具 + 好指令 + 好流程,而不是模型越强越好。

九、常见误区 Q&A

1. “Agent 是不是就是套了提示词的高级 ChatBot?”
不全是。核心差别在"闭环":ChatBot 只输出文字,而 Agent 能调用工具、拿到反馈、修正动作,形成完整的执行闭环——这是"会答"与"会做"的分水岭。

2. “做 Agent 是不是必须用 GPT?”
不是。只要模型支持 Function Calling / 工具调用(国产开源模型同样支持),都可以作为 Agent 的"大脑"。换模型只影响聪明程度,不改变 Agent 的运作机制。

3. “多 Agent 一定比单 Agent 强吗?”
不一定。任务简单时,单 Agent 更快、更省、更可控;只有任务复杂、需要不同角色专长协作时,多 Agent 的价值才体现出来。


✅ 总结

  • Agent = 大脑(LLM)+ 手脚(工具)+ 使命(目标),核心是自主规划与执行;
  • 和 ChatBot / RAG / 工作流的本质区别在于是否自主决策
  • 四大要素:规划、记忆、工具、行动;ReAct 是最核心的运转范式;
  • 通过 Function Calling,十几行代码就能让模型"动手干活"。

📌 觉得有用就 点赞 + 收藏 + 关注,更多 AI Agent 干货持续输出。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐