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. 正文

Agent-as-a-Judge

2025年5月12日 15点热度 0人点赞 0条评论

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 包含以下信息:

  1. rel_fname: 相对文件路径
    • 相对于项目根目录的文件路径
  2. fname: 绝对文件路径
    • 文件的完整路径
  3. line: 行号信息
    • 对于类:包含类的起始行和结束行
    • 对于函数:包含函数的起始行和结束行
    • 对于引用:包含引用的行号
  4. name: 标识符名称
    • 类名或函数名
  5. identifier: 标识符类型
    • "def": 表示定义(类或函数的定义)
    • "ref": 表示引用(对类或函数的引用)
  6. category: 类别
    • "class": 表示这是一个类
    • "function": 表示这是一个函数
  7. 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)

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

sheep

think again

点赞
< 上一篇

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS