3.tree of thought 源码 (Thought 和ToTDFSMemory 类)

本教程将介绍 tree of thought 源码 中的Thought 和ToTDFSMemory 类

定义思维有效性

使用Enum模块来定义思维的有效性。

from enum import Enumclass ThoughtValidity(Enum):"""Enum for the validity of a thought."""VALID_INTERMEDIATE = 0VALID_FINAL = 1INVALID = 2

定义思维节点

使用Pydantic的BaseModel来定义思维节点。

from __future__ import annotations
from typing import Set
from pydantic import BaseModel, Fieldclass Thought(BaseModel):"""A thought in the ToT."""text: strvalidity: ThoughtValiditychildren: Set[Thought] = Field(default_factory=set)def __hash__(self) -> int:return id(self)

测试代码

def test_thought():thought1 = Thought(text="This is a valid thought.", validity=ThoughtValidity.VALID_FINAL)thought2 = Thought(text="This is first subvalid thought.", validity=ThoughtValidity.VALID_INTERMEDIATE)thought3 = Thought(text="This is the second subvalid thought.", validity=ThoughtValidity.VALID_INTERMEDIATE)# 添加子思维thought1.children.add(thought2)thought1.children.add(thought3)# 输出thought1的内容print(thought1.model_dump_json())  # 检查子思维print("Children of thought1:")for child in thought1.children:print(child.model_dump_json())  # 测试哈希print(f"Hash of thought1: {hash(thought1)}")print(f"Hash of thought2: {hash(thought2)}")print(f"Hash of thought3: {hash(thought3)}")test_thought()

输出:

{"text":"This is a valid thought.","validity":1,"children":[{"text":"This is first subvalid thought.","validity":0,"children":[]},{"text":"This is the second subvalid thought.","validity":0,"children":[]}]}
Children of thought1:
{"text":"This is first subvalid thought.","validity":0,"children":[]}
{"text":"This is the second subvalid thought.","validity":0,"children":[]}
Hash of thought1: 2202338415536
Hash of thought2: 2202338415936
Hash of thought2: 2202338423216

在这里插入图片描述

构建ToT DFS记忆结构

定义一个用于深度优先搜索的记忆结构。

from typing import List, Optionalclass ToTDFSMemory:"""Memory for the Tree of Thought (ToT) chain.It is implemented as a stack of thoughts. This allows for a depth first search (DFS) of the ToT."""def __init__(self, stack: Optional[List[Thought]] = None):self.stack: List[Thought] = stack or []def top(self) -> Optional[Thought]:"Get the top of the stack without popping it."return self.stack[-1] if len(self.stack) > 0 else Nonedef pop(self, n: int = 1) -> Optional[Thought]:"Pop the top n elements of the stack and return the last one."if len(self.stack) < n:return Nonefor _ in range(n):node = self.stack.pop()return nodedef top_parent(self) -> Optional[Thought]:"Get the parent of the top of the stack without popping it."return self.stack[-2] if len(self.stack) > 1 else Nonedef store(self, node: Thought) -> None:"Add a node on the top of the stack."if len(self.stack) > 0:self.stack[-1].children.add(node)self.stack.append(node)@propertydef level(self) -> int:"Return the current level of the stack."return len(self.stack)def current_path(self) -> List[Thought]:"Return the thoughts path."return self.stack[:]

测试ToT DFS记忆结构

def test_tot_dfs_memory():# 创建一些思维实例thought1 = Thought(text="Root thought", validity=ThoughtValidity.VALID_FINAL)thought2 = Thought(text="Child thought 1", validity=ThoughtValidity.VALID_INTERMEDIATE)thought3 = Thought(text="Child thought 2", validity=ThoughtValidity.VALID_INTERMEDIATE)thought4 = Thought(text="Grandchild thought", validity=ThoughtValidity.VALID_FINAL)# 初始化 ToTDFSMemorymemory = ToTDFSMemory()# 存储思维memory.store(thought1)print(f"Stored: {thought1.text}, Current level: {memory.level}")memory.store(thought2)print(f"Stored: {thought2.text}, Current level: {memory.level}")memory.store(thought3)print(f"Stored: {thought3.text}, Current level: {memory.level}")# 查看顶部思维top_thought = memory.top()print(f"Top thought: {top_thought.text if top_thought else 'None'}")# 存储一个子思维memory.store(thought4)print(f"Stored: {thought4.text}, Current level: {memory.level}")# 查看当前路径current_path = memory.current_path()print("Current path:")for thought in current_path:print(f"- {thought.text}")# 获取父思维parent_thought = memory.top_parent()print(f"Parent of top thought: {parent_thought.text if parent_thought else 'None'}")# 弹出思维popped_thought = memory.pop()print(f"Popped thought: {popped_thought.text if popped_thought else 'None'}, Current level: {memory.level}")# 再次查看当前路径current_path = memory.current_path()print("Current path after popping:")for thought in current_path:print(f"- {thought.text}")test_tot_dfs_memory()

