AI Agent 入门:理论、原理与5分钟代码实战

前言

到了 2026 年,"AI 智能体"已经不是需要解释的新词了。Cursor 的 Agent 模式成了程序员写代码的默认姿势,Claude Code 重构了终端里的开发工作流,Manus 这样的通用 Agent 产品让"AI 替你干活"从 demo 变成了日常------不管你愿不愿意,Agent 已经长进了每一款生产力工具的底层。

但普及不等于理解。一个根本问题仍然挡在很多人面前:AI Agent 到底是什么?它和直接跟大模型聊天有什么区别?除了用别人做好的产品,我能不能自己动手构建一个?

这篇文章的目标很直接:用最少的抽象概念,为你建立起智能体的清晰图景,然后花 5 分钟带你亲手写出第一个能用的智能体。它是"智能体入门"专栏的第一篇,后续会逐步深入工具调用、记忆机制、多智能体协作等进阶话题。


一、什么是智能体?

在人工智能领域,智能体的定义可以浓缩为一句话:

智能体是能够感知环境、自主决策、采取行动以达成目标的实体。

这个定义拆开来看,包含三个核心要素:

  • 感知:通过传感器获取环境信息。对自动驾驶汽车,传感器是摄像头、雷达、激光雷达;对一个 AI 编程助手,传感器则是代码仓库的读取接口和用户的自然语言输入。
  • 行动:通过执行器对环境施加影响。物理世界的执行器是机械臂、车轮;数字世界的执行器是 API 调用、代码执行、文本生成。
  • 自主性:这是智能体和普通程序的根本区别。普通程序严格遵循预设路径,而智能体能够基于感知和内部状态独立决策,在不确定的环境中寻求目标的达成。

这三者构成一个完整的闭环,是所有智能体行为的基础。


二、智能体的五种类型

理解智能体的一个有效方式,是看它如何一步步从简单走向复杂。AI 学科的发展历程中,研究者们定义了五种递进的智能体类型:

反射智能体:基于"条件-动作"规则,看到什么就做什么。像一个恒温器,检测到温度低于阈值就启动加热。优点是响应极快,缺点是完全没有"远见"。

基于模型的反射智能体 :在反射智能体基础上增加了一个内部世界模型,能追踪那些当前无法直接感知的信息。例如,一辆在隧道中行驶的自动驾驶汽车,即便摄像头暂时看不到前方车辆,它的内部模型依然维持着对那辆车位置和速度的判断------这就是一种初级的"记忆"。

基于目标的智能体:不再只是被动反应,而是主动规划------它会问"我应该做什么才能达成目标?"GPS 导航是最经典的例子:它拥有地图(世界模型),通过搜索算法规划出到达目的地的最优路径。

基于效用的智能体:现实中的目标往往不止一个------不是"到达就行",而是"在预算内、时间最短、体验最好"。效用型智能体为每一种可能的状态赋予一个"满意度分数",然后选择最大化期望效用的行动。

学习型智能体:前四种都需要工程师预先设定知识或规则,而学习型智能体能够通过与环境的交互来改进自身。强化学习是实现这一思想最具代表性的路径------AlphaGo Zero 就是它的巅峰成就,从零开始自我对弈,最终超越了所有人类棋手积累的千年知识。

这五种类型并非互斥。从工程实用角度看,它们可以分为三大类:

  • 反应式智能体(前两种):对环境刺激做出近乎即时的响应,决策延迟极低。核心优势是速度快、计算开销低,代价是"短视",难以完成需要多步骤协调的复杂任务。
  • 规划式智能体(第三和第四种):行动前进行复杂的思考和规划,能处理需要长远眼光的任务,但时间和计算成本更高,在瞬息万变的环境中可能错失时机。
  • 混合式智能体:现代 LLM 智能体本质上就是二者的融合------在"思考-行动-观察"的循环中,LLM 的思考阶段是审议过程,工具调用与结果观察是反应过程,巧妙地将两种模式融为一体。

三、理解任务环境:PEAS 模型

在动手之前,还有一个重要的分析工具需要掌握。要设计一个智能体,首先需要明确它所处的任务环境。PEAS 模型提供了一个四维框架:

