More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
  1. 首页
  2. 未分类
  3. 正文

PocketFlow-Codebase Knowledge

2025年5月11日 17点热度 0人点赞 0条评论

PocketFlow的作者基于PocketFlow做了一个用来给Codebase生成文档的项目,算是简化版本的DeepWiki,这里介绍一下基本思路

核心代码就在nodes.py中


看deepwiki的流程图,这里的node都是串行执行的:

  • IdentifyAbstractions 是把整个codebase丢给LLM,给的格式是文件目录,文件内容的tuple
    • 输出若干个abstraction,对应的解释,以及相关的文件索引
    • 输出格式是YAML
    • 为了避免模型输出文件路径出问题,这里是让他输出文件路径对应的index,提高推理的精度
    • 这里作者用的主要是 gemini2.5,依赖了gemini的强大的上下文
  • AnalyzeRelationships
    • 输入abstraction,输出这些abstraction的关联。这里是把abstraction,以及对应的文件内容输入到了LLM中
    • 这里还会根据这些abstraction的关系,生成一个project的high level summary,也是YAML输出
    • 例子
  • OrderChapters
    • 用来对这些abstraction做order,目的是提高tutorial的易读性,比如先介绍xxx,后介绍xxx
    • 这里只用abstraction的描述以及上面提取出来的关系作为模型输入了,没有把原始文件内容放进去
  • WriteChapters
    • 根据chapter order,对每一个abstraction做详细的解释
    • 输入会包含当前chapter的abstraction对应的代码文件内容,以及前面总结的chapter的summary
    • 这里有一些挺不错的prompt
      • 比如先描述这个abstraction的high level motivation
      • 如果不是第一章,来一个从上一章承上启下的句子
      • 解释的时候使用例子,必要的时候用mermaid画图
      • 并且还有很多口语化的解释,是一个挺不错的prompt,解释文章很不错
  • CombineTutorial
    • 这里会把前面生成的数据整理起来,写到md的文件中
    • 分析关系那一步给的项目总结,以及核心模块调用关系会写到index.md中,同时还会生成对其他章节的超链接,方便跳转
    • 剩下的每一个abstraction单独占用一章,描述具体的内容

总的来说,比较依赖模型长上下文的能力,来为codebase生成核心概念,然后单独解释。生成文章的prompt也比较不错。
这里有一个值得思考的点就是,在做codebase understanding的时候,是自顶向下,还是自底向上。直接生成abstraction的效果在一些小的项目确实不错,但是过大的codebase就比较依赖模型能力了。
* 不过其实看deepwiki可能也是类似的做法,就是分模块单独解释。但是模块划分就不确定是怎么做的了。
* 还有一个思路是根据代码的模块进行组织,而不是让模型去找核心概念。因为人在写代码的时候基本都是按照模块来划分目录的。

然后这里直接用文件的方式比较粗暴,好处是不需要考虑AST了,坏处就是不确定这种会浪费多少的上下文,以及就算是用AST来解析,使用的时候其实也不太确定怎么用的好。
* 之前一个想法是组织了AST之后,按照类似DAG的方式,递归的向上做总结。
* 然后大的模块划分,可能是通过相同目录下,或者是利用调用关系图上的聚类算法来构造。

标签: 暂无
最后更新:2025年5月11日

sheep

think again

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS