首页 › AI Agent › Agent核心组件与实战 › 三、实践演示:从零构建智能体

三、实践演示:从零构建智能体

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​

​