LangChain实战技巧之六:一起玩转config(上篇)——ConfigurableField
简介
Config 包含两大类内容,
- ConfigurableField 可配置的字段
-
configurable_alternatives 可配置的替代方案
分别使用两篇文章来给大家介绍,本篇先介绍ConfigurableField
常规介绍
一些资料会这样介绍
model_spec = model.configurable_fields(model_name=ConfigurableField(id="model_name",description="指定一个你想要使用的model"))
model_spec.invoke(input="你好啊,我是你的好朋友 —— Song榆钱儿", config={"configurable": {"model_name": "qwen-plus"}})
输出结果
content='你好,Song榆钱儿!很高兴和你成为好朋友。有什么我可以帮助你的吗?' response_metadata={'model_name': 'qwen-plus', 'finish_reason': 'stop', 'request_id': '57cfe500-0520-9ac6-8c5c-50c077539cbc', 'token_usage': {'input_tokens': 21, 'output_tokens': 19, 'total_tokens': 40}} id='run-9fc162a7-4089-4f81-a792-2c17206ef9b0-0'
然后告诉你,可以配置一个model_name
作为config参数,在invoke时可以把具体的model_name传递进来,例如:qwen-plus
进阶用法
通常一些资料没告诉你的是,可以有哪些可配置的Field 这里我给大家介绍...授之以渔
model.__fields__.keys()
输出结果
dict_keys(['name', 'cache', 'verbose', 'callbacks', 'tags', 'metadata', 'custom_get_token_ids', 'callback_manager', 'client', 'model_name', 'model_kwargs', 'top_p', 'dashscope_api_key', 'streaming', 'max_retries'])
想用哪个用哪个:)
当然,可以直接用__fields__,这样就把整个dict(每个Field和含义内容都打印出来)
那这个配置除了参数化
,还有何用处。。。
应用场景
-
prompt场景
我们看下prompt,提示词config能做些什么 以messages为例,它可以帮助组合成新的提示词 代码如下:
# 先准备两个
prompt_add_1 = ChatPromptTemplate.from_messages([("human", "你好"),("ai", "你好,有什么可以帮助你的吗?")])prompt_add_2 = ChatPromptTemplate.from_messages([("human", "1+1等于几?"),("ai", "1+1的计算结果等于2")])
# 接下来,我们看看怎么用它们
prompt_spec = prompt.configurable_fields(messages=ConfigurableField(id="messages",description="消息列表"))# 见证奇迹的时刻
prompt_spec.invoke({}, config={"configurable": {"messages": [prompt_add_1, prompt_add_2]}})
输出结果
messages=[HumanMessage(content='你好'), AIMessage(content='你好,有什么可以帮助你的吗?'), HumanMessage(content='1+1等于几?'), AIMessage(content='1+1的计算结果等于2')]
细心的小伙伴会发现,上述的方式与这种方式 一毛一样
# 换种方式组合,只不过不用config
prompt = ChatPromptTemplate.from_messages([prompt_add_1, prompt_add_2])
prompt.invoke({})
-
chain场景
看看chain有哪些可config的field
chain.__fields__.keys()
输出
dict_keys(['name', 'first', 'middle', 'last'])
"name"和First"都很简单,下面分别以“middle”、“last”为例
# 定义一个可config的model
model_spec = model.configurable_fields(model_name=ConfigurableField(id="model_name",description="指定一个你想要使用的model"))# 一会儿要用到的函数
def change_me(promptvalue):return promptvalue.to_string().replace("Song榆钱儿", "Songjg")# 一个简单的chain
chain = prompt | model_spec# 将chain做成可config的...
chain = chain.configurable_fields(middle=ConfigurableField(id="process", description="这是啥?"))# 来吧,看实验
chain.invoke(input="你好啊,我是你的好朋友 —— Song榆钱儿", config={"configurable": {"process": [RunnableLambda(change_me)]}})# 不仅有middle,还有last
chain = chain.configurable_fields(middle=ConfigurableField(id="deal", description="这是啥?"),
last=ConfigurableField(id="model_spec", description="这是啥?"))chain.invoke(input="你好啊,我是你的好朋友 —— Song榆钱儿", config={"configurable": {"deal": [RunnableLambda(changeme)],
"model_name": "qwen-plus"}}))
输出结果
content='你好,Songjg!很高兴再次与你交流。有什么我可以帮助你的吗?' response_metadata={'model_name': 'qwen-turbo', 'finish_reason': 'stop', 'request_id': 'dc0bca5d-e0ce-9fc9-b5e5-c76987f09390', 'token_usage': {'input_tokens': 23, 'output_tokens': 18, 'total_tokens': 41}} id='run-a5a4f67f-7a9c-440b-b969-0ac1ffe8b812-0'
Human: 你好啊,我是你的好朋友 —— Song榆钱儿
content='你好,Songjg!很高兴再次见到你。有什么我可以帮助你的吗?' response_metadata={'model_name': 'qwen-plus', 'finish_reason': 'stop', 'request_id': 'c3ff953d-a72f-9de9-be74-7150a1f3dce3', 'token_usage': {'input_tokens': 23, 'output_tokens': 17, 'total_tokens': 40}} id='run-055dcf5b-433f-486a-9beb-5f3d3947b098-0'
-
Agent场景
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True,callbacks=None, callback_manager=None, return_intermediate_steps=True)agent_executor.__fields__.keys()
看看有什么
dict_keys(['name', 'memory', 'callbacks', 'verbose', 'tags', 'metadata', 'callback_manager', 'agent', 'tools', 'return_intermediate_steps', 'max_iterations', 'max_execution_time', 'early_stopping_method', 'handle_parsing_errors', 'trim_intermediate_steps'])
基本上都是AgentExecutor简单的参数,“偷懒”就不挨个介绍,请各位看官自行实验: )
One more thing
RunnableWithMessageHistory(……………………history_factory_config=[ConfigurableFieldSpec(id="Songjg",annotation=str,name="Song榆钱儿",description="我的名字",default="",is_shared=True)]
这个是一种应用比较广泛的,消息历史相关的Runnable,可定义config传参变量,关于它的详细内容以后再给大家介绍...
相关文章:
LangChain实战技巧之六:一起玩转config(上篇)——ConfigurableField
简介 Config 包含两大类内容, ConfigurableField 可配置的字段 configurable_alternatives 可配置的替代方案 分别使用两篇文章来给大家介绍,本篇先介绍ConfigurableField 常规介绍 一些资料会这样介绍 model_spec model.configurable_fields(model…...
扫码称重上位机
目录 一 设计原型 二 后台代码 一 设计原型 模拟工具: 二 后台代码 主程序: using System.IO.Ports; using System.Net; using System.Net.Sockets; using System.Text;namespace 扫码称重上位机 {public partial class Form1 : Form{public Form1(){Initialize…...
操作系统入门 -- 进程的通信方式
操作系统入门 – 进程的通信方式 1.什么是进程通信 1.1 定义 进程通信就是在不同进程之间交换信息。在之前文章中可以了解到,进程之间相互独立,一般不可能互相访问。因此进程之间若需要通信,则需要一个所有进程都认可的共享空间࿰…...
Python读取wps中的DISPIMG图片格式
需求: 读出excel的图片内容,这放在微软三件套是很容易的,但是由于wps的固有格式,会出现奇怪的问题,只能读出:类似于 DISPIMG(“ID_2B83F9717AE1XXXX920xxxx644C80DB1”,1) 【该DISPIMG函数只有wps才拥有】 …...
elasticsearch的入门与实践
Elasticsearch是一个基于Lucene构建的开源搜索引擎。它提供了一个分布式、多租户能力的全文搜索引擎,具有HTTP web接口和无模式的JSON文档。以下是Elasticsearch的入门与实践的基本步骤: 入门 安装Elasticsearch: 从Elasticsearch官网下载对…...
神经网络学习6-线性层
归一化用的较少 正则化用来解决过拟合,处理最优化问题,批量归一化加快速度 正则化(Regularization): 作用:正则化是一种用来防止过拟合的技术,通过向模型的损失函数中添加惩罚项,使…...
PHP框架详解 - CodeIgniter 框架
CodeIgniter 是一个成熟的轻量级 PHP 框架,专为小到中型的 Web 应用开发设计。它以其简洁、灵活和易于学习的特点而受到开发者的喜爱。 CodeIgniter 框架的特点包括: 轻量级:CodeIgniter 的核心非常小,加载速度快,适…...
奔驰EQS SUV升级原厂主动式氛围灯效果展示
以下是一篇关于奔驰 EQs 升级原厂主动氛围灯案例的宣传文案: 在汽车科技不断演进的今天,我们自豪地为您呈现奔驰 EQs 升级原厂主动氛围灯的精彩案例。 奔驰 EQs,作为豪华电动汽车的典范,其卓越品质与高端性能有目共睹。而此次升…...
echarts Y轴展示时间片段,series data数据 也是时间片段,鼠标放上去 提示框显示对应的时间片段
功能要求 1、折线图,展示每天对应的一个时间片段 2、echarts Y轴展示时间片段,如:[00:00,03:00,05:15] 3、X轴展示日期,如:[xx年xx月xx日] 后端返回的数据结构,如 [{xAdate:"2024-06-15",data:…...
20. mediasoup服务器的布署与使用
Mediasoup Demo部署 架构服务分析 服务端提供3个服务: 1.www服务,浏览器通过访问服务器目录获取客户端代码,通过V8引擎,启动底层WebRTC 2.nodejs提供websocket服务和http服务,用于信令交互 3.Mediasoup C提供的流媒体…...
【leetcode--同构字符串】
要求:判断两个字符串的形式是不是一致,即是不是AABC或者ABBBCC这种。 trick:使用set()结合zip()。 set()用法:用于创建一个不包含重复元素的集合 zip&#…...
shell expr功能详解
expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。它还具个特殊功能,判断变量或参数是否为整数、是否为空、是否为0等。 1.字符串表达式 ------------------------- expr支持模式匹配和字符串操作。字符串表达式的优先…...
java继承Thead类和实现Runnable接口创建线程的区别
一、继承Thread类创建多线程 public class Demo{public static void main(String[] args) {MyThread thread new MyThread();thread.start();}} class MyThread extends Thread{Overridepublic void run() {//子线程执行的操作} }注意:开启子线程要调用start()方法…...
interface Ref<T = any> 这是什么写法?为什么写接口还需要加上<T = any>
问: export interface Ref<T any> { value: T [RefSymbol]: true } 这里既然是interface接口,为什么还有<T any>这是什么意思? 回答: <T any> 中的 <T> 表示这是一个泛型参数,它可以在接口中作为类型的占位符,在实际…...
深入探索 MongoDB GridFS:高效大文件存储与管理的全面指南
GridFS 是 MongoDB 的一个规范,用于存储和检索超过 BSON 文档大小限制(16MB)的文件。与传统的文件系统不同,GridFS 可以将一个大文件分割成多个小块,并存储在 MongoDB 的两个集合中:fs.files 和 fs.chunks。…...
基于CentOS Stream 9平台 安装/卸载 Redis7.0.15
已更正systemctl管理Redis服务问题 1. 官方下载地址 https://redis.io/downloads/#redis-downloads 1.1 下载或上传到/opt/coisini目录下: mkdir /opt/coisini cd /opt/coisini wget https://download.redis.io/releases/redis-7.0.15.tar.gz2. 解压 tar -zxvf re…...
激励-保健理论和公平理论
激励-保健理论 herzberg的激励-保健理论中,保健因素是context of a job,激励因素是content of a job。 context of a job是受组织控制的因素,比如工作条件,基本工资,公司政策等,个人无法支配。content of…...
深入探索 Spring Boot 自定义启动画面
目录 引言什么是 Spring Boot 启动画面Spring Boot 默认启动画面为什么要自定义启动画面如何自定义 Spring Boot 启动画面 修改配置文件使用 Banner 接口通过图片实现启动画面ASCII 艺术画的应用 进阶:基于环境变量的动态 Banner多模块项目中的启动画面Spring Boot…...
Redis实战—Redis分布式锁
本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于Redis的分布式锁 Redis锁代码实现 修改业务代码 分布式锁误删问题 分布式锁原子性问题 Lua脚本 编写脚本 代码优化 总结 分布式锁介绍…...
联想Y7000P 2023款拆机教程及升级内存教程
0.电脑参数介绍 联想Y7000P 2023电脑,笔者电脑CPU为i7-13700H,14核20线程;标配内存为三星的DDR5-5600MHz-8GB*2,由于电脑CPU限制,实际内存跑的频率为5200MHz; 2个内存插槽,2个固态硬盘插槽。每个内存插槽最…...
开发常用依赖
目录 代理对象 Swagger Web 单元测试 MybatisPlus Lombok Mysql SpringBoot Jdk SpringCloud 数据库驱动包 hutool工具 配置仓库 通用库 maven插件 nacos注册中心 OpenFeign Spring AMQP JSON转换器 Redis 邮箱验证 Redisson分布式锁 客户端 代理对象 &l…...
【区分vue2和vue3下的element UI Empty 空状态组件,分别详细介绍属性,事件,方法如何使用,并举例】
在 Element UI(为 Vue 2 设计)和 Element Plus(为 Vue 3 设计)中,Empty(空状态)组件通常用于在数据为空或没有内容时向用户展示一种占位提示。然而,需要注意的是,Element…...
【AI作曲】毁掉音乐?早该来了!一个网易音乐人对于 AI 大模型音乐创作的思辨
引言:AI在创造还是毁掉音乐? 正如当初 midjourney 和 StableDiffusion 在绘画圈掀起的风波一样,suno 和 各大音乐大模型的来临,其实早该来了。 AI 在毁掉绘画?或者毁掉音乐? 没错,但也错了。…...
RabbitMQ实践——最大长度队列
大纲 抛弃消息创建最大长度队列绑定实验 转存死信创建死信队列创建可重写Routing key的最大长度队列创建绑定关系实验 在一些业务场景中,我们只需要保存最近的若干条消息,这个时候我们就可以使用“最大长度队列”来满足这个需求。该队列在收到消息后&…...
【pytorch02】手写数字问题引入
1.数据集 现实生活中遇到的问题 车牌识别身份证号码识别快递单的识别 都会涉及到数字识别 MNIST(收集了很多人手写的0到9数字的图片) 每个数字拥有7000个图像train/test splitting:60k vs 10k 图片大小28 28 数据集划分成训练集和测试集合的意义…...
【查看显卡信息】——Ubuntu和windows
1、VMware虚拟机 VMware虚拟机上不能使用CUDA/CUDNN,也安装不了显卡驱动 查看显卡信息: lspci | grep -i vga 不会显示显卡信息,只会输出VMware SVGA II Adapter,表示这是一个虚拟机,无法安装和使用显卡驱动 使用上…...
在 RK3568 上构建 Android 11 模块:深入解析 m、mm、mmm 编译命令
目录 Android 编译系统概述编译命令简介 环境准备使用 m、mm、mmm 编译模块编译整个源码树编译单个模块编译指定目录下的模块 高级应用并行编译清理编译结果编译特定配置 在 Android 开发中,特别是在 RK3568 这样的高性能平台上,有效地编译和管理模块是确…...
实战|YOLOv10 自定义目标检测
引言 YOLOv10[1] 概述和使用自定义数据训练模型 概述 由清华大学的研究团队基于 Ultralytics Python 包研发的 YOLOv10,通过优化模型结构并去除非极大值抑制(NMS)环节,提出了一种创新的实时目标检测技术。这些改进不仅实现了行业领…...
TTS前端原理学习 chatgpt生成答案
第一篇文章学习 小绿鲸阅读器 通篇使用chatgpt生成答案 文章: https://arxiv.org/pdf/2012.15404 1. 文章概述 本文提出了一种基于Distilled BERT模型的统一普通话文本到语音前端模块。该模型通过预训练的中文BERT作为文本编码器,并采用多任务学习技术…...
AI“音乐创作”横行给音乐家带来哪些隐忧
近日,200多名国际乐坛知名音乐人联署公开信,呼吁AI开发者、科技公司、平台和数字音乐服务商停止使用人工智能(AI)来侵犯并贬低人类艺术家的权利,具体诉求包括,停止使用AI侵犯及贬低人类艺术家的权利,要求…...
佛山网站建设网站制作公司哪家好/关键词有哪些
提回来4个月,关于导航的问题曾经纠结过很久:弄个一体机吧,贵,安装还麻烦,新地图也麻烦(其实主要是贵。。。),家里装宽带电信送华为C8812跟华为C8650,一直都是拿这两个手机当导航用&am…...
南宁市网络推广公司哪家好/百度小程序优化
题目说明: 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,失败返回-1。 题目解析: 二分查找又称折半查找,优点是比较次…...
WordPress 外链 缩略图 插件/湖南百度seo排名点击软件
1. 安装前的准备工作 1).Docker在Window中会自动安装VirtualBox,且需要有VT支持,在安装Docker之前需要先开启虚拟机VT功能,开启方法为:进入系统BIOS设置,将选项Intel(R) Virtualization Tech 参数设置为[Enabled]。如有必要,还需要在BIOS中开启VT-d。 2…...
霸州 网络 网站建设/seo实训报告
数组的初始值保存问题 问题描述: 添加收件人列表页与发消息页面导航条处于同步更新状态,绑定的同一个数组 需求:用户选择后点击了取消的话,取消用户本次操作选中的收件人。 逻辑:当用户点击图标打开添加联系人页面&…...
网站风格主要包括哪些/腾讯推广平台
我们在eslint语法检测环境下经常会看到一些语法规则的报错,但是大家不要惊慌,其实很容易解决 报这个错误的原因是函数名称或function关键字与开始参数之间缺少空格,可以通过修改eslint的配置文件来更改语法检测规则 在--fix命令行上的选项可…...
上海集团网站建设公司/网站seo分析工具
对于 setup.py 和 requirements.txt 的角色有很多误解,很多人认为它们是两个重复的事情,甚至创造了 工具 来处理 这种“重复”。 12.1. Python库 这里所说的Python库是指那些被开发并且为了其他人来使用而发布的东西,你可以在 PyPI 找到很多P…...