AI Agent 工程师入门指南:从原理到实战
1. 什么是 AI AgentAI Agent智能体是一种能够感知环境、做出决策并执行动作的智能系统。与传统的大语言模型LLM不同Agent 不仅仅是生成文本它能够调用工具、访问外部数据、规划任务步骤并在多轮交互中自主完成复杂目标。一个典型的 AI Agent 通常包含以下核心组件大语言模型LLM作为推理和决策的“大脑”负责理解用户意图、生成计划和回复。工具调用Tool CallingAgent 通过调用外部 API、数据库、搜索引擎或代码解释器来获取信息和执行操作。记忆Memory包括短期记忆对话上下文和长期记忆向量数据库、知识库用于跨会话保持状态。规划Planning将复杂任务拆解为多个子步骤并决定执行顺序。执行与反馈Execution Feedback执行动作后观察结果并根据反馈调整下一步策略。简单来说LLM 是“会说话的模型”而 Agent 是“会做事的系统”。2. 环境准备在开始编写 Agent 之前需要准备好开发环境。推荐使用 Python 3.10 及以上版本并安装必要的依赖库。# 创建虚拟环境 python -m venv agent_env source agent_env/bin/activate # Windows 下使用 agent_env\Scripts\activate 安装核心依赖 pip install openai langchain langchain-openai python-dotenv 验证安装 python -c import openai; print(OpenAI SDK 版本:, openai.version)接下来在项目根目录创建.env文件存放 API 密钥OPENAI_API_KEYsk-your-api-key-here OPENAI_BASE_URLhttps://api.openai.com/v1使用python-dotenv加载环境变量from dotenv import load_dotenv import os load_dotenv() api_key os.getenv(OPENAI_API_KEY) base_url os.getenv(OPENAI_BASE_URL) print(API Key 已加载:, bool(api_key))3. 第一个 Agent调用工具工具调用Function Calling是 Agent 的核心能力。下面我们实现一个简单的天气查询 Agent它能够根据用户输入的城市名称调用天气 API。首先定义一个模拟的天气查询函数import json import random def get_weather(city: str) - str: 模拟查询城市天气 weather_data { 北京: {温度: 25, 天气: 晴}, 上海: {温度: 28, 天气: 多云}, 广州: {温度: 30, 天气: 小雨}, } if city in weather_data: data weather_data[city] return json.dumps({城市: city, **data}, ensure_asciiFalse) return json.dumps({错误: f未找到城市 {city} 的天气数据}, ensure_asciiFalse)然后定义工具描述并让模型决定何时调用from openai import OpenAI client OpenAI(api_keyapi_key, base_urlbase_url) tools [ { type: function, function: { name: get_weather, description: 查询指定城市的实时天气, parameters: { type: object, properties: { city: {type: string, description: 城市名称如北京、上海} }, required: [city] } } } ] def run_agent(user_input: str): messages [{role: user, content: user_input}] response client.chat.completions.create( modelgpt-4o, messagesmessages, toolstools, tool_choiceauto ) assistant_message response.choices[0].message 如果模型决定调用工具 if assistant_message.tool_calls: for tool_call in assistant_message.tool_calls: if tool_call.function.name get_weather: args json.loads(tool_call.function.arguments) result get_weather(args[city]) messages.append(assistant_message) messages.append({ role: tool, tool_call_id: tool_call.id, content: result }) # 将工具结果返回给模型生成最终回复 final_response client.chat.completions.create( modelgpt-4o, messagesmessages ) return final_response.choices[0].message.content return assistant_message.content 测试 print(run_agent(北京今天天气怎么样))运行上述代码Agent 会自动识别需要调用get_weather工具获取天气数据后生成自然语言回复。4. 使用 LangChain 构建 AgentLangChain 提供了更高层的抽象让 Agent 开发更加便捷。下面使用 LangChain 的create_tool_calling_agent构建一个支持多工具的 Agent。from langchain_openai import ChatOpenAI from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain_core.tools import tool from langchain_core.prompts import ChatPromptTemplate 初始化模型 llm ChatOpenAI( modelgpt-4o, api_keyapi_key, base_urlbase_url, temperature0 ) 定义工具 tool def add(a: float, b: float) - float: 计算两个数字的和 return a b tool def multiply(a: float, b: float) - float: 计算两个数字的乘积 return a * b tool def get_weather(city: str) - str: 查询城市天气 weather_map {北京: 晴 25°C, 上海: 多云 28°C} return weather_map.get(city, 暂无数据) 创建提示模板 prompt ChatPromptTemplate.from_messages([ (system, 你是一个乐于助人的 AI 助手可以调用工具来完成任务。), (human, {input}), (placeholder, {agent_scratchpad}) ]) 创建 Agent tools [add, multiply, get_weather] agent create_tool_calling_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) 运行 Agent result agent_executor.invoke({input: 北京天气怎么样顺便算一下 23 乘以 4 等于多少}) print(result[output])LangChain 自动处理了工具调用的循环逻辑包括多轮工具调用、错误处理和结果汇总大大简化了开发流程。5. 为 Agent 添加记忆记忆能力让 Agent 能够记住对话历史实现多轮交互。LangChain 提供了多种记忆实现下面演示使用ConversationBufferMemory和向量数据库实现短期与长期记忆。5.1 短期记忆对话缓冲from langchain.memory import ConversationBufferMemory from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain_core.prompts import ChatPromptTemplate memory ConversationBufferMemory( memory_keychat_history, return_messagesTrue ) prompt ChatPromptTemplate.from_messages([ (system, 你是一个有帮助的助手。), (placeholder, {chat_history}), (human, {input}), (placeholder, {agent_scratchpad}) ]) agent create_tool_calling_agent(llm, tools, prompt) agent_executor AgentExecutor( agentagent, toolstools, memorymemory, verboseTrue ) 第一轮对话 agent_executor.invoke({input: 我叫小明请记住我的名字。}) 第二轮对话Agent 能记住用户名字 result agent_executor.invoke({input: 我叫什么名字}) print(result[output])5.2 长期记忆向量数据库对于跨会话的长期记忆可以使用向量数据库存储和检索信息。下面使用 Chroma 作为向量存储pip install chromadb langchain-communityfrom langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import Chroma from langchain.text_splitter import CharacterTextSplitter 初始化嵌入模型 embeddings OpenAIEmbeddings( api_keyapi_key, base_urlbase_url, modeltext-embedding-3-small ) 创建向量数据库 vectorstore Chroma( collection_nameagent_memory, embedding_functionembeddings, persist_directory./chroma_db ) 存储记忆 def save_memory(content: str): 将重要信息存入长期记忆 vectorstore.add_texts([content]) vectorstore.persist() def retrieve_memory(query: str, k: int 3) - list: 检索相关记忆 results vectorstore.similarity_search(query, kk) return [doc.page_content for doc in results] 示例保存用户偏好 save_memory(用户小明喜欢简洁的回答风格偏好 Python 技术栈。) save_memory(用户小明的项目是电商平台使用 Django 框架。) 检索记忆 memories retrieve_memory(用户喜欢什么技术栈) print(检索到的记忆:, memories)6. Agent 规划能力ReAct 模式ReActReasoning Acting是一种经典的 Agent 规划模式它让模型交替进行“思考”和“行动”从而解决复杂问题。LangChain 的create_react_agent实现了这一模式。from langchain.agents import create_react_agent, AgentExecutor from langchain_core.prompts import PromptTemplate react_prompt PromptTemplate.from_template( 你是一个智能助手请按照以下步骤解决问题 问题{input} 请逐步思考 分析问题需要哪些信息 决定调用哪个工具 根据工具结果继续推理 可用工具 {tools} 工具名称列表{tool_names} 思考过程{agent_scratchpad} ) react_agent create_react_agent(llm, tools, react_prompt) react_executor AgentExecutor( agentreact_agent, toolstools, verboseTrue, max_iterations5 # 限制最大迭代次数防止死循环 ) result react_executor.invoke({ input: 计算 (15 27) * 3 的结果并查询上海的天气 }) print(result[output])ReAct 模式的核心优势在于可解释性每一步推理过程都可以被追踪和审计便于调试和优化。7. 实战构建一个数据分析 Agent下面综合运用前面所学构建一个能够读取 CSV 文件、执行数据分析并生成报告的多工具 Agent。import pandas as pd import json from langchain_openai import ChatOpenAI from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain_core.tools import tool from langchain_core.prompts import ChatPromptTemplate 模拟销售数据 data { 月份: [1月, 2月, 3月, 4月, 5月, 6月], 销售额: [12000, 15000, 13000, 18000, 22000, 25000], 订单数: [300, 380, 320, 450, 520, 600] } df pd.DataFrame(data) df.to_csv(sales_data.csv, indexFalse) tool def load_data(file_path: str) - str: 加载 CSV 数据文件并返回基本信息 df pd.read_csv(file_path) info { 列名: list(df.columns), 行数: len(df), 数据预览: df.head(3).to_dict(orientrecords) } return json.dumps(info, ensure_asciiFalse) tool def calculate_statistics(column: str) - str: 计算指定列的统计指标均值、最大值、最小值 df pd.read_csv(sales_data.csv) if column not in df.columns: return f列 {column} 不存在 stats { 列: column, 均值: float(df[column].mean()), 最大值: float(df[column].max()), 最小值: float(df[column].min()) } return json.dumps(stats, ensure_asciiFalse) tool def find_best_month() - str: 找出销售额最高的月份 df pd.read_csv(sales_data.csv) best_idx df[销售额].idxmax() return json.dumps({ 最佳月份: df.loc[best_idx, 月份], 销售额: float(df.loc[best_idx, 销售额]) }, ensure_asciiFalse) 创建 Agent analysis_tools [load_data, calculate_statistics, find_best_month] analysis_llm ChatOpenAI(modelgpt-4o, api_keyapi_key, base_urlbase_url) prompt ChatPromptTemplate.from_messages([ (system, 你是一个数据分析助手使用工具分析销售数据并给出专业结论。), (human, {input}), (placeholder, {agent_scratchpad}) ]) agent create_tool_calling_agent(analysis_llm, analysis_tools, prompt) executor AgentExecutor(agentagent, toolsanalysis_tools, verboseTrue) 执行分析任务 result executor.invoke({ input: 请分析 sales_data.csv 的销售数据告诉我哪个月销售额最高以及整体销售趋势如何 }) print(result[output])这个 Agent 能够自主完成数据加载、统计计算、趋势分析并生成一份包含结论的自然语言报告。8. 部署与最佳实践将 Agent 部署到生产环境时需要注意以下几个方面8.1 使用 FastAPI 封装 APIpip install fastapi uvicornfrom fastapi import FastAPI, HTTPException from pydantic import BaseModel import uvicorn app FastAPI(titleAI Agent API) class AgentRequest(BaseModel): input: str session_id: str default class AgentResponse(BaseModel): output: str 全局 Agent 执行器生产环境建议使用连接池 agent_executor None def get_executor(): global agent_executor if agent_executor is None: # 初始化 Agent复用前面的代码 agent_executor create_agent_executor() return agent_executor app.post(/agent, response_modelAgentResponse) async def run_agent(request: AgentRequest): try: executor get_executor() result executor.invoke({input: request.input}) return AgentResponse(outputresult[output]) except Exception as e: raise HTTPException(status_code500, detailstr(e)) app.get(/health) async def health_check(): return {status: ok} if name main: uvicorn.run(app, host0.0.0.0, port8000)8.2 最佳实践清单限制迭代次数设置max_iterations防止 Agent 陷入死循环。错误处理为每个工具添加异常捕获返回友好的错误信息。日志记录记录每次工具调用的输入输出便于审计和调试。安全控制对工具权限进行严格管理避免 Agent 执行危险操作。成本控制使用max_tokens限制输出长度合理选择模型规格。缓存机制对频繁查询的结果进行缓存降低 API 调用成本。并发处理使用异步框架如 FastAPI处理高并发请求。9. 总结与进阶方向本文从零开始介绍了 AI Agent 的核心概念、开发环境和实战案例。通过工具调用、记忆管理、规划模式和部署实践你已经掌握了构建一个生产级 Agent 的基础能力。接下来可以继续探索以下进阶方向多 Agent 协作使用 LangGraph 构建多个 Agent 协同工作的复杂系统。RAG 增强结合检索增强生成让 Agent 访问私有知识库。多模态 Agent支持图像、音频、视频等多模态输入输出。自主规划框架研究 AutoGPT、BabyAGI 等自主 Agent 的规划策略。评估与优化建立 Agent 的自动化评估体系持续优化提示词和工具设计。AI Agent 是当前人工智能领域最具潜力的方向之一掌握这项技术将为你的职业发展打开新的空间。建议从简单的工具调用开始逐步构建复杂的多工具、多记忆、多规划能力的 Agent 系统在实践中不断积累经验。

