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

从零搭建AI Agent实战:2026年手把手教你写第一个智能助手(附完整代码)

本文首发于CSDN付费专栏「AI Agent开发实战」,持续更新中。

引言:为什么2026年是AI Agent的爆发之年?

如果你还在用ChatGPT一问一答的方式工作,那你的效率已经被同行拉开了代差。

2026年,AI Agent(智能代理)正在重塑整个软件行业。与传统的对话式AI不同,AI Agent能够自主规划、调用工具、执行任务链——相当于你拥有了一个7×24小时不知疲倦的数字员工。

本文将从零开始,带你用Python搭建一个完整的AI Agent,它将具备以下能力:

  • 🔍 自主搜索互联网信息
  • 📝 生成结构化分析报告
  • 💻 编写并自动执行代码
  • 📊 数据分析与可视化

完整代码开箱即用,文末附赠项目模板。


一、AI Agent核心概念解析

1.1 什么是AI Agent?

传统AI应用是「输入-输出」的被动模式:用户问一句,AI答一句。而AI Agent是一个自主决策的循环体

用户目标 → Agent规划 → 选择工具 → 执行 → 观察结果 → 继续或结束

这就像一位真正的员工:你只需要告诉它目标,它会自己想办法完成。

1.2 AI Agent的核心架构

一个完整的AI Agent由四大核心组件构成:

graph TD

A[用户指令] --> B[LLM大脑]

B --> C[规划器 Planner]

C --> D[工具集 Tools]

D --> E[记忆系统 Memory]

E --> B

B --> F[输出结果]

style B fill:#4A90D9,color:#fff

style C fill:#7B68EE,color:#fff

style D fill:#FF6B6B,color:#fff

style E fill:#50C878,color:#fff

| 组件 | 核心作用 | 典型实现 |

|------|----------|----------|

|LLM大脑| 理解指令、推理决策 | Claude、GPT-4 |

|规划器| 拆解任务、制定执行计划 | ReAct、Plan-and-Execute |

|工具集| 与外部世界交互 | 搜索引擎、代码执行器、API调用 |

|记忆系统| 存储上下文和历史经验 | 短期会话记忆 + 长期向量数据库 |

1.3 主流框架横向对比

| 框架 | 优点 | 缺点 | 适合场景 |

|------|------|------|----------|

|LangChain| 生态丰富、文档完善 | 抽象层过重、调试困难 | 快速原型验证 |

|CrewAI| 多Agent协作上手简单 | 定制灵活性较差 | 团队角色模拟 |

|AutoGen| 微软背书、多Agent对话能力强 | 学习曲线陡峭 | 复杂工作流编排 |

|纯Python自研| 完全可控、轻量无依赖 | 需自行实现各模块 |生产环境首选|

本文采用纯Python自研方案,原因很直接:核心代码仅约200行、架构完全可控、避免被第三方框架锁定。


二、实战:从零搭建你的第一个AI Agent

2.1 环境准备

pip install anthropic requests beautifulsoup4

只需一个LLM API(本文以Claude为例)和一个支持HTTP请求的Python环境即可。

2.2 核心代码:Agent基类

import json

import re

from anthropic import Anthropic

class AIAgent:

"""轻量级AI Agent框架 - 核心代码仅约200行"""

def __init__(self, model="claude-sonnet-4-20250514"):

self.client = Anthropic()

self.model = model

self.tools = {}

self.memory = [] # 对话记忆

self.max_iterations = 10 # 防止无限循环

def register_tool(self, name, func, description, parameters):

"""注册工具供Agent调用"""

self.tools[name] = {

"function": func,

"definition": {

"name": name,

"description": description,

"input_schema": {

"type": "object",

"properties": parameters,

"required": list(parameters.keys())

}

}

}

def run(self, user_message):

"""执行Agent主循环"""

self.memory.append({"role": "user", "content": user_message})

for i in range(self.max_iterations):

print(f"\n--- Agent迭代 {i+1}/{self.max_iterations} ---")

# 调用LLM

response = self.client.messages.create(

model=self.model,

max_tokens=4096,

system="你是一个智能助手,可以使用工具来完成任务。遇到复杂任务时,先制定计划再执行。",

messages=self.memory,

tools=[t["definition"] for t in self.tools.values()]

)

