For the complete documentation index, see llms.txt. This page is also available as Markdown.

最终用户身份

了解 SDK 如何在不同会话中识别用户,以及如何用您自己的、以账户为范围的身份系统替换默认的基于设备的提供程序。

SDK 如何跨会话识别用户

只有当 Convai 后端能够可靠地将用户与其历史记录关联起来时,长期记忆才有用。建立这种关联的标识符是 end_user_id —— 一个在每次会话连接时发送到服务器的字符串。本页说明 SDK 默认如何生成该标识符、它在各个平台上提供哪些保证,以及如何用你自己的、由应用管理的身份替换默认值。

为什么稳定身份很重要

如果该 end_user_id 在不同会话之间发生变化,后端会将该用户视为新用户,且不会保留任何记忆。相反,如果两个不同用户共享同一个标识符,他们就会共享同一个记忆分区,角色也会混淆他们。正确处理身份是可靠长期记忆最重要的前提。

SDK 会发送 end_user_id 作为会话连接请求的一部分。后端会将其解析为内部的 speaker_id,然后使用 speaker_id:character_id 作为该用户与该角色记忆的存储键。你的应用始终只与 end_user_id —— 内部键只是后端实现细节。

默认提供者:DeviceEndUserIdProvider

开箱即用时,SDK 会注册 DeviceEndUserIdProvider 作为身份来源。它使用以下逻辑生成一个稳定的、设备范围内的标识符:

Player 构建

  1. 阅读 SystemInfo.deviceUniqueIdentifier.

  2. 如果该值有效(非空、非 null、不是 SystemInfo.unsupportedIdentifier、且不全为 0),则直接使用。

  3. 否则,生成一个新的 Guid (格式为 "N",不含连字符),将其存储在 PlayerPrefs 中,并使用键 "convai.end_user_id"保存,并返回它。此后每次运行都会返回同一个 GUID。

Unity 编辑器

会完全跳过设备标识符路径。编辑器始终从 PlayerPrefs 使用相同的 "convai.end_user_id" 键读取,首次运行时生成新的 GUID,并在之后重复使用。这样同一项目中的每个 Play Mode 会话都拥有一致的身份,这对于在不登录的情况下测试记忆连续性很有用。

平台行为摘要

环境
身份来源
持久性

Player 构建——设备 ID 可用

SystemInfo.deviceUniqueIdentifier

由操作系统管理;在某些平台上重装后仍会保留

Player 构建——设备 ID 不可用

中的 GUID PlayerPrefs

应用更新后仍保留;重装后或 PlayerPrefs 清除后会被清空

Unity 编辑器

中的 GUID PlayerPrefs

编辑器重启后仍保留;每个 Unity 项目一个 ID

PlayerId 字段不是 end_user_id

ConvaiPlayer 提供一个 Player ID 字段在 Inspector 中。这是一个 本地显示标识符 仅用于转录 UI 的归属显示——即对话信息流中显示在玩家台词旁边的名称。它不会发送到服务器,也不会影响长期记忆。

。要控制服务器用于记忆范围划分的标识符,请按下述方式实现自定义身份提供者。

当你的应用管理用户账户时,请替换默认提供者——例如,用户登录后,你希望记忆绑定到他们的账户,而不是他们的物理设备。

两个身份接口

SDK 将身份分为两个接口。对于大多数自定义实现,你只需要其中一个:

接口
方法
用途

IEndUserIdentityProvider

GetEndUserId()

使用此接口。 在连接时解析当前用户的标识符。通过 ConvaiManager.SetEndUserIdentityProvider(provider).

IEndUserIdProvider

GenerateEndUserId()

底层生成接口,由 DeviceEndUserIdProvider实现。大多数自定义提供者不需要它。

DeviceEndUserIdProvider 同时实现这两个接口。自定义提供者通常只实现 IEndUserIdentityProvider.

步骤 1:实现 IEndUserIdentityProvider

对于同一个人用户,这个返回字符串在不同会话之间必须保持稳定。服务器分配的账户 ID、哈希后的邮箱,或你身份验证系统中的任何不透明标识符都可以很好地工作。避免使用在重新登录或更换设备后会变化的值。

步骤 2:在连接前注册

ConvaiManager.SetEndUserIdentityProvider 接受任意 IEndUserIdentityProvider。提供者只会在会话连接时读取一次——如果在会话已激活后更改它,在下一次连接之前都不会生效。

步骤 3(可选):附加用户元数据

你可以在连接时与 end_user_id 一起发送任意元数据。服务器会将其存储在终端用户记录上,可在 End-User Management 编辑器工具中查看,也可通过 EndUsersService"name" 键会得到特殊处理——它会被用作编辑器中终端用户列表的显示名称。

将其与身份提供者一并注册:

身份解析摘要

结论

end_user_id —— 是长期记忆一切功能的基础——如果它不稳定,记忆就不会延续。默认的 DeviceEndUserIdProvider 会自动处理大多数基于设备的部署。对于有用户账户的应用,请实现 IEndUserIdentityProvider 并在首次会话连接前注册它。下一页, 在角色上启用记忆介绍如何为单个角色开启或关闭记忆功能。

最后更新于

这有帮助吗?