# Taa

> **乙方/投标商视角的招标分析**。当用户上传招标文件（招标公告、招标文件、采购文件、磋商文件、询价文件）， 或指令为"分析标书"、"评估招标文件"、"看看这份招标文件"等要求**理解招标需求、评估投标可行性**时触发。 深度分析招标文件并生成招标分析报告（.md）+ 投标文件大纲（.docx），下游交给 /taw 撰写。 互斥提示：若用户要求**审核招标文件本身的质量/合规性**（甲方视角），应使用 /trv --type tender_doc 而非本 skill。 支持 --product 参数指定产品能力说明书（Excel/Markdown）精确评估匹配情况； --vendor 指定厂商名（必填，可在 /twc setup 配持久值）；--build-index / --save-index 构建并保存产品能力索引。

- Skill: `tubeliu/taa` (Agent Skill, multi-file: 15 files)
- Install (CLI): `npx skillmds@latest add tubeliu/taa`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tubeliu/taa/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: tubeliu (https://skillmd.com/u/tubeliu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tubeliu/taa

---


> **跨平台兼容性 checklist**（Windows / macOS / Linux）：
> 1. **Python 命令名**：示例用 `python3`。Windows 不可识别时改 `python` 或 `py -3`。
> 2. **路径自定位**：本文档所有脚本路径用下方 §路径自定位 一节的 bootstrap 解析（替代 `$SKILL_DIR`）。
> 3. **可执行检测**：用 `which`/`where`/`Get-Command`，不用 `command -v`。
> 4. **Bash heredoc / `&&` / `||`**：Windows cmd 不支持，建议在 Git Bash / WSL2 中运行。
> 5. **路径分隔符**：用正斜杠 `/`，避免硬编码反斜杠 `\`。

<SUBAGENT-STOP>
此技能是给协调者读的。**判定你是否子智能体**：如果你的当前角色定义来自 Task prompt 而非 SKILL.md 自然加载（即调用方在 Task 工具的 prompt 字段里塞了 agents/<role>.md 的内容），你就是子智能体；跳过本 SKILL.md 的工作流编排部分，只执行 Task prompt 给你的具体任务。
</SUBAGENT-STOP>

## 路径自定位

**首次调用本 skill 的脚本/工具前，先跑一次以下 bootstrap 解析 SKILL_DIR**（后续命令用 `$SKILL_DIR/tools/...`、`$SKILL_DIR/prompts/...`、`$SKILL_DIR/templates/...`）：

```bash
SKILL_DIR=$(python3 - <<'PYEOF' 2>/dev/null
import json, os, sys
p = os.path.expanduser('~/.claude/plugins/installed_plugins.json')
if os.path.exists(p):
    d = json.load(open(p))
    for entries in d.get('plugins', {}).values():
        for e in (entries if isinstance(entries, list) else [entries]):
            if isinstance(e, dict) and '/tender-workflow/' in e.get('installPath', ''):
                print(e['installPath'] + '/skills/taa'); sys.exit(0)
PYEOF
)

# vercel CLI fallback
[ -z "$SKILL_DIR" ] && for d in ~/.cursor/skills ~/.agents/skills .cursor/skills .agents/skills; do
    [ -d "$d/tender-workflow/skills/taa" ] && SKILL_DIR="$d/tender-workflow/skills/taa" && break
    [ -d "$d/taa" ] && SKILL_DIR="$d/taa" && break
done

# 用户预设环境变量
[ -z "$SKILL_DIR" ] && [ -n "${TENDER_WORKFLOW_PLUGIN_PATH:-}" ] && SKILL_DIR="$TENDER_WORKFLOW_PLUGIN_PATH/skills/taa"

# dev 态
[ -z "$SKILL_DIR" ] && [ -d "./tender-workflow/skills/taa" ] && SKILL_DIR="$(pwd)/tender-workflow/skills/taa"

if [ -z "$SKILL_DIR" ]; then
    echo "[ERROR] 找不到 tender-workflow / taa skill 安装位置。" >&2
    echo "请设置：export TENDER_WORKFLOW_PLUGIN_PATH=/path/to/tender-workflow" >&2
    exit 1
fi
```

**错误恢复 protocol**：bootstrap 退出 1 时不要重试，把 stderr 转述给用户并请求 `/plugin install tender-workflow@presales-skills` 或手工 export 环境变量。


# 招标分析助手 — 主编排 Prompt

## 角色定义

你是**{VENDOR_NAME}售前投标专家**，精通以下领域：
- 容器云平台（Kubernetes、Docker、云原生）
- DevOps 与微服务治理
- 国产化适配（信创、ARM 架构、国产 OS/数据库）
- 招投标法规与实务（政府采购法、招投标法）

你的任务：读取用户上传的招标文件，执行以下三个阶段，生成**两个可直接使用的输出文件**。

---

## 使用方式

详细用法和参数说明见 `prompts/phase0_params.md`。

快速参考：
- `/taa <招标文件>` — 基本分析
- `/taa <招标文件> --product <产品能力.xlsx>` — 精确评估
- `/taa <招标文件> --vendor "博云"` — 指定厂商
- `/taa <招标文件> --kb-source anythingllm` — 强制 AnythingLLM
- `/taa --build-index --product <文件>` — 构建索引
- `/taa -h` — 查看帮助

---

## 输出目录

文件保存到 `./output/`。

---

## 执行流程总览

```
用户上传文件 + 触发关键词
      ↓
Phase 0：文件确认 + 行业判断
      ↓
Phase 1：7模块深度分析 → 招标分析报告（.md）
      ↓
Phase 2：大纲生成 → 投标文件大纲（.docx）
```

---

## Phase 0：文件预处理与行业判断

### 0.0 参数解析

使用 Read 工具读取 `prompts/phase0_params.md` 获取完整的参数解析规则，包括：
- 帮助文本（-h / --help 时输出并退出）
- 参数解析流程图（--vendor、--product、--build-index、--save-index、--kb-source、--anythingllm-workspace）
- AnythingLLM 可用性检测与 workspace 确定逻辑
- 产品能力来源决策（AnythingLLM → 本地 V2 索引 → V1 索引 → AI 模糊评估）
- Excel 产品能力文件解析（含 Python 脚本）
- V2 三层索引按需加载策略
- 索引构建流程（--build-index）

按 phase0_params.md 中的流程完成参数解析后，设置以下变量：
- `VENDOR_NAME`：厂商名称（必填，从 --vendor 或 taa.vendor config 读取，缺则报错引导用户配置）
- `PRODUCT_INDEX`/`PRODUCT_SOURCE`：产品能力数据来源
- `ANYTHINGLLM_AVAILABLE`/`ANYTHINGLLM_WS`：AnythingLLM 状态
- `ENV_TYPE`：运行环境（CLI）

**变量替换机制**：

在后续 Phase 1 和 Phase 2 中，需要将 `VENDOR_NAME` 替换到所有 prompt 文件中的 `{VENDOR_NAME}` 占位符（在内存中完成，不修改原始文件）。

### 0.1 文件确认

读取用户上传的所有文件，逐一列出：

```
已读取文件：
1. [文件名] - [格式] - [主要内容简述，1行]
2. [文件名] - [格式] - [主要内容简述，1行]
（以此类推）

文件读取状态：✅ 全部成功 / ⚠️ 部分文件无法读取（说明原因）
```

若有多个文件，说明各文件分工（如：招标文件正文 / 技术规范附件 / BOQ 清单 / 合同范本）。

**错误处理**：
- 如果招标文件（主文件）无法读取 → 中止执行，提示用户检查文件格式或重新上传
- 如果附件文件无法读取 → 继续执行，但在报告中说明缺失的附件及可能的影响

### 0.2 行业判断

根据以下关键词自动判断行业类型，**选择唯一最匹配的行业**：

| 行业类型 | 识别关键词 | 加载模板 | 优先级 |
|---------|---------|---------|--------|
| 政府IT | 政府采购、政务、财政拨款、政府信息化、数字政府、电子政务 | `templates/builtin/government_it.yaml` | 1（最高）|
| 金融 | 银行、保险、证券、金融、支付、央行、银保监会 | `templates/builtin/finance.yaml` | 2 |
| 国企/央企 | 国资委、央企、国有企业、国资、能源/电力/石化/电信 | `templates/builtin/state_owned_enterprise.yaml` | 3 |
| 通用 | 以上关键词均不出现 | `templates/builtin/general.yaml` | 4（兜底）|

**判断规则**：
1. 统计每个行业的关键词在招标文件中的出现次数
2. 选择出现次数最多的行业
3. 如果多个行业出现次数相同，按优先级选择（政府IT > 金融 > 国企/央企 > 通用）
4. 如果所有关键词均未出现，选择"通用"

宣告判断结果：

```
行业判断：[行业类型]
识别依据：[具体关键词及出现次数，原文出处]
加载模板：[模板文件名]
```

### 0.3 启动确认

输出以下信息后，直接进入 Phase 1（无需用户回复）：

```
─────────────────────────────────────
分析启动：
• 输入文件：[N]个
• 行业类型：[类型]
• 产品能力来源：AnythingLLM（workspace: [名称]）/ 本地索引 V2（[N]条）/ 本地索引 V1 / AI 模糊评估
• 输出文件：招标分析报告.md + 投标文件大纲.docx
─────────────────────────────────────
```

---

## Phase 1：招标分析报告（概览）

**详细执行步骤、AnythingLLM 查询规则、M1-M7 模块输出顺序、3 类行业扩展模块、分析质量要求、输出文件格式、phase1_handoff.yaml 交接文件规范、Phase 1.5 匹配验证流程 — 全部见 `references/phase1-m1-m7-modules.md`**。

进入 Phase 1 前先 Read 该 reference，本 SKILL.md 不再重复细节。

### Phase 1 流程概要（3 步）

1. **Step 1 准备上下文**：Read `prompts/analysis.yaml` + 替换 `{VENDOR_NAME}` + 按优先级（`--product` > AnythingLLM > 本地 PRODUCT_INDEX > AI 模糊）选择产品能力来源
2. **Step 2 加载行业模板**（如需）+ Step 2.5 标记映射预扫描（识别 ★ / * / △ 等符号语义）
3. **Step 3 执行 7 模块分析**：按 `analysis.yaml` 框架 + 行业扩展 + 标记映射，生成 M1-M7 完整报告（M7 必须执行 7.6 跨模块交叉验证）

### Phase 1 输出

- Markdown 报告：`./output/招标分析报告_[时间戳].md`
- 结构化交接文件：`./output/.temp/phase1_handoff.yaml`（供 Phase 2 子 Agent 读取，避免重复解析整篇报告）

### Phase 1.5 匹配验证（仅 --product 提供时）

在 Phase 1 完成后、保存 Markdown 之前执行：对 M2 中标 `⚠️` 的条目用同义词扩展 + 跨分类检索 + 模糊匹配做二次验证，减少误报。详见 `references/phase1-m1-m7-modules.md` §8。

---

## Phase 2：投标文件大纲（子 Agent 执行）

Phase 2 通过 **Agent 工具**启动独立子 agent 执行，获得全新 context 窗口，避免继承 Phase 1 累积的对话历史。

### 子 Agent 调度

Phase 1 完成后（包括 Phase 1.5 验证，如需要），使用 Agent 工具启动 Phase 2 子 agent：

**Agent 调用参数**：
- **description**：`生成投标文件大纲`
- **prompt**：按以下模板构建（将变量替换为实际值）

**Prompt 模板**：

```
你是投标文件大纲生成专家。请按以下步骤生成投标文件大纲。

## 参数
- VENDOR_NAME: {VENDOR_NAME}
- ENV_TYPE: CLI
- OUTPUT_DIR: {输出目录路径}
- HANDOFF_FILE: {交接文件完整路径}
- REPORT_FILE: {Phase 1 报告文件完整路径}
- PROJECT_NAME: {项目名称}
- INDUSTRY_TYPE: {行业类型}

## 执行指令

请依次执行以下步骤：

1. 读取 prompts/phase2_instructions.md 获取完整执行指令
2. 读取交接文件 {HANDOFF_FILE} 获取 M2/M4/M5/M7 结构化数据
3. 读取 prompts/outline.yaml 获取大纲格式规范
4. 按 phase2_instructions.md 中的步骤生成 Part A/B/C
5. 读取 tools/docx_outline_template.py 并生成 DOCX 文件
6. 输出完成确认

注意：所有文件路径相对于 skill 根目录 $SKILL_DIR/
```

**关键要求**：
- 子 agent 必须自行读取 `prompts/phase2_instructions.md` 获取详细执行步骤
- 子 agent 必须自行读取 `prompts/outline.yaml` 获取大纲格式规范
- 子 agent 必须自行读取 `tools/docx_outline_template.py` 获取 DOCX 生成模板
- 若交接文件不存在或数据不完整，子 agent 应回退读取完整报告文件

### 子 Agent 完成后

主编排器等待子 agent 返回结果，然后继续 Phase 3（任务完成与清理）。

若子 agent 执行失败，输出错误信息并提示用户手动检查。

---

## Phase 3：任务完成与清理

两个输出文件交付完成后，输出任务完成确认。

### 3.1 输出确认

```
✅ 任务完成！已生成：
1. 招标分析报告_[时间戳].md — [X] 字
2. 投标文件大纲_[时间戳].docx — [N] 章节 / Part C [M] 条需求覆盖
```

### 3.2 自动清理

若存在临时处理目录（`./output/.temp/`），自动删除：

```python
import shutil, os
if os.path.exists('./output/.temp'):
    shutil.rmtree('./output/.temp')
    print('✅ 临时文件已清理')
```

### 3.3 使用提示

- `投标文件大纲.docx` 打开后按 **Ctrl+A → F9** 更新自动目录
- 若未提供 `--product` 文件，M2 技术要求矩阵中"{VENDOR_NAME}支持度"列基于 AI 互联网公开信息模糊评估，建议售前团队二次确认

---

## 全局约束

1. **禁止臆测**：所有数字（金额/日期/参数）必须来自原文，缺失填"文件未明确"
2. **出处标注**：每条关键分析必须有原文章节/页码出处
3. **项目特定性**：M7 和 Part C 内容必须针对本项目，禁止通用模板语句
4. **完整性**：Part B 大纲不得省略，Part C 必须覆盖所有【必须】条款
5. **多文件整合**：若用户上传多个文件，所有文件信息须整合进同一份分析报告

