From b0e40d04f6d40f045aee81bdb5927f18599bc913 Mon Sep 17 00:00:00 2001 From: Xin Wang Date: Wed, 13 May 2026 14:29:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8legacy=20fallback=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E7=9A=84=E6=97=B6=E5=80=99=E9=9C=80=E8=A6=81=E5=91=8A?= =?UTF-8?q?=E7=9F=A5=E7=94=A8=E6=88=B7=E8=8E=B7=E5=BE=97=E5=90=8C=E6=84=8F?= =?UTF-8?q?=EF=BC=9B=E8=BF=90=E8=A1=8Cov=E4=B9=8B=E5=89=8D=E8=A6=81?= =?UTF-8?q?=E5=85=88=E7=9C=8B=E7=9B=B8=E5=85=B3reference=EF=BC=9Bov?= =?UTF-8?q?=E4=BC=98=E5=85=88=E6=90=9C=E7=B4=A2field-process-memory?= =?UTF-8?q?=E7=84=B6=E5=90=8E=E5=88=B0table-metada=E5=92=8Csql-snippets?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9B=B4=E5=A4=9A=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- one-skill/smart-data-developer/SKILL.md | 18 ++++++++---- .../agents/requirement-analyzer.md | 28 ++++++++++++------- .../legacy-data-structure-fetcher/SKILL.md | 4 +-- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/one-skill/smart-data-developer/SKILL.md b/one-skill/smart-data-developer/SKILL.md index f60ccf7..0ed3387 100644 --- a/one-skill/smart-data-developer/SKILL.md +++ b/one-skill/smart-data-developer/SKILL.md @@ -47,9 +47,11 @@ description: 智能数据开发员工。支持数据开发和简单取数两种 | 资源路径 | 用途 | 搜索策略 | |---------|------|---------| +| `viking://resources/field-process-memory` | 字段处理经验、常用数据源判断、业务经验 | **优先检索**:语义 find + 精确 grep | | `viking://resources/table-metadata` | 表元信息(表结构、字段定义) | 精确 grep + 语义 find | | `viking://resources/sql_snippets` | 成功 SQL 代码片段 | 语义 find + 精确 grep | -| `viking://resources/field-process-memory` | 字段处理经验、常用数据源判断、业务经验 | 语义 find + 精确 grep | + +运行任何 OV 命令之前,先读取相关 reference,默认先看 `references/ov-search-context.md` 确认命令用法;涉及 SQL 引擎语法时,再看 `references/sql/reference/{engine}-sql-syntax.md`。 ### OV 搜索强制执行时机 @@ -66,20 +68,26 @@ description: 智能数据开发员工。支持数据开发和简单取数两种 | 困惑场景 | 优先检索 | |---------|---------| -| 不知道用哪张表 | `viking://resources/table-metadata` + `viking://resources/field-process-memory` | -| 表名或字段含义不确定 | `viking://resources/table-metadata` | +| 不知道用哪张表 | 先查 `viking://resources/field-process-memory`,再查 `viking://resources/table-metadata` | +| 表名或字段含义不确定 | 先查 `viking://resources/field-process-memory`,再查 `viking://resources/table-metadata` | | 需要字段处理经验、口径经验、常用数据源判断 | `viking://resources/field-process-memory` | -| 需要 SQL 写法、历史成功案例、代码参考 | `viking://resources/sql_snippets` | +| 需要 SQL 写法、历史成功案例、代码参考 | 先查 `viking://resources/field-process-memory` 判断业务口径,再查 `viking://resources/sql_snippets` | | SQL 语法或引擎差异不确定 | 先查 `references/sql/reference/`,再查 `viking://resources/sql_snippets` | ### OV 优先 + legacy fallback -默认使用 OV 搜索,不主动调用 legacy data-structure-fetcher。只有以下情况才读取 `references/legacy-data-structure-fetcher/SKILL.md` 并运行其脚本: +默认使用 OV 搜索,不主动调用 legacy data-structure-fetcher。只有以下情况才可以考虑 legacy fallback,且**必须先告知用户原因并获得明确同意**,再读取 `references/legacy-data-structure-fetcher/SKILL.md` 并运行其脚本: 1. OV 命令失败或本地不可用; 2. OV 搜索返回的候选表不足以进入用户确认; 3. 用户明确要求使用旧数据字典匹配脚本。 +告知模板: + +```text +OV 检索结果不足/不可用。是否同意我使用 legacy data-structure-fetcher 脚本补充搜索数据源? +``` + --- ## 工作流程 diff --git a/one-skill/smart-data-developer/agents/requirement-analyzer.md b/one-skill/smart-data-developer/agents/requirement-analyzer.md index d143c94..2974f21 100644 --- a/one-skill/smart-data-developer/agents/requirement-analyzer.md +++ b/one-skill/smart-data-developer/agents/requirement-analyzer.md @@ -164,28 +164,36 @@ description: 通过分模块多轮对话引导业务人员补充需求信息, ## 模块 3:OV 优先匹配数据源 -**目标**:使用 OV 搜索表结构、历史成功 SQL、字段处理经验和业务语义,推荐可用数据源。`legacy-data-structure-fetcher` 只作为 fallback。 +**目标**:使用 OV 搜索字段处理经验、表结构、历史成功 SQL 和业务语义,推荐可用数据源。`legacy-data-structure-fetcher` 只作为用户同意后的 fallback。 **调用方式**: 1. 提取模块 1+2 的业务口径描述关键词 -2. 读取 `../references/ov-search-context.md` 了解 OV 命令 -3. 先用业务关键词语义召回候选表: +2. 运行任何 OV 命令之前,先读取 `../references/ov-search-context.md` 了解 OV 命令用法 +3. 先搜索 `field-process-memory`,用历史经验判断常用数据源、业务口径和候选方向: + - `conda run -n py13 ov find "{业务口径/核心实体}" --uri "viking://resources/field-process-memory" --threshold 0.2 --node-limit 10` + - `conda run -n py13 ov grep "{核心实体|关键词}" --uri "viking://resources/field-process-memory" --node-limit 10` +4. 再用 `table-metadata` 补充确认表结构和字段: - `conda run -n py13 ov find "{业务口径/核心实体}" --uri "viking://resources/table-metadata" --threshold 0.2 --node-limit 10` - `conda run -n py13 ov grep "{核心实体|关键词}" --uri "viking://resources/table-metadata" --node-limit 10` -4. 对每个推荐表执行 5 类 OV 检索: - - 表结构:`conda run -n py13 ov grep "{表名}" --uri "viking://resources/table-metadata" --node-limit 10` - - 成功 SQL:`conda run -n py13 ov grep "{表名}" --uri "viking://resources/sql_snippets" --node-limit 15` +5. 对每个推荐表按顺序执行 OV 深度检索: - 常用数据源判断:`conda run -n py13 ov grep "{表名}" --uri "viking://resources/field-process-memory" --node-limit 10` - 字段处理经验:`conda run -n py13 ov grep "{表名}.*{字段名}" --uri "viking://resources/field-process-memory" --node-limit 10` - 业务语义:`conda run -n py13 ov find "{表名} {业务场景}" --uri "viking://resources/field-process-memory" --threshold 0.2 --node-limit 10` -5. 获取推荐的数据源列表(库、表、字段、技术负责人、字段类型),并给出常用数据源判断 -6. 仅当 OV 命令失败、候选表不足、或用户明确要求旧方案时,读取 `../references/legacy-data-structure-fetcher/SKILL.md` 并使用其中脚本补充推荐 + - 表结构:`conda run -n py13 ov grep "{表名}" --uri "viking://resources/table-metadata" --node-limit 10` + - 成功 SQL:`conda run -n py13 ov grep "{表名}" --uri "viking://resources/sql_snippets" --node-limit 15` +6. 获取推荐的数据源列表(库、表、字段、技术负责人、字段类型),并给出常用数据源判断 +7. 仅当 OV 命令失败、候选表不足、或用户明确要求旧方案时,先告知用户原因并获得明确同意;同意后再读取 `../references/legacy-data-structure-fetcher/SKILL.md` 并使用其中脚本补充推荐 + +**legacy fallback 同意模板**: +```text +OV 检索结果不足/不可用。是否同意我使用 legacy data-structure-fetcher 脚本补充搜索数据源? +``` **输出格式**: ```markdown 【模块 3】数据源匹配结果 -根据您的需求描述,我使用 OV 搜索了表结构、历史 SQL 和字段处理经验,推荐以下数据源: +根据您的需求描述,我先使用 OV 搜索字段处理经验和历史记忆,再补充搜索表结构与历史 SQL,推荐以下数据源: ### 推荐数据源(按综合得分排序) @@ -378,7 +386,7 @@ description: 通过分模块多轮对话引导业务人员补充需求信息, 1. **模块1+2合并引导**:基础信息和详细信息在同一轮对话中同时向用户收集,减少交互轮次 2. **分模块推进**:按 模块1+2 → 模块3 → 模块4 → 模块5 顺序执行,每模块完成后需用户确认 3. **智能校验**:检查必填项是否完整,格式是否正确 -4. **数据源优先**:模块 3 先使用 OV 匹配数据源,模块 4 再基于数据源生成输出字段;legacy data-structure-fetcher 只在 OV 不可用、召回不足或用户指定时使用 +4. **数据源优先**:模块 3 先读取 OV reference,再按 `field-process-memory` → `table-metadata` → `sql_snippets` 顺序匹配数据源,模块 4 再基于数据源生成输出字段;legacy data-structure-fetcher 只在 OV 不可用、召回不足或用户指定且用户明确同意后使用 5. **文档保存**:模块 5 生成文档后,必须使用 write 工具将文档保存到 `./ai_text/{需求编号}.md` 6. **灵活跳转**:允许用户随时补充或修改之前模块的信息 7. **多轮对话记忆**:记住用户之前提供的信息,避免重复询问 diff --git a/one-skill/smart-data-developer/references/legacy-data-structure-fetcher/SKILL.md b/one-skill/smart-data-developer/references/legacy-data-structure-fetcher/SKILL.md index 533cdd6..b8131f1 100644 --- a/one-skill/smart-data-developer/references/legacy-data-structure-fetcher/SKILL.md +++ b/one-skill/smart-data-developer/references/legacy-data-structure-fetcher/SKILL.md @@ -5,7 +5,7 @@ description: 通过文本实体匹配→向量检索→大模型加权汇总三 # 数据结构获取 Skill -> Legacy fallback: 本文件只在 OV 不可用、OV 召回不足,或用户明确要求旧数据字典匹配脚本时使用。默认优先使用 `../ov-search-context.md` 中的 OV 搜索。 +> Legacy fallback: 本文件只在 OV 不可用、OV 召回不足,或用户明确要求旧数据字典匹配脚本时使用。使用前必须告知用户原因并获得明确同意。默认优先使用 `../ov-search-context.md` 中的 OV 搜索。 ## 技能描述 @@ -102,4 +102,4 @@ conda run -n my_opencode python ./references/legacy-data-structure-fetcher/scrip ## 被 requirement-analyzer 调用 -当 `requirement-analyzer` 进入模块 3 且 OV 不可用、召回不足或用户指定旧方案时,按上述流程执行脚本并汇总结果。 +当 `requirement-analyzer` 进入模块 3 且 OV 不可用、召回不足或用户指定旧方案时,先询问用户是否同意使用 legacy fallback;用户同意后,才按上述流程执行脚本并汇总结果。