什么是 AI 智能体(Agent):从概念到代码实战

📅 2026/8/5 19:53:11
什么是 AI 智能体(Agent):从概念到代码实战
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_KEYsk-your-api-key-here OPENAI_BASE_URLhttps://api.openai.com/v1 MODEL_NAMEgpt-4o-mini5. 代码实战从零构建一个 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 构建智能体核心循环接下来实现智能体的核心执行循环。它采用 ReActReasoning Acting模式先让 LLM 推理如果需要工具就调用工具拿到结果后再继续推理直到生成最终答案。from openai import OpenAI import os from dotenv import load_dotenv load_dotenv() client OpenAI( api_keyos.getenv(OPENAI_API_KEY), base_urlos.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) -gt; 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( modelMODEL, messagesself.messages, toolsTOOLS, tool_choiceauto, ) 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(keylambda x: x[1], reverseTrue) return [text for text, _ in results[:top_k]] 使用示例需要 embedding 模型 def get_embedding(text: str) - list: 调用 OpenAI Embedding 接口生成向量 resp client.embeddings.create( modeltext-embedding-3-small, inputtext ) 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(modelgpt-4o-mini, temperature0) 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(agentagent, toolstools, verboseTrue) 运行 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 开发者进阶的必经之路。