当前位置: 首页 > news >正文

AI Agent 工程师入门指南:从原理到代码实战

1. 引言:什么是 AI Agent

AI Agent(智能体)是以大语言模型(LLM)为核心,能够感知环境、自主规划、调用工具并执行任务以达成目标的程序系统。与传统单轮问答不同,Agent 具备记忆、推理和行动能力,可以完成多步骤复杂任务。

本文面向零基础或初级开发者,从核心概念讲起,逐步深入到代码实战,帮助你建立 AI Agent 工程师所需的知识体系和动手能力。

2. 核心概念与架构

一个完整的 AI Agent 通常由以下核心模块组成:

  • 大语言模型(LLM):负责理解指令、推理决策和生成文本。
  • 规划(Planning):将复杂任务拆解为可执行的子步骤。
  • 记忆(Memory):保存对话历史、任务状态和长期知识。
  • 工具调用(Tool Use):通过函数调用访问外部 API、数据库或代码执行环境。
  • 行动与反馈(Action & Feedback):执行动作并根据结果调整下一步计划。

下图展示了 Agent 的基本工作流程:

flowchart TD A[用户输入] --> B[LLM 理解与规划] B --> C{是否需要工具?} C -- 是 --> D[调用工具/API] D --> E[获取结果] E --> B C -- 否 --> F[生成最终回复] F --> G[输出给用户]

3. 环境准备

在开始编码前,请确保本地环境满足以下要求:

  • Python 3.10 或更高版本
  • 一个 OpenAI 兼容的 API Key(或使用本地模型如 Ollama)
  • 安装必要的 Python 包

执行以下命令安装依赖:

pip install openai python-dotenv

在项目根目录创建.env文件,写入你的 API Key:

OPENAI_API_KEY=sk-你的密钥 OPENAI_BASE_URL=https://api.openai.com/v1

4. 第一个 Agent:简单的对话助手

我们先从最基础的对话助手开始,理解 LLM 调用的基本流程。

import os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client = OpenAI( api_key=os.getenv("OPENAI_API_KEY"), base_url=os.getenv("OPENAI_BASE_URL"), ) def chat(prompt: str) -> str: response = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "你是一个乐于助人的 AI 助手。"}, {"role": "user", "content": prompt}, ], ) return response.choices[0].message.content if name == "main": print(chat("请用一句话介绍你自己"))

运行上述代码,你会得到模型返回的自我介绍。这是所有 Agent 的基础——先学会与 LLM 对话。

5. 让 Agent 学会调用工具

真正的 Agent 需要调用外部工具。OpenAI 提供了 Function Calling 机制,让模型可以输出结构化调用指令。下面我们实现一个能查询天气的 Agent。

