2、常用内置中间件的使用

LangChain 1.0 提供了 16 个预置中间件,开箱即用。

2.1 SummarizationMiddleware中间件

作用:对历史消息列表进行摘要&总结,达到压缩上下文的效果。
原理:在达到触发条件时,调用大模型对历史消息进行摘要, 将摘要的结果作为HumanMessage ,
放到消息列表最开始的位置。
2.1.1 参数说明
注意:本节中间件的参数说明不保证包含完整参数列表,不常用或被标记为过时的参数被省略。
参数1:model —用于摘要的模型
可以是模型名称也可以是模型对象,如果传递的是模型名称,底层会调用init_chat_model 初始化模
型。
参数2:trigger —摘要触发条件
是一个列表,每个元素对应一个条件,当任一条件满足时,触发摘要。

tokens :token的数量,历史token的累计数量达到该值触发摘要。
2. messages :历史消息数量,历史消息条数达到该值触发摘要。
3. fraction :上下文长度比例。历史token的累计数量达到模型的max_input_tokens*fraction 触发摘要

如果条件包含fraction ,要求模型的profile包含max_input_tokens ,Deepseek模型的profile为空,此时需要手动添加该配置项。Deepseek-V3.2的上下文长度为128K。

参数3:keep —摘要时保留的原始消息
支持三种条件,但和trigger不同,keep同一时间只接收一种条件。

1. tokens :摘要时保留的token数量。
2. messages :摘要时保留的历史消息条数。
3. fraction :摘要时保留max_input_tokens*fraction 个token。

参数4:token_counter —统计token数量的函数
默认使用LangChain提供的count_tokens_approximately ,一般不用更改。
对于纯文本消息,该函数的大致思路是先统计消息的字符数,也就是len(字符串) ,然后再除以每个token大致的字符数,转换为粗略的token数,再加一些额外开销。作为估算的token数。
参数5:summary_prompt —摘要时的自定义提示词
该提示词需要包含{messages} 占位符,使得历史消息列表可以被插入。不指定则使用内置提示词。

参数6:trim_token_to_summarize —摘要时历史消息的最大token数
如果历史消息token数大于该值,则会被裁剪。默认为” 4000 “。
如果trigger用token作为度量,调大触发阈值时,当前配置项应相应调整,否则会丢失信息。

2.1.2 举例1
测试trigger、keep参数
使用CloseAI的gpt模型:

图片[1]-2、常用内置中间件的使用-大赛人网

使用DeepSeek平台的模型:

图片[2]-2、常用内置中间件的使用-大赛人网

后续代码:

图片[3]-2、常用内置中间件的使用-大赛人网
图片[4]-2、常用内置中间件的使用-大赛人网

2.1.3 举例2
测试summary_prompt参数

图片[5]-2、常用内置中间件的使用-大赛人网
图片[6]-2、常用内置中间件的使用-大赛人网
图片[7]-2、常用内置中间件的使用-大赛人网
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容