2025年构建AI代理:从ChatGPT到Multi-Agent系统
发布: (2026年1月12日 GMT+8 16:56)
6 min read
原文: Dev.to
Source: Dev.to
请提供您希望翻译的具体文本内容(文章正文),我将为您翻译成简体中文,并保留原始的格式、Markdown 语法以及技术术语。谢谢!
什么是 AI 代理?
AI 代理是一种能够感知其环境、做出决策并采取行动以实现特定目标的自主系统。与传统软件不同,AI 代理可以从交互中适应和学习。
AI 代理类型
- 简单反射代理 – 对当前状态作出反应。
- 基于模型的代理 – 维护内部状态。
- 基于目标的代理 – 朝特定目标工作。
- 基于效用的代理 – 优化最佳结果。
- 学习型代理 – 随时间提升性能。
构建您的第一个 AI 代理
使用 LangChain
from langchain.agents import create_openai_functions_agent
from langchain.tools import Tool
from langchain_openai import ChatOpenAI
# Define tools
def search_web(query: str) -> str:
"""Search the web for information"""
# Implementation here
return f"Results for: {query}"
def calculate(expression: str) -> str:
"""Calculate mathematical expressions"""
return str(eval(expression))
tools = [
Tool(name="Search", func=search_web, description="Search the web"),
Tool(name="Calculator", func=calculate, description="Calculate math")
]
# Create agent
llm = ChatOpenAI(model="gpt-4", temperature=0)
agent = create_openai_functions_agent(llm, tools)
# Run agent
result = agent.run("What's 15% of 1200?")
print(result)
Source: …
高级:多代理系统
多代理系统涉及多个 AI 代理协同工作,每个代理都有其专门的角色。
AutoGen 框架
import autogen
config_list = [{
"model": "gpt-4",
"api_key": "your-key"
}]
# Define agents
user_proxy = autogen.UserProxyAgent(
name="user",
human_input_mode="TERMINATE",
max_consecutive_auto_reply=10
)
coder = autogen.AssistantAgent(
name="coder",
llm_config={"config_list": config_list},
system_message="You write Python code to solve tasks."
)
reviewer = autogen.AssistantAgent(
name="reviewer",
llm_config={"config_list": config_list},
system_message="You review code for bugs and improvements."
)
# Group chat
groupchat = autogen.GroupChat(
agents=[user_proxy, coder, reviewer],
messages=[],
max_round=12
)
manager = autogen.GroupChatManager(
groupchat=groupchat,
llm_config={"config_list": config_list}
)
# Start conversation
user_proxy.initiate_chat(
manager,
message="Build a web scraper for product prices"
)
代理记忆系统
记忆对于上下文感知的代理至关重要:
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
# Short‑term memory
memory = ConversationBufferMemory()
# Long‑term memory with vector store
vectorstore = FAISS.from_texts(
["User likes React", "User prefers TypeScript"],
OpenAIEmbeddings()
)
# Retrieve relevant memories
relevant = vectorstore.similarity_search("What framework?")
print(relevant)
工具创建用于代理
from langchain.tools import BaseTool
from pydantic import BaseModel, Field
class DatabaseQueryInput(BaseModel):
query: str = Field(description="SQL query to execute")
class DatabaseTool(BaseTool):
name = "database"
description = "Query the database"
args_schema = DatabaseQueryInput
def _run(self, query: str) -> str:
# Execute query safely
# Return results
return f"Query results: {query}"
async def _arun(self, query: str) -> str:
# Async implementation
return self._run(query)
ReACT 模式(推理 + 行动)
from langchain.agents import load_tools, initialize_agent, AgentType
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
result = agent.run(
"What's the population of Tokyo and what's 20% of it?"
)
生产注意事项
限流
from functools import wraps
import time
def rate_limit(calls_per_minute=10):
min_interval = 60.0 / calls_per_minute
last_called = [0.0]
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
elapsed = time.time() - last_called[0]
if elapsed < min_interval:
time.sleep(min_interval - elapsed)
last_called[0] = time.time()
return func(*args, **kwargs)
return wrapper
return decorator
@rate_limit(calls_per_minute=5)
def call_llm(prompt):
return llm.invoke(prompt)
错误处理
from tenacity import retry, stop_after_attempt, wait_exponential
import logging
logger = logging.getLogger(__name__)
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=4, max=10)
)
def resilient_agent_call(agent, input_text):
try:
return agent.run(input_text)
except Exception as e:
logger.error(f"Agent error: {e}")
raise
成本监控
from langchain.callbacks import get_openai_callback
with get_openai_callback() as cb:
result = agent.run("Complex query")
print(f"Total Tokens: {cb.total_tokens}")
print(f"Total Cost: ${cb.total_cost}")
实际案例
客户支持代理
tools = [
search_knowledge_base,
create_ticket,
escalate_to_human,
check_order_status,
]
support_agent = create_agent(
tools=tools,
system_message="You're a helpful customer support agent",
)
代码审查代理
code_reviewer = create_agent(
tools=[analyze_code, suggest_improvements, check_security],
system_message="Review code for bugs, performance, and security",
)
研究助理
research_agent = create_agent(
tools=[search_papers, summarize_content, cite_sources],
system_message="Help with academic research",
)
未来趋势
- Agentic Workflows – 代理链协同工作
- Self‑Healing Systems – 能自我修复的系统
- Hybrid Intelligence – 人类与代理的协同智能
- Specialized Agent Marketplaces – 针对特定任务的专用代理市场
- Edge AI Agents – 本地运行的 AI 代理,保障隐私
最佳实践
- 从简单开始 – 采用单一功能的代理
- 明确边界 – 定义代理可以和不可以做的事情
- 人工监督 – 对关键决策保持人工参与
- 监控性能 – 跟踪成功率和成本
- 版本控制 – 跟踪代理提示和配置
- 广泛测试 – 边缘情况可能导致意外行为
结论
AI 代理正在改变我们构建软件的方式。无论您是在创建一个简单的聊天机器人还是一个复杂的多代理系统,关键是从小做起,并根据真实使用情况进行迭代。
软件开发的未来将越来越多地涉及编排 AI 代理,以自主处理复杂任务。
您正在构建哪些 AI 代理?分享您的经验!
探索在生产系统中集成 AI。关注获取更多前沿技术洞察!