auto-sync: 2026-04-11 13:05:02
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user