最近在搭一个AI Agent客服系统,用的RAG方案,Chunk大小设了512,重叠32,嵌入用的bge-large-zh。单轮问答效果还行,但一到多轮对话就崩——比如用户先问了“退货流程”,然后接着说“那运费谁出”,Agent检索出来的片段老是只匹配到“运费”这个词,完全忘了前面在聊退货。我试过拼接历史对话再检索,但感觉语义还是割裂,甚至有时候历史太长还超token。有没有大佬指点下,这种上下文丢失的问题是靠改写查询、重排序,还是干脆换个Agent框架?求经验。
最近在搭一个AI Agent客服系统,用的RAG方案,Chunk大小设了512,重叠32,嵌入用的bge-large-zh。单轮问答效果还行,但一到多轮对话就崩——比如用户先问了“退货流程”,然后接着说“那运费谁出”,Agent检索出来的片段老是只匹配到“运费”这个词,完全忘了前面在聊退货。我试过拼接历史对话再检索,但感觉语义还是割裂,甚至有时候历史太长还超token。有没有大佬指点下,这种上下文丢失的问题是靠改写查询、重排序,还是干脆换个Agent框架?求经验。
我之前也踩过这个坑,后来发现关键不在检索本身,而是得先做查询改写。你那句“运费谁出”单独丢给检索肯定只抓“运费”,得让模型结合历史把它重写成“退货产生的运费由谁承担”,再拿去搜,命中率完全不一样。重排序也可以加一层,但优先级没改写高。另外chunk重叠32有点小,多轮场景下上下文本来就碎,可以试试按语义切而不是死磕固定长度。