大模型从入门到应用——LangChain:代理(Agents)-[计划与执行]

分类目录:《大模型从入门到应用》总目录

LangChain系列文章:

  • 基础知识
  • 快速入门
    • 安装与环境配置
    • 链(Chains)、代理(Agent:)和记忆(Memory)
    • 快速开发聊天模型
  • 模型(Models)
    • 基础知识
    • 大型语言模型(LLMs)
      • 基础知识
      • LLM的异步API、自定义LLM包装器、虚假LLM和人类输入LLM(Human Input LLM)
      • 缓存LLM的调用结果
      • 加载与保存LLM类、流式传输LLM与Chat Model响应和跟踪tokens使用情况
    • 聊天模型(Chat Models)
      • 基础知识
      • 使用少量示例和响应流式传输
    • 文本嵌入模型
      • Aleph Alpha、Amazon Bedrock、Azure OpenAI、Cohere等
      • Embaas、Fake Embeddings、Google Vertex AI PaLM等
  • 提示(Prompts)
    • 基础知识
    • 提示模板
      • 基础知识
      • 连接到特征存储
      • 创建自定义提示模板和含有Few-Shot示例的提示模板
      • 部分填充的提示模板和提示合成
      • 序列化提示信息
    • 示例选择器(Example Selectors)
    • 输出解析器(Output Parsers)
  • 记忆(Memory)
    • 基础知识
    • 记忆的类型
      • 会话缓存记忆、会话缓存窗口记忆和实体记忆
      • 对话知识图谱记忆、对话摘要记忆和会话摘要缓冲记忆
      • 对话令牌缓冲存储器和基于向量存储的记忆
    • 将记忆添加到LangChain组件中
    • 自定义对话记忆与自定义记忆类
    • 聊天消息记录
    • 记忆的存储与应用
  • 索引(Indexes)
    • 基础知识
    • 文档加载器(Document Loaders)
    • 文本分割器(Text Splitters)
    • 向量存储器(Vectorstores)
    • 检索器(Retrievers)
  • 链(Chains)
    • 基础知识
    • 通用功能
      • 自定义Chain和Chain的异步API
      • LLMChain和RouterChain
      • SequentialChain和TransformationChain
      • 链的保存(序列化)与加载(反序列化)
    • 链与索引
      • 文档分析和基于文档的聊天
      • 问答的基础知识
      • 图问答(Graph QA)和带来源的问答(Q&A with Sources)
      • 检索式问答
      • 文本摘要(Summarization)、HyDE和向量数据库的文本生成
  • 代理(Agents)
    • 基础知识
    • 代理类型
    • 自定义代理(Custom Agent)
    • 自定义MRKL代理
    • 带有ChatModel的LLM聊天自定义代理和自定义多操作代理(Custom MultiAction Agent)
    • 工具
      • 基础知识
      • 自定义工具(Custom Tools)
      • 多输入工具和工具输入模式
      • 人工确认工具验证和Tools作为OpenAI函数
    • 工具包(Toolkit)
    • 代理执行器(Agent Executor)
      • 结合使用Agent和VectorStore
      • 使用Agents的异步API和创建ChatGPT克隆
      • 处理解析错误、访问中间步骤和限制最大迭代次数
      • 为代理程序设置超时时间和限制最大迭代次数和为代理程序和其工具添加共享内存
    • 计划与执行
  • 回调函数(Callbacks)

计划与执行代理通过首先规划要做的事情,然后执行子任务来实现目标。这个想法在很大程度上受到了BabyAGI以及《Plan-and-Solve》论文的启发。

  • 规划几乎总是由一个LLM(语言模型)来完成。
  • 执行通常由一个单独的代理(配备工具)来完成。
# 导入模块
from langchain.chat_models import ChatOpenAI
from langchain.experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner
from langchain.llms import OpenAI
from langchain import SerpAPIWrapper
from langchain.agents.tools import Tool
from langchain import LLMMathChain# 工具
search = SerpAPIWrapper()
llm = OpenAI(temperature=0)
llm_math_chain = LLMMathChain.from_llm(llm=llm, verbose=True)
tools = [Tool(name = "Search",func=search.run,description="useful for when you need to answer questions about current events"),Tool(name="Calculator",func=llm_math_chain.run,description="useful for when you need to answer questions about math"),
]# 规划器(Planner)、执行器(Executor)和代理(Agent)
model = ChatOpenAI(temperature=0)
planner = load_chat_planner(model)
executor = load_agent_executor(model, tools, verbose=True)
agent = PlanAndExecute(planner=planner, executor=executor, verbose=True)# 执行示例
agent.run("Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?")
Entering new PlanAndExecute chain...
steps=[Step(value="Search for Leo DiCaprio's girlfriend on the internet."), Step(value='Find her current age.'), Step(value='Raise her current age to the 0.43 power using a calculator or programming language.'), Step(value='Output the result.'), Step(value="Given the above steps taken, respond to the user's original question.\n\n")]

