Ai相关
上下文限制
此处主要讨论coding情境下的上下文。
首先最粗暴的就是换一个大上下文的模型。
分块处理,将超长输入分割成多个chunk,每次调用模型时只输入一个块及必要上下文前后文,有时还会对前后块生成内容进行合并或摘要。在代码场景则为采用 AST(抽象语法树)感知分块。
摘要,就是用llm对上下文进行总结,这种只适合文档这一类的。具体的code如果摘要应该会失真。可以用来作为索引,生成一个md指示哪些文件是干什么的。
RAG。通过向量数据库,进行检索。当然代码向量检索肯定是不准确的,所以可以:
- 代码符号必须走精确匹配(BM25),只有自然语言注释走向量检索。
- 把代码的 AST 和调用关系存进图数据库,直接在图上遍历边。
- 使用IDE的LSP(Language Server Protocol),类似于传统的方法。
- 认为llm很聪明,可以通过grep自己来搜索关键词并反思。
增量编译/差分补丁。使用git diff,仅分析变更部分。当然这个肯定需要知道整个函数长啥样
最佳实践(Diff + Context):
- 拿到当前文件的 Diff。
- 自动向上追溯:找到 Diff 所在的函数签名、所在的类定义。
- 自动向外追溯:如果 Diff 里调用了外部接口,把接口的类型定义也捞进来。
- 将【小范围原始代码 + Diff + 追溯的必要上下文】打包发给模型。