构建LangChain应用程序的示例代码:46、使用 Meta-Prompt 构建自我改进代理的 LangChain 实现

Meta-Prompt 实现

摘要:

本文介绍了 Noah Goodman 提出的 Meta-Prompt 方法的 LangChain 实现,该方法用于构建能够自我反思和改进的智能代理。

核心思想:

Meta-Prompt 的核心思想是促使代理反思自己的性能,并修改自己的指令。
在这里插入图片描述

原始博客文章描述:

代理是一个简单的循环,开始时没有任何指令,并遵循以下步骤:

  1. 与用户进行对话,用户可能提供请求、指令或反馈。
  2. 在每个对话周期结束时,使用 Meta-Prompt 生成自我批评和新的指令。

该系统唯一的固定指令(我称之为元提示)是管理代理指令修订的元提示。除了每次为自己修改的指令外,智能体在情节之间没有任何记忆。尽管它很简单,但该代理可以随着时间的推移进行学习,并通过将有用的细节纳入其指令来自我改进。

以下是 Meta-Prompt 的具体实现:

我们定义了两条链。一个充当 Assistant ,另一个是批评 Assistant 性能并修改 Assistant 指令的“元链”。

# 导入必要的 LangChain 和 OpenAI 库
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferWindowMemory
from langchain.prompts import PromptTemplate
from langchain_openai import OpenAIdef initialize_chain(instructions, memory=None):if memory is None:memory = ConversationBufferWindowMemory()memory.ai_prefix = "Assistant"template = f"""Instructions: {instructions}{{{memory.memory_key}}}Human: {{human_input}}Assistant:"""prompt = PromptTemplate(input_variables=["history", "human_input"], template=template)chain = LLMChain(llm=OpenAI(temperature=0),prompt=prompt,verbose=True,memory=ConversationBufferWindowMemory(),)return chaindef initialize_meta_chain():meta_template = """Assistant has just had the below interactions with a User. Assistant followed their "Instructions" closely. Your job is to critique the Assistant's performance and then revise the Instructions so that Assistant would quickly and correctly respond in the future.####{chat_history}####Please reflect on these interactions.You should first critique Assistant's performance. What could Assistant have done better? What should the Assistant remember about this user? Are there things this user always wants? Indicate this with "Critique: ...".You should next revise the Instructions so that Assistant would quickly and correctly respond in the future. Assistant's goal is to satisfy the user in as few interactions as possible. Assistant will only see the new Instructions, not the interaction history, so anything important must be summarized in the Instructions. Don't forget any important details in the current Instructions! Indicate the new Instructions by "Instructions: ..."."""meta_prompt = PromptTemplate(input_variables=["chat_history"], template=meta_template)meta_chain = LLMChain(llm=OpenAI(temperature=0),prompt=meta_prompt,verbose=True,)return meta_chaindef get_chat_history(chain_memory):memory_key = chain_memory.memory_keychat_history = chain_memory.load_memory_variables(memory_key)[memory_key]return chat_historydef get_new_instructions(meta_output):delimiter = "Instructions: "new_instructions = meta_output[meta_output.find(delimiter) + len(delimiter) :]return new_instructionsdef main(task, max_iters=3, max_meta_iters=5):failed_phrase = "task failed"success_phrase = "task succeeded"key_phrases = [success_phrase, failed_phrase]instructions = "None"for i in range(max_meta_iters):print(f"[Episode {i+1}/{max_meta_iters}]")chain = initialize_chain(instructions, memory=None)output = chain.predict(human_input=task)for j in range(max_iters):print(f"(Step {j+1}/{max_iters})")print(f"Assistant: {output}")print("Human: ")human_input = input()if any(phrase in human_input.lower() for phrase in key_phrases):breakoutput = chain.predict(human_input=human_input)if success_phrase in human_input.lower():print("You succeeded! Thanks for playing!")returnmeta_chain = initialize_meta_chain()meta_output = meta_chain.predict(chat_history=get_chat_history(chain.memory))print(f"Feedback: {meta_output}")instructions = get_new_instructions(meta_output)print(f"New Instructions: {instructions}")print("\n" + "#" * 80 + "\n")print("You failed! Thanks for playing!")# 指定任务并调用主函数
task = "Provide a systematic argument for why we should always eat pasta with olives."
main(task)

