任务 ID: task-t038p1-bd4413  |  文件: task.md  |  最后修改: 2026-03-01 19:07:07

Task task-t038p1-bd4413 — SearXNG 基础设施配置(T038-P1)

文件路径

原始需求

为 SearXNG 搜索引擎容器完成三项基础设施配置:
1. Docker restart policy — 设置 unless-stopped,保证容器自动恢复
2. 代理池配置 — 将 9 个 SOCKS5 代理节点配入 SearXNG outgoing.proxies,防反爬
3. 自定义搜索引擎 — 通过 json_engine 模板添加 5-10 个新引擎(ClinicalTrials/OpenFDA/WorldBank/CoinGecko/Bangumi 等)

背景:这是搜索工具整合项目(T038)的第一阶段,后续会将 SearXNG 封装进 ai-search CLI。

关键信息


执行链

coder → reviewer → 爱衣质检


各 Agent 职责


Ai.Dev 💻(session key: agent:coder:main

模型:claude-opus-4-6

任务:执行 SearXNG 基础设施配置的全部开发和配置工作。

具体步骤:

  1. 确认配置持久化方式
    bash docker inspect searxng --format '{{json .Mounts}}' | python3 -m json.tool
    确认 settings.yml 是通过 bind mount 还是 volume,确定编辑路径。

  2. 设置 Docker restart policy
    bash docker update --restart unless-stopped searxng

  3. 确认容器内访问宿主机的地址
    bash docker inspect searxng --format '{{.HostConfig.NetworkMode}}' docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'
    bridge 模式用网关 IP(通常 172.17.0.1),不能用 127.0.0.1

  4. 配置代理池 — 在 settings.yml 的 outgoing 节添加:
    yaml outgoing: proxies: all://: - socks5h://<网关IP>:50002 - socks5h://<网关IP>:50004 - ... (共9个) extra_proxy_timeout: 5

  5. 添加自定义引擎 — 每个引擎:

  6. curl 测试 API 返回 JSON 格式
  7. 确认 results_query/title_query/url_query/content_query 路径
  8. 写入 settings.yml 的 engines 节

必须添加(已确认 API 可用):
| 引擎 | shortcut | 分类 |
|------|----------|------|
| ClinicalTrials | ct | science, medical |
| OpenFDA | fda | medical |
| WorldBank | wb | finance |
| CoinGecko | cg | finance |
| Bangumi | bgm | media |

测试后决定
| 引擎 | 注意事项 |
|------|---------|
| Semantic Scholar 增强版 | 含 citationCount/year 等额外字段 |
| bioRxiv | URL 格式特殊,可能不支持关键词搜索 |
| medRxiv | 同 bioRxiv |
| IMF | JSON 格式可能不稳定,失败则跳过 |
| 萌娘百科 | 海外 IP 403,代理池配好后测试 |

  1. 重启容器并验证
    bash docker restart searxng && sleep 5 # 验证每个自定义引擎 for engine in clinicaltrials openfda worldbank coingecko bangumi; do echo "=== $engine ===" curl -s "http://127.0.0.1:8889/search?q=test&format=json&engines=$engine" | \ python3 -c "import sys,json; d=json.load(sys.stdin); r=d.get('results',[]); print(f'Results: {len(r)}')" done

开始时:
1. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh coder receive "T038-P1 SearXNG基础设施" task-t038p1-bd4413

完成后:
1. 在 task 目录创建 T038-P1-RESULT.md,记录每个引擎测试结果、代理池测试、最终配置 diff
2. 将执行日志追加到 session.md
3. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh coder handoff "T038-P1 SearXNG基础设施" reviewer task-t038p1-bd4413
4. sessions_send 通知 reviewer(agent:reviewer:main必须传 timeoutSeconds=0):
task_id=task-t038p1-bd4413 task=/root/.openclaw/workspace/tasks/task-t038p1-bd4413/task.md


Ai.Rev 📋(session key: agent:reviewer:main

模型:claude-sonnet-4-6(默认)

任务:审查 coder 的配置工作,执行验证测试,确保所有引擎正常工作。

审查要点:

  1. 配置完整性
  2. settings.yml 代理池是否包含全部 9 个节点
  3. 代理地址是否正确(网关 IP,不是 127.0.0.1)
  4. 每个自定义引擎的 json_engine 配置是否完整

  5. 功能验证(逐个引擎测试)
    bash # 每个引擎至少测 2 个不同查询 for engine in clinicaltrials openfda worldbank coingecko bangumi; do for query in "diabetes" "cancer"; do echo "=== $engine: $query ===" curl -s "http://127.0.0.1:8889/search?q=$query&format=json&engines=$engine" | \ python3 -c " import sys,json d=json.load(sys.stdin) r=d.get('results',[]) print(f' Results: {len(r)}') if r: print(f' First: {r[0].get(\"title\",\"\")[:50]}') print(f' URL: {r[0].get(\"url\",\"\")[:60]}') " done done

  6. 代理池验证
    bash # Google 搜索应该通过代理返回结果(之前可能被限速) curl -s "http://127.0.0.1:8889/search?q=test&format=json&engines=google" | \ python3 -c "import sys,json; print(f'Google results: {len(json.load(sys.stdin).get(\"results\",[]))}')"

  7. 分类聚合验证
    bash # 验证自定义引擎是否正确纳入分类 curl -s "http://127.0.0.1:8889/search?q=diabetes&format=json&categories=science" | \ python3 -c " import sys,json d=json.load(sys.stdin) engines = set(r.get('engine','') for r in d.get('results',[])) print(f'Science engines: {engines}') "

  8. restart policy 验证
    bash docker inspect searxng --format '{{.HostConfig.RestartPolicy.Name}}' # 应输出 unless-stopped

开始时:
1. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh reviewer receive "T038-P1 SearXNG基础设施" task-t038p1-bd4413

完成后:
1. 将审查报告追加到 session.md(通过/不通过 + 具体问题)
2. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh reviewer handoff "T038-P1 SearXNG基础设施" main task-t038p1-bd4413
3. sessions_send 通知爱衣(agent:main:main必须传 timeoutSeconds=0):
task_id=task-t038p1-bd4413 task=/root/.openclaw/workspace/tasks/task-t038p1-bd4413/task.md


⚠️ 爱衣质检 SOP(收到最终通知后执行)

Step 1:评估工作区大小

du -sb /root/.openclaw/workspace/tasks/task-t038p1-bd4413/

Step 2:读取 session.md

wc -l /root/.openclaw/workspace/tasks/task-t038p1-bd4413/session.md

若行数 N > 0,read session.md 全文。

Step 3:质检要点

通用检查(每次必须):
- 产出是否符合原始需求?
- 执行过程是否有明显问题?
- Agent 间是否有未解决的分歧?

任务特定检查:
- 所有 5 个必须引擎(ClinicalTrials/OpenFDA/WorldBank/CoinGecko/Bangumi)是否全部可搜索?
- 代理池 9 个节点是否全部配入?
- Docker restart policy 是否设置为 unless-stopped?
- 分类聚合是否正确(自定义引擎出现在对应分类搜索结果中)?
- 测试性引擎(S2增强/bioRxiv/medRxiv/IMF/萌娘百科)的结果记录是否清晰?

Step 4:输出结论

通过

  1. 发工作日志:
    bash /root/.openclaw/workspace/scripts/log-to-channel.sh main done "T038-P1 SearXNG基础设施" task-t038p1-bd4413
  2. message 工具发送给主人(telegram, 92763607),归纳任务结果
    ⚠️ 必须调用 message 工具,不能只在主对话回复

不通过(rejectCount == 0)
1. 分析问题根因,设计新执行链
2. 创建新的 task.md(task_id 加后缀 -retry1),session.md 独立
3. 在原 session.md 末尾追加一行 rejectCount=1
4. sessions_send 给新执行链起始 Agent
5. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh main retry "T038-P1 SearXNG基础设施" "<新执行链>" <起始role> 1 task-t038p1-bd4413

rejectCount >= 1(第二次仍失败)
1. 发工作日志:
bash /root/.openclaw/workspace/scripts/log-to-channel.sh main fail "T038-P1 SearXNG基础设施" task-t038p1-bd4413
2. message 主人,归纳问题和两次失败原因,请主人裁决

超限处理(工作区 > 80KB)

  1. 仅读 task.md(了解需求)
  2. 读 session.md 末尾 200 行:
    bash wc -l /root/.openclaw/workspace/tasks/task-t038p1-bd4413/session.md # 获取总行数 N # 然后 read offset=max(1, N-200) limit=200
  3. message 主人:任务已完成,但工作区内容繁多(XXkB),建议人工审计,附简单归纳