1. 引言

AI 智能体(Agent)是当前人工智能领域最热门的概念之一。简单来说,AI 智能体是一个能够感知环境、做出决策并采取行动来完成特定目标的智能系统。它不仅仅是聊天机器人,更是一个能够自主规划、调用工具、记忆上下文并持续迭代的「数字员工」。

本文将从核心概念讲起,逐步深入到架构原理,最后通过完整的 Python 代码实战,带你从零构建一个可运行的 AI 智能体。

2. 什么是 AI 智能体

AI 智能体(Agent)是指以大型语言模型(LLM)为核心大脑,通过感知、规划、记忆和行动四个核心模块协同工作,自主完成复杂任务的系统。

与传统聊天机器人不同,AI 智能体具备以下关键特征:

  • 自主性:能够独立拆解任务并制定执行计划,无需人工逐步干预。
  • 工具调用:可以调用外部工具(如搜索引擎、代码解释器、API 接口)来扩展能力边界。
  • 记忆能力:能够记住历史对话和中间结果,支持多轮复杂任务。
  • 反思迭代:能够根据执行结果自我评估、纠错并重新规划。

3. AI 智能体的核心架构

一个完整的 AI 智能体通常由以下四个核心模块组成:

模块职责典型实现
感知模块接收并理解用户输入、环境状态LLM 文本理解、多模态编码
规划模块拆解任务、制定执行步骤思维链(CoT)、ReAct 模式
记忆模块存储短期对话与长期知识上下文窗口、向量数据库
行动模块调用工具、执行动作并返回结果Function Calling、代码执行器

下图展示了 AI 智能体的典型工作流程:

flowchart TD
    A[用户输入] --> B[感知模块]
    B --> C[规划模块]
    C --> D{是否需要工具}
    D -->|是| E[行动模块: 调用工具]
    E --> F[记忆模块: 存储结果]
    F --> C
    D -->|否| G[生成最终回复]
    G --> H[输出给用户]

4. 环境准备

在开始代码实战之前,我们需要先安装必要的依赖库。本文使用 Python 3.9+ 和 OpenAI 兼容的 API 接口进行演示。

# 创建虚拟环境(可选)
python -m venv agent_env
source agent_env/bin/activate  # Windows 下使用 agent_env\Scripts\activate
安装依赖
pip install openai python-dotenv requests

接下来,在项目根目录创建 .env 文件,填入你的 API 密钥:

OPENAI_API_KEY=sk-your-api-key-here
OPENAI_BASE_URL=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini

5. 代码实战:从零构建一个 AI 智能体

下面我们通过一个完整的实战项目,构建一个能够自主查询天气、计算数学表达式并回答问题的 AI 智能体。

5.1 定义工具函数

首先,我们定义智能体可以调用的工具。这里实现两个工具:天气查询和数学计算。

import json
import math
import requests
def get_weather(city: str) -> str:
"""查询指定城市的天气信息(模拟数据)"""
weather_data = {
"北京": "晴,25°C,微风",
"上海": "多云,28°C,东南风3级",
"广州": "雷阵雨,30°C,南风2级",
"深圳": "阴,29°C,西南风2级",
}
return weather_data.get(city, f"抱歉,暂无 {city} 的天气数据")
def calculate(expression: str) -> str:
"""计算数学表达式,如 '2 + 3 * 4'"""
try:
# 安全计算:仅允许数字和基本运算符
allowed = set("0123456789+-*/(). ")
if not all(c in allowed for c in expression):
return "表达式包含非法字符"
result = eval(expression, {"builtins": {}}, {"math": math})
return f"{expression} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
工具注册表:供 LLM 识别
TOOLS = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市的实时天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称,如 北京"}
},
"required": ["city"]
}
}
},
{
"type": "function",
"function": {
"name": "calculate",
"description": "计算数学表达式",
"parameters": {
"type": "object",
"properties": {
"expression": {"type": "string", "description": "数学表达式,如 2 + 3 * 4"}
},
"required": ["expression"]
}
}
}
]
工具分发映射
TOOL_FUNCTIONS = {
"get_weather": get_weather,
"calculate": calculate,
}