以下是对代码中使用的函数和类进行详细注释:

  • initialize_chain 函数:初始化一个链,可以接收指令和记忆对象作为参数。如果没有提供记忆对象,则创建一个 ConversationBufferWindowMemory 实例,并设置 AI 的前缀为 “Assistant”。

  • initialize_meta_chain 函数:初始化一个元链,用于生成自我批评和新指令。

  • get_chat_history 函数:从链的记忆对象中获取对话历史。

  • get_new_instructions 函数:从元输出中提取新的指令。

  • main 函数:主函数,用于指定任务并与代理进行交互。它定义了任务失败和成功的关键词,并设置了最大迭代次数。

总结

本文详细介绍了 Meta-Prompt 方法在 LangChain 中的实现。Meta-Prompt 是一种自我反思和自我改进的方法,通过在每次交互后生成自我批评和新指令来实现。这种方法使得代理能够在没有外部记忆的情况下,通过不断修改自己的指令来提高性能和满足用户需求。通过定义两个链——一个作为助手,另一个作为元链——以及使用 ConversationBufferWindowMemory 来存储对话历史,代理可以在每次迭代中学习和改进。

扩展知识:

  • LangChain:是一个用于构建和部署机器学习模型的框架,支持多种语言模型和记忆机制。
  • Meta-Prompt:是一种自我反思和自我改进的方法,通过在每次交互后生成自我批评和新指令来实现。
  • ConversationBufferWindowMemory:是一种记忆机制,用于存储对话历史,以便代理能够根据历史进行学习和改进。

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

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

相关文章

上班族要怎么挑选智能猫砂盆?今年最受欢迎的牌子都在这里了!

对于上班族来说,猫砂盆里的猫屎到底该如何是好,放到下班回来再铲,猫砂的臭味早就飘满屋子,想立刻铲掉吧,班不要上啦?可是不铲就会生细菌,谁也不想花个几千块去给猫咪看病吧,谁不希望…

运算逻辑符的短路特性

在开发时遇到了这样一个问题: public boolean isPasswordNullOrEmpty(Context context) {return getPassword(context) ! null && !getPassword(context).isEmpty; } 这个方法想要实现的效果是获取一个password是否为空的状态,但会出现报错&am…

Linux:进程和计划任务管理

目录 一、程序和进程 1.1、程序 1.2、进程 1.3、线程 1.4、协程 二、查看进程相关命令 2.1、ps命令(查看静态的进程统计信息) 第一行为列表标题,其中各字段的含义描述如下 2.2、top命令(查看进程动态信息) 2…

商城积分系统的设计方案(上)-- 需求分析

一、背景 用户在参与公司的促销活动,比如邀请用户下单支付,可以获得虚拟货币。它可以用于解锁学习课程。 商品在定价的时候,需支持虚拟货币,用户在购买该商品的时候,可使用虚拟货币进行支付。 在电商体系中&#xf…

等保2.0自查表,扩展部分

等保2.0自查表,扩展部分,参考标准: GB∕T 22239-2019 《信息安全技术 网络安全等级保护基本要求》 GB∕T 28448-2019 《信息安全技术网络安全等级保护测评要求》 云计算安全 层面 控制点 检查项 三级要求 二级要求 安全物理环境 基础…

android:exported=“false“

书籍: 《第一行代码 Android》第三版 开发环境: Android Studio Jellyfish | 2023.3.1 问题: A launchable activity must be exported as of Android 12, which also makes it available to other apps 新建的activity中的android:exp…

PID算法介绍以及代码实现过程说明

写在正文之前 在上一篇文章就说会在这两天会基于PID写一个文章,这里的原理部分值得大家都看一下,代码部分的实现是基于python的,但是对于使用其他编程语言的朋友,由于我写的很通俗易懂,所以也值得借鉴。 一、PID算法…

最大流的学习代码,匹配问题的学习 使用c++

使用一个例子学习最大流和匹配问题&#xff0c;假如某地有n个出租车司机和m个正在打车的乘客&#xff0c;他们应该如何匹配&#xff1b; #include <iostream> // 用于输入输出 #include <vector> // 用于动态数组 #include <queue> // 用于广度优先…

linux基于wifi,Xshell的远程连接

最近有个比赛&#xff0c;要使用ros小车但是系统是ubuntu20.04无桌面系统刚开始接触linux的我啥都不会&#xff0c;就一个简单的连接wifi都搞了3天才搞通。再此进行一个总结。参考博客原文链接&#xff1a;https://blog.csdn.net/qq_51491920/article/details/126221940 一、什…

