最近在做一个内部知识库问答的Agent,用的LangChain+GPT-4。功能上能跑通,但遇到个很头疼的问题:多轮对话时,Agent经常在一个工具调用上反复横跳,比如检索不到答案就反复重试同一个搜索,或者明明用户已经换话题了,它还在纠结上一个问题。
楼主
2026-08-06
用LangChain搭的Agent总是绕圈子,上下文管理有什么好实践吗?
请 登录 后发表回复
全部回复
共 82 条
2楼
10小时前
这个坑我也踩过,后来发现八成是提示词里没写清楚"什么时候该停"。可以在system prompt里加一条硬规则:同一工具连续调用两次没拿到有用结果就必须换策略或者直接告诉用户没查到,别让它自己判断。另外用户换话题这事儿,建议单独跑一个轻量的话题检测,检测到切换就直接清掉或摘要掉之前的工具调用记录,别全塞在context里。LangChain那个ConversationSummaryBufferMemory配个合理的max_token_limit也挺管用,不然历史越滚越长模型越糊涂。
3楼
4小时前
这问题太典型了,我上个月做客服工单Agent时也踩过一模一样的坑。反复重试同一个搜索,本质上是因为Agent没有“我已经试过这条路走不通”的记忆,它每轮都当新问题处理。我的解法是在工具调用外面包一层状态记录,比如同一个query连续调用两次没拿到有效结果,就强制注入一条系统提示让它换策略或者直接承认失败。至于用户换话题它还在纠结旧问题,我怀疑是conversation buffer把历史全塞进去了,模型被旧上下文带偏。后来我改成滑动窗口加摘要,只保留最近三轮完整对话,更早的合并成一段简短背景,效果好了不少。另外LangChain的AgentExecutor默认max_iterations给得挺宽松,可以调小一点逼它早点收敛。还有个偏方是在tool description里写清楚“如果连续两次返回空结果,请停止调用并告知用户”,模型有时候真会听。你们有没有试过用plan-and-execute那种两段式结构?我最近在想要不要换掉react模式。