第 1 篇:Agent 到底是什么?别被概念唬住了

系列简介 :从零搭建一个多 Agent AI 助手,覆盖原理、实现、部署全链路。不讲空话,每篇都有可运行的代码。
项目地址github.com/CodeMomentY...
本篇目标:搞清楚 Agent 的本质,手写一个最简单的 Agent 循环。

前言

大家好,我是一名前端工程师。都说前端"已死",那与其担心被 AI 替代,不如打入敌人内部,于是我开始折腾 Agent 开发。

折腾下来发现,Agent 的核心不是算法,而是"工程能力"(怎么设计架构、怎么串联服务、怎么把 LLM 的能力落地成产品)。这些恰好是我们擅长的事。

这个系列记录我从零搭建多 Agent 系统的完整过程。只聊技术知识和设计思路,代码交给 AI 写。如果你也想从应用层切入 AI,希望这个系列对你有帮助。

读完本篇你将学到:

  • Agent 和普通 ChatBot 的本质区别;
  • Agent 的核心循环:感知 → 思考 → 行动;
  • 手写一个不依赖任何框架的 Agent(30 行代码);
  • 接入 LLM 后 Agent 能做什么;

背景与动机

2024年开始,"Agent" 这个词被各种文章和产品反复提及。但大部分内容要么太学术,要么太营销("AI Agent 将取代所有工作")。

我的困惑很简单:Agent 和我直接调 ChatGPT API 有什么区别?

带着这个问题,我花了几周时间从零学习并实现了一个完整的多 Agent 系统。这个系列就是我的实战记录,不是翻译论文,而是一个前端工程师视角的动手笔记。

核心概念

Agent ≠ ChatBot

看一下详细对比:

ChatBot Agent
能力 接收问题,返回回答 接收目标,自主完成任务
工具 没有 有(搜索、API、数据库...)
决策 无(问什么答什么) 有(判断要不要用工具、用哪个)
循环 单轮(一问一答) 多轮(思考→行动→观察→再思考)

一句话总结:ChatBot 是问答机器,Agent 是能干活的助手。

Agent 的核心公式

简单介绍一下:

  • LLM:负责理解问题、做决策、生成回答;
  • Tools:Agent 能调用的外部能力(查天气、搜网页、读数据库);
  • Memory:记住之前聊过什么、做过什么;
  • Loop:不断循环"思考 → 行动 → 观察"直到任务完成;

核心循环

这个循环有个学术名字叫 ReAct(Reasoning + Acting),但本质就是:想一想,干一下,看看结果,再想想够不够,最终再组织话术把完整的信息输出给用户。

动手实现

先说明一下这里为什么用 Python?

AI 生态几乎全在 Python 上------LangChain、LangGraph、OpenAI SDK、向量数据库,全是 Python 优先。当然用 Node.js 也能做,但会花大量时间在"找替代库"上。所以我们不妨让 AI 带着我们一起来熟悉一下 Python 的用法。

Step 1:最简 Agent(不用 LLM)

先不接大模型,用硬编码逻辑模拟 Agent 的决策过程。这样能看清 Agent 的骨架:

python 复制代码
"""
最简 Agent:手动模拟 思考→行动→观察 循环
不依赖任何框架,不调用 LLM
"""

# 工具定义
def get_weather(city):
    """模拟天气查询"""
    data = {"北京": "晴, 25°C", "上海": "多云, 22°C"}
    return data.get(city, f"暂无 {city} 的天气数据")

TOOLS = {"get_weather": get_weather}

# Agent 核心循环
def run_agent(user_input):
    print(f"[用户] {user_input}")
    print("=" * 50)

    # 第 1 步:思考(这里用规则模拟,后面会换成 LLM)
    if "天气" in user_input:
        # 提取城市名(简单粗暴)
        for city in ["北京", "上海", "深圳"]:
            if city in user_input:
                # 第 2 步:行动
                print(f"Thought: 用户问天气,需要调用工具")
                print(f"Action: get_weather({city})")
                result = TOOLS["get_weather"](city)
                print(f"Observation: {result}")

                # 第 3 步:基于观察生成回答
                answer = f"{city}今天的天气是{result},适合出门。"
                print(f"Answer: {answer}")
                return answer

    # 不需要工具,直接回答
    print("Thought: 普通问题,直接回答")
    answer = "你好!有什么可以帮你的?"
    print(f"Answer: {answer}")
    return answer


# 测试
run_agent("北京今天天气怎么样?")
print()
run_agent("你好")

运行输出:

plain 复制代码
[用户] 北京今天天气怎么样?
==================================================
Thought: 用户问天气,需要调用工具
Action: get_weather(北京)
Observation: 晴, 25°C
Answer: 北京今天的天气是晴, 25°C,适合出门。

[用户] 你好
==================================================
Thought: 普通问题,直接回答
Answer: 你好!有什么可以帮你的?

看到了吗?这就是 Agent 的全部秘密:判断要不要用工具,用了之后看结果,再决定下一步。

Step 2:接入 LLM

上面的"思考"是硬编码的 if-else。真正的 Agent 用 LLM 来做决策------它能理解任何问题,自己判断该调什么工具。

我在实现的时候使用的是小米当时免费赠送的Token,这里直接用了mimo-v2.5-pro作为 LLM 来搭建我们的 Agent。有条件的可以购买DeepSeek,也可以找一找免费的,比如「硅基流动 SiliconFlow」

注:不同的 LLM 提供商可能调用用的接口协议不一样(使用之前可以看一下接入文档),这里小米是支持兼容 OpenAI 接口协议的。