短说V4.1.5及PC端V3.1.4正式版发布公告

Hi 大家好&#xff0c; 我是给你们带来惊喜的运营小番茄。 本期更新为短说 4.1.5和PC端3.1.4的正式版。 本次修复上个版本中的问题和功能优化&#xff0c;以及新增了如下功能&#xff1a; PC端支持发布秀米帖&#xff0c;可支持部分秀米格式&#xff1b;后台管理类消息新增…

C#中的容器

1、数组 数组是存储相同类型元素的固定大小的顺序集合 声明数组时&#xff0c;必须指定数组的大小 2.数组的插入和删除数据比较麻烦&#xff0c;但是查询比较快 2、动态数组&#xff08;ArrayList&#xff09; 动态数组&#xff1a;可自动调节数组的大小 可以存储任意类型数…

【秋招刷题打卡】Day03-二分系列之-二分答案

Day03-二分系列之-二分答案 给大家推荐一下咱们的 陪伴打卡小屋 知识星球啦&#xff0c;详细介绍 >笔试刷题陪伴小屋-打卡赢价值丰厚奖励 < ⏰小屋将在每日上午发放打卡题目&#xff0c;包括&#xff1a; 一道该算法的模版题 (主要以力扣&#xff0c;牛客&#xff0c;…

43 mysql insert select 的实现

前言 我们这里 来探讨一下 insert into $fields select $fields from $table; 的相关实现, 然后 大致来看一下 为什么 他能这么快 按照 我的思考, 应该里里面有 批量插入才对, 但是 调试结果 发现令我有一些意外 呵呵 果然 只有调试才是唯一的真理 测试数据表如下 CREATE…

数字社交的领航者:解析Facebook的引领作用

在当今数字化社会中&#xff0c;社交网络已经成为了人们日常生活不可或缺的一部分。而在众多社交平台中&#xff0c;Facebook凭借其巨大的用户基础和创新的技术应用&#xff0c;被公认为数字社交领域的领航者之一。本文将深入解析Facebook在数字社交中的引领作用&#xff0c;探…

一起学Hugging Face Transformers(3) - Hugging Face 加载模型和Tokenizer

文章目录 前言一、加载预训练模型和Tokenizer1. 安装Transformers库2. 加载预训练模型和Tokenizer 二、使用AutoModel和AutoTokenizer1. 使用AutoModel和AutoTokenizer2. 原理1&#xff09; 配置文件 (config.json)2&#xff09; 使用AutoModel3&#xff09; 使用AutoTokenizer…

Vue.js 的 provide 选项来向子组件提供数据

父组件 // Parent.vue <template><div><p>Parent Component</p><p>Count: {{ count }}</p><ChildComponent /></div> </template><script> import ChildComponent from ./ChildComponent.vue;export default {co…

这三款工具很好用,赶快试试

FileZilla FileZilla是一款免费开源的FTP软件&#xff0c;分为客户端版本和服务器版本&#xff0c;具备所有的FTP软件功能。它是一个快速、可信赖的FTP客户端以及服务器端开放源代码程序&#xff0c;具有多种特色和直觉的界面。FileZilla客户端版是一个方便高效的FTP客户端工具…

第一后裔The First Descendant开服时间、配置要求一览

第一后裔是一款采用虚幻5引擎打造的第三人称合作射击动作RPG&#xff0c;玩家将化身为一名继承者&#xff0c;通过各种任务和故事不断成长&#xff0c;为守护人类与对抗侵略者战斗。该作即将上线&#xff0c;为了不让玩家们错过这款精彩的游戏&#xff0c;本文整理了第一后裔上…

卫生间和厨房墙面基层起沙怎么办?

最近有几个工地遇到了一个共同问题&#xff0c;卫生间和厨房墙面起沙。      如果有正在装修的业主&#xff0c;可以看一下你家墙面是否也存在这样的问题。      最简单的检测方法&#xff0c;在工地上找一个坚硬的东西在墙上划&#xff0c;如果墙上的沙粒子一直哗哗的…

测评:【AI办公】版本更迭与AI加持下的最新ONLYOFFICE桌面编辑器8.1

你是否还在为没有一款合适的在线桌面编辑器而苦恼&#xff1f;你是否还在因为办公软件的选择过少而只能使用WPS或者office&#xff1f;随着办公需求的不断变化和发展&#xff0c;办公软件也在不断更新和改进。ONLYOFFICE 作为一款全功能办公软件&#xff0c;一直致力于为用户提…