# Prompt 与个性化(Personalization)管理 API ## Prompt(主提示词)存储位置 - 路径:`api/users//shared/prompts/.txt`(用户级共享) - 内容格式:纯文本 ## 个性化存储位置 - 路径:`api/users//shared/personalization/.json`(用户级共享) - 内容格式:JSON(下面给出完整结构与字段约束) ## 个性化 JSON 结构(content) > 该结构与服务端 `modules/personalization_manager.py` 的 `DEFAULT_PERSONALIZATION_CONFIG` / `sanitize_personalization_payload()` 完全一致。 > 服务端会对你上传的 `content` 做规范化(截断长度、限制条数、过滤非法值/未知分类、回落默认值)。 ### 完整示例(可直接用) ```json { "enabled": false, "self_identify": "", "user_name": "", "profession": "", "tone": "", "considerations": [], "thinking_interval": null, "disabled_tool_categories": [], "default_run_mode": null, "auto_generate_title": true, "tool_intent_enabled": true, "default_model": "kimi" } ``` ### 字段说明与约束 | 字段 | 类型 | 默认 | 说明/约束 | |---|---|---|---| | `enabled` | bool | false | 是否启用个性化注入;为 false 时个性化不会写入 system prompt | | `self_identify` | string | "" | 助手自称;会被截断到 20 字符 | | `user_name` | string | "" | 对用户称呼;会被截断到 20 字符 | | `profession` | string | "" | 用户职业;会被截断到 20 字符 | | `tone` | string | "" | 语气风格;会被截断到 20 字符(服务端有推荐列表但不强校验) | | `considerations` | string[] | [] | 重要注意事项列表:最多 10 条,每条最多 50 字符,非字符串/空字符串会被丢弃 | | `thinking_interval` | int / null | null | 思考内容展示节奏相关:会被钳制到 1~50;非法值会变成 null | | `disabled_tool_categories` | string[] | [] | 禁用的工具分类 id 列表:未知分类会被过滤(分类集合来自服务端 TOOL_CATEGORIES) | | `default_run_mode` | "fast"/"thinking"/"deep"/null | null | 默认运行模式:非法值会变成 null | | `auto_generate_title` | bool | true | 是否自动生成对话标题 | | `tool_intent_enabled` | bool | true | 工具意图提示开关(属于配置结构的一部分) | | `default_model` | string | "kimi" | 默认模型:仅允许 `"kimi"|"deepseek"|"qwen3-vl-plus"|"minimax-m2.5"`,非法值回落到 `"kimi"` | ### 最小示例(启用 + 2 条注意事项) ```json { "enabled": true, "user_name": "Jojo", "tone": "企业商务", "considerations": [ "优先给出结论,再补充依据", "涉及风险时给出可执行的规避方案" ] } ``` ## 接口 ### 列出 Prompt `GET /api/v1/prompts` 响应: ```json { "success": true, "items": [ { "name": "default", "size": 123, "updated_at": 1769182550.59 } ] } ``` ### 获取 Prompt 内容 `GET /api/v1/prompts/{name}` 响应: ```json { "success": true, "name": "custom_a", "content": "你的主系统提示..." } ``` ### 创建/覆盖 Prompt `POST /api/v1/prompts` ```json { "name": "custom_a", "content": "你的主系统提示内容" } ``` 成功返回 `{ "success": true, "name": "custom_a" }` --- ### 列出个性化 `GET /api/v1/personalizations` ### 获取个性化内容 `GET /api/v1/personalizations/{name}` ### 创建/覆盖个性化 `POST /api/v1/personalizations` ```json { "name": "biz_mobile", "content": { "enabled": true, "tone": "企业商务" } } ``` 说明: - 服务端会对 `content` 做 **规范化/清洗**(截断长度、限制条数、过滤非法值/未知分类、回落默认值),并把清洗后的结果落盘; - 返回体里的 `content` 也是 **清洗后的** 版本(建议客户端以返回值为准)。 --- ## 在对话/消息中使用 - `POST /api/v1/workspaces/{workspace_id}/conversations` 可选参数:`prompt_name`、`personalization_name`,会写入对话元数据并在后续消息中应用。 - `POST /api/v1/workspaces/{workspace_id}/messages` 可选参数:`prompt_name`、`personalization_name`,立即应用并写入元数据。 - 元数据字段:`custom_prompt_name`、`personalization_name`;对话加载时会自动套用对应文件(若不存在则忽略)。 优先级:调用时传入 > 对话元数据 > 默认主 prompt / 默认个性化配置。