# Constraint Satisfaction

> 当问题包含多个必须同时满足的限定条件时，如何系统拆解并交叉验证以锁定唯一答案

- Skill: `antins-labs/constraint-satisfaction` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add antins-labs/constraint-satisfaction`
- Raw SKILL.md: https://api.skillmd.com/api/skills/antins-labs/constraint-satisfaction/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: antins-labs (https://skillmd.com/u/antins-labs)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/antins-labs/constraint-satisfaction

---


# constraint_satisfaction

## 目标
解决“多条件交集”类搜索问题：用户给出的查询包含≥2个必须同时成立的限定条件（时间、身份、事件、属性、作品等），需要逐一验证并找到唯一满足全部条件的实体或答案。

## 适用场景
1. “哪位美国画家在1960年代创作了6幅关于宙斯与凡人相遇的作品，并曾拥有一辆修复的17世纪汽车？”
2. “哪条美国国道同时经过密歇根州St. Clair县的Clay Township，并连接到佛罗里达州Jacksonville？”
3. “哪个国际组织以调解政府间国际争端而闻名？”
4. “哪位非裔美国音乐家在1930年代从寄宿机构逃跑，后来成为1950年代著名流行二人组的一半？”
5. “哪些蛋白质同时具备结构功能和酶功能？”

## 不适用场景
- 单属性查找（如“《蒙娜丽莎》的作者是谁？”）
- 开放式列举（如“列举所有印象派画家”）
- 主观评价（如“最好看的科幻电影”）

## 核心原则
1. **先拆后合**：将复合问题拆成独立条件，分别验证后再交叉比对。
2. **先宽后窄**：先用最独特或最易验证的条件缩小范围，再逐步叠加剩余条件。
3. **交叉验证**：对候选答案反向检查是否满足所有条件，避免漏掉隐含约束。
4. **保留证据**：每一步记录来源，便于回溯和二次确认。
5. **稀有优先验证**：若已产生候选假设，优先验证最独特、出现概率最低的条件（如特定死因、罕见经历），以最小成本确认或排除假设，避免在常见属性上浪费预算。

## 标准执行流程
1. **条件拆解**  
   用“且/which/that/who”等连词为界，把问题拆成独立条件，编号为C1、C2…Cn。  
   *完成标志：每个条件可独立成句，无歧义。*

2. **优先级排序**  
   按“独特性→可检索性→时间成本”排序，选出最可能快速缩小范围的Top-2条件。  
   *判断标准：该条件在搜索引擎结果中是否≤10个候选实体。*

3. **首轮检索**  
   用最高优先级条件构造查询，获取候选列表。  
   *模板：`"{条件关键词}" site:wikipedia.org` 或 `"{条件关键词}" list`*

4. **交叉过滤**  
   用剩余条件逐一过滤候选列表，每步保留满足当前条件的子集。  
   *技巧：用“AND”或“site:”组合多个关键词，如`"{C2关键词} {候选实体}"`*  
   *进阶策略：若条件验证涉及多步推理或复杂事实核查（如距离计算、排他性证明），可派发子代理（Sub-agent）执行专项核查任务，避免主流程陷入搜索循环。*

5. **反向验证**  
   对最终候选答案，逐条检查原始问题中所有条件是否全部满足。  
   *工具：打开来源页面，Ctrl+F查找关键词。*

6. **证据链记录**  
   为每个条件保存1条最权威来源URL，形成“条件-来源”映射表。  
   *格式：`C1: URL1, C2: URL2…`*

7. **结果输出**  
   给出唯一答案，并附“条件-来源”表，方便复核。

## 检索策略模板
1. **单条件锁定**：`"{独特条件}" site:en.wikipedia.org`  
   例：`"six works Zeus mortal woman 1960s" site:en.wikipedia.org`
2. **交叉验证**：`"{候选实体} {剩余条件}"`  
   例：`"George Segal 17th century car"`
3. **假设快速验证**：`"{候选实体} {最独特条件关键词}"`  
   例：假设候选为保罗·高更，优先搜 `"Paul Gauguin father heart attack"` 验证罕见条件，而非 `"Paul Gauguin children"` 验证常见条件。
4. **子代理专项核查**：`DISPATCH task="收集证据验证：1. [条件1] 2. [条件2] ..."`  
   例：`DISPATCH task="收集以下信息并添加为证据：1. 夏布利是否只产霞多丽 2. 夏布利到欧塞尔的距离是否在20-40公里"`  
   *适用场景：当主流程遇到复杂的事实性约束（如地理距离、特定属性排他性）难以通过单一搜索直接确认时，利用子代理并行处理核查任务。*


