37 lines
4.2 KiB
Markdown
37 lines
4.2 KiB
Markdown
# 老人档案与火山专属智能体同步
|
||||
|
|
|
|||
|
|
资料保存成功后立即尝试更新专属 Bot;同步失败不会回滚已保存资料。第 76 个迁移在 `subject_voice_agent` 中记录待同步版本、已确认版本、状态与重试时间,档案更新和待同步登记在同一数据库事务内完成。隐私更正走同一触发器。头像、内部备注、单独的档案版本号更新不会触发供应商更新。
|
|||
|
|
|
|||
|
|
## 发给模型的内容
|
|||
|
|
|
|||
|
|
- 基础角色:保留现有专属 Bot 的基础人设,迁移只移除旧编译器追加的末尾称呼句。
|
|||
|
|
- 交流设置:称呼、语言、节奏、避免主动提及的话题。
|
|||
|
|
- 个性化资料:背景、兴趣、长期陪伴方向、优先话题;需要现有 `personalized_memory` 授权和有效语音聊天授权。
|
|||
|
|
- 本通上下文:开场、已授权记忆、最近问题线索;只在开聊准备时追加,不写回基础配置。
|
|||
|
|
|
|||
|
|
完整档案使用 JSON 编码,作为事实和偏好资料;自由文本不能改变基础角色和安全规则。避免主动提及列表作为交流边界,不能用于主动开场、引导或追问;长者主动提起时尊重当前意愿。优先话题不强制转题,长期陪伴方向不要求每通完成。头像、内部备注和其他扩展字段不会进入模型上下文。原生 `MemoryConfig.Enable` 保持关闭。
|
|||
|
|
|
|||
|
|
## 同步与并发
|
|||
|
|
|
|||
|
|
API 保存后调用 `Sync`。worker 每两秒扫描待同步项目,失败按 1、2、4……256 秒的间隔持续重试。任务只保存版本和固定错误码,不记录供应商错误正文、档案正文或凭据。连续编辑会合并为最新版本。
|
|||
|
|
|
|||
|
|
资料更新、同步和新通话准备使用同一个内部老人 ID 的锁。已有活动通话时不更新供应商配置;直连通话需要结束记录、音频关闭和 SDK 停止,才可同步。状态显示“当前通话结束后同步,下次聊天生效”。供应商更新返回后会读取 Bot,核验人设、欢迎语、回调地址、验签配置及原生记忆关闭状态;凭据可能被供应商遮蔽,不比较或输出凭据。
|
|||
|
|
|
|||
|
|
开聊准备使用相同编译器读取最新档案,再附加本通上下文。更新或核验失败时沿用现有 `VOICE_AGENT_CONFIG_FAILED` 启动错误,不使用旧禁提配置启动新通话。同一会话续约仍复用冻结参数。通话结束后后台清理供应商上的临时开场、记忆和回调,恢复专属 Bot 的稳定配置。
|
|||
|
|
|
|||
|
|
授权撤回会登记待同步;授权到期由扫描器重新检查并清理个性化内容。更新过程中发生授权变化时,旧请求不能确认新版本。已有的通话隐私停止机制继续生效。
|
|||
|
|
|
|||
|
|
## 前端与接口
|
|||
|
|
|
|||
|
|
`Subject.voice_agent` 增加 `persona_sync_status`(PENDING/SYNCED/DEFERRED/FAILED)、`persona_revision`、`persona_synced_revision`、`persona_synced_at` 和 `personalization_included`。同步状态与 Bot 创建状态分开;同步失败不把 READY Bot 改成创建失败。
|
|||
|
|
|
|||
|
|
资料编辑页显示同步状态。待同步期间每五秒只刷新同步元数据,不重置未保存的编辑。同步失败可使用原有 `POST /api/v1/subjects/{id}/voice-agent` 重试;该接口现在会同步 READY Bot 的待处理资料。缺少个性化授权时页面明确说明相关字段尚未进入模型。
|
|||
|
|
|
|||
|
|
## 发布与验证
|
|||
|
|
|
|||
|
|
需要先应用迁移 `000076_elder_persona_sync`,再发布 API、worker 和 Web。worker 需要同 API 一样可读取 `DIRECT_CHAT_TEMPLATE_FILE` 或 `VOLC_VOICE_CHAT_TEMPLATE_FILE`,并具有火山更新、查询权限。迁移将现有专属 Bot 标为 PENDING,由后台补同步;正在通话的 Bot 延后处理。尚未创建成功的 Bot 继续使用既有创建重试入口。
|
|||
|
|
|
|||
|
|
运行 `scripts/test-elder-persona-sync.ps1` 验证迁移回填、升级回滚、真实数据库事务与现有相关功能。脚本创建独立的临时 PostgreSQL/Redis 容器,只发布到本机,使用合成数据和本地供应商替身,结束后自动清理,不接触 Compose 或生产服务。
|
|||
|
|
|
|||
|
|
本次本地验证四个相关包共有 372 项测试(包含子案例)通过,无跳过;火山接口通过本机 HTTP 模拟验证更新和查询回读。上线后仍需对真实 Bot 做读取核验和实际语音交流验收,接口同步成功不代表模型在每一轮都遵守全部偏好。
|