import json import os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) 模拟天气查询工具 def get_weather(city: str) -> str: weather_data = { "北京": "晴,25°C", "上海": "多云,28°C", "广州": "小雨,30°C", } return weather_data.get(city, "暂无该城市数据") tools = [ { "type": "function", "function": { "name": "get_weather", "description": "查询指定城市的天气", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名称"} }, "required": ["city"], }, }, } ] def run_agent(user_input: str) -> str: messages = [{"role": "user", "content": user_input}] response = client.chat.completions.create( model="gpt-4o-mini", messages=messages, tools=tools, tool_choice="auto", ) msg = response.choices[0].message if msg.tool_calls: # 执行工具调用 for tool_call in msg.tool_calls: args = json.loads(tool_call.function.arguments) result = get_weather(args["city"]) messages.append(msg) messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": result, }) # 将工具结果返回给模型生成最终回答 final = client.chat.completions.create( model="gpt-4o-mini", messages=messages, ) return final.choices[0].message.content return msg.content if name == "main": print(run_agent("北京今天天气怎么样?"))

这段代码演示了 Agent 的核心循环:模型判断需要调用工具,我们执行工具并返回结果,模型再基于结果生成最终回答。

6. 使用 LangChain 构建 Agent

LangChain 是目前最流行的 Agent 开发框架之一,它封装了工具调用、记忆管理和链式调用等复杂逻辑。首先安装依赖:

pip install langchain langchain-openai

下面用 LangChain 快速构建一个带记忆的 Agent:

import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain.tools import tool from langchain.memory import ConversationBufferMemory from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder load_dotenv() @tool def add(a: float, b: float) -> float: """计算两个数字的和""" return a + b @tool def multiply(a: float, b: float) -> float: """计算两个数字的乘积""" return a * b llm = ChatOpenAI(model="gpt-4o-mini", temperature=0) prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个数学计算助手,请使用工具完成计算。"), MessagesPlaceholder(variable_name="chat_history"), ("human", "{input}"), MessagesPlaceholder(variable_name="agent_scratchpad"), ]) memory = ConversationBufferMemory( memory_key="chat_history", return_messages=True, ) agent = create_tool_calling_agent(llm, [add, multiply], prompt) executor = AgentExecutor(agent=agent, tools=[add, multiply], memory=memory, verbose=True) if name == "main": print(executor.invoke({"input": "请计算 3 加 5 等于多少?"})) print(executor.invoke({"input": "再帮我算一下刚才的结果乘以 4 是多少?"}))

注意第二个问题用到了「刚才的结果」,这正是记忆模块在起作用。LangChain 自动维护了对话历史,让 Agent 具备多轮上下文理解能力。

7. 实战项目:自动研究报告生成器

下面我们综合运用所学知识,构建一个能自动搜索资料并生成研究报告的 Agent。这个项目包含搜索工具、内容总结和报告生成三个环节。

import os from dotenv import load_dotenv 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, MessagesPlaceholder load_dotenv() 模拟搜索工具(实际可接入 SerpAPI 或 Bing Search) @tool def search_web(query: str) -> str: """搜索互联网获取最新信息""" # 这里用模拟数据代替真实搜索 database = { "AI Agent": "AI Agent 是 2025 年最热门的 AI 应用方向,市场规模预计达 500 亿美元。", "大模型": "大语言模型参数规模持续增长,多模态成为新趋势。", "自动驾驶": "L4 级自动驾驶进入商业化试点阶段。", } return database.get(query, f"关于 {query} 的搜索结果:暂无详细数据,建议查阅最新行业报告。") @tool def summarize(text: str) -> str: """对长文本进行摘要""" # 实际项目中可调用 LLM 完成摘要 return f"摘要:{text[:50]}..." llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.3) prompt = ChatPromptTemplate.from_messages([ ("system", "你是一名资深行业分析师,请基于工具返回的资料撰写结构清晰、数据详实的研究报告。"), ("human", "{input}"), MessagesPlaceholder(variable_name="agent_scratchpad"), ]) agent = create_tool_calling_agent(llm, [search_web, summarize], prompt) executor = AgentExecutor(agent=agent, tools=[search_web, summarize], verbose=True) if name == "main": result = executor.invoke({ "input": "请研究 AI Agent 行业的发展现状,并生成一份 500 字左右的报告。" }) print(result["output"])

运行后,Agent 会先调用搜索工具获取资料,再调用摘要工具整理信息,最后生成完整报告。你可以把search_web替换为真实的搜索 API,让 Agent 具备联网能力。

8. 进阶:多 Agent 协作

复杂任务往往需要多个 Agent 分工协作。下面演示一个「项目经理 + 程序员 + 测试员」的多 Agent 系统。

import os from dotenv import load_dotenv 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, MessagesPlaceholder load_dotenv() @tool def write_code(requirement: str) -> str: """根据需求编写 Python 代码""" return f"def solution():\n # 实现:{requirement}\n return '完成'" @tool def run_tests(code: str) -> str: """对代码执行测试""" return "测试通过,无错误。" llm = ChatOpenAI(model="gpt-4o-mini", temperature=0) def create_agent(system_prompt: str, tools: list): prompt = ChatPromptTemplate.from_messages([ ("system", system_prompt), ("human", "{input}"), MessagesPlaceholder(variable_name="agent_scratchpad"), ]) agent = create_tool_calling_agent(llm, tools, prompt) return AgentExecutor(agent=agent, tools=tools, verbose=True) 三个角色 manager = create_agent( "你是项目经理,负责拆解任务并分派给程序员。", [write_code], ) programmer = create_agent( "你是资深程序员,负责编写高质量代码。", [write_code], ) tester = create_agent( "你是测试工程师,负责验证代码质量。", [run_tests], ) if name == "main": # 模拟协作流程 task = "实现一个计算斐波那契数列的函数" plan = manager.invoke({"input": f"请拆解任务:{task}"}) code = programmer.invoke({"input": f"请编写代码:{task}"}) test_result = tester.invoke({"input": f"请测试代码:{code['output']}"}) print("项目经理计划:", plan["output"]) print("程序员产出:", code["output"]) print("测试结果:", test_result["output"])

多 Agent 协作的核心思想是「职责分离」:每个 Agent 只负责一个专业领域,通过工具和消息传递完成整体任务。实际生产环境中,你可以用消息队列或工作流引擎来编排这些 Agent。

9. 常见问题与调试技巧

开发 Agent 过程中,你可能会遇到以下常见问题:

问题可能原因解决方案
模型不调用工具工具描述不清晰在工具 description 中写清楚用途和参数含义
工具返回格式错误JSON 解析失败用 try-except 包裹解析逻辑,打印原始返回
Agent 陷入死循环缺少终止条件设置最大迭代次数(max_iterations)
上下文过长记忆无限累积使用滑动窗口或摘要压缩历史

调试时建议开启verbose=True,观察 Agent 每一步的思考和工具调用过程,这是定位问题最有效的手段。

10. 总结与学习路线

本文从零开始介绍了 AI Agent 的核心概念、架构和代码实战,涵盖工具调用、LangChain 框架、记忆管理和多 Agent 协作。要成为一名合格的 AI Agent 工程师,建议按以下路线继续深入学习:

  • 第一阶段:熟练掌握 Python 和 LLM API 调用。
  • 第二阶段:深入理解 Function Calling 和工具设计模式。
  • 第三阶段:学习 LangChain、LlamaIndex 等框架的源码。
  • 第四阶段:研究 RAG(检索增强生成)、Agent 记忆持久化和多 Agent 编排。
  • 第五阶段:关注 AutoGPT、MetaGPT 等前沿项目,动手复现并改进。

AI Agent 是当前 AI 工程化最活跃的方向之一,希望本文能帮你迈出扎实的第一步。动手把上面的代码跑起来,再结合自己的业务场景改造,你会成长得更快。

http://www.cnnetsun.cn/news/4140517.html

相关文章:

  • 考研复试辅助平台:AI模拟面试与智能备考系统设计
  • Linux无GUI服务器部署图形应用:Xvfb虚拟显示与依赖库安装指南
  • ImageGlass 图片查看器实测:90 多种格式双击即开,还免费
  • Lilo实战:用Markdown小组件与知识图谱构建个人知识网络
  • 《我的世界》整合包一键安装与联机指南:从PCL启动器到性能优化
  • 单片机毕设选题推荐:基于 STM32 的闯红灯预警智能交通信号灯装置开发 基于 STM32 的 OLED 数码管双显示交通灯控制系统设计(016104)
  • influxdb-client-go 代码生成机制:基于 OpenAPI 规范的自动化客户端是如何炼成的?
  • RuleSets 规则集全攻略:Blazored.FluentValidation 分组校验进阶指南
  • 5分钟完成鼠标性能测试:MouseTester 快速上手指南
  • 3分钟快速上手:用Ollama运行Huihui-Qwen3.8-27B-abliterated-GGUF无审查模型的免费教程
  • 开源项目UI变更PR为何要求演示视频?从代码到体验的沟通范式升级
  • DoorDash面试攻略:系统设计、行为面试与编码考核解析
  • QueryExcel:三步查完100个Excel文件,定位到具体行列
  • 将Ring-Buffer移植到STM32:嵌入式MCU集成指南与3大避坑要点
  • 数学建模实战指南:从问题定义到模型部署的全流程解析
  • 零代码开发实战:不懂编程,也能快速搭建企业管理系统
  • Luminus-template 自动生成 API 文档:Swagger 集成完整教程
  • 嵌入式开发板选型指南:从需求分析到实战避坑
  • 3 步搭起 24 小时多平台直播自动录制环境
  • DeepSeek Harness:智能体状态管理的核心原理与工程实践
  • SpringBoot简历分析与面试系统设计与实现
  • DLSS Swapper 上手指南:游戏升帧换库一键搞定
  • 从零掌握After Effects UI动效:核心技能、实战案例与高效交付指南
  • 揭秘 MULLS 的 4 个鲁棒性技巧:地面分割、运动补偿、动态物体移除与距离反比采样
  • NATS.Net JetStream入门:5步创建Stream与Consumer实现消息持久化
  • 一个软件免费聚合全网音乐:LX Music桌面版真实使用体验与3分钟上手指南
  • VCTRenderer 动态体素化实战:flag volume 如何实现场景每帧实时更新
  • 免费的抖音无水印视频下载工具:粘贴链接,视频、主页、直播全都能存下
  • Windows 更新反复失败?WUReset 一键重置修复指南
  • PLC直线插补