结合之前发的agent相关理论,这里分享一下agent简单代码实现

这里先复习一下agent理论

一.Agent的概念

1.什么是agent

从langchain方面理解:agent是langchain框架里的重要的构建模式.langchain提供各种组件,agent使用这些组件实现各种任务,agent突出的点是可以智能的使用工具判断任务先执行哪一步,后执行哪一步.传统的链式执行只能按照既定的顺序执行.

从大模型方向理解:agent基于大模型理解和推理能力,让大模型拥有解决复杂问题的规划能力.并调用外部工具来执行各种任务,利用向量数据库保留之前的记忆的智能体.

2.agent主要任务

自主思考,调用工具,逐步完成任务

3.agent组成

4.为什么使用agent

这里要讲一下传统llm的弊端,llm不能调用外部工具实现我们的具体需求,以及llm无法回答实时的问题.

这里我拿买票举个例子:

就比如说,我想要买一张机票,大模型无法直接实现我的这个需求,他只能告诉我怎么做,无法调用外部工具.但是agent可以调用一些买票的软件来实现我的需求.

那么agent如何具体实现我的这个买票的需求?他会拆分买票的步骤,首先,先分析我们得买票需求,买的是哪里的票?什么时候得票?.然后它调用外部买票工具买票.这里就是agent模型规划.

实时性指的是你训练模型的时候是十月份,那你在十二月份问llm实时的问题是问不出来的

二.agent的执行流程

  • 用户输入需求和rag结合,agent把完整的需求传给llm
  • llm处理需求,思考任务执行流程并判断是否需要工具.如果不需要,直接返回结果.如果需要,返回调用工具参数给agent
  • agent根据参数调用工具,并把执行结果返回给llm,然后更新上下文和参数
  • llm根据返回结果判断任务是否完成,.如果没有完成,循环上面的步骤.完成则给用户返回结果

三.langchain如何实现agent

1.这里我先来讲一下langchain和agent的关系

agent是langchain的一个组件.

在这里我简单介绍一下各个组件的组成以及功能

1.models

models有三种,分别是:chat_models,大语言模型,文本嵌入模型

chatmodel:输入时聊天消息,输出也是聊天消息

大语言模型:输入是字符串,输出也是字符串

文本嵌入模型:输入时文本字符,输出的是向量

2.prompt

提示词模版是有用户提问和检索文档组成,一起交给models完成任务

3.memory
存储长短时记忆,让大模型记得历史对话

4.index

把文本转换为模型可以看懂的索引

5.chains
把各个模块串起来

6.agent

让models自己决定模型执行的顺序

2.代理类型(这里我们使用第一种)

  • zero-shot-react-description: 每次推理时不保留之前的行动历史(简单直接)。

  • conversational-react-description: 适用于对话场景,有记忆。

  • openai-tools: 专门为 OpenAI 的 function calling优化

3.工具(tools)

langchain集成的或用户自定义的可调用功能

4.llm

agent的大脑,负责决策

四:代码实现

1.查看langchain的所有可用工具:

import os
                                                            # 加载指定工具  获取所有可用工具名称
from langchain_community.agent_toolkits.load_tools import load_tools,get_all_tool_names
                            # 创建代理        代理类型
from langchain.agents import initialize_agent,AgentType

from langchain_community.chat_models.tongyi import ChatTongyi #聊天大模型作为代理的核心推理模型
from dotenv import load_dotenv

names=get_all_tool_names()
print(names)

这里列举两种常用工具:

2.使用工具实现agent

代码实现

import os
                                                            # 加载指定工具  获取所有可用工具名称
from langchain_community.agent_toolkits.load_tools import load_tools,get_all_tool_names
                            # 创建代理        代理类型
from langchain.agents import initialize_agent,AgentType

from langchain_community.chat_models.tongyi import ChatTongyi #聊天大模型作为代理的核心推理模型
from dotenv import load_dotenv

# 查看langchain支持的所有工具名称
names=get_all_tool_names()
# print(names)

# 使用代理和工具完成具体的任务
load_dotenv()
model=ChatTongyi(model='qwen-max')

# 加载工具
tools = load_tools(tool_names=['llm-math'],llm=model)
# 创建代理(代理=大脑+工具+代理策略)
agent=initialize_agent(tools,model,AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True)

query='请帮我介绍一下故宫'
result = agent(query)
print(result)

执行结果:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