手把手教你搭一个高校招生数字人从通义千问到星云SDK全流程每年六月到八月高校招生办的电话就没停过。家长问专业、问分数线、问宿舍、问就业率翻来覆去就那些问题但每一个都得耐心回答。去年暑假某高校的朋友跟我吐槽招生办三个人接了两个月的电话嗓子全哑了。我当时正好在研究具身交互智能的方向就提议要不做一个数字人招生顾问把常见问题灌进去让AI先回答第一层复杂问题再转人工。这篇文章把整个搭建过程拆开来讲代码和配置都给出来感兴趣的朋友可以跟着做。第一步准备大模型和知识库招生场景的知识库比较结构化学校概况、院系专业、历年分数线、招生计划、校园生活、就业数据。我把这些信息整理成了Markdown文档作为RAG的知识源。大模型选了通义千问。原因很简单中文理解能力强招生咨询里经常有口语化的表达你们学校那个什么专业好不好通义千问处理这类输入比较稳。Agent层用了LangChain搭了一个标准的RAG流程用户提问 → 意图识别 → 知识库检索 → 大模型生成回答 → 输出这里有个细节招生咨询的意图比较集中我做了一个意图分类的前置层把问题分成专业介绍分数线查询校园生活招生政策四个类别分别路由到对应的知识库子集。这样检索准确率会高很多。第二步接入星云SDK大模型和Agent解决的是AI知道什么的问题星云SDK解决的是AI怎么跟你说话的问题。星云SDK是魔珐科技做的具身交互智能平台它的作用是把大模型的文字输出变成一个3D数字人的实时播报——包括语音、口型、表情和肢体动作。接入过程不复杂。先引入SDKscript srchttps://media.xingyun3d.com/xingyun3d/general/litesdk/xmovAvatarlatest.js/script然后初始化// 招生数字人 - 星云SDK初始化 const sdk new XmovAvatar({ containerId: #admission-assistant, appId: YOUR_APP_ID, appSecret: YOUR_APP_SECRET, gatewayServer: https://nebula-agent.xingyun3d.com/user/v1/ttsa/session, onMessage: (msg) { console.log(SDK Event:, msg); if (msg.type voice_state_change) { const state msg.state || msg; if (state idle) { console.log(播报完毕可以接受新提问); } } }, proxyWidget: { subtitle_on: (data) { document.getElementById(subtitle).innerText data.text; document.getElementById(subtitle).style.display block; return false; // 屏蔽默认字幕用自定义样式 }, subtitle_off: () { document.getElementById(subtitle).style.display none; return false; } } }); // 初始化处理下载进度 await sdk.init({ onDownloadProgress: (p) { if (p 100) { document.getElementById(progress).innerText 加载中 ${p}%; } } });第三步实现对话流程把大模型和SDK串起来的核心逻辑async function handleStudentQuestion(question) { // 1. 大模型生成回答 const answer await getAgentResponse(question); // 2. 按句拆分 const sentences splitSentences(answer); // 3. 流式播报给数字人 for (let i 0; i sentences.length; i) { const isFirst i 0; const isLast i sentences.length - 1; sdk.speak(sentences[i], isFirst, isLast); // 如果不是最后一句等当前句播完再播下一句 if (!isLast) { await waitForVoiceEnd(); } } }家长随时可能打断比如数字人在介绍专业设置家长突然想问分数线// 家长打断处理 function onParentInterrupt(newQuestion) { // 先打断当前播报 sdk.interactiveidle(); // 等状态恢复后播报新内容 const originalHandler sdk.config.onMessage; sdk.config.onMessage (msg) { originalHandler(msg); const state msg.state || msg; if (state idle) { handleStudentQuestion(newQuestion); sdk.config.onMessage originalHandler; // 恢复 } }; }第四步终端部署招生场景的终端主要是两种招生咨询大厅的大屏和线上招生网站的嵌入。大屏部署比较简单把HTML页面全屏展示就行。星云SDK的端侧渲染方案对硬件要求很低普通的大屏一体机就能流畅运行。// 全屏适配招生大厅大屏 function setupFullScreen() { document.documentElement.style.margin 0; document.documentElement.style.overflow hidden; const container document.getElementById(admission-assistant); container.style.width 100vw; container.style.height 100vh; }线上嵌入的话把整个页面作为一个iframe嵌入招生网站就行SDK会自动适配容器大小。第五步横竖屏切换有些宣传场景需要竖屏展示比如门口的立式广告机星云SDK支持直接通过CSS切换容器比例function switchToPortrait() { const container document.getElementById(admission-assistant); container.style.width 1080px; container.style.height 1920px; } function switchToLandscape() { const container document.getElementById(admission-assistant); container.style.width 1920px; container.style.height 1080px; }实际效果这个招生数字人在某高校招生办跑了整个暑假。几个数据日均处理咨询约200次覆盖了大约70%的常见提问。招生办的电话量下降了约40%。家长反馈比较好的点不用排队等人工接待到了就能问数字人回答比较耐心同一个问题问三遍也不会不耐烦这点人工真做不到。需要改进的点一些非常具体的问题比如某省某年某专业录取的最低分是多少知识库覆盖不够细需要持续补充。写在最后整个项目从开发到上线大约两周。技术栈不复杂通义千问做大模型LangChain做Agent星云SDK做交互层部署在普通大屏上。核心体验的提升来自具身交互智能——不再是让家长在一个文本框里打字而是面对面和一个招生老师对话。这个交互方式的改变对不擅长打字的家长群体来说体验提升是质的飞跃。想自己动手试试的朋友可以去星云官网下载SDK基础开发文档写得很清楚先跑个Demo出来再接自己的大模型。招生季马上又到了时间还来得及。官网地址https://xingyun3d.com/?utm_campaigndailyutm_sourcejuzhen