# 处理响应

stop_reason = response.stop_reason

content = response.content

# 如果LLM要调用工具

if stop_reason == "tool_use":

tool_blocks = [b for b in content if b.type == "tool_use"]

text_blocks = [b for b in content if b.type == "text"]

# 显示Agent的思考过程

for tb in text_blocks:

print(f"🤔 思考: {tb.text}")

# 执行工具

tool_results = []

for tb in tool_blocks:

print(f"🔧 调用工具: {tb.name}({json.dumps(tb.input, ensure_ascii=False)})")

result = self.tools[tb.name]"function"

print(f"✅ 结果: {str(result)[:200]}...")

tool_results.append({

"type": "tool_result",

"tool_use_id": tb.id,

"content": str(result)

})

# 更新记忆

self.memory.append({"role": "assistant", "content": content})

self.memory.append({"role": "user", "content": tool_results})

elif stop_reason == "end_turn":

# Agent完成任务

final_text = "".join(b.text for b in content if b.type == "text")

self.memory.append({"role": "assistant", "content": content})

return final_text

return "⚠️ Agent达到最大迭代次数,任务可能未完成。"

2.3 注册实用工具

import requests

from bs4 import BeautifulSoup

def web_search(query: str) -> str:

"""搜索互联网信息"""

try:

resp = requests.get(

f"https://www.google.com/search?q={query}",

headers={"User-Agent": "Mozilla/5.0"},

timeout=10

)

soup = BeautifulSoup(resp.text, 'html.parser')

results = [h.get_text() for h in soup.select('h3')[:5]]

return json.dumps({"query": query, "results": results}, ensure_ascii=False)

except Exception as e:

return f"搜索失败: {e}"

def calculator(expression: str) -> str:

"""安全计算数学表达式"""

# 仅允许数字和基本运算符

if re.match(r'^[\d\s\+\-\/\.\(\)]+$', expression):

return str(eval(expression))

return "错误:包含不安全的表达式字符"

def code_executor(code: str) -> str:

"""执行Python代码并返回结果"""

import subprocess

result = subprocess.run(

["python", "-c", code],

capture_output=True,

text=True,

timeout=30

)

output = result.stdout if result.returncode == 0 else f"Error: {result.stderr}"

return output[:2000] # 限制输出长度

实例化并注册工具

agent = AIAgent()

agent.register_tool(

"web_search",

web_search,

"搜索互联网获取最新信息",

{"query": {"type": "string", "description": "搜索关键词"}}

)

agent.register_tool(

"calculator",

calculator,

"计算数学表达式",

{"expression": {"type": "string", "description": "数学表达式,如 '2+34'"}}

)

agent.register_tool(

"code_executor",

code_executor,

"执行Python代码",

{"code": {"type": "string", "description": "要执行的Python代码"}}

)

2.4 运行你的Agent

# 示例1:让Agent做市场调研

result = agent.run(

"帮我调研2026年AI Agent开发框架的市场格局,列出主要竞争者及其优劣势"

)

print(result)

示例2:让Agent完成编程任务

result = agent.run(

"写一个Python函数实现快速排序算法,并编写测试用例验证其正确性"

)

print(result)

示例3:让Agent做数据分析

result = agent.run(

"生成一组模拟销售数据,计算月度增长率,并给出趋势分析"

)

print(result)


三、进阶:让Agent真正「智能」起来

3.1 添加长期记忆

class MemorySystem:

"""Agent长期记忆系统"""

def __init__(self, storage_path="agent_memory.json"):

self.path = storage_path

self.memories = self._load()

def _load(self):

try:

with open(self.path, 'r', encoding='utf-8') as f:

return json.load(f)

except Exception:

return []

def save(self, content: str, metadata: dict = None) -> str:

"""保存信息到长期记忆"""

self.memories.append({

"content": content,

"metadata": metadata or {},

"timestamp": __import__('time').time()

})

with open(self.path, 'w', encoding='utf-8') as f:

json.dump(self.memories, f, ensure_ascii=False, indent=2)

return "记忆保存成功"

def search(self, query: str, top_k: int = 3) -> list:

"""简单的关键词搜索(生产环境建议使用向量数据库)"""

