最近在做一个内部AI编程助手,打算用RAG把公司私有API文档喂给大模型,让同事直接提问“怎么调用登录接口”这种。我用的Chunk大小是500,重叠50,embedding模型是bge-large-zh,检索用的faiss。测下来发现两个问题:一是文档里只有函数签名和简短注释,检索出来的片段经常缺上下文,大模型答非所问;二是同一个接口有版本更新,旧文档优先级反而更高。想问问大家,这种偏代码类的文档,是不是应该按函数粒度切?要不要加父文档召回?另外有没有办法在检索阶段做版本过滤,还是说只能靠prompt硬掰?刚入门RAG,调了一周有点迷茫,求指点。
楼主
27天前
用RAG给AI编程工具加私有API文档,为什么检索效果总是不理想?
请 登录 后发表回复
全部回复
共 81 条
2楼
2天前
说实话你这问题我太有共鸣了,代码类文档跟普通文本完全是两码事,函数签名那种信息密度高的内容,按固定chunk切真的容易把上下文撕碎。我之前试过按函数粒度切,再额外把类定义、调用示例、参数说明作为父文档存起来,检索时先召回父文档再让模型读子片段,效果比单纯调chunk大小明显好。版本过滤这事我建议别指望prompt硬扛,你可以在索引阶段给每个chunk打上版本号元数据,检索的时候直接用filter把旧版本排除掉,faiss本身支持ID过滤,配合一个版本映射表就行。另外bge-large-zh对代码类文本的语义理解其实一般,你可以试试先做一轮关键词匹配(比如函数名、类名)再拿embedding做精排,混合检索对这种场景往往比单路向量检索稳。最后想问下你公司文档有没有统一的注释规范?如果没有的话,最好先做一步格式化,把“@param”“@return”这类结构提取出来,不然大模型很难从纯文本里理解参数含义。