大模型agent开发之langchain内置的几种agent
人工智能代理(agent)不仅会改变每个人与计算机交互的方式,还会颠覆整个软件行业。不需要任何不同的单独软件,使用日常语言命令设备,代理是人工智能的高级形式,本质上Agents是一个LLM的编排与执行系统。
在langchain中Agents的实现主要分为以下八个步骤,1. 提出需求/问题,2. 问题+Prompt组合, 3. ReAct Loop ,4. 查找Memory,5. 查找可用工具, 6.执行工具并观察结果, 7. 不断重复3-6, 8. 得到最终结果。
langchain内置的agent类型主要分为一下几种。
零样本生成式agent
ZERO_SHOT_REACT_DESCRIPTION是langchain中内置的预定义代理类型,是一种零样本学习类型,在没有任何特定任务训练学习下依赖底层语言模型的通用能力来处理任务。使用ReAct框架,推理(Reasoning):代理会先对问题进行分析和理解,可能会逐步分解任务。行动(Acting):基于推理的结果,选择合适的工具(如搜索、计算器、数据库查询等)并执行具体操作。
零样本增强生成型(对话)
ZERO_SHOT_REACT_DESCRIPTION是 LangChain 中一个基于聊天模式的智能代理类型,专为对话型任务设计。在ZERO_SHOT_REACT_DESCRIPTION基础上,增强了语言模型的对话能力。可以基于用户输入从多种数据源中快速检索并提取信息。
对话增强生成型
CONVERSATION_REACT_DESCRIPTION是langchain中一个基于记忆的智能代理类型,该类型利用momery处理上下文对话,每轮对话都能携带记忆,更好的回答用户问题。
结构化对话生成增强型
CHAT_CONVERSATIONAL_REACT_DESCRIPTION是 LangChain 中一种结合了 ReAct 框架(Reasoning + Acting) 和 多轮对话能力的代理类型,专注于处理复杂的对话任务,并支持在对话过程中调用外部工具解决问题。它的主要特点是能够动态理解用户输入,保持上下文的一致性,适用于需要长期交互、上下文跟踪和灵活工具调用的场景。
代码示例
from langchain_community.vectorstores import Chroma
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain.agents import initialize_agent, AgentType
import os
from langchain.memory import ConversationBufferMemory
# serppai的token
os.environ["SERPAPI_API_KEY"] = ""
class AgentsTemplate:
def __init__(self,**kwargs):
self.prompt = kwargs.get("base_prompt")
self.llm = kwargs.get("llm")
self.tools = load_tools(["serpapi","llm-math"],llm=self.llm)
# 记忆组件
self.memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True,
)
self.agentType = [AgentType.ZERO_SHOT_REACT_DESCRIPTION,
AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION]
#零样本增强式生成ZERO_SHOT_REACT_DESCRIPTION,
#使用chatModel的零样本增强式生成CHAT_ZERO_SHOT_REACT_DESCRIPTION,
def zero_agent(self,question,agentType):
if agentType not in self.agentType:
raise ValueError("无效的 AgentType,请选择有效的类型!")
# 动态构建初始化参数
agent_params = {
"tools": self.tools,
"llm": self.llm,
"agent": agentType,
"verbose": True,
"handle_parsing_errors": True
}
if agentType in [
AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
]:
agent_params["memory"] = self.memory
#初始化代理
agent = initialize_agent(**agent_params)
print("-------------------")
try:
response = agent.run(question)
print(f"运行的代理类型: {agentType}, 提问内容: {question}")
print(f"agent回答: {response}")
#self.memory.save_context(question,response)
except Exception as e:
print(f"代理运行时出错: {e}")
#使用chatModel的零样本增强式生成
浙公网安备 33010602011771号