输出:

Stored: Root thought, Current level: 1
Stored: Child thought 1, Current level: 2
Stored: Child thought 2, Current level: 3
Top thought: Child thought 2
Stored: Grandchild thought, Current level: 4
Current path:
- Root thought
- Child thought 1
- Child thought 2
- Grandchild thought
Parent of top thought: Child thought 2
Popped thought: Grandchild thought, Current level: 3
Current path after popping:
- Root thought
- Child thought 1
- Child thought 2

参考链接:https://github.com/langchain-ai/langchain-experimental/blob/main/libs/experimental/langchain_experimental/tot/thought.py
如果有任何问题,欢迎在评论区提问。

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

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

相关文章

从ES的JVM配置起步思考JVM常见参数优化

目录 一、真实查看参数 &#xff08;一&#xff09;-XX:PrintCommandLineFlags &#xff08;二&#xff09;-XX:PrintFlagsFinal 二、堆空间的配置 &#xff08;一&#xff09;默认配置 &#xff08;二&#xff09;配置Elasticsearch堆内存时&#xff0c;将初始大小设置为…

【C++】list使用详解

本篇介绍一下list链表的使用&#xff0c;后续也是会对list进行模拟实现的。list是链表里面的双向链表。 1.文档介绍 list - C Referencehttps://legacy.cplusplus.com/reference/list/list/ list中的接口比较多&#xff0c;此处类似&#xff0c;只需要掌握如何正确的使用&am…

分布式事务

参考 Seata 详解Mysql分布式事务XA CAP 这个定理的内容是指&#xff1a;在一个分布式系统中、Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性)&#xff0c;三者不可得兼。 一致性&#xff08;C&#xff09; 在分布式系统中的所有数据备份&…

记录elasticsearch-analysis-dynamic-synonym从8.15.0升级到8.16.0所遇到的问题

记录elasticsearch-analysis-dynamic-synonym从8.15.0升级到8.16.0所遇到的问题 一、打包步骤 步骤一、linux系统下执行elasticsearch-module中的build.sh脚本 步骤二、maven环境下elasticsearch-cluster-runner执行maven install命令安装到本地maven仓库。 步骤三、修改版…

【大模型推理加速】KV cache

目录 1. kv cache 原理1.1 Flops 计算公式推导 2. 缺点3. kv cache 优化3.1 L: Layer-Condensed KV Cache , 粒度大&#xff0c;效率高3.1.1 MiniCache3.1.2 PyramidInfer3.1.3 CLA 3.2 H: Retrieval Head,3.2.1 Razor Attention, DuoAttention3.2.2 GQA多个head共享一份KV 3.3…

esp32c3开发板通过micropython的ubluetooth库连蓝牙设备

ESP32-C3开发板是一款高性能、低功耗的微控制器&#xff0c;搭载了Espressif自家的RISC-V处理器。通过MicroPython&#xff0c;一种面向微控制器的精简版Python编程语言&#xff0c;开发者可以轻松地为ESP32-C3编写代码。MicroPython的ubluetooth库使得ESP32-C3能够通过蓝牙与各…

CTF攻防世界小白刷题自学笔记16

1.Broadcast&#xff0c;难度&#xff1a;1&#xff0c;方向&#xff1a;Crypto&#xff08;密码学&#xff09; 题目来源:2019_Redhat 题目描述:粗心的Alice在制作密码的时候&#xff0c;把明文留下来&#xff0c;聪明的你能快速找出来吗&#xff1f; 给一下题目链接&#…

企业供配电及用电一体化微电网能源管理系统

企业能源管理痛点 信息孤岛 1.保护类、监测类、控制类、治理类、重要负荷等子系统多、分散、独立 2.数据异构、融合困难、数据分析困难 3.用户无法通过一套系统完整的了解整个企业的供电、配电、用电情况&#xff1b; 资源浪费 1.服务器资源浪费 2.应用软件浪费 3.数据…

