Active Persona
2026/9/9 20:57:00 网站建设 项目流程

Active Persona

【免费下载链接】DeepTutorDeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/.项目地址: https://gitcode.com/GitHub_Trending/dee/DeepTutor

Embody the persona below for this entire conversation. It overrides generic style defaults.

Persona: research-assistant

<这里逐字插入 PERSONA.md 的 frontmatter 之后的正文>

需要注意两点设计细节: - **人设覆盖通用风格默认值**("It overrides generic style defaults")——人设的优先级高于全局通用风格; - **缺失的人设绝不破坏回合**:`load_for_context` 对空名称、不存在的 Persona、空正文一律返回 `""`([service.py](https://link.gitcode.com/i/ad84cd288e649f09f1717c303633baa9)),这一容错行为被单测 `test_load_for_context_missing_is_empty` 明确覆盖(见 [tests/services/persona/test_persona_service.py](https://link.gitcode.com/i/42a9b3fc1aa28eef61ac072ee11703e1))。 ### 4. 回合注入点与"跟随会话"持久化 真正的注入发生在会话回合执行层 [deeptutor/services/session/turn_runtime.py](https://link.gitcode.com/i/c324a1c96bc86b17e34e1df4077f5623): - 从请求 payload 中读取 `persona` 字段(`requested_persona = str(payload.get("persona") or "").strip()`); - 非空时调用 `get_persona_service().load_for_context(requested_persona)` 得到 `persona_context`; - 普通用户找不到自己的预设时,会**回退读取 admin 工作区的只读预设**("users fall back to admin-authored presets",因为人设只携带风格指引、不含特权工作流,故无需授权机制); - `active_persona` 只有在成功取到上下文时才非空。 此外该文件还说明了**预设的会话语义**:请求中的显式 `persona` 键(包括空串 = "Default"/无人设)会被持久化为会话偏好,"active persona survives reloads and follows the session"([turn_runtime.py](https://link.gitcode.com/i/d90349b28a00f632e909b5843973e9a5))——即用户选定人设后,刷新/重开会话不会丢。`active_persona` 与 `persona_context` 随后被组装进回合调用参数并反映到回合事件中([turn_runtime.py](https://link.gitcode.com/i/39a3681b7bec4bf3782355ee77212370))。 ## 五、管理预设:REST API 与前端客户端 后端通过 [deeptutor/api/routers/personas.py](https://link.gitcode.com/i/ab6bcc08b0de5e6ada8ebebe21fc459d) 挂载在 `/api/v1/personas` 下,提供完整 CRUD: | 方法 | 路径 | 语义 | |---|---|---| | GET | `/api/v1/personas/list` | 列出当前用户预设;普通用户会**合并** admin 只读预设(同名时用户预设遮蔽 admin 预设,`own_names` 命中则跳过) | | GET | `/api/v1/personas/{name}` | 读取单个人设详情(含全文 `content`),用户缺失时回退 admin 预设并标记 `read_only` | | POST | `/api/v1/personas/create` | 新建(payload:`name`、`description`、`content`),重名返回 409 | | PUT | `/api/v1/personas/{name}` | 更新 `description`/`content`,支持 `rename_to` 重命名 | | DELETE | `/api/v1/personas/{name}` | 删除人设 | 名称非法返回 400,不存在返回 404(详见各 handler 中的 `HTTPException` 与 i18n 消息)。前端侧 [web/lib/personas-api.ts](https://link.gitcode.com/i/c877f9397280700142f3ade0d0f3c252) 提供了等价的 TypeScript 客户端方法(`listPersonas` / `getPersona` / `createPersona` / `updatePersona` / `deletePersona`),并配有客户端缓存失效逻辑(`invalidatePersonasCache`)。 ## 六、内置预设如何分发:seed 与旧版迁移 `research-assistant`、`peer`、`teacher` 三个预设随 Python 包分发(见 `pyproject.toml` 的 package-data 中 `**/*.md` 声明),在**首次运行**时通过 `seed_presets()`([service.py](https://link.gitcode.com/i/146a2e6efc2d238ff831ff919ef5cdf5))播种进 admin workspace,从而让新安装环境能直接看到这三个**只读预设**(issue #659,被测试 [tests/services/persona/test_persona_service.py](https://link.gitcode.com/i/d268ba53d7ed6f24e73ead706a4476a1) 验证): - `seed_presets` 是**幂等且非破坏性**的:若目标预设已存在(无论来自用户编辑还是此前播种),一律不覆盖; - 对 `peer` / `teacher` / `research-assistant` 这三个**产品级旧名**,历史位于 skills workspace(`skills/<name>/SKILL.md`)的条目会在首次访问服务时被 `migrate_legacy_skills` 自动搬运为 `personas/<name>/PERSONA.md`,并丢弃旧 frontmatter 中的 `triggers`/`tags` 键(关键词路由已被退役),见 [service.py](https://link.gitcode.com/i/bb1195194e8ca1134e5abcba672c0521)。迁移同样是幂等的,且不会误伤任意用户自定义 Skill——只有 `LEGACY_PERSONA_SKILLS` 白名单内的三个名字会被处理([service.py](https://link.gitcode.com/i/65eb7e6961ba1f51aee56f9cda642575))。 ## 七、动手实践:把 research-assistant 变体改造成你自己的科研人设 基于前文机制,你可以分三步自定义: **第一步:复制为个人预设。** 最稳妥的做法不是直接改只读的仓库内置预设,而是在自己的 workspace 中通过 `POST /api/v1/personas/create` 新建(或调用前端 `createPersona`),payload 形如: ```json { "name": "research-assistant-zh", "description": "面向中文写作的严谨研究助手:强制引用、区分证据与观点、四段式结构", "content": "---\nname: research-assistant-zh\ndescription: 面向中文写作的严谨研究助手\n---\n\n# 中文研究助手\n\n……此处粘贴并改写 research-assistant 的五条行为准则与四段式结构……" }

【免费下载链接】DeepTutorDeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/.项目地址: https://gitcode.com/GitHub_Trending/dee/DeepTutor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询