日志输出:

日志输出:
Entering new AgentExecutor chain...
Action:```{"action": "Search","action_input": "Who is Leo DiCaprio's girlfriend?"
}```Observation: DiCaprio broke up with girlfriend Camila Morrone, 25, in the summer of 2022, after dating for four years. He's since been linked to another famous supermodel – Gigi Hadid. The power couple were first supposedly an item in September after being spotted getting cozy during a party at New York Fashion Week.
Thought:Based on the previous observation, I can provide the answer to the current objective. 
Action:
```{"action": "Final Answer","action_input": "Leo DiCaprio is currently linked to Gigi Hadid."
}```Finished chain.
*****Step: Search for Leo DiCaprio's girlfriend on the internet.Response: Leo DiCaprio is currently linked to Gigi Hadid.Entering new AgentExecutor chain...
Action:
```{"action": "Search","action_input": "What is Gigi Hadid's current age?"
}```Observation: 28 years
Thought:Previous steps: steps=[(Step(value="Search for Leo DiCaprio's girlfriend on the internet."), StepResponse(response='Leo DiCaprio is currently linked to Gigi Hadid.'))]Current objective: value='Find her current age.'Action:
```{"action": "Search","action_input": "What is Gigi Hadid's current age?"
}```Observation: 28 years
Thought:Previous steps: steps=[(Step(value="Search for Leo DiCaprio's girlfriend on the internet."), StepResponse(response='Leo DiCaprio is currently linked to Gigi Hadid.')), (Step(value='Find her current age.'), StepResponse(response='28 years'))]Current objective: NoneAction:
```{"action": "Final Answer","action_input": "Gigi Hadid's current age is 28 years."
}```Finished chain.
*****Step: Find her current age.Response: Gigi Hadid's current age is 28 years.Entering new AgentExecutor chain...
Action:
```{"action": "Calculator","action_input": "28 ** 0.43"
}```Entering new LLMMathChain chain...
28 ** 0.43
```text28 ** 0.43```
...numexpr.evaluate("28 ** 0.43")...Answer: 4.1906168361987195
Finished chain.Observation: Answer: 4.1906168361987195
Thought:The next step is to provide the answer to the user's question.Action:
```{"action": "Final Answer","action_input": "Gigi Hadid's current age raised to the 0.43 power is approximately 4.19."
}```Finished chain.
*****Step: Raise her current age to the 0.43 power using a calculator or programming language.Response: Gigi Hadid's current age raised to the 0.43 power is approximately 4.19.Entering new AgentExecutor chain...
Action:
```{"action": "Final Answer","action_input": "The result is approximately 4.19."
}```Finished chain.
*****Step: Output the result.Response: The result is approximately 4.19.Entering new AgentExecutor chain...
Action:
```{"action": "Final Answer","action_input": "Gigi Hadid's current age raised to the 0.43 power is approximately 4.19."
}```Finished chain.
*****Step: Given the above steps taken, respond to the user's original question.Response: Gigi Hadid's current age raised to the 0.43 power is approximately 4.19.
Finished chain.

输出:

"Gigi Hadid's current age raised to the 0.43 power is approximately 4.19."

参考文献:
[1] LangChain官方网站:https://www.langchain.com/
[2] LangChain 🦜️🔗 中文网,跟着LangChain一起学LLM/GPT开发:https://www.langchain.com.cn/
[3] LangChain中文网 - LangChain 是一个用于开发由语言模型驱动的应用程序的框架:http://www.cnlangchain.com/

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

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

相关文章

javax.validation.constraints校验

这个必须配合Validated 使用 三者都得不为null (没有参数传过来即为null ) notNull 可以为空白或空格(长度不限) NotEmpty 长度要大于0 (可以为空格,因为空格也有长度) NotBlank 只能用在 string ,并且去掉空格之后要大于0

软件测试商城项目优惠券超发问题该怎么测试?

【2023性能测试完整版】这可能是B站讲得最好的软件测试课程(Jmeter 接口测试实战 Loadrunner Tomcat综合教程)软件测试面试、自动化测试。 在拼夕夕面试中,面试官问了一连串经典的问题:“优惠券库存是怎么扣减的?开发为…

k8s-2 集群升级

首先导入镜像到本地 然后上传镜像到仓库 在所有集群节点 部署cri-docker k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker 配置cri-docker 升级master 节点 升级kubeadm 执行升级计划 修改节点套接字 腾空节点 升级kubelet 配置k…

通过conda创建纯净Python环境

参考conda create 怎么创建纯净的 Python3.6 环境? 创建一个干净的python3.10的环境: 当前目录下创建一个environment.txt文件,写入: EXPLICIT https://repo.anaconda.com/pkgs/main/linux-64/python-3.10.13-h955ad1f_0.tar.bz…

Spring相关

