11. 角色新增/编辑页面

页面介绍
角色新增/编辑页面主要用于修改角色信息(头像、名称,角色介绍、记忆体),以及选择音色、语种、和大模型。
获取角色模板列表/模板详情
功能说明
B 端可以预设一些模板,提供给用户选择,简化用户操作流程。
相关代码段
//获取角色模板列表
export const getAIAgentRolesTemplateList = async () => {
try {
// getAgentRolesTemplates
const response = await getAI2AgentRolesTemplates({ devId: getDevInfo().devId, panelCode: 'ai_platform' });
return response;
} catch (err) {
return Promise.reject(err);
}
};
const getTemplateList = async () => {
getAIAgentRolesTemplateList()
.then((res: any) => {
console.log('==getTemplateList', res);
setTemplateList(res);
if (res?.length > 0) {
setTemplateRoleId(res[0].roleId);
}
})
.catch(err => {
console.log('getTemplateList::err::', err);
});
};
//获取角色模板详情
export const getAIAgentRolesTemplatesDetail = async (roleId: string) => {
try {
// getAgentRolesTemplatesDetail
const response = await getAI2AgentRolesTemplatesDetail({ devId: getDevInfo().devId, roleId });
return response;
} catch (err) {
return Promise.reject(err);
}
};
const getTemplateListDetail = async (roleId: string) => {
getAIAgentRolesTemplatesDetail(roleId)
.then((res: any) => {
console.log('==getTemplateListDetail', res);
initRoleData(res);
initRoleInfoData();
})
.catch(err => {
console.log('getTemplateListDetail::err::', err, roleId);
});
};
获取角色详情
功能说明
编辑角色时,获取当前角色详情。
相关代码段
export const getAIAgentRoleDetail = async (roleId: string) => {
try {
// getAgentRolesDetail
const response = await getAI2AgentRolesDetail({
devId: getDevInfo().devId,
roleId,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
const getAgentRoleDetail = async (roleId: string) => {
getAIAgentRoleDetail(roleId)
.then((res: any) => {
console.log('==getAIAgentRoleDetail', res);
initRoleData(res);
initRoleInfoData();
})
.catch(err => {
console.log('getAIAgentRoleDetail::err::', err);
});
};
创建/编辑角色
功能说明
创建/编辑角色。
相关代码段
// 创建角色
export const createRole = async (params: any) => {
try {
// postCreateAgentRole
const response = await addAI2AgentRoles({
devId: getDevInfo().devId,
...params,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
// 编辑角色
export const updateRole = async (params: any) => {
try {
// postUpdateAgentRole
const response = await updateAI2AgentRoles({
devId: getDevInfo().devId,
...params,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
const handleSave = async () => {
if (!name || nameErrorMessage) {
showToast({
title: `${Strings.getLang('please_complete')}${Strings.getLang('role_name')}`,
icon: 'error',
});
return;
}
if (!introduction) {
showToast({
title: `${Strings.getLang('please_complete')}${Strings.getLang('introduction')}`,
icon: 'error',
});
return;
}
if (!roleInfo?.voiceId && !selectedVoiceId) {
showToast({
title: `${Strings.getLang('please_complete')}${Strings.getLang('role_voice')}`,
icon: 'error',
});
return;
}
if (!selectedModel) {
showToast({
title: `${Strings.getLang('please_complete')}${Strings.getLang('model')}`,
icon: 'error',
});
return;
}
const params = {
roleName: name,
roleIntroduce: introduction,
roleImgUrl: roleInfo?.roleImgUrl || roleImgUrl,
useLangCode: roleInfo?.useLangId || selectedLanguageCode,
useTimbreId: roleInfo?.voiceId || selectedVoiceId,
useLlmId: selectedModel,
memoryInfo: memoryInfo,
}
try {
if (roleId) {
params.roleId = roleId
await updateRole(params);
} else {
await createRole(params);
}
hideLoading();
showToast({
title: Strings.getLang('save_success'),
icon: 'success',
});
emitter.emit('refreshDialogData', '');
navigateBack({ delta: 9999 });
} catch (error) {
console.log('createRole/updateRole:::', error);
hideLoading();
showToast({
title: Strings.getLang('save_failed'),
icon: 'error',
});
}
};
获取角色头像
功能说明
B 端可以预设一些头像,提供给用户选择。
相关代码段
// 头像
export const getAIAvatars = async () => {
try {
// getAgentAvatars
const response = await getAI2AgentAvatars({
devId: getDevInfo().devId,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
const getBoundAgentsFunc = async () => {
getAIAvatars()
.then(res => {
console.log('getAIAvatars::', res);
setAvatarList(res);
})
.catch(err => {
console.log('getAIAvatars::err::', err);
});
};
获取语言语种
功能说明
获取支持的语言语种。
相关代码段
// 获取支持的语言语种
export const getAgentLanguages = async () => {
try {
// getAgentLanguageConfig
const response = await getAI2AgentConfigLangList({
devId: getDevInfo().devId,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
const useAgentLanguages = (id: number) => {
const [langRangeList, setSupportLangs] = useState<Array<{ key: string; dataString: string }>>([]);
useEffect(() => {
const fetchSupportedLangs = async () => {
try {
const response = await getAgentLanguages();
if (response) {
setSupportLangs(
response?.map(item => ({
dataString: item?.langName,
key: item?.langCode,
}))
);
}
} catch (error) {
console.error('Failed to fetch supported languages:', error);
}
};
fetchSupportedLangs();
}, []);
return { langRangeList };
};
import useAgentLanguages from '@/hooks/useAgentLanguages';
const { langRangeList } = useAgentLanguages(id);
获取大模型列表
功能说明
获取大模型列表。
相关代码段
// 获取大模型列表
export const getAgentModels = async () => {
try {
// getAgentModelConfig
const response = await getAI2AgentConfigLlmList({
devId: getDevInfo().devId,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
const fetchSupportedModels = async () => {
try {
const response = await getAgentModels();
console.log('getAgentModels:::', response);
if (response) {
const models = response?.map(model => ({
key: model.llmId,
dataString: model.llmName,
}));
setModelList(models);
}
} catch (error) {
console.error('Failed to fetch supported models:', error);
}
};
12. 音色管理页面

页面介绍
音色管理页面主要用于切换智能体角色所携带的音色信息,主要包含系统默认音色管理。
音色广场列表展示

功能说明
音色广场列表主要用于展示系统默认音色列表,C 端用户可在广场内挑选适合自己的音色内容赋能给智能体角色。在筛选音色方面,模版支持分类筛选、搜索筛选功能。
相关代码段
// 获取标准音色列表
export const getStandardVoiceList = async (params: any) => {
try {
// getMarketList
const response = await getAI2TimbreMarketList({
devId: getDevInfo().devId,
pageNo: params.pageNo,
pageSize: params.pageSize,
tag: '',
keyWord: params.keyWord,
lang: params.lang,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
// 音色列表请求函数
const getVoiceListFunc = (params: GetListParams) => {
return new Promise((resolve, reject) => {
getStandardVoiceList({
pageNo: params.current,
pageSize: params.pageSize,
tag,
agentId,
keyWord: params.searchText,
lang: selectedLang,
})
.then((res: VoiceRes) => {
const { totalPage, list = [] } = res;
hideLoading();
setLoading(false);
resolve({
total: totalPage,
list,
});
})
.catch(error => {
hideLoading();
setLoading(false);
reject(error);
});
});
};
// 音色列表请求管理
const { pagination, data, run } = usePagination(
({ current, pageSize, searchText }) =>
getVoiceListFunc({ current, pageSize, searchText }) as Promise<GetStandardVoice>,
{
manual: true,
}
);
// 响应懒加载
useEffect(() => {
if (data?.list) {
pagination.current > 1
? dispatch(updateVoiceList([...data?.list]))
: dispatch(initVoiceList([...data?.list]));
}
}, [data]);
音色搜索
相关代码段
// 搜索与查询智能体列表接口请求流程相同,区别在于【searchText】字段的不同,拉取整体列表使【searchText】字段为空字符串
const { pagination, data, run } = usePagination(
({ current, pageSize, searchText }) =>
getVoiceListFunc({ current, pageSize, searchText }) as Promise<GetStandardVoice>,
{
manual: true,
}
);
音色切换
相关代码段
// 切换音色(编辑智能体详情)
export const updateRole = async (params: any) => {
try {
// postUpdateAgentRole
const response = await updateAI2AgentRoles({
devId: getDevInfo().devId,
...params,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
const handleItemChecked = async (idKey: string, item: any) => {
try {
playVoiceAudio(item?.demoUrl);
if (squareEntry === 'role') {
dispatch(
updateRoleInfo({
voiceId: idKey,
voiceName: item?.voiceName,
supportLangs: item?.supportLangs,
})
);
return;
}
showLoading({
title: '',
});
const params = { ...roleInfo, useTimbreId: idKey, roleId };
if (squareEntry === 'role') {
delete params.roleId;
}
updateRole(params)
.then(async res => {
if (res) {
dispatch(updateRoleInfo({ voiceId: idKey, voiceName: item?.voiceName }));
setTimeout(async () => {
const agentCloudInfo = (await getAgentInfo(roleId)) as AgentInfo;
dispatch(updateAgentInfo({ ...agentCloudInfo, roleId }));
hideLoading();
}, 500);
}
hideLoading();
})
.catch(error => {
if (platform === 'android' && error?.innerError?.errorCode === '13890100') {
showToast({
title: error?.innerError?.errorMsg,
icon: 'error',
});
} else if (platform === 'ios') {
showToast({
title: iOSExtractErrorMessage(error?.innerError?.errorMsg),
icon: 'error',
});
} else {
showToast({
title: Strings.getLang('dsc_choose_fail'),
icon: 'error',
});
}
hideLoading();
});
} catch (err) {
console.log('handleItemChecked:::err', err);
hideLoading();
}
};
编辑音色

页面说明
该页面用于编辑音色具体内容,音色广场中的音色在此页面支持修改音色的语速等功能。
编辑语调、语速
相关代码段
// 编辑智能体详情(语调、语速为智能体详情信息)
export const updateRole = async (params: any) => {
try {
// postUpdateAgentRole
const response = await updateAI2AgentRoles({
devId: getDevInfo().devId,
...params,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
const onChangeToneOrSpeed = (sv: number, tv: number) => {
showLoading({
title: '',
});
updateRole({ roleId, [speedKey]: `${sv}`, [toneKey]: `${tv}` })
.then(async res => {
sv >= 0 && setSpeedValue(sv);
tv >= 0 && setToneValue(tv);
hideLoading();
showToast({
title: Strings.getLang('dsc_edit_success'),
icon: 'success',
});
})
.catch(() => {
hideLoading();
showToast({
title: Strings.getLang('dsc_edit_fail'),
icon: 'error',
});
});
};
恢复默认设置(语调、语速)
相关代码段
// 恢复默认设置(语调、语速)
export const localResetToDefaultVoice = async (params: any) => {
try {
// resetToDefaultVoice
const response = await restoreAI2AgentRolesSpeed({
devId: getDevInfo().devId,
...params,
});
return response;
} catch (err) {
return Promise.reject(err);
}
};
const onChangeToneOrSpeedReset = () => {
showLoading({
title: '',
});
localResetToDefaultVoice({ roleId })
.then(async res => {
const sv = res?.speed;
const tv = res?.tone;
sv >= 0 && setSpeedValue(sv);
tv >= 0 && setToneValue(tv);
hideLoading();
showToast({
title: Strings.getLang('dsc_edit_success'),
icon: 'success',
});
})
.catch(() => {
hideLoading();
showToast({
title: Strings.getLang('dsc_edit_fail'),
icon: 'error',
});
});
};
13. 结束
- 恭喜你 🎉 完成了本教程的学习!
- 有任何问题可以提交工单咨询。
3261

被折叠的 条评论
为什么被折叠?



