auto-sync: 2026-04-11 13:05:02

This commit is contained in:
cfdaily
2026-04-11 13:05:02 +08:00
parent 8f3d9b090d
commit d6e89ffd47
@@ -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
<identity>
[角色定义]
</identity>
<constraints>
[范围限制]
</constraints>
<explore>
[探索协议]
</explore>
<execution_loop>
[执行循环]
</execution_loop>
<delegation>
[委托策略]
</delegation>
<style>
<output_contract>[输出契约]</output_contract>
<anti_patterns>[避免模式]</anti_patterns>
</style>
```
**设计优势**
- 结构清晰:每个语义块清晰分开
- 模块化:不同部分可以独立修改
- 一致性:所有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