使用 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 ,能实现这些需求么?具体应该怎么搭建呢?
1
Chad0000 238 天前
我是建立 GPT 来实现的,你把你的模型和思路写进去。目前我用它来帮我生成 ORM 实体类(我封装后的 ORM ),无废话,给创建表的 Sql 它就输出。
|
2
Chad0000 238 天前
ChatGPT 的 GPTs
|
3
lstz 238 天前 via Android
我目前是写脚本来实现,但担心 token 会不会消耗太多,吃不消?
|
4
leoWeek 237 天前 1
我是使用 cursor 的 codebase 功能,会对整个项目建立一个索引,我理解这应该是建立一个本地的向量库,然后使用 codebase 提出问题时,会扫描整个项目的片段,找到 top n(可配置)相关的片段内容,再发给 gpt 解析这样得出结果,这样就能整个项目维度去分析
缺点就是,top n 内容不一定涵盖所有相关联的代码片段,并且上下文支持也不行,每次都要重新使用 codebase 进行扫描 |
7
lstz 237 天前 via Android
@975779964 我使用场景可能和你不太一样,我只需要对单个文件进行分析,可以参考
https://github.com/work7z/LafTools/blob/dev/devtools/assistant/src/main.test.tsx 我觉得你可以想下,你具体需要 gpt 为你做什么。比如说增加新 API 文件,你就把 types 、示例、要求发给它。整个文件都发过去,感觉一来效率低(处理时间要很久),二来 token 消耗也非常离谱,三来也没什么必要(我们作为工程师,写代码也只需要知道必要的几个文件就可以了,至于是哪些文件我觉得需要人工定义) |
8
cheng6563 235 天前
本地向量库的最大问题就是这个检索程序的智商远远不如正经的 LLM 。
我感觉得等 1m Tokens 的 AI 出来再看看效果吧。 |