以旅行助手为例:

  • P(Performance)------ 性能度量:在预算和时间内,最大化用户满意度与行程合理性
  • E(Environment)------ 环境:预订网站、地图服务、天气预报 API 等网络服务
  • A(Actuators)------ 执行器:调用 API 函数、向用户界面生成和显示格式化文本
  • S(Sensors)------ 传感器:解析 API 返回的数据、读取用户输入的自然语言

用 PEAS 框定任务环境,是构建智能体的第一步,它决定了后续设计中你需要接入哪些工具、处理哪些不确定性。还需要注意,环境并非总是确定的------旅行助手的任务环境就是典型的随机性环境:两次相邻的票价查询返回的价格和余票可能完全不同,这就要求智能体具备处理不确定性、监控变化并及时决策的能力。


四、核心运行机制:Agent Loop

智能体并非一次性完成任务,而是通过一个持续的循环与环境进行交互。这个核心机制被称为 智能体循环(Agent Loop)

Pasted image 20260527070147.png

上图完整地展示了智能体的工作闭环:

1. 感知:循环的起点。智能体通过传感器(API 的监听端口、用户输入接口)接收来自环境的输入信息。

2. 思考:接收到观察信息后,智能体进入核心决策阶段。对于 LLM 智能体,大语言模型在这里进行内部推理:

  • 基于当前观察和内部记忆,更新对任务和环境的理解
  • 将复杂目标分解为一系列更具体的子任务
  • 从可用工具箱中选择最适合的工具,并确定调用参数

3. 行动:决策完成后,智能体通过执行器执行具体操作------调用代码解释器、搜索 API 等工具------对环境施加影响并改变环境状态。

4. 观察 :行动并非终点。环境的状态变化会产生新的反馈,这个反馈作为新的观察被智能体感知系统捕获,进入下一轮循环。

在工程实践中,LLM 智能体通过一种结构化的文本协议来实现这个循环:

ini 复制代码
Thought: 用户想知道北京的天气。我需要调用天气查询工具。
Action: getWeather(city="北京")

LLM 输出这样的文本后,外部解析器捕捉 Action 字段,执行对应的函数,将原始结果封装成自然语言的 Observation 反馈给 LLM:

makefile 复制代码
Observation: 北京当前天气为晴,气温25摄氏度,微风。

Thought → Action → Observation 的闭环,就是 LLM 智能体将语言推理能力与外部真实世界连接起来的基本模式。


五、动手实战:5 分钟构建一个智能旅行助手

理论讲得再多,不如亲手写一个。我们来实现一个能处理以下任务的智能旅行助手:

"你好,请帮我查询一下今天南京的天气,然后根据天气推荐一个合适的旅游景点。"

准备工作

需要三个依赖:requests(HTTP 请求)、openai(调用大模型)、tavily-python(AI 搜索,在 Tavily 官网 注册后可获取 API)。

核心思路是:LLM 负责思考和决策,我们提供工具和环境让它调用。

第一步:定义工具函数

智能体需要两个工具:一个查天气,一个搜景点。

使用免费的天气查询服务 wttr.in,它能以 JSON 格式返回指定城市的天气数据。下面是实现该工具的代码:

python 复制代码
def getWeather(city: str) -> str:
    """通过调用 wttr.in API 查询真实的天气信息。"""
    url = f"https://wttr.in/{city}?format=j1"
    try:
        response = requests.get(url)
        response.raise_for_status()
        data = response.json()
        current_condition = data['current_condition'][0]
        weather_desc = current_condition['weatherDesc'][0]['value']
        temp_c = current_condition['temp_C']
        return f"{city}当前天气:{weather_desc},气温{temp_c}摄氏度"
    except Exception as e:
        return f"查询{city}天气时出错:{str(e)}"

定义一个新工具 get_attraction,它会根据城市和天气状况,在互联网上搜索合适的景点:

python 复制代码
def getAttraction(city: str, weather: str) -> str:
    """根据城市和天气,使用 Tavily 搜索 API 返回景点推荐。"""
    api_key = os.environ.get("TAVILY_API_KEY")
    if not api_key:
        return "未配置 Tavily API 密钥,请先设置环境变量 TAVILY_API_KEY"
    tavily = TavilyClient(api_key=api_key)
    query = f"'{city}' 在'{weather}'天气下最值得去的旅游景点推荐及理由"
    response = tavily.search(query, search_depth="basic", include_answer=True)
    if response.get("answer"):
        return response["answer"]
    # fallback: 格式化搜索结果
    ...

