LLM之LangChain(七)| 使用LangChain,LangSmith实现Prompt工程ToT

news2024/11/19 0:50:53

       如下图所示,LLM仍然是自治代理的backbone,可以通过给LLM增加以下模块来增强LLM功能:

  • Prompter Agent
  • Checker Module
  • Memory module
  • ToT controller

       当解决具体问题时,这些模块与LLM进行多轮对话。这是基于LLM的自治代理的典型情况,其中动态创建链并按顺序执行,同时多次轮询LLM。

       下图是LangSmith[1]的界面,从图中可以看到使用的tokens总数以及两个延迟类别。

       此图显示了Trace部分,其中包含为该代理创建的完整链,以及输入和输出。LangSmith在链的每一步都给出了详细的分解,包括成本(tokens)和延迟。

       会话和状态历史记录(上下文)存储在内存模块中,这使代理可以参考思维过程的先前部分,并可能从历史记忆采取不同的路线。

      为了验证ToT技术的有效性,本文实现了一个基于ToT的代理来解决数独难题。

论文[2]实验结果表明,ToT框架可以显著提高数独解谜的成功率

       论文指出的一个漏洞是LLM是基于前面的序列生成内容,而忽略了向后编辑。然而,当我们人类解决一个问题时,如果派生的步骤不正确,我们很可能会回溯到以前的迭代。这种回溯方法否定了LLM达到不确定或无答案场景的危险。

       其次,为了建立确保正确性,我们人类的一种做法是在解决问题的每一步都进行测试,这确保了最终解决方案的可信度。本文统计了自回归语言模型在基于以前的token生成新token时,不会显式执行逻辑正确性检查,这限制了LLM纠正自身错误的能力。随着模型生成更多的tokens,一个小错误可能会被放大,这通常被称为级联。因此这会导致生成质量下降,并使其难以从错误中恢复。级联很早就被认为是手动创建提示链的一种危险。然而,考虑到自主代理在运行中创建了一系列提示,它仍然容易受到级联的影响。

该策略[2]通过LLM和提示器代理之间的多轮对话来解决问题。

      上图显示了四种方法的成功率:zero-shot(zs)、one-shot(os)、few-shot(fs)和Tree-of-Thought(tot)。

       以下是ToT代理的完整代码,您可以将其复制并粘贴到笔记本中。您需要更新的只是OpenAI API密钥和LangSmith API密钥。

pip install langchainpip install langchain_experimentalpip install -U langsmithpip install openai#######import osfrom uuid import uuid4unique_id = uuid4().hex[0:8]os.environ["LANGCHAIN_TRACING_V2"] = "true"os.environ["LANGCHAIN_PROJECT"] = f"Agent Tot"os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"os.environ["LANGCHAIN_API_KEY"] = "xxxxxxxxxxxxxxxxxxxxxxxx"os.environ['OPENAI_API_KEY'] = str("xxxxxxxxxxxxxxxxxxxxxxxx")#######from langchain.llms import OpenAIllm = OpenAI(temperature=1, max_tokens=512, model="text-davinci-003")#######sudoku_puzzle =   "3,*,*,2|1,*,3,*|*,1,*,3|4,*,*,1"sudoku_solution = "3,4,1,2|1,2,3,4|2,1,4,3|4,3,2,1"problem_description = f"""{sudoku_puzzle}- This is a 4x4 Sudoku puzzle.- The * represents a cell to be filled.- The | character separates rows.- At each step, replace one or more * with digits 1-4.- There must be no duplicate digits in any row, column or 2x2 subgrid.- Keep the known digits from previous valid thoughts in place.- Each thought can be a partial or the final solution.""".strip()print(problem_description)######## The following code implement a simple rule based checker for # a specific 4x4 sudoku puzzle.#######from typing import Tuplefrom langchain_experimental.tot.checker import ToTCheckerfrom langchain_experimental.tot.thought import ThoughtValidityimport reclass MyChecker(ToTChecker):    def evaluate(self, problem_description: str, thoughts: Tuple[str, ...] = ()) -> ThoughtValidity:        last_thought = thoughts[-1]        clean_solution = last_thought.replace(" ", "").replace('"', "")        regex_solution = clean_solution.replace("*", ".").replace("|", "\\|")        if sudoku_solution in clean_solution:            return ThoughtValidity.VALID_FINAL        elif re.search(regex_solution, sudoku_solution):            return ThoughtValidity.VALID_INTERMEDIATE        else:            return ThoughtValidity.INVALID######## Testing the MyChecker class above:#######checker = MyChecker()assert checker.evaluate("", ("3,*,*,2|1,*,3,*|*,1,*,3|4,*,*,1",)) == ThoughtValidity.VALID_INTERMEDIATEassert checker.evaluate("", ("3,4,1,2|1,2,3,4|2,1,4,3|4,3,2,1",)) == ThoughtValidity.VALID_FINALassert checker.evaluate("", ("3,4,1,2|1,2,3,4|2,1,4,3|4,3,*,1",)) == ThoughtValidity.VALID_INTERMEDIATEassert checker.evaluate("", ("3,4,1,2|1,2,3,4|2,1,4,3|4,*,3,1",)) == ThoughtValidity.INVALID######## Initialize and run the ToT chain, # with maximum number of interactions k set to 30 and # the maximum number child thoughts c set to 8.#######from langchain_experimental.tot.base import ToTChaintot_chain = ToTChain(llm=llm, checker=MyChecker(), k=30, c=5, verbose=True, verbose_llm=False)tot_chain.run(problem_description=problem_description)#######

         代理的输出、迭代和回溯可以在输出中看到:

