diff --git a/pangtong-value/research/20260411-prompt-engineering-from-three-projects/report.md b/pangtong-value/research/20260411-prompt-engineering-from-three-projects/report.md index 0d5222595..e4e1618ba 100644 --- a/pangtong-value/research/20260411-prompt-engineering-from-three-projects/report.md +++ b/pangtong-value/research/20260411-prompt-engineering-from-three-projects/report.md @@ -2785,8 +2785,318 @@ PLATFORM_HINTS = { 这些改进将提升三国量化项目的Agent协作质量、代码质量和整体可靠性。 +## 8. 三个项目提示词管理方案对比 + +### 8.1 Hermes-Agent 提示词管理 + +#### 8.1.1 设计哲学 +**动态模块化组装** → 不相信静态大提示词,每次运行根据当前环境动态拼接。 + +#### 8.1.2 目录结构 + +``` +~/.hermes/skills/ +├── category/ +│ ├── DESCRIPTION.md # 分类描述 +│ └── skill-name/ +│ ├── SKILL.md # 技能主提示词(frontmatter + 正文) +│ ├── references/ # 参考资料 +│ └── scripts/ # 辅助脚本 +``` + +#### 8.1.3 frontmatter配置 + +```yaml +--- +name: researcher +description: Web search and information extraction +platforms: [cli, telegram] +fallback_for_toolsets: [web-tools] +requires_tools: [web_search, web_extract] +--- + +# 技能提示词正文开始 +... +``` + +#### 8.1.4 核心机制 + +1. **条件激活过滤**: + 根据当前可用工具/平台自动过滤技能,满足条件才显示 + ```python + def _skill_should_show(conditions, available_tools, available_toolsets): + # fallback_for: 主工具可用时隐藏fallback技能 + for ts in conditions.get("fallback_for_toolsets", []): + if ts in available_toolsets: + return False + # requires: 必需工具不可用时隐藏技能 + ... + return True + ``` + +2. **双层缓存机制**: + - **L1缓存**:进程内 LRU缓存,最近8个技能 + - **L2缓存**:磁盘快照,保存解析后的元数据,加速启动 + + ```python + # 缓存键包含技能目录、工具集等所有影响因素 + _SKILLS_PROMPT_CACHE: OrderedDict[tuple, str] = OrderedDict() + _SKILLS_PROMPT_CACHE_MAX = 8 + ``` + + 快照验证:比较每个文件的mtime/size,如果不匹配则失效 + +3. **安全扫描**: + 所有外部提示词(上下文文件)注入前做 prompt injection 检测: + ```python + _CONTEXT_THREAT_PATTERNS = [ + (r'ignore\s+(previous|all|above|prior)\s+instructions', "prompt_injection"), + (r'do\s+not\s+tell\s+the\s+user', "deception_hide"), + ... + ] + ``` + 检测到威胁直接拦截,返回阻塞信息。 + +4. **优先级上下文加载**: + ```python + project_context = ( + _load_hermes_md(cwd_path) # 优先级1 + or _load_agents_md(cwd_path) # 优先级2 + or _load_claude_md(cwd_path) # 优先级3 + or _load_cursorrules(cwd_path) # 优先级4 + ) + ``` + 第一个匹配的胜利,避免冲突。 + +### 8.2 Oh-My-Codex / Oh-My-ClaudeCode 提示词管理 + +#### 8.2.1 设计哲学 +**静态结构化模板** → 每个角色一个提示词模板,XML标签分块,开箱即用。 + +#### 8.2.2 存储结构 + +两种模式都常见: + +**模式1:提示词作为独立markdown文件,代码加载**: +``` +src/skills/ +├── analyst.md +├── architect.md +├── planner.md +├── executor.md +└── critic.md +``` + +代码加载: +```typescript +const prompt = await fs.readFile( + join(skillDir, 'critic.md'), + 'utf-8' +); +``` + +**模式2:提示词内嵌在代码中**: +``` +src/skills/ +├── analyst.ts # 代码内嵌提示词模板 +├── architect.ts +└── ... +``` + +#### 8.2.3 核心机制 + +1. **XML标签分块结构**: + ```xml + + [角色定义] + + + + [范围限制] + + + + [探索协议] + + + + [执行循环] + + + + [委托策略] + + + + ``` + + **设计优势**: + - 结构清晰:每个语义块清晰分开 + - 模块化:不同部分可以独立修改 + - 一致性:所有Agent遵循相同结构 + - 可验证:可以编写工具验证结构完整性 + +2. **角色职责分离**: + 每个角色一个文件/模块,职责边界清晰: + - `analyst` → 需求澄清 + - `architect` → 架构分析 + - `planner` → 计划制定 + - `executor` → 代码执行 + - `critic` → 验证评审 + +3. **无缓存,每次直接读取**: + 因为提示词不大,不需要缓存,运行时直接读取文件。 + +4. **信任本地提示词,无安全扫描**: + 假设开发者自己编写的提示词是安全的,不做注入检测。 + +### 8.3 三种方案对比表 + +| 维度 | Hermes-Agent | Oh-My-Codex/Oh-My-ClaudeCode | 我们当前(三国量化) | +|------|--------------|-------------------------------|---------------------| +| **提示词存储** | SKILL.md + frontmatter配置 | 独立markdown文件 / 代码内嵌 | SOUL.md + IDENTITY.md | +| **管理方式** | 动态分类加载,条件激活 | 按角色静态分离,直接导入 | 静态单文件 | +| **缓存** | 双层缓存(内存+磁盘) | 无缓存 | 无缓存 | +| **安全扫描** | 提示注入检测、隐藏字符检测 | 无(信任本地) | 无 | +| **模型适配** | 模型特定执行指南动态注入 | 无(模型由调用者决定) | 无 | +| **适用场景** | 通用框架,多用户多技能,技能自动增长 | 代码开发,固定角色流水线 | 固定分工,每个Agent固定角色 | + +### 8.4 OpenClaw集成方案 + +结合两个项目的优点,适配我们的固定分工场景: + +#### 8.4.1 组装流程 + +``` +Session Startup Sequence: + 1. Read IDENTITY.md → 基础身份 + 2. Read SOUL.md → 信条/风格 + 3. Read MEMORY.md → 长期共享记忆 ++ 4. 根据当前 [角色] 加载预置提示词 → role-prompt.md ++ 5. 根据当前 [模型配置] 加载模型指南 → model-guide.md ++ 6. 根据当前 [项目目录] 加载项目上下文 → project-context (优先级策略) +``` + +#### 8.4.2 文件结构 + +``` +sanguo_quant_live/ +├── prompts/ +│ ├── role- +│ │ ├── zhuge-liang.md # 诸葛亮 - 总军师 +│ │ ├── pangtong.md # 庞统 - 副军师 +│ │ ├── simayi.md # 司马懿 - 质量总监 +│ │ ├── zhangfei.md # 张飞 - 右路先锋 +│ │ ├── guanyu.md # 关羽 - 左路先锋 +│ │ ├── zhaoyun.md # 赵云 - 数据护军 +│ │ └── jiangwei.md # 姜维 - 平台总督 +│ ├── model-guides/ +│ │ ├── gpt.md # GPT/Codex模型指南 +│ │ ├── claude.md # Claude模型指南 +│ │ ├── gemini.md # Gemini模型指南 +│ │ └── glm.md # GLM模型指南 +│ └── task-types/ +│ ├── data-fetching.md # 数据获取任务提示 +│ ├── strategy-dev.md # 策略开发任务提示 +│ ├── backtest.md # 回测执行任务提示 +│ └── risk-control.md # 风控实现任务提示 +``` + +#### 8.4.3 启动脚本集成(最简单方案) + +在每个Agent的启动脚本中添加几行: + +```bash +# 原有流程 +cat IDENTITY.md +echo +cat SOUL.md +echo +cat MEMORY.md +echo + +# 添加: 加载角色提示词 +ROLE=$(cat .role 2>/dev/null || echo "$AGENT_ROLE") +if [ -n "$ROLE" ] && [ -f "$PROMPTS_DIR/role-$ROLE.md" ]; then + echo "---" + cat "$PROMPTS_DIR/role-$ROLE.md" + echo +fi + +# 添加: 加载模型指南 +MODEL=$(cat .model 2>/dev/null || echo "$DEFAULT_MODEL") +MODEL_FAMILY=$(echo "$MODEL" | cut -d/ -f1 | sed 's/^.*\(gpt\|codex\)/gpt/; s/^.*\(claude\)/claude/; s/^.*\(gemini\)/gemini/; s/^.*\(glm\)/glm/') +if [ -f "$PROMPTS_DIR/model-guides/$MODEL_FAMILY.md" ]; then + echo "---" + cat "$PROMPTS_DIR/model-guides/$MODEL_FAMILY.md" + echo +fi + +# 添加: 加载项目上下文(优先级搜索) +if [ -f ".sanguo/project-prompt.md" ]; then + echo "---" + echo "## 项目上下文" + cat ".sanguo/project-prompt.md" + echo +elif [ -f "AGENTS.md" ]; then + echo "---" + echo "## 团队配置" + cat "AGENTS.md" + echo +fi +``` + +**优势**: +- ✅ 完全兼容现有OpenClaw启动流程 +- ✅ 不需要改核心代码,只改启动脚本 +- ✅ 每次启动自动组装,保证最新 +- ✅ 分工固定,不需要动态条件过滤 + +#### 8.4.4 关键设计点确保准确调用 + +1. **固定角色不需要切换**: + 我们每个Agent身份固定: + - `pangtong-fujunshi` → 副军师 → 永远加载 `role-pangtong.md` + - `zhangfei-dev` → 右路先锋 → 永远加载 `role-zhangfei.md` + - ... + 所以**启动时一次加载就够了**,不需要每次调用重新build。 + +2. **模型配置持久化**: + 每个Agent目录下存一个 `.model` 文件: + ``` + volcengine-plan/glm-4.7 + ``` + 启动脚本读取这个文件,自动加载对应模型指南,不用每次输入。 + +3. **优先级策略(来自Hermes)**: + ``` + 1. .sanguo/project-prompt.md (项目级) → 优先级最高 + 2. AGENTS.md (团队级) + 3. SANGUO.md (根级默认) + ``` + 如果当前工作目录下有项目自定义上下文,自动加载。 + +4. **缓存优化(可选,参考Hermes)**: + - **一级缓存**:进程内存 LRU 缓存,相同role/model/project不用重复读文件 + - **二级缓存**:磁盘缓存组装好的提示词,进程重启后可以复用 + 如果不需要缓存,可以跳过,每次从头组装也挺快(提示词并不大)。 + +### 8.5 实施路径 + +| 步骤 | 操作 | 工作量 | +|------|------|--------| +| 1 | 创建 `prompts/` 目录,按角色/模型分类放提示词 | 小 | +| 2 | 修改每个Agent启动脚本,加上组装逻辑 | 极小(几行shell) | +| 3 | 给每个Agent写 `.model` 文件指定默认模型 | 极小 | +| 4 | 测试启动,验证提示词组装正确 | 小 | + +**总工作量**:几行shell + 写几个提示词文件,半天就能搞定。 + --- **报告生成时间**: 2026-04-11 **调研者**: 庞统 (pangtong-fujunshi) -**报告版本**: 1.0 +**报告版本**: 1.1