开发者指南 · 06
Service & Consumer 双层
6.1 Admin 层
- 通过 Web UI 登录,拥有完整权限
- 管理文件系统(
docs/scripts/generated/soul) - 配置 System Prompt + 用户画像
- 管理 Subagent + 能力提示词
- 发布 Service + 管理 API Key
- 配置定时任务 + 微信接入
6.2 Consumer 层
- 通过
sk-svc-...API Key 认证(或/s/{sid}?key=...自助链接) - 权限受限:仅访问 Service 配置的能力 +
allowed_docs/scripts - 文件系统隔离:
users/{admin}/services/{svc}/conversations/{conv}/ - 生成文件隔离:每个对话独立的
generated/ - 不能访问 Admin 的文件系统
6.3 Service 配置
每个 Service 是一个 published 配置:
text
users/{admin_id}/services/{service_id}/
├── config.json # 模型 + system_prompt + capabilities + allowed_docs/scripts + welcome_message + quick_questions + wechat_channel
├── keys.json # API Key(hashed)
├── wechat_sessions.json # WeChat 会话状态
├── conversations/ # Consumer 对话目录
└── tasks/ # Service 定时任务详细 schema 见 docs/filesystem-architecture.md §4。
6.4 Service 自助化(v2.x)
6.4.1 专属链接附 Key
- URL 格式:
/s/{service_id}?key=sk-svc-xxx - 后端:
consumer_ui.py注入模板变量,前端启动时URLSearchParams读key→ 写localStorage→history.replaceState立即清掉 query - 前端 admin:Key Modal 生成成功后额外展示带 key 的完整链接 + 警告(等同分享 Key)
6.4.2 欢迎语 + 快速问题
- 字段:
welcome_message: str+quick_questions: List[str] - 后端模板注入:
_safe_json_for_inline_script防 script breakout - 前端 chat 页:ChatGPT 风格首屏(大欢迎语 + 渐变 chips),发送第一条消息后自动隐藏
6.4.3 文件/脚本图形选择器
FileTreePicker.tsx:antdTreecheckable +loadData懒加载 + 「全部 (*)」 Switch- 文件夹勾选 = 整个目录递归(key 以
/结尾) - 根目录限定:
allowed_docs只展示/docs,allowed_scripts只展示/scripts - 空
allowed_docs自动回落["*"],空allowed_scripts保持空数组(语义=禁止脚本)
6.5 Consumer Agent channel-aware
python
create_consumer_agent(..., channel: str = "web")channel="web":不注入send_message,即便 humanchat capability 启用。原因:web 上 agent 输出已直接流给浏览器,再调 send_message 既无投递目标又会让消费者看到不该看的工具事件channel="wechat":注入send_message,工具结果由 delivery 层反向投递channel="scheduler":同 wechatcache_key中加入::ch={channel}(仅当非默认 web 时)