> Entering new ToTChain chain...Starting the ToT solve procedure./usr/local/lib/python3.10/dist-packages/langchain/chains/llm.py:278: UserWarning: The predict_and_parse method is deprecated, instead pass an output parser directly to LLMChain.  warnings.warn(Thought: 3,4,*,2|1,*,3,*|*,1,*,3|4,*,*,1    Thought: 3,4,1,2|1,*,3,*|*,1,*,3|4,*,*,1        Thought: 3,4,1,2|1,2,3,*|*,1,*,3|4,*,*,1            Thought: 3,4,1,2|1,2,3,4|*,1,*,3|4,*,*,1                Thought: 3,4,1,2|1,2,3,*|1,1,*,3|4,*,*,1                Thought: 3,4,1,2|1,2,3,*|*,2,*,3|4,*,*,1                Thought: 3,4,1,2|1,2,3,*|*,1,1,3|4,*,*,1                Thought: 3,4,1,2|1,2,3,*|*,1,*,4|4,*,*,1                Thought: 3,4,1,2|1,2,3,*|*,1,*,1|4,4,*,1            Thought: 3,4,1,2|1,2,3,*|1,1,*,3|4,*,*,1            Thought: 3,4,1,2|1,2,3,*|*,1,2,3|4,*,*,1            Thought: 3,4,1,2|1,2,3,*|*,1,*,3|4,1,*,1            Thought: 3,4,1,2|1,2,3,*|*,1,*,3|4,*,1,1        Thought: 3,4,1,2|1,*,3,4|*,1,*,3|4,*,*,1            Thought: 3,4,1,2|1,2,3,4|*,1,*,3|4,*,*,1                Thought: 3,4,1,2|1,2,3,4|2,1,*,3|4,*,*,1                    Thought: 3,4,1,2|1,2,3,4|2,1,4,3|4,*,*,1                        Thought: 3,4,1,2|1,2,3,4|2,1,4,3|4,1,*,*                        Thought: 3,4,1,2|1,2,3,4|2,1,4,3|4,2,*,*                        Thought: 3,4,1,2|1,2,3,4|2,1,4,3|4,3,*,*                            Thought: 3,4,1,2|1,2,3,4|2,1,4,3|4,3,1,*                            Thought: 3,4,1,2|1,2,3,4|2,1,4,3|4,3,2,*                                Thought: 3,4,1,2|1,2,3,4|2,1,4,3|4,3,2,1> Finished chain.3,4,1,2|1,2,3,4|2,1,4,3|4,3,2,1

        在Colab笔记本中查看的输出如下所示:

参考文献:

[1] https://cobusgreyling.medium.com/langsmith-1dd01049c3fb

[2] https://arxiv.org/pdf/2305.08291.pdf

[3] https://cobusgreyling.medium.com/langchain-langsmith-llm-guided-tree-of-thought-47a2cd5bcfca

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

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

相关文章

AutoSAR(基础入门篇)7.1-汽车电子开发软件DaVinci Developer界面简介

目录 一、Dev界面简介 二、Dev使用流程简介 一、Dev界面简介 经典的是更老的版本,博主这里用的是较新一点的版本,不过大家不必担心版本问题,因为操作几乎都一样。我们先简单浏览一遍这个界面,大致从 上往下看可以分为这么几部分: 1. 导航栏:File那一排 2. 工具栏&…

门诊单据打印用什么软件,线下处方单生成系统教程

门诊单据打印用什么软件,线下处方单生成系统教程 一、前言 以下软件教程以 佳易王诊所电子处方管理系统软件V17.3为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图,电子处方或病历记录开单生成保存后,可…

每日五道java面试题之java基础篇(三)

第一题. switch 是否能作⽤在 byte/long/String 上? Java5 以前 switch(expr)中,expr 只能是 byte、short、char、int。从 Java 5 开始,Java 中引⼊了枚举类型, expr 也可以是 enum 类型。从 Java 7 开始,expr 还可以…

序列流和反序列流

先看看它们在io体系中的位置:--------------------------------------------------------------------------------- 序列化流: 可以将java中的对象写到本地文件中,如这样的数据写到文件后变成这样----->目的就是防止别人看得懂&#xff…

解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题

目录 一 问题描述 二 解决方案 三 方案来源 四 参考资料 & AI工具 一 问题描述 为了方便进行收藏夹同步,开始从Chrome浏览器切换到Edge浏览器。在使用Edge浏览器过程中发现“每次鼠标点击会出现一个黑色边框”(效果如下图所示)&#…

tkinter-TinUI-xml实战(10)展示画廊

tkinter-TinUI-xml实战(10)展示画廊 引言声明文件结构核心代码主界面统一展示控件控件展示界面单一展示已有展示多类展示 最终效果在这里插入图片描述 ![](https://img-blog.csdnimg.cn/direct/286fcaa2fa5648a992a0ac79b4efad82.png) ………… 结语 引言…

【Larry】英语学习笔记语法篇——换一种方式理解词性

目录 一、换一种方式理解词性 1、名词、形容词、副词,这就是一切 2、词性之间的修饰关系 3、介词其实很简单 形容词属性的介词短语 副词属性的介词短语 ①修饰动词 ②修饰形容词 ③修饰其他副词 一、换一种方式理解词性 1、名词、形容词、副词&#xff0c…

服务器内存使用率多少会影响正常访问?

在探讨服务器内存使用率多少会影响正常访问这个问题时,我们首先要明白,服务器的性能和稳定性与内存使用状况息息相关。当服务器的内存使用率过高时,可能会导致系统运行缓慢、程序崩溃或者出现其他一些异常情况,从而影响到正常的网…

Mysql-数据库优化-客户端连接参数

客户端参数 原文地址 # 连接池配置 # 初始化连接数 spring.datasource.druid.initial-size1 # 最小空闲连接数,一般设置和initial-size一致 spring.datasource.druid.min-idle1 # 最大活动连接数,一个数据库能够支撑最大的连接数是多少呢? …

【开源】JAVA+Vue.js实现衣物搭配系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣物收藏模块 三、系统设计3.1 用例设计3.2 E-R图设计3.3 数据库设计3.3.1 衣物档案表3.3.2 衣物搭配表3.3.3 衣物收藏表 四、系统实现4.1 登录页4.2 衣物档案模块4.3 衣物搭配模块4.4…

干掉Xshell,这款开源的终端工具逼格真高!

GitHub 上已经有 53.7k 的 star 了,这说明 Tabby 非常的受欢迎: https://github.com/eugeny/tabby Tabby 是一个高度可定制化的 跨平台的终端工具,支持 Windows、macOS 和 Linux,自带 SFTP 功能,能与 Linux 服务器轻…

《CSS 简易速速上手小册》第4章:视觉美学(2024 最新版)

文章目录 4.1 颜色理论在 CSS 设计中的应用:网页的调色盘4.1.1 基础知识4.1.2 重点案例:创建一个具有情感设计的登录页面4.1.3 拓展案例 1:使用颜色增强信息的可视化表示4.1.4 拓展案例 2:利用颜色创建网站的品牌身份 4.2 字体与文…

VMWare虚拟机安装

VMWare虚拟机安装 0.Linux运行平台介绍1. VMWare 虚拟软件安装检查虚拟网卡是否安装 创建VMWare虚拟机对创建虚拟机的内容进行设置挂在要安装的CentOS的ISO文件 0.Linux运行平台介绍 Linux的运行平台一共有两种,其中包括物理机平台和虚拟机平台,在学习阶段当中建议使用虚拟机 …

用的到的linux-查找find-Day4

前言: 在上一节,我们了解到rm删除命令,一共拥有三种模式,即-i默认只能删除文件且会提示确认,其次是-r 遍历删除,用于删除目录及目录下的文件,同样需确认后才会删除,最后为-f为强制删…

高级FPGA开发之基础协议PCIe(二)

高级FPGA开发之基础协议之PCIe(二) 一、TLP报文类型 在PCIe总线中,存储器读写、I/O读写和配置读写请求TLP主要由以下几类报文组成: 1.1 存储器读请求TLP和读完成TLP 当PCIe主设备(RC或者EP)访问目标设备…

【前端高频面试题--TypeScript篇】

🚀 作者 :“码上有前” 🚀 文章简介 :前端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 高频前端面试题--Vue3.0篇 什么是TypeScript?TypeScript数据类型TypeScript中命名空…

「daily updating」k3s + openfaas serverless bench 踩坑指南持续更新中

OpenFaas从入门到实战 – 踩坑指南 | k3dOpenFaas | deploy your first python function https://blog.alexellis.io/first-faas-python-function/ https://docs.openfaas.com/deployment/kubernetes/ 搭建环境:第一种方法失败,第二种方法…

CSP-202112-2-序列查询新解

CSP-202112-2-序列查询新解 【70分思路】 【暴力枚举】按照题目思路遍历一遍f(x)和g(x)&#xff0c;计算error(A)&#xff0c;时间复杂度为O(N)&#xff0c;时间超限。 #include <iostream> using namespace std; int main() {long long n, N, sum 0;cin >> n …

酷开科技,打造非凡的生活体验

酷开科技&#xff0c;作为一家专注于智能电视操作系统研发及智能电视运营增值服务的高科技企业&#xff0c;始终致力于为消费者提供非凡的生活体验。通过不断创新的技术和产品&#xff0c;酷开科技为消费者们带来了便捷、舒适、个性化的智能生活。 首先&#xff0c;酷开科技在智…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏11(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言选中效果 快捷栏显示对应的手臂工具源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中&#xff0c;我们将探索如何制作…