开源排名算法工具raink:利用LLM实现高效文档排序

Bishop Fox开源raink工具,采用基于LLM的列表排序算法,解决传统方法在处理大规模数据排序时的效率与准确性问题,可应用于漏洞识别、代码差异分析等安全研究场景。

raink:使用LLMs进行文档排序

TL;DR:Bishop Fox发布了raink命令行工具,采用新型基于LLM的列表排序算法。该工具最初在RVASec 2024展示,可解决复杂排序问题,包括将代码差异与安全公告关联。

算法背景

传统排序方法面临三大挑战:

  1. 点对点评分:LLM难以生成一致的客观分数
  2. 列表完整性:模型常丢失部分输入项或拒绝执行任务
  3. 结果一致性:相同输入在不同上下文可能产生不同排序

核心算法

raink采用三级优化架构:

  1. 初始批处理

    • 将输入列表随机分块(默认每组10项)
    • 对每个分块进行独立排序
    • 记录每项在分块中的相对位置作为初始分数
  2. 多轮验证

    • 重复10次分块排序过程
    • 计算各项位置的平均值形成初步排名
  3. 递归优化

    • 聚焦排名靠前的子集(如前50%)
    • 逐层细化直到确定最终排序

技术对比

方法类型 时间复杂度 特点
点对点 O(N) 评分不一致
成对排序 O(N²) 精度高但耗时
raink O(N log N) 平衡效率与准确性

实际应用

案例1:TLD数学相关性排序

1
raink -f tlds-iana.lst -r 10 -s 10 -p '按"数学"相关性降序排列这些顶级域名'

输出结果

  1. edu
  2. university
  3. academy
  4. education
  5. school

案例2:漏洞识别

1
raink -f code-diffs.jsonl -r 20 -s 3 -p "根据安全公告分析代码变更相关性"

测试表明:

  • 60%概率准确定位关键函数
  • 平均识别准确率达top 7%

性能表现

使用GPT-4o mini处理1445个TLD:

  • 耗时<2分钟
  • API调用次数减少83% vs 传统成对排序

项目已开源:https://github.com/bishopfox/raink

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计