相关新闻

智算中心供电方案:从兆瓦级UPS到预制化电力模块的架构演进与选型实践

智算中心供电方案:从兆瓦级UPS到预制化电力模块的架构演进与选型实践

AI大模型参数规模的持续膨胀,正将单机柜功率密度从传统的5-8kW推向40kW乃至100kW以上。万卡级GPU集群对供电连续性和电能质量的要求达到前所未有的高度。在此背景下,智算中心供电方案已不再是简单的容量堆叠,而是涉及架构选型、设备集成、交付…

2026/9/28 6:50:53 阅读更多 →
数据中心固态变压器:AI算力时代供电架构的底层重构

数据中心固态变压器:AI算力时代供电架构的底层重构

2025年全国算力中心总用电量达1700亿千瓦时,占全社会用电量的1.6%。当单个智算中心的机柜功率密度从传统的6-8kW跃升至30kW乃至50kW以上,GPU集群的瞬时功率波动可达数百兆瓦级别,传统"工频变压器UPS"的供电架构正在逼近其物理极限。…

2026/10/10 19:01:32 阅读更多 →
2026客厅投影仪白天清晰吗?客厅投影仪推荐性价比之王

2026客厅投影仪白天清晰吗?客厅投影仪推荐性价比之王

客厅选投影,跟卧室完全是两套逻辑。卧室关灯拉帘看就行,客厅白天采光足、环境光杂,选错了就是白墙一片灰。先把结论撂这儿:两千元出头这个价位,客厅场景最均衡的选择是哈趣K3 Ultra Max——1580CVIA真实亮度、25000:1动…

