mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-04-26 06:03:21 +08:00
7.8 KiB
7.8 KiB
name, description
| name | description |
|---|---|
| generate-assistant-config | Use when 用户希望根据一句自然语言需求创建新的 ChatLab assistant 配置、assistant Markdown、分析助手模板,或需要为群聊/私聊场景整理可写入 assistant/<locale>/<assistant-id>.md 的多语言助手文件。 |
generate-assistant-config
为 ChatLab 生成 assistant Markdown。先动态追问补齐关键信息,只输出中文预览;用户确认后,再生成 zh / en / ja 三份本地化版本并写入 assistant/。
使用前先确认
skills/是开发代理技能目录;本技能自身放这里assistant/是 assistant Markdown 产物目录;最终 assistant 文件写这里- 当前仓库里的
assistant/*.md可视为历史参考样例;新生成的多语言 assistant 写入assistant/<locale>/ - 当前项目 assistant 的真实格式以运行时代码为准,不以过期文档为准
- 如
.docs/ai/assistantSystem.md与运行时代码冲突,以以下文件为准:electron/main/ai/assistant/parser.tselectron/main/ai/assistant/types.tselectron/main/ai/assistant/manager.tselectron/main/ai/tools/definitions/index.tselectron/main/ai/tools/definitions/sql-analysis.ts
必读上下文
开始前读取这些文件,只读满足任务所需的最小内容:
- 项目与 AI 总体上下文
.docs/README.md.docs/ai/aiArchitecture.md.docs/ai/assistantSystem.md
- assistant 真实格式与落地约束
electron/main/ai/assistant/parser.tselectron/main/ai/assistant/types.tselectron/main/ai/assistant/manager.ts
- 默认骨架与工具来源
electron/main/ai/assistant/builtins/general_cn.mdelectron/main/ai/tools/definitions/index.tselectron/main/ai/tools/definitions/sql-analysis.ts
硬规则
- 不要直接套用旧文档中的
version、order、customSqlTools等已过期字段 - frontmatter 只允许使用当前 parser 支持的字段:
idnamepresetQuestionsallowedBuiltinToolsbuiltinIdapplicableChatTypessupportedLocales
- 生成普通 assistant 文件时,不要写
builtinId - 如果角色是通用且无需限制工具,优先省略
allowedBuiltinTools字段,而不是硬塞一长串“全量工具” allowedBuiltinTools只能使用当前真实存在的工具名,不得臆造、不得引用旧名字- 最终写入路径固定为
assistant/<locale>/<assistant-id>.md - 目标语言固定为
zh、en、ja - 三个语言版本保持同一角色定位,但允许按语言做自然的本地化调整,不做机械直译
- 任一目标文件已存在时,必须停止并征求用户确认,不能直接覆盖
动态追问规则
- 用户通常会给一句自然语言需求,例如“帮我生成一个适用于群聊的社群分析助手”
- 先从用户原话中提取已有信息,不要重复问已经明确的内容
- 只追问缺失且会影响 assistant 行为边界的关键信息
- 追问应当动态,不使用固定问卷
- 每轮只问一个当前最关键的问题,通常总问题数控制在 3 到 5 个
- 优先补齐以下信息:
- 角色核心目标:主要解决什么问题
- 使用场景:
group、private或通用 - 语气与回答风格:专业、温暖、轻松、克制等
- 输出偏好:更偏总结、排行、建议、证据引用、结构化呈现
- 明显不该给的工具边界
- 如果用户一句话已经足够清楚,可以少问;不要为了凑问题数而发问
工作流
阶段一:中文预览,不落盘
- 读完必读上下文后,先总结已知信息和仍然缺失的关键点
- 动态追问,直到信息足够生成 assistant
- 先生成一份中文 assistant Markdown 预览
- 此阶段只在对话中输出 Markdown,不写文件
- 预览完成后,明确等待用户确认,不要提前生成多语言文件
阶段二:确认后生成多语言文件
仅在用户明确确认中文预览后执行:
- 为
zh、en、ja各生成一份 assistant Markdown - 三份文件使用同一个
assistant-id name、presetQuestions、正文语气允许按语言本地化supportedLocales分别写为:zh文件:- zhen文件:- enja文件:- ja
- 写入前检查以下目标是否已存在:
assistant/zh/<assistant-id>.mdassistant/en/<assistant-id>.mdassistant/ja/<assistant-id>.md
- 任一已存在则停止,并把已存在路径明确告诉用户,等待是否覆盖的确认
- 用户确认允许覆盖后,才写入全部目标文件
assistant-id 规则
- 使用英文小写短横线命名
- 不带语言后缀
- 不带无意义的
assistant冗余词,除非不带会造成歧义 - 尽量根据角色核心定位提炼为 2 到 4 个词
示例:
- 社群运营分析助手 ->
community-analyst - 客服复盘助手 ->
customer-service-reviewer - 关系洞察助手 ->
relationship-insight
如果用户给了明确名称:
- 尊重用户命名语义
- 自动规范化为合法 id
- 如名称过泛,例如“分析助手”,先追问收窄再定 id
工具选择规则
- 默认原则:尽量放宽,除非明显不适合该角色
- 先看角色是否真的需要工具白名单
- 若角色边界宽泛,可省略
allowedBuiltinTools - 若角色边界明确,再按真实工具集合选择白名单
- 选择时优先保留完成该角色所必需的基础检索工具,例如:
- 消息搜索
- 最近消息
- 上下文查看
- session 检索
- 仅在角色明显聚焦时再额外限制,例如:
- 强运营分析:保留群分析、排行、趋势工具
- 强情感洞察:保留互动关系、对话回顾、上下文工具
- 强客服分析:保留对话、上下文、未回复问题、消息类型工具
生成前做一次自检:
- 是否引用了不存在的工具名
- 是否遗漏了完成该角色所需的基础工具
- 是否包含明显与场景冲突的工具
输出模板
中文预览与最终落盘文件都使用同一结构:
---
id: assistant-id
name: 助手名称
applicableChatTypes:
- group
supportedLocales:
- zh
allowedBuiltinTools:
- search_messages
- get_recent_messages
presetQuestions:
- 示例问题 1
- 示例问题 2
---
你是一位……
你的核心能力是:
- …
- …
你的回答风格应该……
## 回答要求
1. …
2. …
3. …
frontmatter 细则
id:所有语言版本保持一致name:允许本地化,不必逐字对应applicableChatTypes:仅在能明确判断时写入;通用角色可省略supportedLocales:按文件所属语言写单元素数组allowedBuiltinTools:仅在需要限制工具范围时写入presetQuestions:建议 3 到 5 条,贴近该语言用户的自然表达
正文写法规则
- 第一段:一句话定义角色与任务
- 第二段:列出“核心能力”
- 第三段:定义回答风格
- 最后使用
## 回答要求 - 回答要求应强调:
- 基于工具结果,不编造
- 数据不足时明确说明
- 输出结构和证据引用方式
- 该角色独有的风格约束
确认前后的响应要求
用户确认前:
- 只输出中文预览 Markdown
- 不写文件
- 不提前生成
en或ja - 在 Markdown 后用一句话请求确认
用户确认后:
- 先检查目标路径是否存在
- 若不存在,再生成并写入三份文件
- 完成后向用户汇报:
- 实际写入的 3 个路径
- 是否做了工具白名单限制
- 是否有任何本地化调整
常见错误
- 把 assistant 产物写到
skill/或skills/,而不是assistant/ - 机械照抄
.docs/ai/assistantSystem.md的旧字段 - 在未确认中文预览前就直接落盘
- 把所有工具名都塞进
allowedBuiltinTools - 多语言版本仅做逐字翻译,导致预设问题和语气不自然
- 发现同名文件已存在,却直接覆盖