NPC 与虚拟角色
Qwen 角色扮演模型专为虚拟社交互动、游戏 NPC、IP 拟人化和硬件集成场景设计。
该模型支持会话缓存以提升响应速度。命中缓存的 Token 按隐式缓存计费。
输入和输出参数详见 Chat API 参考。
获取 API Key 并将其设置为环境变量。如需使用 SDK,请先安装 SDK。
定义角色设定,然后发送用户请求发起对话。
使用 Character 模型进行角色扮演时,需要在 system message 中配置以下内容:
使用 assistant message 设置对话开场白。建议:
要维持连续对话,每轮对话后将新内容追加到
响应示例
设置 响应示例
如果对模型输出不满意,可以调整控制随机性的
响应示例
群聊功能可以让模型扮演指定角色,并与其他角色进行互动。
使用说明:
响应示例
如果用户收到模型输出后没有回复,可以引导模型继续对话。方法是在 响应示例
模型有时会使用括号表示动作,如
例如,要禁止输出括号 响应示例模型不再输出包含括号的内容。
在多轮对话中,有时需要插入一次性补充信息或指令,如游戏状态、操作提示或检索结果。这类信息不是由用户或角色发起的。此类信息可以影响角色的回复,同时保持对话前缀(session)一致以提高缓存命中率。将这类内容作为 响应示例
角色扮演模型的上下文长度难以支持超长轮次对话。启用长期记忆后,模型会定期对历史对话进行摘要,压缩到 1,500 Token 以内,保留关键上下文,以支持超长多轮对话。
将
长期记忆产生两部分内容会进行计量:
开启长期记忆后,在触发记忆摘要的请求返回中,
角色扮演模型支持模型调优功能,您可以通过微调来提升模型在特定角色或场景下的表现。详情请参见微调概览。
会话缓存自动管理上下文,避免重复计算 token,在不影响回复质量的前提下降低成本和延迟。
启用方式:在请求 header 中添加
随着对话轮次增加,
如果调用失败,请参阅错误码。
支持的模型
以下价格为目录价。具体优惠活动及折扣价格请前往模型市场查看。
| 模型 | 上下文窗口 | 最大输入 | 最大输出 | 输入价格 | 输出价格 |
|---|---|---|---|---|---|
| qwen-plus-character | 32,768 | 30,000 | 4,000 | 0.8元 | 2元 |
| qwen-flash-character | 8,192 | 8,000 | 4,096 | 0.25元 | 1.5元 |
| qwen-flash-character-2026-02-26 | 262,144 | 262,144 | 32,768 | 0.18元 | 1.5元 |
| qwen-plus-character-ja | 8,192 | 7,680 | 512 | 3.67元 | 10.275元 |
qwen-flash-character-2026-02-26 的最大输出默认为 4,096,可通过 max_tokens 参数调整至 32,768。API 参考
输入和输出参数详见 Chat API 参考。
前提条件
获取 API Key 并将其设置为环境变量。如需使用 SDK,请先安装 SDK。
使用方法
定义角色设定,然后发送用户请求发起对话。
发起对话调用
角色设定
使用 Character 模型进行角色扮演时,需要在 system message 中配置以下内容:
- 角色详情 指定角色的姓名、年龄、性格、职业、简介和人际关系等信息。
- 补充角色描述 对角色的经历和兴趣进行全面描述。使用标签区分不同类别的内容,并以文本形式描述。
- 对话上下文 指定场景背景和角色间的关系,明确角色在对话中需要遵循的指令和要求。
- 风格指南补充 指定角色的说话风格和回复长度。如果角色需要展示特殊行为(如动作或表情),也需要在此说明。
设置开场白
使用 assistant message 设置对话开场白。建议:
- 体现角色的说话风格。例如,用括号 () 表示动作,使用果断或温柔的语气。
- 体现场景和角色设定,如伴侣关系、亲子关系或同事关系。
追加对话历史
要维持连续对话,每轮对话后将新内容追加到 messages 数组末尾。如果对话过长,只传最近 n 轮的对话历史来控制上下文窗口。messages 数组的第一个元素必须始终是 system message。
发起请求
- OpenAI兼容-Chat Completions API
- OpenAI兼容-Responses API
- DashScope
完整 JSON 响应
完整 JSON 响应
多样化响应
设置 n 参数(1–4,默认 1)可在单次请求中获取多个响应。
- OpenAI兼容-Chat Completions API
- OpenAI兼容-Responses API
- DashScope
完整 JSON 响应
完整 JSON 响应
重新生成响应
如果对模型输出不满意,可以调整控制随机性的 seed 参数来生成新的响应。
top_p 和 temperature 也会影响结果多样性。低值时即使 seed 不同也可能生成相似结果;高值时即使 seed 相同也可能生成不同结果。建议保持默认值,每次只调整一个参数。- OpenAI兼容-Chat Completions API
- OpenAI兼容-Responses API
- DashScope
完整 JSON 响应
完整 JSON 响应
模拟群聊
群聊功能可以让模型扮演指定角色,并与其他角色进行互动。
使用说明:
- 模型扮演的角色为
assistant,其他聊天参与者的角色为user。 - 每个角色的名称必须在
content开头指定。 - 调用时在末尾添加一条 assistant message,内容以当前角色名称为前缀(如"凌露:"),同时设置参数
"partial": true。
- OpenAI兼容-Chat Completions API
- OpenAI兼容-Responses API
- DashScope
完整 JSON 响应
完整 JSON 响应
连续响应
如果用户收到模型输出后没有回复,可以引导模型继续对话。方法是在 messages 数组中添加一条 assistant message,将 content 设为"角色名:",同时设置参数 "partial": true,以此引导用户回应。
- OpenAI兼容-Chat Completions API
- OpenAI兼容-Responses API
- DashScope
限制输出内容
模型有时会使用括号表示动作,如 (向你挥手)。如果需要阻止模型输出某些内容,可以通过 logit_bias 参数调整特定 Token 的生成概率。logit_bias 是一个映射字段,Key 为 Token ID,Value 指定该 Token 的概率。Token ID 可通过下载 logit_bias_id_mapping_table.json 查看。Value 范围为 [-100, 100]。-1 会降低选中概率,1 会提高选中概率。-100 会完全禁止该 Token,100 会使其成为唯一可选 Token。不建议将值设为 100,因为这会导致输出循环。
分词器会生成多字符 Token,如
(t、(s 和 (W。要完全屏蔽括号,除了单字符 ( 和 ) 外,还必须禁止这些 Token。以下示例包含了所有 (+字母 的组合以及常见的标点-括号配对。():
- OpenAI兼容-Chat Completions API
- OpenAI兼容-Responses API
- DashScope
完整 JSON 响应
完整 JSON 响应
插入补充信息
在多轮对话中,有时需要插入一次性补充信息或指令,如游戏状态、操作提示或检索结果。这类信息不是由用户或角色发起的。此类信息可以影响角色的回复,同时保持对话前缀(session)一致以提高缓存命中率。将这类内容作为 system message 插入到最后一条未回复的 user message 之前。例如,插入检索到的用户信息,如"\用户喜欢的食物:\n水果:蓝莓\n零食:炸鸡\n主食:饺子"。
- OpenAI兼容-Chat Completions API
- OpenAI兼容-Responses API
- DashScope
长期记忆
角色扮演模型的上下文长度难以支持超长轮次对话。启用长期记忆后,模型会定期对历史对话进行摘要,压缩到 1,500 Token 以内,保留关键上下文,以支持超长多轮对话。
长期记忆仅支持中文场景。
长期记忆功能依赖
character_options 参数,暂不支持 Responses API。启用功能
将 character_options.memory.enable_long_term_memory 设为 true 即可启用长期记忆。通过 character_options.memory.memory_entries 设置摘要频率。启用后,按以下方式使用:
-
会话绑定:每次请求必须在 Header 中提供唯一的 Session ID(如 UUID),通过
x-dashscope-aca-session字段传递以关联会话。系统会自动清除 365 天未使用的会话。 -
角色设定:通过
character_options.profile字段传递用户角色设定。 -
增量输入:
messages字段只需包含新消息。系统会自动加载和管理历史记忆与摘要,无需手动拼接完整上下文。
system message)传递的是一次性补充信息或指令,不属于对话历史,不适合在后续对话中被纳入摘要。例如"玩家进入第 3 关"或"今天是情人节"。通过 character_options.memory.skip_save_types 参数指定要跳过的消息类型,该参数为数组:
system:跳过当前轮次添加的 system message。user:跳过当前轮次添加的 user message。assistant:跳过当前轮次添加的 assistant message。output:跳过当前轮次生成的 assistant message。
记忆摘要机制
记忆摘要机制
将 例如,将
memory_entries 设为 N。当未被摘要的消息达到该数量时,触发一次记忆摘要。摘要机制如下:- 每轮输入模型的内容包括
Profile、最新摘要(如有)和最近的 N 条原始消息。 - 摘要生成与模型响应异步执行,均会产生模型调用费用。摘要由
qwen-plus-character模型生成。
User_Message_X和Assistant_Message_X分别表示第 X 轮对话的用户输入和 assistant 响应。- 摘要会整合关键角色信息和时间信息,但不会保留所有文本细节。
- 摘要作为模型输入使用,不支持查询。
memory_entries 设为 3:| 对话轮次 | 用户输入 | 模型输入 | 参与摘要生成 |
|---|---|---|---|
| 第 1 轮 | Profile(角色信息)、User_Message_1 | Profile(角色信息)+ User_Message_1 | 无 |
| 第 2 轮 | Profile(角色信息)、User_Message_2 | Profile(角色信息)+ User_Message_1 + Assistant_Message_1 + User_Message_2 | User_Message_1 + Assistant_Message_1 + User_Message_2 生成 Summary_1 |
| 第 3 轮 | Profile(角色信息)、User_Message_3 | Profile(角色信息)+ Summary_1 + User_Message_2 + Assistant_Message_2 + User_Message_3 | 无 |
| 第 4 轮 | Profile(角色信息)、User_Message_4 | Profile(角色信息)+ Summary_1 + User_Message_3 + Assistant_Message_3 + User_Message_4 | Assistant_Message_2 + User_Message_3 + Assistant_Message_3 + Summary_1 生成 Summary_2 |
| 第 5 轮 | Profile(角色信息)、User_Message_5 | Profile(角色信息)+ Summary_2 + User_Message_4 + Assistant_Message_4 + User_Message_5 | User_Message_4 + Assistant_Message_4 + User_Message_5 + Summary_2 生成 Summary_3 |
| 第 6 轮 | Profile(角色信息)、User_Message_6 | Profile(角色信息)+ Summary_3 + User_Message_5 + Assistant_Message_5 + User_Message_6 | 无 |
Token 计量
长期记忆产生两部分内容会进行计量:
- 记忆内容(current memory):在完成第一次记忆总结后,后续都会产生 1500 以内的新增 Token 参与模型调用计量计费。计量数据会在当前模型请求中返回。
- 摘要生成(summary memory):在间隔 N 轮使用
qwen-plus-character进行记忆摘要时产生计量计费。计量数据会在完成摘要的下一次模型请求中返回。
输出示例
开启长期记忆后,在触发记忆摘要的请求返回中,usage.prompt_tokens_details 会包含记忆相关的计量信息:
示例代码
- OpenAI兼容-Chat Completions API
- DashScope
长期记忆相关 API 参数
长期记忆相关 API 参数
Header 参数
Body 参数
输出参数(usage.prompt_tokens_details)
| 参数 | 类型 | 是否必填(启用长期记忆时) | 说明 |
|---|---|---|---|
| x-dashscope-aca-session | string | 是 | 唯一会话标识符。启用长期记忆时必填。需自行定义(如 UUID),用于区分和检索不同对话的记忆。不同账号之间不通用。系统会自动清除 365 天未使用的会话。 |
character_options 参数是与 model 和 messages 参数同级的顶层对象。| 层级 | 参数 | 类型 | 是否必填(启用长期记忆时) | 说明 |
|---|---|---|---|---|
character_options | profile | string | 是 | 角色人设。将原本 messages 中 system message 的内容配置在此处。 |
character_options.memory | enable_long_term_memory | boolean | 是 | 设置为 true 以启用长期记忆。 |
character_options.memory | memory_entries | integer | 否 | 记忆摘要条目数(范围 20-400,默认值 200)。设置上下文窗口大小。例如设置为 50,则每 50 轮对话触发一次记忆摘要,并在推理时发送这 50 轮上下文对话的摘要。 |
character_options.memory | skip_save_types | array | 否 | 跳过保存的消息类型。如果不希望将某些临时指令或预处理信息纳入长期记忆,可在此处配置。可选值:["user", "system", "assistant", "output"]。output 表示本轮模型生成的回复。默认为 [](全部保存)。 |
记忆内容生成是异步进行的,只有在生成新的记忆内容时,
summary_memory_usage 才会更新。若未生成新的记忆内容,各参数值保持不变。| 参数名 | 类型 | 说明 |
|---|---|---|
current_memory_tokens | integer | 本轮使用的记忆内容消耗 Token。若未使用新的记忆内容,此参数值保持不变。 |
summary_memory_usage.input_tokens | integer | 记忆内容生成时消耗的 input_tokens。若未生成新的记忆内容,此参数值保持不变。 |
summary_memory_usage.output_tokens | integer | 记忆内容生成时消耗的 output_tokens。若未生成新的记忆内容,此参数值保持不变。 |
summary_memory_usage.prompt_tokens_details.cached_tokens | integer | 记忆内容生成时命中缓存的 tokens。若未生成新的记忆内容,此参数值保持不变。 |
summary_memory_usage.total_tokens | integer | 记忆内容生成时消耗的 total_tokens。若未生成新的记忆内容,此参数值保持不变。 |
模型调优
角色扮演模型支持模型调优功能,您可以通过微调来提升模型在特定角色或场景下的表现。详情请参见微调概览。
会话缓存
会话缓存自动管理上下文,避免重复计算 token,在不影响回复质量的前提下降低成本和延迟。
启用方式:在请求 header 中添加 x-dashscope-aca-session 参数并传入 Session ID,即可启用缓存服务。
请求 header 参数:
x-dashscope-aca-session(必填,string)— 来自业务系统的唯一会话标识符,用于区分不同会话,值由用户自定义。
会话缓存模型请求的高级优化
随着对话轮次增加,messages 数组会不断增长,这可能导致以下问题:
- 单次请求中 token 过多,影响性能并增加成本。
- 上下文过长会稀释关键信息。
system message 和最近 100 条对话记录。