AI Agent开发入门实战 Agent核心概念 AI Agent是能够自主感知环境、做出决策并执行行动的智能体。它结合了LLM的推理能力和工具调用能力。 基础架构 核心组件 感知模块:接收输入和状态 决策大脑:LLM进行推理 工具调用:执行具体操作 记忆系统:存储历史信息 架构示例 代码实现 简单Agent框架 记忆系统 短期记忆 长期记忆 高级特性 多Agent协作 自主规划 实践案例 客服Agent 最佳实践 工具设计 单一职责:每个工具只做一件事 清晰描述:详细说明工具功能 错误处理:返回明确的错误信息 Prompt工程 错误处理 性能优化 批量工具调用 缓存工具结果 限制上下文长度 使用流式输出 常见问题 工具调用失败 原因:工具描述不清晰 解决:优化工具名称和描述 循环推理
AI Agent是能够自主感知环境、做出决策并执行行动的智能体。它结合了LLM的推理能力和工具调用能力。
用户输入 ↓ 感知层(解析意图) ↓ 决策层(LLM推理) ↓ 工具层(调用API) ↓ 执行层(返回结果) ↓ 记忆层(更新上下文)
from langchain.agents import AgentExecutor, create_openai_tools_agent from langchain.tools import Tool from langchain_openai import ChatOpenAI from langchain import hub # 1. 定义工具 def search_database(query: str) -> str: """搜索数据库""" # 实际实现 return f"搜索结果: {query}" def calculator(expression: str) -> str: """计算表达式""" try: result = eval(expression) return f"结果: {result}" except: return "计算错误" tools = [ Tool( name="SearchDB", func=search_database, description="搜索数据库中的信息" ), Tool( name="Calculator", func=calculator, description="执行数学计算" ) ] # 2. 初始化LLM llm = ChatOpenAI(model="gpt-4", temperature=0) # 3. 创建Agent prompt = hub.pull("hwchase17/openai-tools-agent") agent = create_openai_tools_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) # 4. 运行Agent result = agent_executor.invoke({ "input": "查询用户123的订单总额,然后计算10%折扣" })
from langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory( memory_key="chat_history", return_messages=True ) # 使用记忆的Agent agent_executor = AgentExecutor( agent=agent, tools=tools, memory=memory, verbose=True )
from langchain.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings # 向量数据库存储历史对话 vectorstore = FAISS.from_texts( texts=["历史对话1", "历史对话2"], embedding=OpenAIEmbeddings() ) # 检索相关记忆 retriever = vectorstore.as_retriever()
from langchain.agents import initialize_agent, AgentType # 创建不同角色的Agent researcher = initialize_agent( tools=research_tools, llm=llm, agent=AgentType.OPENAI_FUNCTIONS, verbose=True ) writer = initialize_agent( tools=writing_tools, llm=llm, agent=AgentType.OPENAI_FUNCTIONS, verbose=True ) # 协作流程 research_result = researcher.run("研究AI最新进展") final_article = writer.run(f"基于以下研究写文章: {research_result}")
from langchain.experimental import AutoGPT autogpt = AutoGPT( llm=llm, tools=tools, name="自主研究助手", description="能够自主规划和执行研究任务", verbose=True ) result = autogpt.run("分析并总结本周AI论文")
# 工具定义 def check_order_status(order_id: str) -> str: """查询订单状态""" return f"订单{order_id}已发货" def process_refund(order_id: str) -> str: """处理退款""" return f"订单{order_id}退款成功" # 创建Agent customer_service_agent = initialize_agent( tools=[ Tool(name="CheckOrder", func=check_order_status), Tool(name="ProcessRefund", func=process_refund) ], llm=llm, agent=AgentType.OPENAI_FUNCTIONS, verbose=True )
system_prompt = """ 你是一个专业的AI助手。 - 使用工具获取准确信息 - 无法使用工具时诚实告知 - 保持简洁专业的回答 - 复杂任务分解为多个步骤 """
try: result = agent_executor.invoke(user_input) except Exception as e: # 降级处理 return f"抱歉,处理时出错: {str(e)}"
原因:工具描述不清晰
解决:优化工具名称和描述
原因:Agent陷入思考循环
解决:设置最大迭代次数
原因:对话历史过长
解决:定期总结和清理