return [

m for m in self.memories

if query.lower() in m["content"].lower()

][:top_k]

将记忆系统集成到Agent

memory = MemorySystem()

agent.register_tool(

"save_memory",

memory.save,

"保存重要信息到长期记忆",

{"content": {"type": "string", "description": "要保存的内容"}}

)

agent.register_tool(

"search_memory",

lambda query: str(memory.search(query)),

"搜索长期记忆中的信息",

{"query": {"type": "string", "description": "搜索关键词"}}

)

3.2 添加任务规划能力

PLANNING_PROMPT = """你是一个任务规划专家。请将用户目标拆解为可执行的具体步骤。

请严格输出JSON格式,不要包含其他内容:

{

"goal": "用户目标",

"steps": [

{"id": 1, "action": "具体动作", "tool": "使用的工具", "depends_on": []},

{"id": 2, "action": "具体动作", "tool": "使用的工具", "depends_on": [1]}

]

}

用户目标:{goal}"""

def plan_task(goal: str) -> str:

"""让LLM规划任务步骤"""

response = agent.client.messages.create(

model=agent.model,

max_tokens=2048,

messages=[{

"role": "user",

"content": PLANNING_PROMPT.format(goal=goal)

}]

)

return response.content[0].text

使用示例

plan = plan_task("调研竞品并生成分析报告")

print(plan)

3.3 安全防护机制

class AgentGuard:

"""Agent安全防护层"""

BLOCKED_PATTERNS = [

r"rm\s+-rf",

r"DROP\s+TABLE",

r"__import__",

r"subprocess",

r"os\.system",

r"eval\("

]

@classmethod

def check(cls, action: str) -> bool:

"""检查动作是否安全,返回True表示安全"""

for pattern in cls.BLOCKED_PATTERNS:

if re.search(pattern, action, re.IGNORECASE):

return False

return True

@classmethod

def sanitize(cls, code: str) -> str:

"""清理不安全的代码片段"""

for pattern in cls.BLOCKED_PATTERNS:

code = re.sub(

pattern,

"# [已移除不安全代码]",

code,

flags=re.IGNORECASE

)

return code


四、生产环境部署建议

4.1 性能优化策略

| 优化方向 | 具体方法 | 预期效果 |

|----------|----------|----------|

|降低Token消耗| 精简System Prompt、使用紧凑输出格式 | 成本降低30%-50% |

|并行工具调用| 无依赖关系的工具并发执行 | 响应速度提升2-3倍 |

|响应缓存| 对相似查询缓存LLM输出结果 | 重复请求零成本 |

|流式输出| 使用SSE实现流式返回 | 显著降低用户感知延迟 |

4.2 核心监控指标

import time

from dataclasses import dataclass, field

@dataclass

class AgentMetrics:

"""Agent运行指标追踪"""

total_calls: int = 0

total_tokens: int = 0

total_cost: float = 0.0

total_response_time: float = 0.0

success_count: int = 0

@property

def avg_response_time(self) -> float:

return self.total_response_time / self.total_calls if self.total_calls > 0 else 0.0

@property

def success_rate(self) -> float:

return self.success_count / self.total_calls if self.total_calls > 0 else 0.0

def record(self, tokens: int, cost: float, response_time: float, success: bool):

self.total_calls += 1

self.total_tokens += tokens

self.total_cost += cost

self.total_response_time += response_time

if success:

self.success_count += 1

4.3 成本控制参考

以Claude API为例,AI Agent月度成本估算如下:

| 使用量级别 | 日均调用次数 | 预估月成本 |

|------------|--------------|------------|

| 个人开发者 | ~50次 | ¥50-100 |

| 小团队 | ~500次 | ¥500-1000 |

| 企业级应用 | ~5000次 | ¥5000+ |


五、常见问题与踩坑指南

Q1: Agent陷入无限循环怎么办?

A:设置最大迭代次数(本文默认为10次),超过阈值自动终止。同时优化System Prompt,明确告知Agent"当信息足够时立即给出结论,不要反复调用同一工具"。

Q2: 工具调用失败如何处理?

A:在工具函数内部添加异常捕获(try-except),失败时返回结构化的错误信息而非直接崩溃。Agent会根据返回的错误描述自动调整后续策略。