第二步:接入大语言模型

编写一个通用的 LLM 客户端,调用任何兼容 OpenAI 接口的服务:

python 复制代码
class OpenAICompatibleClient:
    def __init__(self, model: str, api_key: str, base_url: str):
        self.model = model
        self.client = OpenAI(api_key=api_key, base_url=base_url)

    def generate(self, prompt: str, system_prompt: str) -> str:
        messages = [
            {'role': 'system', 'content': system_prompt},
            {'role': 'user', 'content': prompt}
        ]
        response = self.client.chat.completions.create(
            model=self.model, messages=messages
        )
        return response.choices[0].message.content

第三步:构建主循环

这是智能体的"发动机"。主循环的核心逻辑是重复执行:将历史记录拼成 Prompt → 调用 LLM 思考 → 解析 Action → 执行工具 → 追加 Observation

python 复制代码
# 初始化
user_prompt = "你好,请帮我查询一下今天南京的天气,然后根据天气推荐一个合适的旅游景点。"
prompt_history = [f"用户请求: {user_prompt}"]

# 运行主循环
for i in range(5):
    full_prompt = "\n".join(prompt_history)

    # 调用 LLM 进行思考
    llm_output = llm.generate(full_prompt, system_prompt=AGENT_SYSTEM_PROMPT)
    prompt_history.append(llm_output)

    # 解析 Action 字段
    action_match = re.search(r"Action: (.*)", llm_output, re.DOTALL)
    action_str = action_match.group(1).strip()

    if action_str.startswith("Finish"):
        # 任务完成,输出最终答案
        final_answer = re.match(r"Finish[(.*)]", action_str).group(1)
        print(f"任务完成:{final_answer}")
        break

    # 提取工具名和参数,调用对应的工具
    tool_name = re.search(r"(\w+)(", action_str).group(1)
    kwargs = dict(re.findall(r'(\w+)="([^"]*)"', args_str))
    observation = available_tools[tool_name](**kwargs)
    prompt_history.append(f"Observation: {observation}")

当智能体成功输出下面的流程时,它就真正在"自行思考并行动"了:

vbnet 复制代码
用户输入: 你好,请帮我查询一下今天南京的天气,然后根据天气推荐一个合适的旅游景点。
========================================
--- 循环 1 ---

正在调用大语言模型...
大语言模型回复: Thought: 用户需要查询南京今天的天气,然后推荐旅游景点。我需要先调用get_weather工具查询南京的天气信息,然后根据天气结果再调用get_attraction工具推荐景点。

Action: get_weather(city="南京")

模型输出:
Thought: 用户需要查询南京今天的天气,然后推荐旅游景点。我需要先调用get_weather工具查询南京的天气信息,然后根据天气结果再调用get_attraction工具推荐景点。

Action: get_weather(city="南京")

Observation: 南京当前天气:Sunny,气温20摄氏度
========================================
--- 循环 2 ---

正在调用大语言模型...
大语言模型回复: Thought: 天气已获取为晴,需根据南京和天气条件调用景点推荐工具生成合适建议。

Action: get_attraction(city="南京", weather="Sunny")

模型输出:
Thought: 天气已获取为晴,需根据南京和天气条件调用景点推荐工具生成合适建议。

Action: get_attraction(city="南京", weather="Sunny")

Observation: Under sunny weather in Nanjing, visit Xuanwu Lake and Qinhuai River for pleasant scenery. Purple Mountain offers great views and is free to enter. Both spots are ideal for sunny days.
========================================
--- 循环 3 ---

正在调用大语言模型...
大语言模型回复: Thought: 我已经成功获取了南京的天气信息和推荐的旅游景点。天气是晴天,20摄氏度,推荐景点包括玄武湖、秦淮河和紫金山。现在我有足够信息来回答用户的问题,应该结束任务并给出最终建议。

Action: Finish[今天南京天气晴朗,气温20摄氏度,非常适合户外活动。为您推荐以下旅游景点:1. 玄武湖 - 湖边景色优美,适合散步拍照;2. 秦淮河 - 可以在岸边欣赏河畔风光;3. 紫金山 - 登高望远视野开阔,且免费开放。这三个景点在晴天的南京都非常值得游览!]

