传入自定义变量

最近更新时间:2026-04-07 10:43:42

我的收藏

功能说明

自定义变量功能允许您在角色提示词(Prompt)中预定义变量占位符,并在建立连接时传入实际值,实现动态地修改提示词中的关键信息,以提升模型回复内容的相关性和实时性。

使用步骤

一、在提示词中定义占位符

控制台 进行提示词开发时,使用 ${变量名} 格式在提示词中定义占位符。
注意:
如非必要,建议不要使用中文的变量名,尽量使用下划线连接的英文变量名。
# 身份与角色
1. 你的名字叫“QQ鹅仔”,你是一个陪伴用户的忠实伙伴,内心充满好奇和温暖。
2. 你的目标是成为用户最贴心的朋友,提供情感陪伴和有用的帮助。
# 用户信息
1. 用户的真名叫:${user_name}
2. 用户当前的位置在:${user_location}
3. 用户的年龄是:${user_age}
4. 用户的爱好是:${hobby}
5. 如果没有提供以上信息,则不要提及。

二、设备在连接时传入参数值

注意:
设备端 SDK 在 v1.1.6及之后版本支持此功能。
// 自定义参数必须是一个完整的Json字符串
TCI_HAL_Snprintf(twetalk_params.custom_params, sizeof(twetalk_params.custom_params),
"{\\"user_name\\":\\"张三\\", \\"user_location\\":\\"西安\\", \\"user_age\\":\\"29\\", \\"hobby\\":\\"自行车\\"}");
sg_twetalk_handle = TWeTalk_WS_Init(&twetalk_params);

注意事项

customParams 必须是一个标准的 JSON 字符串,否则会导致连接失败。
尽量保证紧凑格式,即去掉换行/空格/缩进等字符,可以使用_json_compact 函数来格式化一下输入。
/**
* @brief 压缩 JSON 字符串,去除多余空白和换行
* @param[in] src 源 JSON 字符串
* @param[out] dst 目标缓冲区
* @param[in] dst_size 目标缓冲区大小
*/
static void _json_compact(const char* src, size_t src_len, char* dst, size_t dst_size)
{
size_t j = 0;
int in_str = 0; // 是否在字符串内
int prev_esc = 0; // 前一个字符是否是转义符

for (size_t i = 0; i < src_len && j < dst_size - 1; i++) {
char c = src[i];

// 处理字符串内的情况
if (in_str) {
dst[j++] = c;
if (c == '"' && !prev_esc) {
in_str = 0;
}
prev_esc = (c == '\\\\' && !prev_esc);
continue;
}

// 字符串外:跳过空白字符
if (c == ' ' || c == '\\t' || c == '\\n' || c == '\\r') {
continue;
}

dst[j++] = c;
if (c == '"') {
in_str = 1;
}
}
dst[j] = '\\0';
}

三、自动替换效果

连接成功后,系统会自动将占位符替换为实际值。
替换后提示词:
# 身份与角色
1. 你的名字叫“QQ鹅仔”,你是一个陪伴用户的忠实伙伴,内心充满好奇和温暖。
2. 你的目标是成为用户最贴心的朋友,提供情感陪伴和有用的帮助。
# 用户信息
1.用户的真名叫:张三
2.用户当前的位置在:西安
3.用户的年龄是:29
4. 用户的爱好是:自行车
5. 如果没有提供以上信息,则不要提及。