Skill 安装
多 Agent 安装npx skills add https://github.com/axiomhq/skills --skill spl-to-apl
使用 npx skills 快速安装,支持将 Skill 添加到多个兼容的 AI Agent。
Skill 调研报告
axiomhq/skills#spl-to-apl
Skill 更新日志
版本列表
无版本号
使用边缘 URL
无版本号
feat(spl-to-apl):更新到 v2 技能格式(#11)
* feat(spl-to-apl):更新到 v2 技能格式
- 更简洁,重点突出关键差异
- 结构更好,便于快速参考
- 相同的参考文件(已对齐)
Amp-Thread-ID: https://ampcode.com/threads/T-019be760-4790-7457-bf5c-9a840517f925
Co-authored-by: Amp
* chore:触发 CI
* feat(eval):将 model 添加为 configFlag 以便比较可见性
model 在静态元数据中,但未显示在 CLI 配置变更中。
将其添加为标志后,在比较运行时会出现。
Amp-Thread-ID: https://ampcode.com/threads/T-019bebb6-eb2b-766b-ab59-3bb0a1d3b7c7
Co-authored-by: Amp
* feat:使用 test-queries.md 中经过验证的测试查询作为评估用例
- 用 test-queries.md 中的 9 个已验证用例替换了 31 个合成用例
- 用例针对真实的 axiom playground 数据集(sample-http-logs、otel-demo-traces)
- 向 TranslationCase 类型添加了 dataset 和 notes 字段
- notes 记录数据集特性(例如 status 字段是字符串,需要 toint())
- 为未来 CI 集成以针对 axiom 运行 APL 做准备
Amp-Thread-ID: https://ampcode.com/threads/T-019bebda-ae70-74dd-954f-9b8e024f55b7
Co-authored-by: Amp
* fix:在 SPL 输入中使用实际数据集名称
根本原因:SPL 使用 index=http_logs,但预期 APL 使用 ['sample-http-logs']
- 模型正确地将索引名转换为数据集名
- 但评分器期望的是 axiom playground 数据集名称
修复:将 SPL 输入改为使用实际数据集名称:
- index=http_logs → index=sample-http-logs
- index=traces → index=otel-demo-traces
这确保当模型进行正确转换时,dataset-correct 评分器可以通过
* feat:添加 executes-successfully 评分器,针对 axiom 运行 APL
- 新评分器针对 axiom playground 执行生成的 APL 查询
- 时间范围在 harness 层注入(ago(1h) .. now()),因为模型不应需要知道这一点
- 从模型输出中提取 APL,移除代码围栏
- 如果查询执行无错误则返回 1,否则返回 0
需要新的 secrets:
- AXIOM_PLAYGROUND_URL
- AXIOM_PLAYGROUND_TOKEN
- AXIOM_PLAYGROUND_ORG_ID(可选)
Amp-Thread-ID: https://ampcode.com/threads/T-019bebda-ae70-74dd-954f-9b8e024f55b7
Co-authored-by: Amp
* chore:将 AXIOM_PLAYGROUND_* 重命名为 AXIOM_PLAY_*
* feat:results-match 评分器比较实际查询输出
- 针对 axiom playground 同时运行预期 APL 和生成的 APL
- 使用静态时间范围以获得可复现结果
- 比较列、行数和实际数据
- 返回分级分数:
- 1.0:完全匹配
- 0.75:结构相同,值不同
- 0.5-0.75:列相同,行数不同
- 0.25:列不匹配
- 0.0:查询失败
* chore:简化为单个 results-match 评分器
移除了冗余评分器:
- exact-match:过于严格,有效变体会失败
- key-operators-present:启发式,不是实际验证
- dataset-correct:已由 results-match 覆盖
- time-filter-present:我们会注入时间范围
results-match 才是真正的验证——运行查询并比较输出
* feat(eval):添加 time-range-correct 评分器,修复时间注入
- 添加 extractTimeExpression() 以从 APL 解析时间过滤器
- 添加 stripTimeFilter() 以移除现有时间过滤器
- injectTimeRange() 现在会替换现有过滤器(修复可复现性)
- 添加 evaluateTimeRange() 以通过 APL 比较持续时间
- 新的 TimeRangeCorrect 评分器检查模型输出正确的时间范围
- ResultsMatch 现在使用相同的静态时间窗口进行比较
- 处理不带方括号语法的数据集名称
Amp-Thread-ID: https://ampcode.com/threads/T-019bff5d-1146-7305-96d1-e111a62e4fa7
Co-authored-by: Amp
* fix(eval):处理 stripTimeFilter 中的嵌套括号
正则表达式在 ago(1h) 内的第一个 ) 处停止,留下 '.. now())'
并破坏查询执行
Amp-Thread-ID: https://ampcode.com/threads/T-019bff5d-1146-7305-96d1-e111a62e4fa7
Co-authored-by: Amp
* refactor(eval):使用 API startTime/endTime 而不是正则注入
- API 参数控制时间范围,无需字符串操作
- stripTimeFilter 在执行前移除任何查询内时间过滤器
- 消除了在嵌套括号上出错的脆弱正则
Amp-Thread-ID: https://ampcode.com/threads/T-019bff5d-1146-7305-96d1-e111a62e4fa7
Co-authored-by: Amp
* fix(eval):当预期没有时间过滤器时,不要因省略时间过滤器而扣分
* fix(eval):从预期 APL 中移除时间过滤器
SPL 查询不指定时间范围(在 Splunk 中通过 UI 选择器设置)。
Axiom 文档示例也不包含时间过滤器。
移除了 TimeRangeCorrect 评分器,因为它现在始终为 1。
Amp-Thread-ID: https://ampcode.com/threads/T-019bff5d-1146-7305-96d1-e111a62e4fa7
Co-authored-by: Amp
* docs(eval):为测试用例添加来源归属
每个用例现在标记为 DOCS 或 EXTENDED,以指示
它是基于 Axiom 的 SPL 速查表还是我们手动验证的扩展模式。
* feat(eval):将数据集 schema 注入翻译提示
- 添加 getDatasetSchema() 以通过 APL getschema 获取字段名/类型
- 在内存中缓存 schema 结果以避免冗余 API 调用
- 在系统提示中包含 schema,使模型知道字段类型
- 修复模型对字符串 status 字段省略 toint() 的假阴性
- 根据文档技能审查清理冗余注释
Amp-Thread-ID: https://ampcode.com/threads/T-019c0028-86c0-772a-b132-f26f3b6b2f37
Co-authored-by: Amp
* fix(eval):为 schema 获取添加超时和错误处理
- 通过 AbortController 为 executeAplQuery 添加 30 秒超时
- 将 schema 获取包装在 try/catch 中以防止评估失败
- schema 获取失败现在记录警告并在没有 schema 的情况下继续
Amp-Thread-ID: https://ampcode.com/threads/T-019c0028-86c0-772a-b132-f26f3b6b2f37
Co-authored-by: Amp
* revert:移除 schema 注入(将在单独的 PR 中重新审视)
回滚 b981727 和 7e3dc2b——数据集 schema 注入实验
显示出前景但需要更多工作。保持评估 CI 处于可工作
状态以便合并。
Amp-Thread-ID: https://ampcode.com/threads/T-019c008d-fe62-774f-94fd-ee6ccabd3adb
Co-authored-by: Amp
* chore(eval):切换到 gemini-2.5-flash
* Revert "chore(eval):切换到 gemini-2.5-flash"
This reverts commit 8dc87ff531d1d5ee200aa7e05dba0144f83c4b3f.
* feat(spl-to-apl):指示模型在翻译前获取 schema
* feat(spl-to-apl):添加数据集 schema 参考和工具使用日志
- 添加 reference/dataset-schemas.md,包含原始 getschema 输出
- 在评估中记录工具调用以供验证
- 更新 SKILL.md 以引用 schema 文档
Amp-Thread-ID: https://ampcode.com/threads/T-019c008d-fe62-774f-94fd-ee6ccabd3adb
Co-authored-by: Amp
* feat(eval):添加 skill-loaded 评分器以验证模型使用技能工具
Amp-Thread-ID: https://ampcode.com/threads/T-019c008d-fe62-774f-94fd-ee6ccabd3adb
Co-authored-by: Amp
* feat(eval):添加 schema-read 评分器以验证模型读取参考文件
Amp-Thread-ID: https://ampcode.com/threads/T-019c008d-fe62-774f-94fd-ee6ccabd3adb
Co-authored-by: Amp
* feat(eval):跟踪模型读取了哪些文件,而不仅仅是它调用了 readFile
Amp-Thread-ID: https://ampcode.com/threads/T-019c008d-fe62-774f-94fd-ee6ccabd3adb
Co-authored-by: Amp
* docs(eval-tooling):将 Axiom Playground 环境变量添加到 .env.example
Amp-Thread-ID: https://ampcode.com/threads/T-019c0497-6c51-7113-a9a0-bf9ea2efe9e2
Co-authored-by: Amp
* feat(spl-to-apl):迭代 schema-read 行为
- 添加 DESIGN-NOTES.md 记录迭代发现
- 为本地运行向评估添加 dotenv 加载
- 更新 SKILL.md,加入 schema-read 指令和输出格式指导
- 最佳结果:11% schema-read,78% results-match
关键发现:工作流示例驱动 schema 读取(66%),但会导致
输出污染。显式 readFile 指令有帮助,但模型
仍然不一致地读取 schema 文件。
核心矛盾:类型信息是数据集特定的(无法嵌入),
但教授“检查 schema”行为需要会被复制到输出中的示例。
Amp-Thread-ID: https://ampcode.com/threads/T-019c0497-6c51-7113-a9a0-bf9ea2efe9e2
Co-authored-by: Amp
* docs(spl-to-apl):添加 schema-read 发现报告
Amp-Thread-ID: https://ampcode.com/threads/T-019c0497-6c51-7113-a9a0-bf9ea2efe9e2
Co-authored-by: Amp
* feat(spl-to-apl):通过类型转换启发式实现 100% results-match
将方法从“读取 schema 以检查类型”改为“在数值比较前
始终转换”。防御性启发式普遍有效,无需 schema 读取。
结果:100% results-match(稳定)
Amp-Thread-ID: https://ampcode.com/threads/T-019c0497-6c51-7113-a9a0-bf9ea2efe9e2
Co-authored-by: Amp
* refactor(eval):将输出简化为仅 results-match
skill-loaded 和 schema-read 现在仅作为调试用的日志指标,
不计分。更清晰的评估输出,聚焦于实际目标。
Amp-Thread-ID: https://ampcode.com/threads/T-019c0497-6c51-7113-a9a0-bf9ea2efe9e2
Co-authored-by: Amp
* test(eval):将技能重置为 main 以进行基线运行
Amp-Thread-ID: https://ampcode.com/threads/T-019c0497-6c51-7113-a9a0-bf9ea2efe9e2
Co-authored-by: Amp
* feat(spl-to-apl):添加类型转换启发式以实现 100% results-match
像 status 这样的字段通常存储为字符串。在数值比较前始终转换:
toint(status) >= 500,而不是 status >= 500。
将 results-match 从约 67% 提升到 100%。
Amp-Thread-ID: https://ampcode.com/threads/T-019c0497-6c51-7113-a9a0-bf9ea2efe9e2
Co-authored-by: Amp
---------
Co-authored-by: Amp
无版本号
feat(spl-to-apl/evals):执行生成的查询而不是合成测试用例(#15)
* feat(spl-to-apl):更新到 v2 技能格式
- 更简洁,重点突出关键差异
- 结构更好,便于快速参考
- 相同的参考文件(已对齐)
Amp-Thread-ID: https://ampcode.com/threads/T-019be760-4790-7457-bf5c-9a840517f925
Co-authored-by: Amp
* chore:触发 CI
* feat(eval):将 model 添加为 configFlag 以便比较可见性
model 在静态元数据中,但未显示在 CLI 配置变更中。
将其添加为标志后,在比较运行时会出现。
Amp-Thread-ID: https://ampcode.com/threads/T-019bebb6-eb2b-766b-ab59-3bb0a1d3b7c7
Co-authored-by: Amp
* feat:使用 test-queries.md 中经过验证的测试查询作为评估用例
- 用 test-queries.md 中的 9 个已验证用例替换了 31 个合成用例
- 用例针对真实的 axiom playground 数据集(sample-http-logs、otel-demo-traces)
- 向 TranslationCase 类型添加了 dataset 和 notes 字段
- notes 记录数据集特性(例如 status 字段是字符串,需要 toint())
- 为未来 CI 集成以针对 axiom 运行 APL 做准备
Amp-Thread-ID: https://ampcode.com/threads/T-019bebda-ae70-74dd-954f-9b8e024f55b7
Co-authored-by: Amp
* fix:在 SPL 输入中使用实际数据集名称
根本原因:SPL 使用 index=http_logs,但预期 APL 使用 ['sample-http-logs']
- 模型正确地将索引名转换为数据集名
- 但评分器期望的是 axiom playground 数据集名称
修复:将 SPL 输入改为使用实际数据集名称:
- index=http_logs → index=sample-http-logs
- index=traces → index=otel-demo-traces
这确保当模型进行正确转换时,dataset-correct 评分器可以通过
* feat:添加 executes-successfully 评分器,针对 axiom 运行 APL
- 新评分器针对 axiom playground 执行生成的 APL 查询
- 时间范围在 harness 层注入(ago(1h) .. now()),因为模型不应需要知道这一点
- 从模型输出中提取 APL,移除代码围栏
- 如果查询执行无错误则返回 1,否则返回 0
需要新的 secrets:
- AXIOM_PLAYGROUND_URL
- AXIOM_PLAYGROUND_TOKEN
- AXIOM_PLAYGROUND_ORG_ID(可选)
Amp-Thread-ID: https://ampcode.com/threads/T-019bebda-ae70-74dd-954f-9b8e024f55b7
Co-authored-by: Amp
* chore:将 AXIOM_PLAYGROUND_* 重命名为 AXIOM_PLAY_*
* feat:results-match 评分器比较实际查询输出
- 针对 axiom playground 同时运行预期 APL 和生成的 APL
- 使用静态时间范围以获得可复现结果
- 比较列、行数和实际数据
- 返回分级分数:
- 1.0:完全匹配
- 0.75:结构相同,值不同
- 0.5-0.75:列相同,行数不同
- 0.25:列不匹配
- 0.0:查询失败
* chore:简化为单个 results-match 评分器
移除了冗余评分器:
- exact-match:过于严格,有效变体会失败
- key-operators-present:启发式,不是实际验证
- dataset-correct:已由 results-match 覆盖
- time-filter-present:我们会注入时间范围
results-match 才是真正的验证——运行查询并比较输出
* feat(eval):添加 time-range-correct 评分器,修复时间注入
- 添加 extractTimeExpression() 以从 APL 解析时间过滤器
- 添加 stripTimeFilter() 以移除现有时间过滤器
- injectTimeRange() 现在会替换现有过滤器(修复可复现性)
- 添加 evaluateTimeRange() 以通过 APL 比较持续时间
- 新的 TimeRangeCorrect 评分器检查模型输出正确的时间范围
- ResultsMatch 现在使用相同的静态时间窗口进行比较
- 处理不带方括号语法的数据集名称
Amp-Thread-ID: https://ampcode.com/threads/T-019bff5d-1146-7305-96d1-e111a62e4fa7
Co-authored-by: Amp
* fix(eval):处理 stripTimeFilter 中的嵌套括号
正则表达式在 ago(1h) 内的第一个 ) 处停止,留下 '.. now())'
并破坏查询执行
Amp-Thread-ID: https://ampcode.com/threads/T-019bff5d-1146-7305-96d1-e111a62e4fa7
Co-authored-by: Amp
* refactor(eval):使用 API startTime/endTime 而不是正则注入
- API 参数控制时间范围,无需字符串操作
- stripTimeFilter 在执行前移除任何查询内时间过滤器
- 消除了在嵌套括号上出错的脆弱正则
Amp-Thread-ID: https://ampcode.com/threads/T-019bff5d-1146-7305-96d1-e111a62e4fa7
Co-authored-by: Amp
* fix(eval):当预期没有时间过滤器时,不要因省略时间过滤器而扣分
* fix(eval):从预期 APL 中移除时间过滤器
SPL 查询不指定时间范围(在 Splunk 中通过 UI 选择器设置)。
Axiom 文档示例也不包含时间过滤器。
移除了 TimeRangeCorrect 评分器,因为它现在始终为 1。
Amp-Thread-ID: https://ampcode.com/threads/T-019bff5d-1146-7305-96d1-e111a62e4fa7
Co-authored-by: Amp
* docs(eval):为测试用例添加来源归属
每个用例现在标记为 DOCS 或 EXTENDED,以指示
它是基于 Axiom 的 SPL 速查表还是我们手动验证的扩展模式。
* feat(eval):将数据集 schema 注入翻译提示
- 添加 getDatasetSchema() 以通过 APL getschema 获取字段名/类型
- 在内存中缓存 schema 结果以避免冗余 API 调用
- 在系统提示中包含 schema,使模型知道字段类型
- 修复模型对字符串 status 字段省略 toint() 的假阴性
- 根据文档技能审查清理冗余注释
Amp-Thread-ID: https://ampcode.com/threads/T-019c0028-86c0-772a-b132-f26f3b6b2f37
Co-authored-by: Amp
* fix(eval):为 schema 获取添加超时和错误处理
- 通过 AbortController 为 executeAplQuery 添加 30 秒超时
- 将 schema 获取包装在 try/catch 中以防止评估失败
- schema 获取失败现在记录警告并在没有 schema 的情况下继续
Amp-Thread-ID: https://ampcode.com/threads/T-019c0028-86c0-772a-b132-f26f3b6b2f37
Co-authored-by: Amp
* revert:移除 schema 注入(将在单独的 PR 中重新审视)
回滚 b981727 和 7e3dc2b——数据集 schema 注入实验
显示出前景但需要更多工作。保持评估 CI 处于可工作
状态以便合并。
Amp-Thread-ID: https://ampcode.com/threads/T-019c008d-fe62-774f-94fd-ee6ccabd3adb
Co-authored-by: Amp
---------
Co-authored-by: Amp
无版本号
chore:从所有 SKILL.md frontmatter 中移除 skill_path
Amp-Thread-ID: https://ampcode.com/threads/T-019bef99-b11e-733d-acd8-658ea022ea6d
Co-authored-by: Amp
无版本号
为所有技能添加 skill_path 以兼容 harness
一些 agent harness 不会自动跟踪技能文件
在磁盘上的位置。skill_path 字段告诉它们从技能位置解析相对
路径(scripts/、reference/、templates/)。
Amp-Thread-ID: https://ampcode.com/threads/T-019bef72-c734-7483-9bd2-5cee608d288c
Co-authored-by: Amp
无版本号
推荐使用个人访问令牌而不是 API 令牌
无版本号
为所有 README 添加交互式 Axiom 配置设置和配置章节
无版本号
为所有技能添加 README,向主 README 添加 npx 安装说明
Amp-Thread-ID: https://ampcode.com/threads/T-019bedbd-4dba-71cc-a193-5ce7890bfb1f
Co-authored-by: Amp
无版本号
feat(eval):将 model id 添加到评估元数据(#12)
- 从 harnesses index 导出 MODEL_ID
- 包含在 spl-to-apl 评估元数据中
Amp-Thread-ID: https://ampcode.com/threads/T-019be760-4790-7457-bf5c-9a840517f925
Co-authored-by: Amp
无版本号
revert:恢复原始 spl-to-apl SKILL.md
意外包含在 #10 squash merge 中
Amp-Thread-ID: https://ampcode.com/threads/T-019be760-4790-7457-bf5c-9a840517f925
Co-authored-by: Amp
无版本号
feat(eval):将 git 分支和提交添加到评估配置标志(#10)
* feat(spl-to-apl):更新到 v2 技能格式
- 更简洁,重点突出关键差异
- 结构更好,便于快速参考
- 相同的参考文件(已对齐)
* chore:空白变更以触发评估
* feat(eval):将 git 分支和提交添加到评估配置标志
- 向 app-scope schema 添加 git.branch 和 git.commit 标志
- 在两个 CI 工作流中通过 CLI 传递标志
- 在 spl-to-apl 评估的 configFlags 中包含 git
- 支持在 axiom ui 中按分支/提交过滤评估运行
Amp-Thread-ID: https://ampcode.com/threads/T-019be760-4790-7457-bf5c-9a840517f925
Co-authored-by: Amp
---------
Co-authored-by: Amp
无版本号
fix:默认使用 tool-simulation harness,添加丰富的评估元数据
无版本号
chore:触发评估工作流
无版本号
feat(eval):为 harness 结果添加元数据丰富
- 添加 metadata.ts,包含 git 提交、内容哈希、模型解析
- Harness 返回带有 output + metadata 的 HarnessResult
- 收集 model.id、model.provider、skill.path、skill.contentHash、
skill.gitCommit、harness.type、tokens、latency、tools.called
- 更新评估以使用 TaskOutput 类型供评分器使用
- 使元数据显式化以便查询,即使 OTEL 已捕获它
Amp-Thread-ID: https://ampcode.com/threads/T-019be252-fd58-740b-9fa3-efb5eaa252f8
Co-authored-by: Amp
无版本号
feat:添加用于技能评估的 eval-tooling 框架
- 添加 eval-tooling/ 及 harness 基础设施
- prompt-injection:将技能 + 参考注入系统提示
- tool-simulation:通过工具模拟 Amp 的技能加载
- 为技能特定评估添加 .meta/ 目录
- 添加 spl-to-apl 评估,包含 31 个测试用例和 4 个评分器
- 使用 Axiom 评估框架,支持可配置的 harness 类型
Amp-Thread-ID: https://ampcode.com/threads/T-019be230-cd56-772c-8c63-977f2f3fb6fb
Co-authored-by: Amp
无版本号
chore:将 spl-to-apl 技能重构到 skills/ 目录
无版本号
chore:初始仓库结构
暂无评论...