raink:使用LLMs进行文档排序
TL;DR:Bishop Fox发布了raink命令行工具,采用新型基于LLM的列表排序算法。该工具最初在RVASec 2024展示,可解决复杂排序问题,包括将代码差异与安全公告关联。
算法背景
传统排序方法面临三大挑战:
- 点对点评分:LLM难以生成一致的客观分数
- 列表完整性:模型常丢失部分输入项或拒绝执行任务
- 结果一致性:相同输入在不同上下文可能产生不同排序
核心算法
raink采用三级优化架构:
-
初始批处理:
- 将输入列表随机分块(默认每组10项)
- 对每个分块进行独立排序
- 记录每项在分块中的相对位置作为初始分数
-
多轮验证:
- 重复10次分块排序过程
- 计算各项位置的平均值形成初步排名
-
递归优化:
- 聚焦排名靠前的子集(如前50%)
- 逐层细化直到确定最终排序
技术对比
方法类型 | 时间复杂度 | 特点 |
---|---|---|
点对点 | O(N) | 评分不一致 |
成对排序 | O(N²) | 精度高但耗时 |
raink | O(N log N) | 平衡效率与准确性 |
实际应用
案例1:TLD数学相关性排序
|
|
输出结果:
- edu
- university
- academy
- education
- school
案例2:漏洞识别
|
|
测试表明:
- 60%概率准确定位关键函数
- 平均识别准确率达top 7%
性能表现
使用GPT-4o mini处理1445个TLD:
- 耗时<2分钟
- API调用次数减少83% vs 传统成对排序
项目已开源:https://github.com/bishopfox/raink