5.2 构建智能体核心循环

接下来实现智能体的核心执行循环。它采用 ReAct(Reasoning + Acting)模式:先让 LLM 推理,如果需要工具就调用工具,拿到结果后再继续推理,直到生成最终答案。

from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL"),
)
MODEL = os.getenv("MODEL_NAME", "gpt-4o-mini")
class Agent:
def init(self, system_prompt: str):
self.system_prompt = system_prompt
self.messages = [{"role": "system", "content": system_prompt}]
def run(self, user_input: str, max_steps: int = 5) -> str:
    """执行智能体主循环"""
    self.messages.append({"role": "user", "content": user_input})
for step in range(max_steps):
    print(f"\n--- 第 {step + 1} 轮推理 ---")
response = client.chat.completions.create(
    model=MODEL,
    messages=self.messages,
    tools=TOOLS,
    tool_choice="auto",
)
message = response.choices[0].message
self.messages.append(message)
如果模型没有要求调用工具,说明已生成最终答案
if not message.tool_calls:
return message.content
处理工具调用
for tool_call in message.tool_calls:
fn_name = tool_call.function.name
fn_args = json.loads(tool_call.function.arguments)
print(f"调用工具: {fn_name}({fn_args})")
# 执行工具函数
result = TOOL_FUNCTIONS[fn_name](**fn_args)
print(f"工具返回: {result}")

# 把工具结果追加到对话中
self.messages.append({
    "role": "tool",
    "tool_call_id": tool_call.id,
    "content": str(result),
})
return "已达到最大推理步数,任务未完成。"
创建智能体实例
agent = Agent(
system_prompt="你是一个智能助手。你可以调用工具来查询天气和计算数学表达式。"
"当需要工具时,请调用对应函数;否则直接回答用户。"
)

5.3 运行智能体

现在我们来测试智能体的实际效果:

if __name__ == "__main__":
    # 测试 1:查询天气
    result1 = agent.run("北京今天天气怎么样?")
    print("\n最终回答:", result1)
