agent as a judge这个框架本身是用来评估代码生成agent的效果的,并且提出了名为DevAI的测试集,用来评测AI开发任务的效果
https://deepwiki.com/metauto-ai/agent-as-a-judge/2-usage-guide
现成的codebase中,主要有3个feature可以用:
* ask anything
* 用自然语言去query codebase
* agent evaluation
* 使用AaaJ来评估developer agent的效果。这里有两种方式,Gray-Box和Black-Box
* Gray-Box就是根据dev agent生成的trajectories来评估
* Black-Box就是直接使用最终生成的代码来评估
* generate statistics
* 记录一些统计数据,比如文件数量,代码行数
Components
核心的功能在这个图里,系统通过JudgeAgent来驱动,下面有多个模块
模块之间的关系在这里可以看到
模块的作用在deepwiki这里也写的比较明白了:https://deepwiki.com/metauto-ai/agent-as-a-judge/4-dev-modules
然后看一下每个模块具体的实现
DevGraph
为codebase生成code graph,核心函数在build中。这里会扫描代码文件,生成tag,然后根据tag生成code graph。
每个 Tag 包含以下信息:
rel_fname
: 相对文件路径- 相对于项目根目录的文件路径
fname
: 绝对文件路径- 文件的完整路径
line
: 行号信息- 对于类:包含类的起始行和结束行
- 对于函数:包含函数的起始行和结束行
- 对于引用:包含引用的行号
name
: 标识符名称- 类名或函数名
identifier
: 标识符类型"def"
: 表示定义(类或函数的定义)"ref"
: 表示引用(对类或函数的引用)
category
: 类别"class"
: 表示这是一个类"function"
: 表示这是一个函数
details
: 详细信息- 对于类:包含类中所有方法的列表
- 对于函数:包含函数的代码内容
这些 Tag 主要用于:
1. 记录代码中的结构信息
2. 追踪类和方法之间的调用关系
3. 构建代码依赖图
4. 分析代码结构
例如,一个典型的 Tag 可能是这样的:
Tag(
rel_fname="module/example.py",
fname="/absolute/path/to/module/example.py",
line=[10, 20], # 起始行和结束行
name="MyClass",
identifier="def",
category="class",
details="method1\nmethod2\nmethod3" # 类中的方法列表
)
还需要注意的是这里只会针对python做,提取class/function。
* 有一个可能需要注意的是这里没有对同名函数做处理,不太确定是AST parser自动处理了这个,还是说没有管同名函数
* 他们把std func等内置函数过滤掉了
然后通过tag_to_graph,把提取到的tag转化成代码调用关系图:
* 每一个tag都是一个节点。
* 对于class tag来说,他包含的function会连边
* 然后好像没有构建函数到函数的调用关系。只有在函数存在定义并且被调用过的时候,会增加一个这个函数对应tag上的自环。比较奇怪
* 这里提到了参考了:
* https://github.com/Aider-AI/aider/blob/0a497b7fd70835e5f79e65c06af42b430b999ba6/aider/repomap.py
* https://github.com/ozyyshr/RepoGraph
DevCodeSearch
提供搜索code base的能力:
* accurate,做字符串匹配
* fuzzy,模糊的字符串匹配,用的是fuzzywuzzy的库,有一个模糊阈值,可能是用的编辑距离酸的
* bm25,这里会先tokenize一下,把DevGraph生成的tag过一个tokenize的模型。然后query也过一下相同的模型,然后通过bm25去做搜索。相当于token级别的关键词
* 这里过的tokenize好像就是做了一下分词
* embedding
* 这里是把代码片段做了一下embedding
DevRead
通用的文件读取类,根据文件后缀做读取
video/image是用llm做的读取
DevLocate
根据目录结构和query,使用llm找到相关的文件,main里有一个例子:
DevTextRetrieve
这个是针对agent trajectories做的搜索。
A trajectory in this context is a JSON file containing the step-by-step execution trace of an agent, including user messages, agent thoughts, actions, and environment feedback.
DevAsk
做codebase ask用的,给用户query,和evidence,得到结果。这里也是个类似util的,evidence还是上层的JudgeAgent来做
DeepWiki
来看一下这里是怎么实现deep wiki的功能的
核心代码在run_wiki.py:generate_repo_documentation里
主要依赖JudgeAgent的ask_anything这个功能:
四步:
* workspace,是把目录树结构拼起来
* locate,是根据query,去定位相关文件
* read,读取相关文件
* search,根据query用embedding搜索相关的代码段
这里的query是
根据上面的ask_anything的流程看,其实这里并不能很好的处理一些高层次的问答,更多的还是偏向具体的事实性问答。
这里其实可以尝试RAPTOR,或者是GraphRAG一下看看效果
后面的流程基本上都是类似的,这里就是分别去做分析:
* 仓库概述 (Overview)
* 架构概述 (Architecture)
* 架构图 (Architectural Diagrams)
* 关键组件分析 (Key Components Analysis)
* 用法指南 (Usage Guide)
* 安装指南 (Installation Guide)
* 高级主题 (Advanced Topics)
* 示例和教程 (Examples and Tutorials)
文章评论