2026/10/10 21:14:41 阅读更多 →

最新新闻

端侧AI“下凡”元年:从模型量化到部署避坑的实战指南

端侧AI“下凡”元年:从模型量化到部署避坑的实战指南

简介:这是一份由券商机构发布的端侧AI深度跟踪报告,系统梳理2024年AI向终端设备下沉的技术趋势与产业机会。面向关注人工智能赛道的投资者、产品经理及技术决策者,报告从软硬融合、龙头布局、提质增效三个维度切入,完整呈现NPU等专…

2026/10/11 17:19:14 阅读更多 →
Django+Vue构建社区养老系统:多角色权限与适老化实战

Django+Vue构建社区养老系统:多角色权限与适老化实战

"社区养老服务系统,听起来像是一个中规中矩的管理平台,但真正做完之后我才发现,它是多角色权限 适老化交互 复杂业务流程三座大山的集合体。我基于Python的Django框架与Vue做了整套前后端分离设计,开发环境用的是PyCharm&a…

2026/10/11 17:19:14 阅读更多 →
常微分方程边值问题数值解法:射击法与有限差分法实战指南

常微分方程边值问题数值解法:射击法与有限差分法实战指南

简介:常微分方程边值问题的数值解法是计算数学和工程仿真中的基础内容。这份PDF系统介绍了以二阶边值问题为核心的常用数值方法,包括差分法、有限元法以及将边值问题转化为初值问题的基本思路,适合数值计算方向的研究生、科研人员和工程技术人…

