从零构建个人AI智能体:2026完整指南
学习如何从零构建自定义AI智能体。完整指南涵盖智能体架构、工具集成、记忆系统和部署。包含LangChain、AutoGPT和自定义实现的代码示例。
学习如何从零构建自定义AI智能体。完整指南涵盖智能体架构、工具集成、记忆系统和部署。包含LangChain、AutoGPT和自定义实现的代码示例。
AI智能体不再是科幻小说——它们是你可以自己构建的实用工具。与简单响应提示的聊天机器人不同,AI智能体可以规划、使用工具、维护记忆并自主执行多步骤任务。本指南将展示如何从零开始构建你自己的智能体。
无论你想要一个智能体来管理邮件、研究主题、自动化工作流程还是协助编程,这个综合教程涵盖了从架构到部署的所有内容。
传统聊天机器人:
AI智能体:
每个AI智能体都有四个基本组件:
ReAct模式在推理和行动之间交替:
```
思考:我需要查找当前天气
行动:search_weather("旧金山")
观察:68°F,晴天
思考:现在我可以回答用户
最终答案:旧金山现在68°F,晴天
```
最适合:通用智能体、研究任务、多步骤工作流
智能体首先创建完整计划,然后执行:
```
计划:
执行:[按顺序运行每个步骤]
```
最适合:有明确目标的复杂任务、报告生成、数据分析
智能体评估自己的输出并迭代:
```
行动:生成代码
批评:第15行有bug
行动:修复bug
批评:现在看起来不错
最终:返回修正后的代码
```
最适合:代码生成、内容创作、质量关键任务
| 模式 | 复杂度 | Token使用 | 可靠性 | 最佳用例 |
|---------|-----------|-------------|-------------|---------------|
| ReAct | 低 | 中等 | 高 | 通用任务、研究 |
| 计划-执行 | 中等 | 高 | 中等 | 多步骤工作流 |
| 反思 | 高 | 非常高 | 非常高 | 质量关键工作 |
| 混合 | 高 | 高 | 高 | 生产系统 |
前提条件:
Python设置:
```bash
python -m venv agent-env
source agent-env/bin/activate # Windows: agent-env\Scripts\activate
pip install langchain langchain-openai langchain-anthropic
pip install chromadb # 用于记忆
pip install duckduckgo-search # 用于网络搜索
pip install python-dotenv
```
Node.js设置:
```bash
npm init -y
npm install langchain @langchain/openai @langchain/anthropic
npm install chromadb # 用于记忆
npm install axios cheerio # 用于网络工具
npm install dotenv
```
环境配置:
```bash
OPENAI_API_KEY=sk-xxx
ANTHROPIC_API_KEY=sk-ant-xxx
OLLAMA_BASE_URL=http://localhost:11434
```
简单ReAct智能体:
```python
from langchain.agents import AgentExecutor, create_react_agent
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
from langchain import hub
import os
from dotenv import load_dotenv
load_dotenv()
llm = ChatOpenAI(
model="gpt-4-turbo-preview",
temperature=0.7,
api_key=os.getenv("OPENAI_API_KEY")
)
def calculator(expression: str) -> str:
"""计算数学表达式"""
try:
return str(eval(expression))
except Exception as e:
return f"错误:{str(e)}"
def web_search(query: str) -> str:
"""搜索网络信息"""
from duckduckgo_search import DDGS
results = DDGS().text(query, max_results=3)
return "\n".join([f"{r['title']}:{r['body']}" for r in results])
tools = [
Tool(
name="计算器",
func=calculator,
description="用于数学计算。输入应该是有效的Python表达式。"
),
Tool(
name="网络搜索",
func=web_search,
description="搜索网络获取当前信息。输入应该是搜索查询。"
)
]
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=5,
handle_parsing_errors=True
)
result = agent_executor.invoke({
"input": "比特币当前价格乘以100是多少?"
})
print(result["output"])
```
对话记忆:
```python
from langchain.memory import ConversationBufferMemory
from langchain.agents import AgentExecutor, create_react_agent
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory,
verbose=True
)
agent_executor.invoke({"input": "我叫Alice"})
agent_executor.invoke({"input": "我叫什么名字?"}) # 返回:Alice
```
使用向量存储的长期记忆:
```python
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.tools import Tool
embeddings = OpenAIEmbeddings()
vectorstore = Chroma(
collection_name="agent_memory",
embedding_function=embeddings,
persist_directory="./agent_db"
)
def remember(text: str) -> str:
"""将信息存储到长期记忆"""
vectorstore.add_texts([text])
return "信息已成功存储"
def recall(query: str) -> str:
"""从长期记忆检索信息"""
docs = vectorstore.similarity_search(query, k=3)
return "\n".join([doc.page_content for doc in docs])
memory_tools = [
Tool(name="记住", func=remember, description="存储信息以供后用"),
Tool(name="回忆", func=recall, description="检索已存储的信息")
]
tools.extend(memory_tools)
```
文件系统工具:
```python
import os
from pathlib import Path
def read_file(filepath: str) -> str:
"""从文件读取内容"""
try:
with open(filepath, 'r') as f:
return f.read()
except Exception as e:
return f"读取文件错误:{str(e)}"
def write_file(filepath: str, content: str) -> str:
"""将内容写入文件"""
try:
Path(filepath).parent.mkdir(parents=True, exist_ok=True)
with open(filepath, 'w') as f:
f.write(content)
return f"成功写入{filepath}"
except Exception as e:
return f"写入文件错误:{str(e)}"
def list_files(directory: str = ".") -> str:
"""列出目录中的文件"""
try:
files = os.listdir(directory)
return "\n".join(files)
except Exception as e:
return f"列出文件错误:{str(e)}"
```
API集成工具:
```python
import requests
def fetch_api(url: str, method: str = "GET", data: dict = None) -> str:
"""向API发起HTTP请求"""
try:
if method == "GET":
response = requests.get(url)
elif method == "POST":
response = requests.post(url, json=data)
return response.text
except Exception as e:
return f"API错误:{str(e)}"
def send_email(to: str, subject: str, body: str) -> str:
"""通过API发送邮件(使用SendGrid示例)"""
# 实现取决于你的邮件服务
return f"邮件已发送至{to}"
```
代码执行沙箱:
```python
import subprocess
import tempfile
def execute_python(code: str) -> str:
"""在安全沙箱中执行Python代码"""
try:
with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
f.write(code)
temp_file = f.name
result = subprocess.run(
['python', temp_file],
capture_output=True,
text=True,
timeout=5
)
os.unlink(temp_file)
return result.stdout if result.returncode == 0 else result.stderr
except Exception as e:
return f"执行错误:{str(e)}"
```
```python
from langchain.experimental import AutoGPT
from langchain.chat_models import ChatOpenAI
from langchain.tools import DuckDuckGoSearchRun
llm = ChatOpenAI(model="gpt-4", temperature=0.7)
search = DuckDuckGoSearchRun()
agent = AutoGPT.from_llm_and_tools(
ai_name="研究智能体",
ai_role="研究助手",
tools=[search],
llm=llm,
memory=vectorstore.as_retriever()
)
agent.run(["研究最新AI发展并创建摘要报告"])
```
```python
class SimpleAgent:
def __init__(self, llm, tools):
self.llm = llm
self.tools = {tool.name: tool for tool in tools}
self.memory = []
def run(self, task: str, max_iterations: int = 5):
self.memory.append(f"任务:{task}")
for i in range(max_iterations):
# 从LLM获取下一步行动
prompt = self._build_prompt()
response = self.llm.predict(prompt)
# 解析行动
action, action_input = self._parse_action(response)
if action == "最终答案":
return action_input
# 执行工具
if action in self.tools:
observation = self.tools[action].func(action_input)
self.memory.append(f"行动:{action}({action_input})")
self.memory.append(f"观察:{observation}")
else:
self.memory.append(f"错误:未知行动{action}")
return "达到最大迭代次数"
def _build_prompt(self):
history = "\n".join(self.memory)
return f"""你是一个AI智能体。使用工具完成任务。
可用工具:
{self._format_tools()}
历史:
{history}
你的下一步行动是什么?格式:行动:[工具名称]
行动输入:[输入]
或:最终答案:[答案]
"""
def _format_tools(self):
return "\n".join([f"- {name}:{tool.description}"
for name, tool in self.tools.items()])
def _parse_action(self, response: str):
# 简单解析逻辑
if "最终答案:" in response:
return "最终答案", response.split("最终答案:")[1].strip()
lines = response.split("\n")
action = lines[0].replace("行动:", "").strip()
action_input = lines[1].replace("行动输入:", "").strip()
return action, action_input
```
作为CLI工具运行:
```python
import sys
from agent import agent_executor
if __name__ == "__main__":
task = " ".join(sys.argv[1:])
result = agent_executor.invoke({"input": task})
print(result["output"])
```
```bash
python agent_cli.py "研究AI新闻并总结"
```
作为后台服务运行:
```python
import schedule
import time
def daily_report():
result = agent_executor.invoke({
"input": "生成每日AI新闻摘要并发送邮件给我"
})
print(result["output"])
schedule.every().day.at("09:00").do(daily_report)
while True:
schedule.run_pending()
time.sleep(60)
```
FastAPI服务器:
```python
from fastapi import FastAPI, BackgroundTasks
from pydantic import BaseModel
app = FastAPI()
class AgentRequest(BaseModel):
task: str
user_id: str
@app.post("/agent/run")
async def run_agent(request: AgentRequest, background_tasks: BackgroundTasks):
# 在后台运行智能体
background_tasks.add_task(execute_agent, request.task, request.user_id)
return {"status": "已启动", "task": request.task}
def execute_agent(task: str, user_id: str):
result = agent_executor.invoke({"input": task})
# 存储结果或发送通知
print(f"用户{user_id}的任务已完成:{result['output']}")
```
Docker容器:
```dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "agent_service.py"]
```
部署到Railway/Render:
```bash
npm install -g @railway/cli
railway login
railway init
railway up
```
1. 简单任务使用更便宜的模型:
```python
from langchain.chat_models import ChatOpenAI
cheap_llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
expensive_llm = ChatOpenAI(model="gpt-4-turbo-preview", temperature=0.7)
def smart_agent(task: str):
# 分类任务复杂度
if is_simple_task(task):
return cheap_llm.predict(task)
else:
return expensive_llm.predict(task)
```
2. 实施缓存:
```python
from functools import lru_cache
import hashlib
@lru_cache(maxsize=1000)
def cached_llm_call(prompt: str):
return llm.predict(prompt)
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
def cached_agent_call(task: str):
cache_key = hashlib.md5(task.encode()).hexdigest()
cached = r.get(cache_key)
if cached:
return cached.decode()
result = agent_executor.invoke({"input": task})
r.setex(cache_key, 3600, result["output"]) # 缓存1小时
return result["output"]
```
3. 隐私/成本使用本地模型:
```python
from langchain.llms import Ollama
local_llm = Ollama(model="llama2", base_url="http://localhost:11434")
def hybrid_agent(task: str):
# 使用本地模型起草(免费)
draft = local_llm.predict(f"起草响应:{task}")
# 使用云模型精炼(付费,但token更少)
refined = llm.predict(f"改进这个响应:{draft}")
return refined
```
| 使用级别 | 模型 | Token/月 | 成本 |
|-------------|-------|--------------|------|
| 轻度(10任务/天) | GPT-3.5 | 300K | $0.60 |
| 中度(50任务/天) | GPT-3.5 | 1.5M | $3.00 |
| 重度(50任务/天) | GPT-4 | 1.5M | $45.00 |
| 混合(50任务/天) | GPT-3.5 + GPT-4 | 1M + 500K | $17.00 |
| 本地(无限) | Llama 2 (Ollama) | 无限 | $0(仅硬件) |
永远不要硬编码密钥:
```python
llm = ChatOpenAI(api_key="sk-xxx")
import os
from dotenv import load_dotenv
load_dotenv()
llm = ChatOpenAI(api_key=os.getenv("OPENAI_API_KEY"))
```
使用密钥轮换:
```python
import os
from datetime import datetime, timedelta
class RotatingAPIKey:
def __init__(self):
self.keys = [
os.getenv("OPENAI_KEY_1"),
os.getenv("OPENAI_KEY_2")
]
self.current_index = 0
self.last_rotation = datetime.now()
def get_key(self):
# 每7天轮换一次
if datetime.now() - self.last_rotation > timedelta(days=7):
self.current_index = (self.current_index + 1) % len(self.keys)
self.last_rotation = datetime.now()
return self.keys[self.current_index]
```
本地优先架构:
```python
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
vectorstore = Chroma(
embedding_function=embeddings,
persist_directory="./local_memory" # 本地存储
)
```
清理输入:
```python
import re
def sanitize_input(text: str) -> str:
# 移除潜在的注入尝试
text = re.sub(r'
text = re.sub(r'javascript:', '', text, flags=re.IGNORECASE)
return text.strip()
def safe_agent_call(user_input: str):
clean_input = sanitize_input(user_input)
return agent_executor.invoke({"input": clean_input})
```
问题:智能体不断重复相同行动
解决方案:添加迭代限制和循环检测
```python
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
max_iterations=5, # 限制迭代
early_stopping_method="generate" # 重复行动时停止
)
```
问题:智能体无法解析工具输出
解决方案:改进工具描述和输出格式
```python
Tool(
name="计算器",
func=calculator,
description="计算数学表达式。输入:'2+2'。输出:'4'。始终返回数字。"
)
```
问题:智能体使用太多token
解决方案:实施token跟踪和限制
```python
from langchain.callbacks import get_openai_callback
with get_openai_callback() as cb:
result = agent_executor.invoke({"input": task})
print(f"使用的Token:{cb.total_tokens}")
print(f"成本:${cb.total_cost:.4f}")
```
你现在有了一个功能完整的AI智能体。以下是扩展方法:
OpenClaw Team专注于AI基础设施和智能体开发。我们帮助个人和企业构建定制AI解决方案。我们的开源项目已帮助数千人部署自己的AI系统。
需要帮助构建智能体?获取免费AI审计讨论你的用例。
---
准备好构建你的智能体了吗?从上面的代码示例开始,或联系我们获取个性化指导。