LangChain(5)Conversational Agents

Large Language Models (LLMs) 在语义知识方面表现不错,但也有一些不足,如:不能正确计算数学公式、无法获取最新知识新闻

通过 Agents 可以赋予 LLMs 更多能力,让LLM能够计算、上网查询

agent 简单使用

from langchain import OpenAI
# 语言模型
llm = OpenAI(
openai_api_key="OPENAI_API_KEY",
temperature=0,
model_name="text-davinci-003"
)from langchain.chains import LLMMathChain
from langchain.agents import Tool
# 能计算数学公式的一个chain
llm_math = LLMMathChain(llm=llm)# initialize the math tool
math_tool = Tool(
name='Calculator',
func=llm_math.run,
description='Useful for when you need to answer questions about math.' # 描述工具能做什么
)
# when giving tools to LLM, we must pass as list of tools
tools = [math_tool]# 如果 langchain.agents 中有相关工具,则可以直接使用
#from langchain.agents import load_tools
#tools = load_tools(
#['llm-math'],
#llm=llm
)# 初始化 agent
from langchain.agents import initialize_agent
zero_shot_agent = initialize_agent(agent="zero-shot-react-description", # 无记忆的agenttools=tools, # tools 中只有math_tool,所以只能做计算llm=llm,verbose=True, # 显示执行过程max_iterations=3)
zero_shot_agent("what is (4.5*2.1)^2.2?")

上面的 tools 中只有math_tool,所以 zero_shot_agent 只能做计算,不能回答其它常识问题,可以在 tools 中添加更多工具,使得 zero_shot_agent 拥有更多能力。

# 可以在 tools 中新增聊天工具
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
prompt = PromptTemplate(
input_variables=["query"],
template="{query}"
)
llm_chain = LLMChain(llm=llm, prompt=prompt)# initialize the LLM tool
llm_tool = Tool(
name='Language Model',
func=llm_chain.run,
description='use this tool for general purpose queries and logic'
)
tools.append(llm_tool)
# reinitialize the agent
zero_shot_agent = initialize_agent(
agent="zero-shot-react-description",
tools=tools,
llm=llm,
verbose=True,
max_iterations=3
)

agent 类型

zero-shot-react-description 无缓存的方式,聊天是单次的,无上下文缓存

zero_shot_agent = initialize_agent(
agent="zero-shot-react-description",
tools=tools,
llm=llm,
verbose=True,
max_iterations=3,
)

conversational-react-description 带缓存

from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory(memory_key="chat_history")conversational_agent = initialize_agent(
agent='conversational-react-description',
tools=tools,
llm=llm,
verbose=True,
max_iterations=3,
memory=memory,
)

react-docstore 可以检索知识库,无缓存

from langchain import Wikipedia
from langchain.agents.react.base import DocstoreExplorerdocstore=DocstoreExplorer(Wikipedia())
tools = [Tool(name="Search", # 信息检索func=docstore.search, description='search wikipedia'),Tool(name="Lookup", # 匹配相近结果func=docstore.lookup, description='lookup a term in wikipedia')
]docstore_agent = initialize_agent(tools,llm,agent="react-docstore",verbose=True,max_iterations=3)

self-ask-with-search 将LLM与搜索引擎结合起来

from langchain import SerpAPIWrapper# initialize the search chain
search = SerpAPIWrapper(serpapi_api_key='serp_api_key')# create a search tool
tools = [Tool(name="Intermediate Answer",func=search.run,description='google search')]# initialize the search enabled agent
self_ask_with_search = initialize_agent(tools,llm,agent="self-ask-with-search",verbose=True)

参考:
Superpower LLMs with Conversational Agents

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django入门

前言 早就想入门后端了,自己倒是用过Flask,对于常规网站来说Django更完善一些。稍微学习下,能够做一些简单业务处理就好啦。 跟着官方文档学习的,这里做一下记录。纯纯拿来用,不去研究原理与架构,无脑跟着…

MyBatis-Plus的数据安全保护

文章目录 一、介绍二、生成密钥三、加密四、配置文件内容使用密文五、命令行参数 MyBatis-Plus官网https://baomidou.com/ 一、介绍 对配置文件内容加密,3.3.2开始支持使用AES加密算法实现原理:SafetyEncryptProcessor implements EnvironmentPostProc…

17 | 从后端到前端:微服务后,前端如何设计?

微服务架构通常采用前后端分离的设计方式。作为企业级的中台,在完成单体应用拆分和微服务建设后,前端项目团队会同时面对多个中台微服务项目团队,这时候的前端人员就犹如维修电工一样了。 面对如此多的微服务暴露出来的 API 服务&#xff0c…

记一次从溯源分析到云服务器接管

起因是我这个臭运维的在给客户做常态化的溯源分析,好巧不巧发现了一个IP扔到奇安信威胁情报平台看一下,发现部署了大量的服务,且为阿里云服务器。 看到这里,我大胆的推测,云上的信息中心,客户花点钱&#x…

1. Spring 核心与设计思想

目录 1. Spring 是什么? 1.1 什么是容器? 1.2 什么是 Ioc ? 1.2.1 传统程序开发 1.2.2 解决传统开发的缺陷 1.2.3 控制反转式程序开发 1.2.4 IoC 的实现思想(重点) 1.3 理解 Spring Ioc 1.4 DI 概念说明 1. S…

【产品设计】通用后台管理系统需求及原型设计

后台管理系统,会根据不同公司、不同业务的要求做出改变。 网上很多系统的参考多数为业务中台,过于带有业务色彩。做过三四个后台管理系统,从中总结了一个通用的功能和需求设计模版,供大家参考。本文适用于0-2岁的产品经理做基础功…

JVM中类加载的过程

文章目录 一、类加载是什么二、类加载过程1.加载2.验证3.准备4.解析5.初始化 三、什么时候进行类加载四、双亲委派模型1.三大类加载器2.加载过程 总 一、类加载是什么 把.class文件加载到内存中,得到类对象的过程。 二、类加载过程 1.加载 找到.class文件&#xff…

【问题解决】VSCode 远程安装插件特别慢

【问题描述】 我要配置 VSCode WSL 的开发环境,需要在 WSL 里也装上 C、CMake 系列的插件,如下图的直接下载方式特别慢: 【解决方法】 先去网站下载插件:https://marketplace.visualstudio.com/,后缀名:…

算法训练营第四十一天||● 343. 整数拆分 96.不同的二叉搜索树

● 343. 整数拆分 这道有难度,不看题解肯定 想不到用动态规划,看了题解后能大概明白,但还不是很清晰,不太明白递推公式中强调的与dp[i]还要比较一次,也不明白第一次去最大最的那个比较 需要后面继续看 动规五部曲&a…

无涯教程-Javascript - Switch语句

从JavaScript 1.2开始,您可以使用 switch 语句来处理这种情况,它比重复的 if ... else if 语句更有效。 流程图 以下流程图说明了switch-case语句的工作原理。 switch 语句的目的是给出一个要求值的表达式,并根据表达式的值执行多个不同的语…

酷开科技大屏营销,撬动营销新增量

5G、人工智能、元宇宙等技术的发展促使数字营销的内容、渠道、传播方式发生了一系列变化;存量竞争下,增长成为企业更加迫切、更具挑战的课题,品牌营销活动越来越围绕“生意增长”和“提效转化”的目标展开。 如今的市场环境下,产…

PID算法

PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很常见的控制算法。 需要将一个物理量保持在稳定状态(比如维持平衡,温度、转速的…

C#图片处理

查找图片所在位置 原理:使用OpenCvSharp对比查找小图片在大图片上的位置 private static System.Drawing.Point Find(Mat BackGround, Mat Identify, double threshold 0.8) {using (Mat res new Mat(BackGround.Rows - Identify.Rows 1, BackGround.Cols - Iden…

【Matlab】基于BP神经网络的数据回归预测(Excel可直接替换数据)

【Matlab】基于BP神经网络的数据回归预测(Excel可直接替换数据) 1.模型原理2.文件结构3.Excel数据4.分块代码5.完整代码6.运行结果1.模型原理 BP(Backpropagation)回归模型是一种基于反向传播算法的神经网络模型,用于解决回归问题。它通过对输入和输出之间的非线性关系进…

GStreamer Basic tutorial 学习笔记(七)

多线程处理 目标:GStreamer可以自动处理多线程,但在某些情况下,可能需要手动分离线程。 介绍:GStreamer 是一个多线程框架。这意味着在内部,它根据需要创建和销毁线程,例如将流媒体与应用程序线程分离。此…

MongoDB的分布式ID

MongoDB ObjectID是MongoDB数据库中的一种数据类型,用于表示一个文档(document)在集合(collection)中的唯一标识符。每个ObjectID值是一个12字节的字符串,其中前四个字节表示时间戳,后三个字节表…

win10 开机自动启动pyqt做的exe文件,显示后端请求的信息做提醒

1 py 代码 import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel from PyQt5.QtCore import QTimer import osclass ReminderWindow(QWidget):def __init__(self):super().__init__()self.setWindowTitle(Reminder)self.setGeometry(100, 100, 300, 200)sel…

为什么项目可见性难以实现?该如何提高?

在项目和专业服务管理中,失败有时难以避免。沟通不足和需求定义不明确被认为是造成失败的最大原因,这意味着项目可见性和信息流动至关重要。 什么是项目可见性? 项目可见性是组织项目相关信息的方式,以便所有团队成员、项目经理…

【机器学习】KNN 算法介绍

KNN(K-Nearest Neighbors)算法是一种基本的机器学习算法,用于分类和回归问题。该算法根据样本之间的距离度量,在训练数据集中找到与待分类样本最近邻的K个样本,并基于这K个样本进行分类或回归。 KNN算法的核心思想是“…

spring-cloud-gateway版本和springboot版本不匹配

在搭建gateway服务的时候,启动出现以下问题: Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: org.springframework.cloud.gateway.config.GatewayAutoConfiguration$Netty…