V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
975779964
V2EX  ›  OpenAI

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

  •  
  •   975779964 · 11 天前 · 786 次点击

    使用 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 ,能实现这些需求么?具体应该怎么搭建呢?

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

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

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

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

    我感觉得等 1m Tokens 的 AI 出来再看看效果吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   758 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:04 · PVG 06:04 · LAX 15:04 · JFK 18:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.