使用 JetBrains 的 GitHub Copilot 和 Copilot Chat 快 1 年了
用来补全代码和查找资料很方便。但他们局部生成代码。缺乏对整个项目的理解。编辑时,Copilot Chat 似乎是以当前文件为参考,有时能识别出打开的 Tab 的文件,但不能识别整个项目文件。
以 C# Net Core 项目为例,当我已经编写了模型的 Model 后,我希望根据 Model 编写 IService 、Impl 和 Controller 。我需要逐个文件地创建它们,然后让 Copilot Chat 根据我的需求提供代码。但它不能根据 Model 为我生成全部代码,即使生成了,其中的一些细节,例如 ILogger 、IMapper 或其他依赖注入的内容也没有被包括进去。
我理解是由于 Copilot Chat token 长度的问题,Copilot Chat 无法随着项目的变化记住所有细节。在与它交流时,我只能询问局部的细节,而无法要求它理解整体的项目架构。
后来,我尝试使用了国产的 Kimi 和百川大模型,因为它们支持长文本。我编写了一个工具,将所有代码(不包括 node_modules 、bin 、obj 、.vs 、.idea 等无关文件)合并成一个大的文本文件来喂给大模型。然后让它根据整个项目来进行具体的改动和新功能的实现。这两个国产模型的表现还可以,但在多次对话迭代后,它们也忘记了之前的代码状态。也就是说,当我用原始的项目代码训练它们并与它们对话后,如果项目代码经过多次迭代,它们就无法记住根据对话迭代后的代码。因此,我不得不再次提供整个项目的代码来增强它们的记忆。这时,Kimi/百川大模型通常会因为对话文本过多而开启一个新的对话。
后来我看到了马大伟的一个帖子 https://v2ex.com/t/1019795#reply50,他完全使用 ChatGPT-4 在一个持续的会话中完成了开发工作,尽可能地减少自己编写和修改代码的工作,以此探索模型的极限。底下的一个评论是:
BRX3 48 天前 应该基于 langchain 构建一个 agent 历史数据应该向量化落地到向量数据库,在 agent 通过 RAG 实现上下文检索增强。只用 chatGPT4 要实现你的需求,至少从效率上来说是非常低效的
这个方案感觉是我想要的。我认为,每次我的提问都应该被记住,并记录在数据库中。这样,在我下次提问时,它能根据我之前的问题和我已经迭代过的代码给出新的代码建议,不用每隔一段时间就重新提供一遍项目的最新代码。
总结下我的需求
关于 LangChain 的疑问
如果我使用 LangChain ,能实现这些需求么?具体应该怎么搭建呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.