文章讨论了大模型应用中智能体因上下文管理不当导致的异常终止问题。作者发现智能体在第二次思考时因上下文窗口超长而正常终止,根本原因是历史记录未做好管理。在Langchain技术体系中,作者提出创建TrimmedInMemorySaver类解决方案,自动过滤思考过程和工具调用结果,只保留对话内容,从而控制上下文长度,防止模型异常终止。
“上下文管理是大模型应用稳定性的一个重要环节。”
今天在优化智能体的时候发现一个问题,就是智能体第一次思考和工具调用都是正常的,但第二次思考的时候就输出一个think标签就结束了;而且不是因为代码出现异常结束,而是智能体输出了stop结束符。
所以,这个问题就很奇怪,代码都是正常但智能体执行一般就正常结束了;哪怕是出现异常导致结束也没问题,但这种正常结束好像就没那么好排查了。
所以,经过测试发现复现的频率还挺高,之后经过多轮复现之后发现,问题大概率是出现上下文窗口上,上下文超长导致模型正常终止。
而出现这种问题,归根结底就是模型的上下文管理有问题,再准确点说就是模型历史记录没做好。
智能体的历史记录
在Langchain的技术体系中,记忆或者说历史记录有两种实现,一种是基于Memory的大模型记忆功能;另一种是Langgraph中的检查点,利用MemorySaver进行记忆存储。
从记忆的持久性上又分为本地存储和外部存储(如redis)的方式,但不论哪种方式本质上都是把对话内容保存下来,供后续拼接到上下文中。
而作者这次bug出现的原因就在于记忆没有管理好;导致上下文超长,最后模型结束。
多说一句,上下文管理是模型应用中的重要环节,原因在于任何模型都会有上下文窗口限制,并且不同的模型上下文窗口大小不同;并且,其理论窗口大小并不是最优窗口大小。
举例来说,现在最新的模型上下文长度能达到128K,但其最优长度可能只有100K或者更少。
所以,怎么管理模型上下文?
模型上下文一般由以下几个部分组成:
- 用户问题
- 历史记录
- 参考内容
- 系统提示词prompt
而其中系统提示词的长度基本上是固定的,用户问题的长度也有限;因此,上下文超长的主要原因基本上集中在历史记录和参考内容上。
其中历史记录会根据存储的数据和对话次数的增大而不断增长;参考文档也因为不同的文档切分和拼装方式,导致其长度不固定。
所以,一般情况下会对历史对话的轮数,以及参考文档的数量进行限制;防止上下文超长。
但在Langgraph中,哪些东西有可能被存到历史记录中?
事实上在系统中,那些内容被存到历史记录中这个是完全可以由开发人员控制的;但在langgraph中已经实现的记忆存储中,会把messges中的所有数据都存到记录记录中。
但这在某些场景下是有问题的,或者说在大部分场景下都是有问题的;比如说,具备思考模式的模型,以及工具调用的结果,其实这些内容是不需要被存储到历史记录中的;这玩意就像在开会时,做会议纪要,只需要把每个人说的内容记下来就行,而没必要把别人怎么想的也记下来。
因此,这时就需要在记忆模块把思考过程和工具返回的结果给过滤掉,最终只记录对话过程中的问题和回答。
class TrimmedInMemorySaver(InMemorySaver): """带自动裁剪功能的 InMemorySaver(LangGraph v0.2+ 兼容)""" def __init__(self, max_tokens=3000, strategy="last", *args, **kwargs): super().__init__(*args, **kwargs) self.max_tokens = max_tokens self.strategy = strategy def put( self, config: RunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata, new_versions: ChannelVersions, ) -> RunnableConfig: thread_id = config.get("configurable", {}).get("thread_id") if not thread_id: return super().put(config, checkpoint, metadata, new_versions) # 尝试从 checkpoint 中提取 messages(根据你项目 checkpoint 结构调整) messages = None if isinstance(checkpoint, dict) and "channel_values" in checkpoint: messages = checkpoint["channel_values"].get("messages") elif isinstance(checkpoint, dict) and "messages" in checkpoint: messages = checkpoint["messages"] logger.info(f"InMemorySaver中的messages: {messages}") # logger.info(f"InMemorySaver中的messages过滤之后的messages: {messages}") """ list 类型 BaseMessage messages.type """ if messages: fliter_messages = [ message for message in messages if not isinstance(message, ToolMessage) ] logger.info(f"记忆去除toolmessage: {fliter_messages}") # 关键:传入 token_counter(这里用近似计数器) trimmed_messages = trim_messages( fliter_messages, max_tokens=self.max_tokens, strategy=self.strategy, token_counter=count_tokens_approximately, # 可选:保证以 human 开始并以 human/tool 结束以确保消息序列有效 # start_on="human", # end_on=("human", "tool"), include_system=True, ) logger.info(f"trimmed_messages之后 记忆去除think标签和toolmessage: {trimmed_messages}") # 写回裁剪后的 messages(视 checkpoint 具体结构) if "channel_values" in checkpoint: checkpoint["channel_values"]["messages"] = trimmed_messages else: checkpoint["messages"] = trimmed_messages # 继续调用父类的 put 执行真正保存 return super().put(config, checkpoint, metadata, new_versions)这样,一是可以大大减少思考过程和工具调用结果对模型的干扰,其次是可以控制历史记录的长度,防止上下文超长带来问题。
通过这样的方式,就可以避免模型上下文超长问题,但同样也会导致部分记忆丢失;这时只能要想尽可能的保存记忆,那就只能对记忆进行压缩。
但不论怎么样,只要上下文窗口限制还在,那么就永远无法避免记忆丢失的问题。
AI时代,未来的就业机会在哪里?
答案就藏在大模型的浪潮里。从ChatGPT、DeepSeek等日常工具,到自然语言处理、计算机视觉、多模态等核心领域,技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。
掌握大模型技能,就是把握高薪未来。
那么,普通人如何抓住大模型风口?
AI技术的普及对个人能力提出了新的要求,在AI时代,持续学习和适应新技术变得尤为重要。无论是企业还是个人,都需要不断更新知识体系,提升与AI协作的能力,以适应不断变化的工作环境。
因此,这里给大家整理了一份《2026最新大模型全套学习资源》,包括2026最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题、AI产品经理入门到精通等,带你从零基础入门到精通,快速掌握大模型技术!
由于篇幅有限,有需要的小伙伴可以扫码获取!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 大模型项目实战
学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
5. 大模型行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
为什么大家都在学AI大模型?
随着AI技术的发展,企业对人才的需求从“单一技术”转向 “AI+行业”双背景。企业对人才的需求从“单一技术”转向 “AI+行业”双背景。金融+AI、制造+AI、医疗+AI等跨界岗位薪资涨幅达30%-50%。
同时很多人面临优化裁员,近期科技巨头英特尔裁员2万人,传统岗位不断缩减,因此转行AI势在必行!
这些资料有用吗?
这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
大模型全套学习资料已整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费】