python 复制代码
"""
接入 LLM 的 Agent
LLM 负责:理解问题 → 决定是否调工具 → 基于结果生成回答
"""
from openai import OpenAI

client = OpenAI(
    api_key="your-key",
    base_url="https://token-plan-cn.xiaomimimo.com/v1"
)

TOOLS = {"get_weather": get_weather}  # 复用上面的工具

SYSTEM_PROMPT = """你是一个助手。你有以下工具可用:
- get_weather(city): 查询城市天气

规则:
- 如果用户问天气,输出格式:Action: get_weather(城市名)
- 如果不需要工具,直接回答
"""

def call_llm(messages):
    resp = client.chat.completions.create(
        model="mimo-v2.5-pro",
        messages=messages,
        temperature=0
    )
    return resp.choices[0].message.content

def run_agent_with_llm(user_input):
    messages = [
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": user_input}
    ]

    for round in range(5):  # 最多循环 5 轮
        response = call_llm(messages)
        print(f"LLM: {response}")

        # 检查是否要调工具
        if "Action: get_weather(" in response:
            city = response.split("get_weather(")[1].split(")")[0]
            result = TOOLS["get_weather"](city)
            print(f"Tool Result: {result}")
            # 把工具结果告诉 LLM,让它继续
            messages.append({"role": "assistant", "content": response})
            messages.append({"role": "user", "content": f"工具返回:{result}"})
        else:
            # 没有工具调用,说明 LLM 直接给出了最终回答
            return response

    return "抱歉,处理超时了。"

关键变化:"思考"这一步从 if-else 变成了 LLM 调用。 LLM 能理解"上海天气如何"、"明天北京冷不冷"这些问题,不需要我们穷举关键词来匹配天气。

Step 3:验证效果

python 复制代码
run_agent_with_llm("上海今天天气怎么样?")
# LLM: Action: get_weather(上海)
# Tool Result: 多云, 22°C
# LLM: 上海今天多云,气温22°C,体感舒适,适合外出。

run_agent_with_llm("帮我对比一下北京和上海的天气")
# LLM: Action: get_weather(北京)
# Tool Result: 晴, 25°C
# LLM: Action: get_weather(上海)
# Tool Result: 多云, 22°C
# LLM: 北京晴天25°C,上海多云22°C。北京更暖和,两个城市都适合出门。

注意第二个例子:LLM 自己决定要调两次工具,先查北京再查上海,然后对比。这就是 Agent 的威力------你不需要写"如果用户问两个城市就调两次"的逻辑,LLM 自己会规划和决策。

刨根问底

序号 问题
1️⃣ Q:LLM 和 Agent 到底什么关系?
**A:**LLM 是 Agent 的"大脑",但不是 Agent 本身。LLM 只能生成文本,不能查天气、不能读数据库、不能发邮件。Agent 是在 LLM 外面包了一层------给它工具、给它循环、给它记忆,让它从"只会说"变成"能干活"。
2️⃣ Q:为什么 LLM 每轮循环都会按照固定格式输出,并且告诉我们需要调用的工具?
**A:**因为在调用 LLM 的时候就给他约定了 SYSTEM_PROMPT,所以在每轮思考时都会按照这个约定来输出内容。
3️⃣ Q:在调 LLM 的时候,temperature 参数是什么?
**A:**控制 LLM 输出的"随机性"。temperature=0 时输出最确定(适合工具调用、分类判断),temperature=0.5-1 时输出更有创造力(适合写文案、聊天)。Agent 做决策时一般用 0,写作时用 0.5。

本篇小结

  • Agent 的本质是 LLM + 工具 + 循环,30行代码就能写一个能用的 Agent,不是什么神秘的东西;
  • 核心循环:思考(LLM)→ 行动(调工具)→ 观察(看结果)→ 再思考
  • LLM 的价值在于通用决策,只要你约定好了Prompt,它就能按照固定格式输出,告诉你需要调度什么工具,不需要为每种问题写 if-else;

写在最后

AI 发展太快,焦虑很正常。但与其焦虑,不如动手拆解它------你会发现 Agent 没有想象中那么神秘,本质就是一个循环加几个 API 调用。真正的门槛不在技术本身,而在于你愿不愿意花时间把它跑通一遍。

下一篇预告:Agent 有三种经典的工作模式(ReAct、Plan-and-Solve、Reflection),各有什么优劣?什么场景用哪种?

相关推荐
BeforeEasy14 小时前
关于大模型工具调用技术的总结
llm·agent·工具调用·function_call·tool_use
字节跳动数据库14 小时前
TRAE × 火山引擎 Supabase:为你的 AI 应用装上“数据引擎”
人工智能·后端
高洁0114 小时前
中国人工智能培训网—AI系列录播课
人工智能·机器学习·数据挖掘·transformer·知识图谱
AI医影跨模态组学14 小时前
Radiology(IF=15.2)北京大学肿瘤医院影像科孙应实教授团队:CT预测微卫星不稳定性高结肠癌区域淋巴结转移
人工智能·深度学习·论文·医学·医学影像·影像组学
SAP上海工博云署14 小时前
汽配出海业务扩张难题拆解:SAP Business One 适配跨境制造管理
大数据·人工智能·云计算·制造·信息与通信·零售
Python大数据分析@14 小时前
对你而言, Vibe Coding 的乐趣是什么?
python
WL_Aurora14 小时前
Python 算法基础篇之排序算法(一):冒泡、选择、插入
python·算法·排序算法
龙腾AI白云14 小时前
中国人工智能培训网—AI系列录播课
python·beautifulsoup
闵孚龙14 小时前
AI Agent 构建实战:Claude Code 模式迁移、Rust 代码审查 Agent、六层架构与工程闭环全解析
人工智能·架构