2026/10/11 17:19:14 阅读更多 →
Docker自动改iptables怎么办?关闭自动管理并手动补齐网络规则

Docker自动改iptables怎么办?关闭自动管理并手动补齐网络规则

如果你在服务器上装了 Docker,又习惯自己手写 iptables 规则,大概率经历过这种场景:明明已经用防火墙脚本把 FORWARD 链默认策略设成了 DROP,也开放了该放的端口,结果某天重启了一下 docker 服务,再执行 i…

2026/10/11 17:19:14 阅读更多 →
geodart鸿蒙化实践:GeoJSON特征处理与空间拓扑分析

geodart鸿蒙化实践:GeoJSON特征处理与空间拓扑分析

在接手某跨平台 GIS 应用的时候,我需要把一套用 Flutter 写的空间数据处理链路整体搬到鸿蒙设备上。业务方的需求很直接:读取 GeoJSON 文件、解析 Feature 特征对象、做地块叠置分析、计算边界交点——也就是 GeoJSON 特征处理和空间拓扑实战这两块硬骨头…

2026/10/11 17:19:14 阅读更多 →
广义Hough变换与自适应阈值区间:任意形状识别的完整实现

广义Hough变换与自适应阈值区间:任意形状识别的完整实现

简介:针对现有霍夫变换检测计算量大、阈值设定困难及易产生误检的问题,宋晓宇等人提出基于自适应阈值区间的广义霍夫变换图形识别算法。算法先依据邻接关系将图像边缘像素聚类为直线和圆弧数据,再通过动态采样估算自适应阈值区间,…

2026/10/11 17:18:13 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →