LangChain 11实现思维树Implementing the Tree of Thoughts in LangChain’s Chain

news/2024/11/7 16:39:41/

思维之树( Tree of Thoughts ToT)是一个算法,它结合了普林斯顿大学和谷歌DeepMind在本文中提出的大型语言模型(LLMs)和启发式搜索。看起来这个算法正在被实现到谷歌正在开发的多模式生成AI Gemini中。

现在,让我们简要地谈谈 ToT(思维树)的思维过程。

在通常的 CoT(思维链)方法中,LLM(语言模型)倾向于在解决问题时线性地进行思考,如果在这个过程中出现错误,它们倾向于沿着错误的标准继续进行。

相比之下,在 ToT(思维树)方法中,LLM 在每个思维阶段都对自己进行评估,并及早停止低效的方法,转而采用替代方法。

在这里插入图片描述

代码实现

在LangChain的Chain中实施此项工作时,我利用了以下视频发布者提供的提示。简单地解释一下这个过程,首先生成广泛的想法,然后评估每个想法,深入探讨,并选择最有成功前景的想法。

PromptTemplate用于定义Tree of Thoughts提示的树形结构,每个步骤都实现了链。

from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAItemplate ="""
Step1 :I have a problem related to {input}. Could you brainstorm three distinct solutions? Please consider a variety of factors such as {perfect_factors}
A:
"""prompt = PromptTemplate(input_variables=["input","perfect_factors"],template = template                      
)chain1 = LLMChain(llm=ChatOpenAI(temperature=0, model="gpt-4"),prompt=prompt,output_key="solutions"
)template ="""
Step 2:For each of the three proposed solutions, evaluate their potential. Consider their pros and cons, initial effort needed, implementation difficulty, potential challenges, and the expected outcomes. Assign a probability of success and a confidence level to each option based on these factors{solutions}A:"""prompt = PromptTemplate(input_variables=["solutions"],template = template                      
)chain2 = LLMChain(llm=ChatOpenAI(temperature=0, model="gpt-4"),prompt=prompt,output_key="review"
)template ="""
Step 3:For each solution, deepen the thought process. Generate potential scenarios, strategies for implementation, any necessary partnerships or resources, and how potential obstacles might be overcome. Also, consider any potential unexpected outcomes and how they might be handled.{review}A:"""prompt = PromptTemplate(input_variables=["review"],template = template                      
)chain3 = LLMChain(llm=ChatOpenAI(temperature=0, model="gpt-4"),prompt=prompt,output_key="deepen_thought_process"
)template ="""
Step 4:Based on the evaluations and scenarios, rank the solutions in order of promise. Provide a justification for each ranking and offer any final thoughts or considerations for each solution
{deepen_thought_process}A:"""prompt = PromptTemplate(input_variables=["deepen_thought_process"],template = template                      
)chain4 = LLMChain(llm=ChatOpenAI(temperature=0, model="gpt-4"),prompt=prompt,output_key="ranked_solutions"
)

我们使用“SequentialChain”连接这四个链条。一个链条的输出成为下一个链条的输入。

from langchain.chains import SequentialChainoverall_chain = SequentialChain(chains=[chain1, chain2, chain3, chain4],input_variables=["input", "perfect_factors"],output_variables=["ranked_solutions"],verbose=True
)print(overall_chain({"input":"human colonization of Mars", "perfect_factors":"The distance between Earth and Mars is very large, making regular resupply difficult"}))

输出

{"input": "human colonization of Mars","perfect_factors": "The distance between Earth and Mars is very large, making regular resupply difficult","ranked_solutions": {"Ranking_1": {"Justification": "Using In-Situ Resource Utilization is the most promising solution due to its potential to provide the necessary resources for a Mars colony and reduce the need for resupply missions from Earth. The medium initial effort, implementation difficulty, and potential challenges are outweighed by the high probability of success and 70% confidence level.","In_Situ_Resource_Utilization_ISRU": {"Pros": "This solution could provide the necessary resources for a Mars colony and reduce the need for resupply missions from Earth.","Cons": "ISRU is technically challenging and would require significant investment in research and development.","Initial_Effort": "Medium. This would require the development of new technology and the establishment of infrastructure on Mars.","Implementation_Difficulty": "Medium. ISRU is a complex task that requires advanced technology.","Potential_Challenges": "Technical difficulties, high costs.","Expected_Outcomes": "If successful, ISRU could provide a steady supply of resources for a Mars colony.","Probability_of_Success": "High. ISRU is already being tested by NASA and other space agencies.","Confidence_Level": "70%"}},"Ranking_2": {"Justification": "Building a self-sustaining colony is a promising solution due to its potential to make the Mars colony self-sufficient. However, the high initial effort, implementation difficulty, and potential challenges make it less promising than the first solution. The medium probability of success and 60% confidence level also contribute to its ranking.","Building_a_Self_Sustaining_Colony": {"Pros": "This solution could make the Mars colony self-sufficient, reducing the need for resupply missions from Earth.","Cons": "Building a self-sustaining colony is a complex task that requires advanced technology and a lot of resources.","Initial_Effort": "High. This would require the development of new technology and the establishment of infrastructure on Mars.","Implementation_Difficulty": "High. Building a self-sustaining colony is a complex task that requires advanced technology.","Potential_Challenges": "Technical difficulties, high costs.","Expected_Outcomes": "If successful, a self-sustaining colony could reduce the need for resupply missions from Earth.","Probability_of_Success": "Medium. While there are significant challenges, there is also a lot of interest in building a self-sustaining colony on Mars.","Confidence_Level": "60%"}},"Ranking_3": {"Justification": "While asteroid mining has the potential to provide a steady supply of resources for a Mars colony, the high initial effort, implementation difficulty, and potential challenges make it a less promising solution compared to others. The medium probability of success and 50% confidence level also contribute to its lower ranking.","Terraforming_Mars": {"Pros": "This solution could make Mars more habitable for humans, reducing the need for life support systems and making the colony more self-sufficient.","Cons": "Terraforming is a long-term process that could take centuries or even millennia. It would also require a massive amount of resources and energy.","Initial_Effort": "Extremely High. Terraforming would require a massive amount of resources and energy.","Implementation_Difficulty": "Extremely High. Terraforming is a long-term process that could take centuries or even millennia.","Potential_Challenges": "Technical difficulties, high costs, time scale.","Expected_Outcomes": "If successful, terraforming could make Mars more habitable for humans.","Probability_of_Success": "Low. Terraforming is a theoretical concept and has never been attempted before.","Confidence_Level": "20%"}}}
}

