三、实践演示:从零构建智能体
3.1 基础示例:简单的ReAct Agent
让我们从最简单的ReAct Agent开始,理解Agent的基本工作流程。



3.2 进阶示例:基于LangChain的Agent
接下来,我们使用LangChain框架构建一个更强大的Agent。
代码块
Python
"""
基于LangChain的Agent实现
使用LangChain提供的Agent框架和工具
"""
from typing import List, Optional
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain.tools import Tool
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.memory import ConversationBufferMemory
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_community.utilities import WikipediaAPIWrapper
import os
class LangChainAgent:
"""
基于LangChain的智能Agent
具备搜索、计算、记忆等能力
"""
def __init__(self, api_key: str, model_name: str = "gpt-3.5-turbo"):
"""
初始化Agent
Args:
api_key: OpenAI API密钥
model_name: 使用的模型名称
"""
# 设置API密钥
os.environ["OPENAI_API_KEY"] = api_key
# 初始化模型
self.llm = ChatOpenAI(
model=model_name,
temperature=0.7
)
# 初始化记忆
self.memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# 创建工具
self.tools = self._create_tools()
# 创建Agent
self.agent = self._create_agent()
def _create_tools(self) -> List[Tool]:
"""创建工具列表"""
# 1. 搜索工具
search = DuckDuckGoSearchRun()
search_tool = Tool(
name="search",
description="搜索互联网上的实时信息,输入搜索关键词",
func=search.run
)
# 2. 维基百科工具
wikipedia = WikipediaAPIWrapper()
wiki_tool = Tool(
name="wikipedia",
description="查询维基百科上的知识,输入搜索词",
func=wikipedia.run
)
# 3. 计算器工具
def calculator(expression: str) -> str:
"""安全计算器"""
allowed_chars = set("0123456789+-*/().% ")
if not all(c in allowed_chars for c in expression):
return "错误:表达式包含不允许的字符"
try:
result = eval(expression)
return f"计算结果: {result}"
except Exception as e:
return f"计算错误: {str(e)}"
calc_tool = Tool(
name="calculator",
description="执行数学计算,输入数学表达式如 '2+2' 或 '100*5'",
func=calculator
)
return [search_tool, wiki_tool, calc_tool]
def _create_agent(self):
"""创建Agent实例"""
# 定义提示模板
prompt = ChatPromptTemplate.from_messages([
("system", """你是一个智能助手,能够使用各种工具来完成任务。
请根据用户的问题选择合适的工具:
- 需要实时信息时,使用search工具
- 需要百科知识时,使用wikipedia工具
- 需要数学计算时,使用calculator工具
请仔细分析问题,选择最合适的工具。"""),
MessagesPlaceholder(variable_name="chat_history"),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
])
# 创建Agent
agent = create_openai_tools_agent(
llm=self.llm,
tools=self.tools,
prompt=prompt
)
# 创建Agent执行器
agent_executor = AgentExecutor(
agent=agent,
tools=self.tools,
memory=self.memory,
verbose=True, # 显示详细过程
handle_parsing_errors=True, # 处理解析错误
max_iterations=5 # 最大迭代次数
)
return agent_executor
def run(self, question: str) -> str:
"""
运行Agent回答问题
Args:
question: 用户问题
Returns:
Agent的回答
"""
try:
result = self.agent.invoke({"input": question})
return result["output"]
except Exception as e:
return f"执行出错: {str(e)}"
def clear_memory(self):
"""清空对话记忆"""
self.memory.clear()
# ========== 演示使用 ==========
def demo_langchain_agent():
"""演示LangChain Agent的使用"""
# 注意:实际使用时需要设置真实的API密钥
print("LangChain Agent 演示")
print("="*50)
# 模拟演示(不实际调用API)
print("""
Agent配置:
- 模型: GPT-3.5-Turbo
- 工具: 搜索、维基百科、计算器
- 记忆: 会话缓冲记忆
示例交互流程:
用户: 2024年世界杯在哪里举办?
Agent: [调用search工具] -> 返回举办地点信息
用户: 算一下25*4+100
Agent: [调用calculator工具] -> 返回计算结果200
用户: 爱因斯坦是谁?
Agent: [调用wikipedia工具] -> 返回爱因斯坦的百科信息
用户: 刚才我问了什么问题?
Agent: [使用记忆] -> 回忆之前的对话内容
""")
# 实际使用示例代码
example_code = '''
# 实际使用代码
agent = LangChainAgent(
api_key="your-api-key",
model_name="gpt-3.5-turbo"
)
# 提问
response = agent.run("2024年最新的AI发展趋势是什么?")
print(response)
# 继续对话(会记住上下文)
response = agent.run("能详细解释一下第一个趋势吗?")
print(response)
'''
print("\n实际使用代码:")
print(example_code)
if __name__ == "__main__":
demo_langchain_agent()
3.3 实战项目:构建一个自主任务执行Agent
最后,让我们构建一个完整的自主任务执行Agent,它能够处理复杂的多步骤任务。
代码块
Python
"""
自主任务执行Agent
能够分解复杂任务,自主规划执行步骤
"""
from typing import List, Dict, Any, Optional, Callable
from dataclasses import dataclass, field
from enum import Enum
import json
import time
from datetime import datetime