# 豆包系统提示词探究（教学向）

> **声明**：本目录仅用于提示词工程与安全课程学习。请只对你**拥有权限**的 Bot/API 做探测；不要对豆包官方 App 进行自动化攻击或违反服务条款的行为。

## 一、先分清「谁能看到系统提示词」

| 场景 | 能否看到 SP | 方法 |
|------|------------|------|
| **火山方舟 API（你自己写的 SP）** | ✅ 完全可见 | 就在你的代码 / `config.yaml` 里 |
| **Coze / 豆包开放平台自建 Bot** | ✅ 可见 | 控制台 → 角色设定 / System Prompt 编辑页 |
| **豆包官方 App（doubao.com / 客户端）** | ❌ 不可直接获取 | 内部 SP 为商业机密，服务端注入，不返回给客户端 |

官方 App 的 SP **不会**出现在：
- 聊天 API 响应 JSON 的 `choices[].message` 里
- 浏览器 Network 面板（通常只有 user/assistant 消息）
- 前端 JS 源码（最多有 UI 文案，不是完整 SP）

## 二、合法路径：用 API 验证「系统消息从哪来」

1. 在 [火山方舟](https://www.volcengine.com/product/ark) 申请 API Key
2. 复制 `.env.example` 为 `.env`，填入密钥
3. 运行：

```powershell
pip install httpx python-dotenv
python scripts/doubao_api_demo.py
python scripts/prompt_leakage_tester.py --target own
```

`doubao_api_demo.py` 会打印**你发送的** system 消息，帮助理解 API 层 SP 的工作方式。

## 三、手动探测模板（仅用于自建 Bot 安全评估）

将 `probes/manual_probes.md` 中的句子逐条发给你**自己创建的 Bot**，记录是否泄露 SP。  
现代模型（含豆包）对官方产品通常有「拒绝输出系统指令」的防护，这是正常现象。

## 四、自动化探测（仅 `--target own`）

`prompt_leakage_tester.py` 默认只调用你在 `.env` 中配置的**自有端点**，批量发送探测句并保存结果到 `results/`。

## 五、为什么官方豆包 App 很难拿到 SP？

1. **架构隔离**：SP 在服务端组装，推理引擎与用户上下文分离  
2. **输出过滤**：训练 + RLHF + 规则层拒绝复述 hidden instructions  
3. **无调试接口**：生产环境不暴露 `system` role 给终端用户  
4. **动态拼接**：实际 prompt 可能 = 基础 SP + 安全策略 + 工具描述 + 会话摘要，并非单一静态文本

## 六、课程建议

若目标是「理解 SP 如何影响行为」，更推荐：
- 在 API 里改 SP 做 A/B 对比（见 `config/system_prompts/`）
- 在 Coze 创建两个仅 SP 不同的 Bot，对比回答差异
- 用 `prompt_leakage_tester.py` 评估自己 Bot 的防泄露能力
