2026/2/17 1:16:13
网站建设
项目流程
简约网站,昆明广告设计公司排行,码迷seo,wordpress编辑器 模板LangChain v1.0的SummarizationMiddleware是一种Agent中间件#xff0c;用于自动压缩对话历史上下文#xff0c;减少token消耗并提高系统性能。它通过智能摘要技术#xff0c;在历史消息超过预设阈值时自动压缩#xff0c;保留最近的几条消息并生成摘要。文章详细介绍了其工…LangChain v1.0的SummarizationMiddleware是一种Agent中间件用于自动压缩对话历史上下文减少token消耗并提高系统性能。它通过智能摘要技术在历史消息超过预设阈值时自动压缩保留最近的几条消息并生成摘要。文章详细介绍了其工作原理、配置方法、代码实现和实际应用场景帮助开发者快速上手这一功能优化大模型对话系统的性能和效率。1.引言在AI应用开发领域LangChain作为一款强大的开源框架已成为构建智能代理Agent的首选工具。随着LangChain v1.0的发布该框架引入了更模块化的设计和丰富的中间件Middleware支持帮助开发者更高效地管理复杂对话系统。Agent中间件是LangChain v1.0的核心创新之一它允许在Agent的生命周期中插入自定义逻辑例如在模型调用前后进行数据处理、权限检查或优化操作。其中上下文压缩是处理长对话历史的关键挑战。在实际应用中如聊天机器人或多轮交互系统用户对话往往会积累大量历史消息导致token消耗急剧增加。这不仅会提升API调用成本还可能降低响应速度甚至触发模型的上下文长度限制。SummarizationMiddleware正是针对这一痛点设计的官方中间件它通过智能摘要技术自动压缩历史上下文保留核心信息的同时减少token使用量。该中间件属于“before_model”类型即在模型调用前执行确保输入数据高效精炼。本文将从概念入手逐步展开技术细节并结合实战代码帮助技术爱好者快速上手这一功能。2.上下文压缩SummarizationMiddleware概述SummarizationMiddleware是LangChain v1.0中一个内置的中间件专为Agent设计用于自动管理对话历史。通过集成摘要模型它能将冗长的历史消息浓缩为简洁的摘要从而优化token利用率。该中间件的核心在于“上下文压缩”即在不丢失关键信息的前提下减少输入模型的文本量。根据官方文档该中间件的关键特性包括自动压缩当历史消息超出预设阈值时中间件会触发摘要过程无需开发者手动干预。智能保留它会优先保留最近的几条消息默认或自定义数量确保当前对话的连贯性同时对较旧的消息进行摘要。官方集成支持通过from langchain.agents.middleware import SummarizationMiddleware导入并在创建Agent时通过middleware参数轻松集成。无需手动管理开发者只需配置参数中间件便会处理整个压缩逻辑包括token计算和摘要生成。这一设计特别适用于多轮对话场景如客服系统或研究助手能显著提高系统的可扩展性和性能。相比手动截断历史消息SummarizationMiddleware更智能避免了信息丢失的风险。3.工作原理详解SummarizationMiddleware的工作原理基于阈值触发和摘要生成机制。具体来说当历史消息的token数量超过默认阈值例如500 tokens且消息条数超过保留数量例如5条时中间件会自动介入。过程如下触发条件检查中间件首先计算历史消息的总token量。如果超出max_tokens_before_summary默认500并消息数大于messages_to_keep则启动压缩。消息分割将历史消息分为两部分——保留最近的N条消息由messages_to_keep指定以及较旧的消息。摘要生成将旧消息发送给指定的摘要模型例如ChatDeepSeek结合自定义的summary_prompt生成摘要。摘要结果作为一条新消息插入上下文。上下文更新最终输入模型的上下文为摘要 最近N条消息从而显著减少token使用。从源码角度看LangChain的中间件机制是基于Runnable接口实现的。以下是SummarizationMiddleware的核心逻辑片段from langchain_core.messages import BaseMessagefrom langchain_core.language_models import BaseLanguageModelclass SummarizationMiddleware: def __init__(self, model: BaseLanguageModel, max_tokens_before_summary: int 500, messages_to_keep: int 5, summary_prompt: str Summarize the following conversation history:\n\n{messages}\n\nSummary:): self.model model self.max_tokens_before_summary max_tokens_before_summary self.messages_to_keep messages_to_keep self.summary_prompt summary_prompt asyncdef before_model(self, messages: list[BaseMessage], **kwargs) - list[BaseMessage]: # 计算总tokens简化假设使用len作为代理 total_tokens sum(len(msg.content) for msg in messages) # 实际中用tokenizer if total_tokens self.max_tokens_before_summary or len(messages) self.messages_to_keep: return messages # 分割消息 old_messages messages[:-self.messages_to_keep] recent_messages messages[-self.messages_to_keep:] # 生成摘要 prompt self.summary_prompt.format(messages\n.join([msg.content for msg in old_messages])) summary await self.model.apredict(prompt) # 返回新上下文 return [BaseMessage(contentsummary)] recent_messages这一机制确保了压缩的透明性和可控性。预期效果显著例如从20条消息约1000 tokens压缩到5-6条约300-500 tokens大大提升效率。4.配置与集成实践要使用SummarizationMiddleware首先需导入相关模块并配置参数。核心参数包括model用于生成摘要的语言模型实例例如ChatDeepSeek。max_tokens_before_summary触发压缩的token阈值默认500。建议根据模型上下文长度调整如GPT-4的128k tokens可设更高。messages_to_keep保留最近消息的数量默认5。过多会降低压缩效果过少可能丢失上下文。summary_prompt自定义提示词用于指导模型生成摘要。最佳实践是强调保留“关键决策点和技术细节”以匹配应用场景。集成时在create_agent函数中添加middleware[summarization_middleware]。自定义提示词时确保其简洁且针对性强例如“请将以下对话历史进行摘要保留关键决策点和技术细节\n\n{messages}\n\n摘要:”。在实际项目中测试不同阈值以平衡准确性和性能如果使用自定义tokenizer确保token计算准确。5.完整代码示例与测试以下是一个完整的实战示例展示了如何构建一个带有SummarizationMiddleware的Agent用于专利搜索和技术分析场景。代码包括工具定义、上下文配置、Agent创建和测试函数。# SummarizationMiddleware 完整实现示例 from langchain.agents import create_agentfrom langchain.agents.middleware import SummarizationMiddlewarefrom langchain_deepseek import ChatDeepSeekfrom langchain_core.tools import toolfrom langchain_core.messages import HumanMessagefrom langchain_core.runnables import ensure_configfrom pydantic import BaseModel, Fieldfrom typing import Optionalfrom dotenv import load_dotenvimport logging# 1. 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)logger logging.getLogger(__name__)load_dotenv(overrideTrue)# 2. 定义工具 tooldef search_patent(query: str) - str: 搜索专利数据库 returnf专利搜索结果: 找到与 {query} 相关的 3 项专利...tooldef analyze_technology(tech_desc: str) - str: 分析技术可行性 returnf技术分析: {tech_desc} 的实现可行性评估完成...tools [search_patent, analyze_technology]# 3. 定义上下文 class UserContext(BaseModel): user_id: str Field(..., description用户唯一标识) department: str Field(..., description所属部门) max_history_tokens: Optional[int] Field(default1000, description历史消息 token 阈值)# 4. 配置中间件 summarization_middleware SummarizationMiddleware( modelChatDeepSeek(modeldeepseek-chat, temperature0.1), # max_tokens_before_summary200, # 历史消息 token 数量超过 500 时触发压缩 messages_to_keep5, # 保留最近 5 条消息 summary_prompt请将以下对话历史进行摘要保留关键决策点和技术细节\n\n{messages}\n\n摘要:# 摘要提示词)# 5. 创建 Agent agent create_agent( modelChatDeepSeek(modeldeepseek-chat, temperature0.2), toolstools, middleware[summarization_middleware], context_schemaUserContext, debugTrue,)# 6. 执行测试 def run_summarization_test(): logger.info(开始 SummarizationMiddleware 测试) # 创建长对话历史 long_history [HumanMessage(contentf问题 {i1}: 如何评估某项技术的专利风险) for i in range(20)] logger.info(f创建了 {len(long_history)} 条消息) # 执行 result agent.invoke( {messages: long_history}, contextUserContext(user_idengineer_001, department研发部), configensure_config({configurable: {thread_id: session_001}}) ) result_messages result.get(messages, []) logger.info(f执行后消息数: {len(result_messages)}) if len(result_messages) len(long_history): logger.info(f中间件已触发压缩了 {len(long_history) - len(result_messages)} 条消息) return result# 7. 运行测试 result run_summarization_test()logger.info(测试完成)在这一示例中测试函数创建了20条模拟消息触发中间件压缩。运行后日志会显示消息数从20减少到约6摘要5条最近消息证明压缩有效。开发者可根据需要调整参数并在生产环境中监控token使用。6.高级应用与注意事项在实际项目中SummarizationMiddleware适用于长时序对话系统如企业知识库助手或多用户协作工具。例如在法律咨询Agent中它可压缩历史案例讨论保留核心论点。潜在优化包括动态调整阈值基于用户上下文例如UserContext中的max_history_tokens自定义提示词以适应领域特定术语或结合其他中间件如权限检查Middleware实现多层管道。注意事项确保摘要模型的温度temperature较低如0.1以生成确定性摘要监控压缩准确性避免关键信息丢失可通过A/B测试验证如果历史包含敏感数据考虑隐私合规。常见问题排查如果未触发压缩检查token计算逻辑模型API限速时可添加重试机制。与其他中间件的结合如CachingMiddleware可进一步提升性能。7.总结SummarizationMiddleware作为LangChain v1.0的强大工具通过自动上下文压缩显著降低了token消耗和响应延迟同时保持了对话的完整性。本文从背景到实战详解了其原理、配置和应用帮助开发者快速集成这一功能。在AI应用日益复杂的今天掌握此类中间件是提升系统效率的关键。建议大家基于示例代码动手实验探索更多自定义场景让LangChain在实际项目中尽快落地。AI大模型从0到精通全套学习大礼包我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。只要你是真心想学AI大模型我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来我也真心希望帮助大家学好这门技术如果日后有什么学习上的问题欢迎找我交流有技术上面的问题我是很愿意去帮助大家的如果你也想通过学大模型技术去帮助就业和转行可以扫描下方链接大模型重磅福利入门进阶全套104G学习资源包免费分享01.从入门到精通的全套视频教程包含提示词工程、RAG、Agent等技术点02.AI大模型学习路线图还有视频解说全过程AI大模型学习路线03.学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的04.大模型面试题目详解05.这些资料真的有用吗?这份资料由我和鲁为民博士共同整理鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。所有的视频由智泊AI老师录制且资料与智泊AI共享相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念通过动态追踪大模型开发、数据标注伦理等前沿技术趋势构建起前沿课程智能实训精准就业的高效培养体系。课堂上不光教理论还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事如果说你是以下人群中的其中一类都可以来智泊AI学习人工智能找到高薪工作一次小小的“投资”换来的是终身受益应届毕业生无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界。业务赋能 突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型。获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】