模型输出:
Thought: 我已经成功获取了南京的天气信息和推荐的旅游景点。天气是晴天,20摄氏度,推荐景点包括玄武湖、秦淮河和紫金山。现在我有足够信息来回答用户的问题,应该结束任务并给出最终建议。

Action: Finish[今天南京天气晴朗,气温20摄氏度,非常适合户外活动。为您推荐以下旅游景点:1. 玄武湖 - 湖边景色优美,适合散步拍照;2. 秦淮河 - 可以在岸边欣赏河畔风光;3. 紫金山 - 登高望远视野开阔,且免费开放。这三个景点在晴天的南京都非常值得游览!]

任务完成,最终答案:今天南京天气晴朗,气温20摄氏度,非常适合户外活动。为您推荐以下旅游景点:1. 玄武湖 - 湖边景色优美,适合散步拍照;2. 秦淮河 - 可以在岸边欣赏河畔风光;3. 紫金山 - 登高望远视野开阔,且免费开放。这三个景点在晴天的南京都非常值得游览!

不到 100 行代码,你已经拥有了一个能够自主思考、调用真实工具、完成多步骤任务的 AI 智能体。


六、范式转移:从确定性编程到引导通用大脑

回顾整个过程,你会发现一个根本性的变化。

在传统编程中,你需要为每一种情况编写精确的条件分支------"如果下雨,推荐室内景点;如果晴天,推荐户外景点"。你写的代码直接决定了行为。

而在智能体模式中,你做的事情变成了:

  1. 定义边界:告诉 LLM 它有哪些工具可用
  2. 设定目标:用自然语言描述任务
  3. 提供反馈:将工具执行结果返回给 LLM

核心不再是编写行为逻辑,而是引导一个通用的"大脑"去自主规划、行动和学习。 这让我们从开发"专用自动化工具"转向构建"能自主解决问题的系统"。

当然,这种转变并不意味着工程不再重要。恰恰相反:工具的设计质量、Prompt 的清晰程度、安全边界的设定、异常情况的处理------这些都变得比以前更加关键。工程师的角色从"写逻辑的人"变成了"设计生态的人"。


结语

这篇文章我们从智能体的定义出发,梳理了五种类型、PEAS 环境分析框架和核心运行机制(Agent Loop),最后用不到 100 行代码构建了一个能自主完成"查天气 → 推景点"的旅行助手。

但你可能会发现,这个智能体还有很多明显的局限:

  • 每次交互都是独立的,它没有"记住"上一次对话的能力
  • 只给了它两个工具,一旦任务超出这个范围就无法应对
  • 主循环的逻辑相当粗糙------没有错误重试、没有中间状态管理

本文是"智能体专栏"的第一篇,欢迎在评论区留下你的想法或问题。如果你动手实现了文中的代码,也欢迎分享你的运行结果。

相关推荐
前沿科技说i6 小时前
2026年AI大模型API中转站:主流服务商性能与成本
人工智能
黄啊码8 小时前
【黄啊码】程序员真正该担心的,不是 AI 会写代码
人工智能
weixin_468466859 小时前
Ava 2.0 智能应用场景落地指南
人工智能·自然语言处理·大模型·智能交互·ava
John_ToDebug9 小时前
MCP 深度解析:大模型的“万能插头”
人工智能·经验分享·ai
浦信仿真大讲堂9 小时前
CST 仿真软件与 AI 融合的工程应用实战
人工智能·仿真软件·达索仿真·达索软件
mit6.8249 小时前
A Software Engineer‘s Apology | CODA
人工智能
段一凡-华北理工大学10 小时前
2026 高炉炼铁智能化技术全景与演进路径~系列文章11:演进路径与行业未来
大数据·网络·人工智能·算法·工业智能体·高炉炼铁智能化
小脑斧12310 小时前
AI技能化落地:从对话式大模型到可生产、可复用的AI工程体系
人工智能·skills·openclaw·hermes·marvis
西陵10 小时前
Agent 为什么会陷入 Doom Loop?OpenClaw 的破解之道
前端·人工智能·ai编程