怎么样让 gpt 具有长期记忆和 整个项目的理解能力呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
975779964
V2EX    OpenAI

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

  •  
  •   975779964 2024-04-23 15:52:13 +08:00 2168 次点击
    这是一个创建于 548 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    我感觉得等 1m Tokens 的 AI 出来再看看效果吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5188 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 08:51 PVG 16:51 LAX 01:51 JFK 04:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86