Research Literature Search
目标
将主题和 5–25 条查询转换为可复核的候选文献 bundle。负责召回、字段规范化、canonical 去重、来源审计和可选摘要补全;不负责评分、纳入/排除、子主题、配额、综述写作、BibTeX 或 PDF/Word 导出。research-literature-review 必须消费本 Skill 的 manifest 和 canonical 候选,不得复制 provider 或重做去重。
流程
输入
- 必需:
topic与显式查询 JSON(--query-file/--queries);支持{"queries": [...]}、对象数组或字符串数组。 - 空查询剔除;有效查询默认 5–25 条,不满足即 fail-closed。
- 可选:
domain、年份/文献类型/预印本过滤、provider 顺序、每查询/总量上限、scope_root。 - 输出必须位于调用方
scope_root内;拒绝路径穿越和 manifest 外部绝对路径。
执行步骤
python3 skills/research-literature-search/scripts/search_runner.py run --topic "HER2 antibody-drug conjugates in breast cancer" --query-file ./queries.json --output-dir ./.bensz-api/search-bundle
python3 skills/research-literature-search/scripts/search_runner.py enrich-abstracts --input selected_papers.jsonl --output selected_papers_enriched.jsonl
python3 skills/research-literature-search/scripts/search_runner.py validate --bundle ./.bensz-api/search-bundle
run 默认不补全全量摘要;选文后按需执行 enrich-abstracts。provider 按 provider_priority 执行 priority-fallback-topup,达到约 70% 阈值即停止,不承诺全 provider union;mcp/duckduckgo 在纯 Python runner 中记为 skipped/host tool required。每次尝试写入 attempts、Search Log、retrieval_strategy 和 topup_threshold。
输出
manifest.json 是唯一入口,每次运行使用独立目录:
manifest.json
candidates_raw.jsonl # 脱敏的最小 provider 信封
candidates_normalized.jsonl # rls.paper.v1,去重前
candidates_deduped.jsonl # canonical 候选池
provenance.jsonl # provider/query/rank 映射
dedupe_map.json # 合并边与选择依据
search_log.json # 可读审计日志
候选必须符合 rls.paper.v1:非空 title、字符串数组 authors、identifiers、abstract_status、publication、sources、query_matches、quality_warnings,并保留旧扁平字段;缺失值只能用 null/[]。manifest status 仅为 success、partial_success、failed;review 只接受前两者并校验 hash、schema、数量。
输出管理
临时产物写入任务工作区,正式交付物按项目约定保存;未经授权不覆盖、删除或远程写入已有文件。所有路径必须限制在授权项目内。
校验
运行 Skill 已有的静态检查、脚本验证或人工复核,并记录通过标准。manifest 保存查询 SHA-256、provider policy、attempts、截断、去重参数、缓存模式、版本和 artifact hash。
失败与恢复
provider 返回 null、非对象或嵌套 source 为 null 时跳过/保留并记录计数或 warning;无合法候选返回 no_valid_candidates,不得静默丢弃。preprint 按领域 profile(auto→computer_science/mathematics/biology/medicine/general)标记并审计,搜索层不认证结论。旧 title/year/id 仅经显式 legacy adapter 并附 legacy_adapted warning;新增 provider/union 策略需升级 contract。
约束
- JSON 使用 UTF-8、稳定排序和确定性序列化;同夹具/配置下顺序可比较。
- 不写入 API key、Cookie、完整响应或其它凭据;不得将未验证信息伪装为确定结论。
公共硬约束
本块由 docs/templates/skill-common-constraints.md 统一维护;每个 SKILL.md 的 ## 约束 必须逐字同步本块,不得在副本中改写公共规则。
- 任务需要落盘时,使用唯一的
./.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/根目录;共享材料放入shared/,Skill 专属材料放入该 Skill 的input/、output/、log/。 - 正式交付物、源代码和正式计划按项目约定保存,不写入任务工作区;未经授权不覆盖、删除、迁移或远程写入。
- 项目维护变更检查 BAC 可用性并记录需求、AI 产出、工具结果、文件改动和验证摘要;BAC 只做过程审计,不替代署名、责任或合规判断。
- 不记录 API Key、访问令牌、密码、Cookie、环境/凭据文件、私有 Prompt、身份信息、本地用户名、主机名或不必要的大体积原始数据。
- 文件路径必须规范化并限制在授权项目范围内;外部 URL、子进程和网络访问遵循最小权限,防止路径穿越、SSRF 和命令注入。
- Skill 版本唯一记录在自身
config.yaml:skill_info.version;公开 API、协议、目录或配置变更同步文档与CHANGELOG.md。 bensz-collect-bugs是一个 Agent Skill;仅将 Bensz Agent Skill 或 Bensz 基础设施本身的设计缺陷交给它。先脱敏写入~/.bensz-skills/bugs/,当前任务不中断,只有用户明确要求才公开上报,禁止直接修改用户已安装的 Skill 源码。
Skill 专属约束
不得超出本 Skill description 和上方流程所声明的范围;不将未验证的信息伪装成确定结论。