# 测试 2:数学计算
result2 = agent.run("请计算 (15 + 7) * 3 的结果")
print("\n最终回答:", result2)
测试 3:多轮对话(智能体有记忆)
result3 = agent.run("那上海呢?")
print("\n最终回答:", result3)</code></pre>
运行上述代码,你会看到智能体自动完成「理解意图 → 调用工具 → 整合结果 → 输出答案」的完整流程。输出效果类似:
--- 第 1 轮推理 ---
调用工具: get_weather({'city': '北京'})
工具返回: 北京,晴,25°C,微风
最终回答: 北京今天天气晴朗,气温 25°C,微风,适合外出活动。
--- 第 1 轮推理 ---
调用工具: calculate({'expression': '(15 + 7) * 3'})
工具返回: (15 + 7) * 3 = 66
最终回答: (15 + 7) * 3 的计算结果是 66。
--- 第 1 轮推理 ---
调用工具: get_weather({'city': '上海'})
工具返回: 上海,多云,28°C,东南风3级
最终回答: 上海今天多云,气温 28°C,东南风 3 级。
6. 进阶:为智能体添加记忆能力
上面的示例中,智能体通过 self.messages 维护了短期记忆,能够记住同一会话内的上下文。但对于长期记忆(跨会话),我们需要引入向量数据库。
下面演示如何使用简单的向量检索为智能体添加长期记忆:
import numpy as np
class MemoryStore:
"""基于向量的简易长期记忆存储"""
def init(self):
self.items = []  # 存储 (文本, 向量) 对
def add(self, text: str, vector: list):
self.items.append((text, np.array(vector)))
def search(self, query_vector: list, top_k: int = 3) -&gt; list:
"""余弦相似度检索最相关的记忆"""
query = np.array(query_vector)
results = []
for text, vec in self.items:
# 计算余弦相似度
cos_sim = np.dot(query, vec) / (np.linalg.norm(query) * np.linalg.norm(vec) + 1e-8)
results.append((text, cos_sim))
results.sort(key=lambda x: x[1], reverse=True)
return [text for text, _ in results[:top_k]]
使用示例(需要 embedding 模型)
def get_embedding(text: str) -> list:
"""调用 OpenAI Embedding 接口生成向量"""
resp = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
return resp.data[0].embedding
memory = MemoryStore()
存储长期知识
memory.add("用户喜欢简洁的回答风格", get_embedding("用户喜欢简洁的回答风格"))
memory.add("用户上次询问了北京的天气", get_embedding("用户上次询问了北京的天气"))
检索相关记忆
query = "用户偏好什么风格?"
related = memory.search(get_embedding(query))
print("检索到的相关记忆:", related)
7. 主流 AI 智能体框架对比
在实际项目中,我们通常不需要从零构建智能体,而是使用成熟的框架。以下是几个主流框架的对比:
框架
核心特点
适用场景
学习成本
LangChain
模块化程度高,生态丰富,支持多种模型和工具
通用智能体、RAG 应用
中等
AutoGen
支持多智能体协作,对话驱动
多角色协作、复杂任务分解
中等
CrewAI
角色化团队协作,配置简单
自动化工作流、团队模拟
较低
OpenAI Assistants
官方托管,内置检索和代码解释器
快速原型、生产级应用
低
8. 实战:使用 LangChain 快速构建智能体
为了展示框架的便捷性,下面用 LangChain 重新实现上面的天气查询智能体:
pip install langchain langchain-openai
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain.tools import tool
from langchain_core.prompts import ChatPromptTemplate
@tool
def get_weather(city: str) -> str:
"""查询指定城市的天气信息"""
weather_data = {
"北京": "晴,25°C,微风",
"上海": "多云,28°C,东南风3级",
"广州": "雷阵雨,30°C,南风2级",
}
return weather_data.get(city, f"暂无 {city} 的天气数据")
@tool
def calculate(expression: str) -> str:
"""计算数学表达式"""
try:
return f"{expression} = {eval(expression)}"
except Exception as e:
return f"计算错误: {e}"
初始化模型和工具
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
tools = [get_weather, calculate]
构建提示词
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,可以调用工具完成任务。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
创建智能体
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
运行
result = agent_executor.invoke({"input": "北京天气怎么样?顺便算一下 12 * 8"})
print(result["output"])
可以看到,使用 LangChain 后代码量大幅减少,框架自动处理了工具调用循环、错误重试和结果整合等细节。
9. 智能体的局限与挑战
尽管 AI 智能体能力强大,但在实际落地中仍面临不少挑战:
幻觉问题:LLM 可能生成看似合理但实际错误的信息,需要引入验证机制。
工具调用错误:工具参数格式错误、API 超时等问题需要健壮的错误处理。
上下文长度限制:长任务会消耗大量 Token,需要合理设计记忆管理策略。
安全与权限:智能体自主执行操作时,需要严格的权限控制和审计机制。
成本控制:多轮推理和工具调用会显著增加 API 调用成本。
10. 总结与展望
本文从概念、架构到代码实战,系统性地介绍了 AI 智能体(Agent):
AI 智能体是以 LLM 为核心,具备感知、规划、记忆和行动能力的自主系统。
核心架构包括感知、规划、记忆、行动四大模块,ReAct 模式是主流实现范式。
通过 Function Calling 机制,智能体可以调用外部工具扩展能力。
从零实现一个智能体约需 100 行代码,使用 LangChain 等框架可大幅简化开发。
未来,AI 智能体将朝着多智能体协作、更强的自主规划能力和更安全的执行机制方向发展。掌握智能体的构建原理,是每一位 AI 开发者进阶的必经之路。
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