怎么样让 gpt 具有长期记忆和 整个项目的理解能力呢?

212 天前
 975779964

使用 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 要实现你的需求,至少从效率上来说是非常低效的

这个方案感觉是我想要的。我认为,每次我的提问都应该被记住,并记录在数据库中。这样,在我下次提问时,它能根据我之前的问题和我已经迭代过的代码给出新的代码建议,不用每隔一段时间就重新提供一遍项目的最新代码。

总结下我的需求

  1. 能够理解并记住整个项目的结构,而不是单个文件或代码片段。
  2. 具备长期记忆能力,能够在多次对话迭代后仍然记得项目状态和之前生成的代码,这样不必每次都重新提供整个项目的代码作为输入。
  3. 应能处理长文本输入,并能进行上下文相关的搜索。

关于 LangChain 的疑问

如果我使用 LangChain ,能实现这些需求么?具体应该怎么搭建呢?

1473 次点击
所在节点    OpenAI
8 条回复
Chad0000
212 天前
我是建立 GPT 来实现的,你把你的模型和思路写进去。目前我用它来帮我生成 ORM 实体类(我封装后的 ORM ),无废话,给创建表的 Sql 它就输出。
Chad0000
212 天前
ChatGPT 的 GPTs
lstz
212 天前
我目前是写脚本来实现,但担心 token 会不会消耗太多,吃不消?
leoWeek
211 天前
我是使用 cursor 的 codebase 功能,会对整个项目建立一个索引,我理解这应该是建立一个本地的向量库,然后使用 codebase 提出问题时,会扫描整个项目的片段,找到 top n(可配置)相关的片段内容,再发给 gpt 解析这样得出结果,这样就能整个项目维度去分析

缺点就是,top n 内容不一定涵盖所有相关联的代码片段,并且上下文支持也不行,每次都要重新使用 codebase 进行扫描
975779964
211 天前
@leoWeek 谢谢,我去看看你说出的这个
975779964
211 天前
@lstz 那你脚本的具体功能是怎么做的呢? 也是和我一样 将 整个项目 都合并成一个文件?发给 gpt 么?
lstz
211 天前
@975779964 我使用场景可能和你不太一样,我只需要对单个文件进行分析,可以参考

https://github.com/work7z/LafTools/blob/dev/devtools/assistant/src/main.test.tsx

我觉得你可以想下,你具体需要 gpt 为你做什么。比如说增加新 API 文件,你就把 types 、示例、要求发给它。整个文件都发过去,感觉一来效率低(处理时间要很久),二来 token 消耗也非常离谱,三来也没什么必要(我们作为工程师,写代码也只需要知道必要的几个文件就可以了,至于是哪些文件我觉得需要人工定义)
cheng6563
209 天前
本地向量库的最大问题就是这个检索程序的智商远远不如正经的 LLM 。

我感觉得等 1m Tokens 的 AI 出来再看看效果吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1034979

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX