Dynamic Session Context 插件
根据 session label / topic 动态注入 system prompt、skills 提示和 model override。
功能特性
- 动态 System Prompt 注入 — 根据会话主题追加专用的 system prompt 片段
- Skills 上下文注入 — 追加当前会话所需的技能列表提示
- Topic 合并(topicList) — 支持多主题合并,skills 自动去重合并
- 默认 Skills(defaultSkills) — 全局公共技能,所有会话都会包含
- Model Override — 支持为特定 profile 覆盖默认的 provider/model
配置结构
profiles.json Schema
{
// === 全局公共 Skills(可选)===
// 所有 profile 都会自动包含这些 skills(不会重复)
"defaultSkills": ["docker-essentials", "weather", "sql-toolkit"],
// === Profile 定义 ===
"profile-name": {
// ── Topic 列表(可选)──
// 如果设置了 topicList,会自动合并多个 profile 的配置
// 用于需要同时启用多个主题的场景
"topicList": ["code-review", "devops"],
// ── System Prompt(追加到最前面)──
"systemPrompt": "## 角色描述\n你是...",
// ── Skills 列表(追加到 skills 提示中)──
// 这些 skills 会合并到 skills 提示中
// 如果设置了 topicList,会合并所有 topic 的 skills
"skills": ["github", "docker", "kubernetes"],
// ── Provider Override(可选)──
"provider": "xgjk-openapi",
// ── Model Override(可选)──
"model": "glm-5_codingplan"
},
// === 默认 Profile(必须)===
"default": {
"defaultSkills": ["docker-essentials", "sql-toolkit"],
"systemPrompt": "",
"skills": [],
"model": null
}
}
完整配置示例
{
"defaultSkills": ["docker-essentials", "sql-toolkit", "weather", "file-organizer-zh", "summarize", "web-search"],
"devops": {
"systemPrompt": "## DevOps 工程师\n你是一个基础设施专家,专注 Docker、K8s、CI/CD。\n- 提供可执行的部署脚本\n- 架构建议和最佳实践\n- 语言:中文,带代码块",
"skills": ["docker", "kubernetes", "github-actions"],
"provider": "xgjk-openapi",
"model": "glm-5_codingplan"
},
"code-review": {
"systemPrompt": "## 代码审查专家\n你是一个严格的代码审查专家,专注于安全漏洞、性能问题和代码规范。\n- 检查:PEP8/ESLint、安全漏洞、性能瓶颈\n- 语言:只用中文回答",
"skills": ["github", "code-review", "security"],
"provider": "xgjk-openapi",
"model": "glm-5_codingplan"
},
"devops-review": {
"topicList": ["code-review", "devops"],
"systemPrompt": "## 代码审查与 DevOps 专家\n你同时具备代码审查和 DevOps 的专业能力。\n...",
"skills": ["docker", "kubernetes", "github-actions", "github", "code-review", "security"]
},
"default": {
"defaultSkills": ["docker-essentials", "sql-toolkit"],
"systemPrompt": "",
"skills": [],
"model": null
}
}
在 openclaw.json 中启用
1. 添加到 plugins.allow
{
"plugins": {
"allow": [
"dynamic-session-context",
...
]
}
}
2. 配置插件加载路径
{
"plugins": {
"load": {
"paths": [
"/Users/spzhong/.openclaw/extensions/dynamic-session-context"
]
}
}
}
3. 启用并配置插件
{
"plugins": {
"entries": {
"dynamic-session-context": {
"enabled": true,
"config": {
"enabled": true,
"profilesPath": "./profiles.json"
}
}
}
}
}
Profile 解析优先级
插件按以下顺序解析 session 对应的 profile:
| 优先级 | 来源 | 示例 |
|---|---|---|
| 1 | sessionKey 末尾 topic | ...group:123_devops → profile: devops |
| 2 | 消息中的 profile hint | [profile:devops] 或 profile:devops |
| 3 | live label | profile:devops |
| 4 | 环境变量 | OPENCLAW_SESSION_LABEL=devops |
| 5 | 缓存 | 上一次解析的结果 |
Profile Hint 格式
在消息中指定
[profile:devops]— 触发devopsprofileprofile:code-review— 触发code-reviewprofile
通过 sessionKey 自动识别
agent:main:xg_cwork_im:group:123456_devops→ profile:devopsagent:main:group:789_devops-review→ profile:devops-review
topicList 多主题合并
如果一个 session 需要同时具备多个 profile 的能力,可以设置 topicList:
"devops-review": {
"topicList": ["code-review", "devops"],
"skills": ["docker", "kubernetes", "github-actions", "github", "code-review", "security"]
}
合并逻辑:
- 从
topicList中依次加载每个 topic 对应的 profile - 合并所有 profile 的
skills列表(自动去重) - 使用
topicList所在 profile 的systemPrompt - 追加合并后的
skills提示
defaultSkills 全局公共技能
defaultSkills 定义在 default profile 中,所有会话都会自动包含:
"default": {
"defaultSkills": ["docker-essentials", "sql-toolkit", "weather", "summarize"]
}
特点:
- 所有 profile 都会自动包含(不会重复)
- 可以在任何 profile 中使用
- 适合基础工具类 skills
Skills 提示注入
插件会在 system prompt 末尾追加以下内容:
## 当前会话技能/能力要求
优先按以下技能侧重点工作: docker, kubernetes, github-actions, docker-essentials, sql-toolkit
如果某项技能对应的工具不可用,请保持目标不变,并用当前可用工具给出最接近的可执行方案。
文件结构
dynamic-session-context/
├── src/
│ ├── index.js # 主插件入口
│ ├── profiles.js # Profile 解析和合并逻辑
│ ├── session.js # Session 工具函数
│ └── logger.js # 日志工具
├── dist/ # 编译后的代码
├── profiles.json # Profile 配置文件
├── package.json
└── README.md
注意事项
systemPrompt是追加,不是替换 — 只会追加到原始 system prompt 前面- Skills 列表无法直接替换 — 当前 OpenClaw 插件架构不支持修改 system prompt 中间的
<available_skills>标签,只能通过 skills 提示引导 - Profile 缓存 — session 解析的 profile 会被缓存,直到 session 结束
- 环境变量备用 — 可以通过
OPENCLAW_SESSION_LABEL或DYNAMIC_SESSION_PROFILE环境变量指定默认 profile
调试
查看插件日志:
tail -f /tmp/dynamic-session-context-final.log
日志格式:
🎯 before_prompt_build: session=agent:main:xg_cwork_im:group:123_devops profile=devops
💉 Returning prependSystemContext (92 chars)
🧰 Returning appendSystemContext for skills: docker, kubernetes, github-actions
版本历史
- v1.0 — 初始版本,支持 prependSystemContext / appendSystemContext
- v1.1 — 添加 topicList 多主题合并支持
- v1.2 — 添加 defaultSkills 全局公共技能