windows实现VNC连接ubuntu22.04服务器

最近弄了一个700块钱的mini主机&#xff0c;刷了ubuntu22.04系统&#xff0c;然后想要在笔记本上通过VNC连接&#xff0c;这样就有了一个linux的开发环境。最后实现的过程为&#xff1a; 安装vnc服务器 安装 VNC 服务器软件&#xff1a; sudo apt update sudo apt install t…

强化学习数学原理学习(四)

前言 今天是时序差分学习 正文 首先,明确一点,时序差分也是无模型的情况下的强化学习方法,TD学习是蒙特卡洛思想和动态编程&#xff08;DP&#xff09;思想的结合。最基础的时序差分学习估计状态值&#xff0c;而后续提出的Sarsa和Q-learning方法则直接对动作值进行估计。 …

【Redis 探秘】Redis 性能优化技巧

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

RTSP播放器EasyPlayer.js播放器在webview环境下,PC和安卓能够正常播放,IOS环境下播放器会黑屏无法播放

流媒体技术分为顺序流式传输和实时流式传输两种。顺序流式传输允许用户在下载的同时观看&#xff0c;而实时流式传输则允许用户实时观看内容。 流媒体播放器负责解码和呈现内容&#xff0c;常见的播放器包括VLC和HTML5播放器等。流媒体技术的应用场景广泛&#xff0c;包括娱乐…

C语言零基础入门

一、输入输出 &#xff08;1&#xff09;scanf scanf 是C语言中的一个标准库函数&#xff0c;用于从标准输入&#xff08;通常是键盘&#xff09;读取数据。scanf 函数定义在 <stdio.h> 头文件中。 #include <stdio.h>int main(void) {//读取整数 int num;print…

经典的网络安全技术

以我的理解&#xff0c;“黑客”大体上应该分为“正”、“邪”两类&#xff0c;正派黑客依靠自己掌握的知识帮助系统管理员找出系统中的漏洞并加以完善&#xff0c;而邪派黑客则是通过各种黑客技能对系统进行攻击、入侵或者做其他一些有害于网络的事情&#xff0c;因为邪派黑客…

D73【 python 接口自动化学习】- python 基础之正则表达式

day73 正则表达式-元字符匹配 学习日期&#xff1a;20241119 学习目标&#xff1a;正则表达式--133 正则表达式-元字符匹配 学习笔记&#xff1a; 元字符匹配 数量匹配 实践操作 总结 字符串的r标记表示&#xff0c;字符串内转移字符无效&#xff0c;作为普通字符使用正则…

实验一 顺序结构程序设计

《大学计算机&#xfe63;C语言版》实验报告 实验名称 实验一 顺序结构程序设计 实验目的 &#xff08;1&#xff09;掌握C语言中常量和变量的概念。 &#xff08;2&#xff09;掌握C语言中常见的数据类型。 &#xff08;3&#xff09;掌握C语言中变量的定义和赋值方法。 …

在Linux上如何利用NTP使客户端和服务端的时间同步

对于服务端 一、先在服务端安装相关配置-----yum install chrony -y-----并启动 二、进入chrony的文件里----在第三行修改为阿里云时间服务地址 三、在服务端重启chrony 四、进行测试------chronyc sources -v 五、进入chrony的文件里添加客户端的ip地址---在第26行&#…

IDEA2023 SpringBoot整合Web开发(二)

一、SpringBoot介绍 由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。SpringBoot提供了一种新的编程范式&#xff0c;可以更加快速便捷…

[C语言]第十三节 指针一基础知识到高级技巧的全景探索

目录 13.1. 内存和地址 13.1.1. 内存和地址 13.2. 指针变量和地址 13.2.1 取地址操作符&#xff08;&&#xff09; 13.1.2 指针变量和解引⽤操作符&#xff08;*&#xff09; 13.1.3 指针变量的⼤⼩ 13.3. 指针变量类型 13.3.1 指针的解引⽤ 13.3.2 指针-整数 13…

hhdb数据库介绍(9-24)

计算节点参数说明 failoverAutoresetslave 参数说明&#xff1a; PropertyValue参数值failoverAutoresetslave是否可见是参数说明故障切换时&#xff0c;是否自动重置主从复制关系默认值falseReload是否生效否 参数设置&#xff1a; <property name"failoverAutor…