Q3: 如何有效控制Token消耗?

A:

  • 使用max_tokens严格限制单次输出长度
  • 定期裁剪对话记忆,仅保留最近N轮核心上下文
  • 针对简单任务切换至轻量级模型(如Claude Haiku)

Q4: 多Agent如何高效协作?

A:采用消息传递模式——由一个Planner Agent负责任务分发,多个Worker Agent并行处理子任务,完成后将结果汇总给Planner进行整合。CrewAI和AutoGen等框架已提供开箱即用的多Agent协作方案。


总结

本文从零搭建了一个完整的AI Agent系统,核心要点回顾:

1.Agent = LLM + 工具 + 记忆 + 规划— 四大组件协同工作,缺一不可

2.纯Python实现仅需约200行核心代码— 轻量灵活,无需重型框架

3.生产部署必须关注安全、成本、监控— 缺少这三项切勿上线

4.2026年行业趋势:多Agent协作— 单Agent能力存在天花板,团队协作才是未来方向

🎁 项目模板

完整项目代码(含Docker部署配置、Web管理界面、丰富的示例工具):

  • GitHub仓库:关注本专栏获取后续更新
  • 代码已通过Python 3.10+环境测试,开箱即用

📌本专栏持续更新中,下一期将深入讲解「多Agent协作系统架构设计」,敬请关注。

>

💬 如有疑问欢迎在评论区留言,我会逐一回复。

>

⭐ 觉得本文有帮助的话,点赞+收藏支持一下~

版权声明:本文为CSDN付费专栏内容,未经授权禁止转载。*

http://www.jsqmd.com/news/876715/

相关文章:

  • 别再死记硬背Apriori了!用Python手撸FP-Growth算法,搞定海量数据关联分析
  • G-Helper完整指南:轻量级华硕笔记本控制工具,免费替代Armoury Crate
  • 机器学习在轨道预测中的应用:两阶段模型实现精度与效率的平衡
  • AI专著写作高效指南:精选工具助力,快速产出20万字专著低查重!
  • LinkSwift网盘直链下载助手:9大主流网盘下载加速终极解决方案
  • 实测taotoken聚合api在代码生成场景下的响应延迟与稳定性
  • DS4Windows:让PlayStation手柄在Windows平台重获新生
  • 如何高效提升笔记效率:OneNote Markdown智能编辑工具的完整指南
  • 大家都差多,都是有bug的。
  • 柔性结构场景下的磁流变弹性体隔震系统【附程序】
  • 创业公司如何通过 Taotoken 控制 AI 应用的研发成本
  • 如何用NVIDIA Profile Inspector解锁显卡隐藏性能:新手完整指南
  • Topit:让Mac窗口置顶变得如此简单 - 终极窗口管理指南
  • 终极指南:5分钟免费解锁英雄联盟国服全皮肤 - R3nzSkin完全使用教程
  • Odin Inspector:Unity编辑器效率的底层杠杆与工程实践
  • 如何在Windows资源管理器中一键解锁iPhone照片预览功能?
  • 【前端国际化】国际化测试:确保多语言应用的质量
  • 2026年东方美学别墅木作推荐 隐奢风格优选方案 - 打我的的
  • Burp Suite HTTPS抓包配置与代理信任机制详解
  • Arm DesignStart Tier免费IP核注册全流程指南
  • 思源宋体CN:7种字重免费中文字体,让中文排版告别平庸
  • 如何用Python双引擎架构实现90%成功率的自动抢票系统?
  • Win11安全中心一片空白?别慌,手把手教你修复‘IT管理员已限制访问’问题
  • 7种字重思源宋体CN:完全免费商业字体解决方案
  • 学 Simulink-- 开关磁阻电机(SRM)的转矩分配函数(TSF)控制仿真(带可复制MATLAB脚本(直接运行))
  • 喜马拉雅xm-sign逆向解析:dws.1.6.8.js本地签名生成实战
  • 2026年言笔AI降重:一键操作,高效优化学术写作 - 降AI实验室
  • QMC音频解密终极指南:如何快速无损转换QQ音乐加密文件
  • 7种字重免费商用:思源宋体CN如何解决中文排版三大难题?
  • TranslucentTB终极指南:3分钟让Windows任务栏变透明