Install
openclaw skills install knot-agent-eval针对 Knot AG-UI 协议的 RAG 智能体进行全流程金标准评测。覆盖: 题目生成(MCP知识库检索→拉文档切片→LLM出题 2-3 题)→ 批量提问 → 关键词/文献双路评分 → AI 逐题语义复审(对 PARTIAL/FAIL)→ 10 类归因(A1/A2/A3/B1/B2/B3/C1/C2/C3/C4)→ Jinja2 报告渲染 → Markdown/HTML 一键导出。 当用户需要评测 Knot 上的智能体(如 IEG 服采、艺库 Agent)、生成金标准评测报告、 分析 FAIL 题归因、对 PARTIAL/FAIL 题做 AI 语义复审时使用。 零硬编码:所有接入信息(Knot URL / agent_id / api_token / kb_mcp / llm) 必须由用户在 eval_config.yaml 中填写。 触发词:Knot评测、金标准评测、知识库评测、Agent评测、归因分析、文献命中率、 关键词命中率、AI语义复审、IEG服采、艺库Agent、RAG评测。
openclaw skills install knot-agent-eval当用户请求满足以下任意条件时调用本 Skill:
agent-eval Skill)config/eval_config.example.yaml 复制到工作目录改名为 eval_config.yaml# REQUIRED 字段:
agent.knot_url(如 https://knot.woa.com)agent.agent_idagent.usernameagent.api_token 或 agent.api_token_env(指向环境变量)agent.model(如 deepseek-v4-flash,必须小写)agent.temperature(建议 0.3)agent.agent_name(出现在报告标题)report.question_source(题库来源说明)agent.kb_mcp.url(MCP 端点,如 http://mcp.knot.woa.com/open/mcp)agent.kb_mcp.api_token_env(MCP Token 环境变量名,启动前需 export)agent.kb_mcp.knowledge_uuid(知识库 UUID)agent.kb_mcp.search_domain(检索域,指定后可提升检索准确度)agent.llm.base_url(出题 LLM API 地址,如 https://api.openai.com/v1)agent.llm.api_key_env(LLM API Key 环境变量名,启动前需 export)agent.llm.model(出题模型,如 gpt-4o-mini)qa_gen.doc_names 文档名列表——最完整可控qa_gen.auto_discover_docs: true,Skill 通过 MCP 多轮检索推断知识库文档目录doc_names 中手动列出的文档 + 自动发现的文档会合并python scripts/run_pipeline.py --config eval_config.yaml --stage gen
执行流程(v3:MCP 直查 + LLM 出题):
qa_gen.doc_names / doc_list_file 中用户手动指定的文档名auto_discover_docs=true,通过 MCP 多轮检索推断文档目录(可能不完整)doc_names 列出的文档名,直接调 MCP knowledgebase_search 检索知识库切片prompts/qa_gen_prompt.md 让 OpenAI 兼容 API(LLMClient) 为每篇有实质内容的文档生成 2-3 题eval_questions.jsonpython scripts/run_pipeline.py --config eval_config.yaml --stage eval
读 eval_questions.json → 逐题调 Knot API → 关键词命中率(5 层匹配:精确/去标点/去停用词/片段/同义短语 + 等价映射) → 文献命中率(3 路匹配) → 自动归因初判 → 写 eval_results.json(每题写盘,断点续跑)
python scripts/run_pipeline.py --config eval_config.yaml --stage ai_review
脚本 dump 出 pending_ai_review.json(含所有 PARTIAL/FAIL 题),然后退出。
若配置了 ai_review.audit_pass.enabled=true,还会按比例抽样 PASS 题一起送审(兜底评分虚高)。
接下来由你(当前对话 AI)逐题做语义复审,按以下规则:
pending_ai_review.json 的 items,对每一题独立调用 prompts/ai_review_prompt.md 给出 13 字段的 JSON 复审结论ai_review_results.jsonpython scripts/run_pipeline.py --config eval_config.yaml --stage merge_review,render,export
ai_review_results.json 字段合并到 eval_results.json(含 A3 自动修正:翻转为PASS且原归因为C4时自动修正为A3)templates/report_template.j2 渲染 eval_report.mdscripts/md2html.py 把 md 转成 eval_report.htmlpython scripts/run_pipeline.py --config eval_config.yaml --stage all
当跑到 ai_review 时,脚本停下,等待你完成 AI 复审,再手动续跑 --stage merge_review,render,export。
run_pipeline.py 启动时强校验所有 REQUIRED 字段,缺失立即报错退出。api_token_env / api_key_env 指向环境变量,而非在 yaml 中明文填写。明文凭据会随配置文件一起被 git 追踪或截图泄露。x-knot-api-token header,Knot Agent 用 x-knot-api-token + x-knot-api-user header。两者 token 可能相同也可能不同,取决于配置。knowledgebase_search 是唯一可用的工具,resources/list 和 prompts/list 均返回空。无法通过 MCP 直接列举文档目录或获取完整文档原文,只能通过多轮检索推断。search() 调用需要先 initialize → 获取 Mcp-Session-Id → notifications/initialized → tools/call,完成后会话结束。不支持在同一会话中连续多次 tools/call。delta 不是 content;事件类型是 TEXT_MESSAGE_CONTENT 不是 content;THINKING_TEXT_MESSAGE_* 不能进入正文(会污染答案)。requests.iter_lines(decode_unicode=True) 偶尔把 utf-8 当 latin-1 解读 → 直接 chunk.decode("utf-8") 即可(requests.iter_lines() 默认不做 unicode 解码)。agent-eval 通用 Skill 的关键差异。auto_attribution、ai_review.recommended_attribution 和 final_attribution 三个字段。渲染器优先读取 final_attribution,漏改会导致报告仍显示旧归因。auto_discover_docs=true 通过 MCP 多轮检索推断文档目录,但只有被 query 命中的文档才会被发现。建议开启后仍核对并补充遗漏文档到 doc_names。json ... ),_parse_qa_response 已处理此情况。若 LLM 返回格式不稳定,可调整 prompt 或换更稳定的模型。grading.synonym_phrases 字典可配置标准关键词到同义短语的映射,作为第5层匹配兜底。当 synonym 命中数 > 精确命中数时,标记 scoring_method_limited=True,自动触发 A3 归因。_headers() 方法中设置了 x-knot-knowledge-uuids,如果不带此头初始化 MCP,tools/list 会返回 0 个工具(即使 UUID 正确)。手动测试 MCP 时务必带上此头。完成 Skill 建设后,按以下步骤验证:
eval_config.yaml 启动,必须报错列出所有缺失的 REQUIRED 字段eval_results_v2_fixed.json 跑 --stage render,章节结构与 IEG服采智能小助手_金标准评测报告_v2_final.md 一致