最后,我认为不仅仅使用提示中的思维树,而且将其引入到代理人的规划过程中,可以提高工具选择和规划的准确性。

参考

https://medium.com/@astropomeai/implementing-the-tree-of-thoughts-in-langchains-chain-f2ebc5864fac


http://www.ppmy.cn/news/1241515.html

相关文章

禁止指定电脑程序运行的2种方法

你可能要问了,为什么要禁止电脑程序运行呢,因为有的公司要净化公司的工作环境,防止某些刺头员工在公司电脑上瞎搞。也有部分家长,是为了防止自己家的孩子利用电脑乱下载东西。 今天就分享2种禁止指定电脑程序运行的方法&#xff1…

数据分片在分布式 SQL 数据库中的工作原理

各种规模的企业都在拥抱面向用户的应用程序的快速现代化,作为其更广泛的数字化转型战略的一部分。此类应用程序所依赖的关系数据库 (RDBMS) 基础设施突然需要支持更大的数据量和事务量。然而,在这种情况下,单体 RDBMS 往往很快就会过载。在 R…

有n件物品(n<=13),每件物品的的花费为c[i],每个背包的容量为w,求最少要几个背包才能装下所有物品

题目 #include<bits/stdc.h> using namespace std; const int maxn 15; int cnt[maxn]; bool ok[1 << maxn];//ok[i]表示以状态i装物品&#xff0c;一个背包能不能装下 int f[1 << maxn];//f[i]表示以状态i&#xff08;二进制数&#xff0c;0表示不装&…

小程序中的大道理--综述

前言 以下将用一个小程序来探讨一些大道理, 这些大道理包括可扩展性, 抽象与封装, 可维护性, 健壮性, 团队合作, 工具的利用, 可测试性, 自顶向下, 分而治之, 分层, 可读性, 模块化, 松耦合, MVC, 领域模型, 甚至对称性, 香农的信息论等等. 为什么不用大程序来说大道理呢? …

C语言进阶之路-运算符小怪篇

目录 一、学习目标 二、运算符详谈 算术运算符 关系运算符 逻辑运算符 位运算符 特殊运算符 条件运算符 sizeof 运算符 打怪实战 三、控制流 二路分支 多路分支 const while与 do…while循环 语法&#xff1a; for循环 break与continue goto语句&#xff08…

开源vs闭源,处在大模型洪流中,向何处去?

文章目录 一、开源和闭源的优劣势比较1.1 开源优势1.2 闭源的优势 二、开源和闭源对大模型技术发展的影响2.1 数据共享2.2 算法创新2.3 业务拓展2.4 安全性和隐私2.5 社会责任和伦理 三、开源与闭源的商业模式比较3.1 盈利模式3.2 市场竞争3.3 用户生态3.4 创新速度 四&#xf…

hdlbits系列verilog解答(exams/m2014_q4i)-45

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路&#xff1a; 二、verilog源码 module top_module (output out);assign out 1b0;endmodule三、仿真结果 转载请注明出处&#xff01;

学习课题:逐步构建开发播放器【QT5 + FFmpeg6 + SDL2】

目录 一、播放器开发(一)&#xff1a;播放器组成大致结构与代码流程设计 二、播放器开发(二)&#xff1a;了解FFmpeg与SDL常用对象和函数 三、播放器开发(三)&#xff1a;FFmpeg与SDL环境配置 四、播放器开发(四)&#xff1a;多线程解复用与解码模块实现 五、播放器开发(五…