spring工作原理简单介绍循环依赖问题spring/spring boot启动加载过程 ?springboot是怎么运行起来的 使用springboot的好处是什么?描述下spring的ioc和aopspring task是怎么实现的?spring事务你是怎么用的?加了@Transcational注解spring都做了哪些工作?怎么知道事务执行成功…

uniapp瀑布流布局写法

首先我们要清楚瀑布流是什么? 瀑布流布局(Waterfall Flow Layout),也称为瀑布流式布局,是一种常见的网页或移动应用布局方式,特点是元素以不规则的方式排列,就像瀑布中的流水一样,每…

github 网页显示不全?

问题 解决 1、检查网页,打开 network,重新刷新 github 网页 2、查看无法加载的资源(如 css 文件) 3、查看域名地址 https://tool.chinaz.com/dns/,github.githubassets.com(检查网页元素,点击无…

【从0学习Solidity】 6. 引用类型, array, struct

【从0学习Solidity】 6. 引用类型, array, struct 博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页&…

一百八十二、大数据离线数仓——离线数仓从Kafka采集、最终把结果数据同步到ClickHouse的完整数仓流程(待续)

一、目的 经过6个月的奋斗,项目的离线数仓部分终于可以上线了,因此整理一下离线数仓的整个流程,既是大家提供一个案例经验,也是对自己近半年的工作进行一个总结。 二、项目背景 项目行业属于交通行业,因此数据具有很…

《信息系统项目管理师教程(第4版)》第1章至第5章 信息化发展、信息技术发展、信息系统治理、信息系统管理、信息系统工程 常见考点、知识点、思维导图、xmind

第一章至第五章多以选择题形式考察,分值在20分左右。已将考点、知识点整理成思维导图,可免费下载。以下是思维导图的部分截图: 第一章 信息化发展 第二章 信息技术发展 第三章 信息系统治理 第四章 信息系统管理 第五章 信息系统工程

【100天精通Python】Day67:Python可视化_Matplotlib 绘动画,2D、3D 动画 示例+代码

1 绘制2D动画(animation) Matplotlib是一个Python绘图库,它提供了丰富的绘图功能,包括绘制动画。要绘制动画,Matplotlib提供了FuncAnimation类,允许您创建基于函数的动画。下面是一个详细的Matplotlib动画示…

调用GPT接口使用3.5模型报错:Unrecognized request argument supplied: messages

报错信息: 话不多说,今天我请求chatgpt接口返回这样的信息: {"error": {"message": "Unrecognized request argument supplied: messages","type": "invalid_request_error","para…

SpringCloud Gateway--网关服务基本介绍和基本原理

😀前言 本篇博文是关于SpringCloud Gateway的基本介绍,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力…

Postman应用——测试脚本Test Script

文章目录 Test Script脚本CollectionFolderRequest 解析响应体断言测试 测试脚本可以在Collection、Folder和Request的Pre-request script 和 Test script中编写,测试脚本可以检测请求响应的各个方面,包括正文、状态代码、头、cookie、响应时间等&#x…

点云从入门到精通技术详解100篇-定子装配过程中基于深度学习的易变形材料的点云分割(下)

目录 4.3.2 校正网络 4.3.3 浅层特征提取网络 4.3.4 空间边界 Transformer 深层特征提取网络 4.3.5 损失函数

【Java】Pattern 与 Matcher 类的常见应用

在 Java 编程中,我们经常需要处理字符串的匹配和替换操作。为了便捷地实现这些功能,Java 提供了 Pattern 类和 Matcher 类。Pattern 类用于定义正则表达式模式,而 Matcher 类用于在给定的输入字符串中进行匹配操作。 本文将介绍 Pattern 类和…

Vue脚手架一站式搭建项目

一、什么是vue-cli 1.1如果你只是简单写几个Vue的Demo程序,那么你不需要VueCLI脚手架。 1.2.如果你在开发大型项目,那么你需要,并且必然需要使用VueCLI。 1.2.1使用Vue.js开发大型应用时,我们需要考虑代码目录结构、项目结构和…

安全基础 --- nodejs沙箱逃逸

nodejs沙箱逃逸 沙箱绕过原理:沙箱内部找到一个沙箱外部的对象,借助这个对象内的属性即可获得沙箱外的函数,进而绕过沙箱 前提:使用vm模块,实现沙箱逃逸环境。(vm模式是nodejs中内置的模块,是no…

凹凸贴图和法线贴图的区别

1、什么是凹凸贴图 凹凸贴图(bump mapping)是一种计算机图形学中的渲染技术,用于在给定的表面上模拟微小的凹凸纹理。通过在表面法线方向上微调每个像素的光照值,可以给平滑的表面增加视觉上的凹凸感。 在凹凸贴图中,每…

DockerKubernetes ❀ Service下Port端口区分

文章目录 概述案例 概述 在Kubernetes中,Service(svc)是一种抽象机制,用于将一组 Pod 暴露给其他应用程序或服务。Service 可以有三种类型的端口: nodePort:这是 Service 在节点上公开的端口。可以使用此…