当前位置:   article > 正文

用聆思CSK6大模型开发板接入知识库做企业制度问答/项目管理_csk6 tts

csk6 tts

本实例分享来自参加聆思大模型AI开发套件评测活动的开发者,网名特呆。

1.前言

  1. 2023年底的时候,在AI交流群偶然看到聆思科技在宣传产品,招募开发板评测。我看到他们的板子支持大模型的整合,很感兴趣。报名参加了评测。很高兴中了签,顺利拿到了开发板。
  2. 一个带显示器的板子+一个喇叭+一条USB-TYPEC线,一个简约的说明书。
  3. 这个Demo所需要的工具:GOOGLE浏览器,硬件开发环境Lisa,串口调试工具,大模型辅助编码。

2.目标

2.1.简单大模型问答流程搭建

2.2.问题领域分支SWITCH

2.3.大模型知识库(行政管理)问答流程搭建

2.4.借助文心一言进行财务管理业务问答流程问答搭建

2.5.文字交互形式的前端调试和发布

2.6.基于开发板的语音交互形式的调试和发布

先看看最后的结果

3.步骤

3.1.测试简单大模型问答

参考文档:极术社区 - 连接开发者与智能计算生态

3.1.1.接电,注册聆思平台

3.1.2.配置wifi,注意密码只能用英文字符和数字

用户可以通过 wifi connect ssid pwd 命令连接到相应的网络 (ssid 为 WIFI 名称,pwd 为密码)

3.1.3.画个小猫,验证一下默认程序的功能吧

试试说:小玲小玲,帮我画一只黑色的小猫。

3.2. 在聆思平台上配置流程分支,区分处理不同的意图

3.2.1.配置服务流程

先做一个文本交互的模型。

3.2.2.添加对话入口,并对获得的文本内容进行格式化输送给提示词

msg.payload = {

  1. name: inputs.name || "",
  2. topic: inputs.topic || "",
  3. content: lastUserMessage ? lastUserMessage.content : ""

};

在格式化的函数formatPrompt里面,构造这样的json结构,匹配下一个节点《提示词》提示词所需要的参数。将content传到下个节点的提示词中。

3.2.3.意图分类的提示词模板定义

在提示词节点中,选择在聆思平台编辑保存好的意图分析的提示词模板。注意,API KEY这个参数,自己随便配一个,其实系统是自动使用内置的参数。大模型的节点也是一样的,平台内置了星火的大模型的调用参数,不需要单独配置。

提示词模板编辑:

注意模板中如何传值:

参考文档:极术社区 - 连接开发者与智能计算生态

3.2.4.将构造好的提示词传递给下一个节点:大模型

聆思平台,内置有星火大模型。目前可选1.5、2、3三个版本。

3.2.5.技能选择函数

// function selectSkill,对大模型输出的结果进行判断,如果包含指定的关键词,则返回相关的技能名称字符串。以便后续的SWITCH流程选择节点进行流程分支引导。

function transformMsg(msg) {

  1. // 提取传入msg中用于构建输出的内容
  2. let skill = msg.payload.choices[0].message.content;
  3. //let skill = msg.payload.choices[0].message.content.skill;
  4. // 构建输出内容的payload
  5. if (skill.includes('天气') ) {
  6.     return '天气';
  7. }
  8. if (skill.includes('公司规章制度')) {
  9.     return '公司规章制度';
  10. }
  11. if (skill.includes('财务管理')) {
  12.     return '财务管理';
  13. }
  14. else {
  15.     return '其它';
  16. }

}

// 构建输出消息

msg.payload = transformMsg(msg);

return msg;

3.2.6.流程分支选择

通过设置属性作为筛选的数据源,下方的条件就是分支判断条件。输出的123456是界面上的图形化的输出端口。

3.2.7.常用的图元(流程、文字、音频、提示词、星火大模型、function、debug、分支选择、TTS初始化、TTS合成)

一个应用可创建多个流程;文字流程和音频流程各有不同的输入和输出;提示词可传参动态构造;内置星火大模型节点;函数里面可以通过nodejs任意构造逻辑,包括调用其它HTTP地址;debug组件可以在调试环境中看到输出,直观跟踪结果;分支选择器,用于对大模型输出的结果(或者函数输出结果等)进行流程分支选择;TTS初始化顾名思义用于初始化TTS,并给用户友好的语音提示;TTS合成就是合成音频了。

DEBUG界面如下,可以方便观察输出中的json结果:

3.3.做一个基于文本交互的,行政管理的知识库例子

这节我们试下聆思内置的知识库模块。

3.3.1.创建知识库,上传WORD文档

我上传了公司的行政管理制度,如果默认用智能分片,效果会很不智能……。但是如果用换行进行切分,效果很好。

3.3.2.在知识库中测试问答效果

3.3.3.配置服务流程

文字交互的流程,在知识库环节之后,就可以直接结束了。会直接返回文字给用户。

3.3.4.定义专用的行政管理意图分析模板

3.3.5.在知识库节点中绑定大模型的版本、知识库的ID、知识库内文档的ID、以及超时时间(超时时间太短了不够用,会没有返回)。

3.3.6.验证结果

略。

3.4.做一个基于语音交互的,调用文心一言处理财务问题的例子

3.4.1.配置服务流程(略,增加一个函数分支即可)

3.4.2.找到文心一言的调用例子,修改代码,整合到function中

我去文心一言找了nodejs的调用例程,让gpt帮我修改了一下输入和输出格式,放到了function节点中,调用文心一言得到结果后,格式化json输出给后续节点处理即可。

const asrResult = msg.\_input.optAsrResult || msg.\_input.origin\_content;

let question = asrResult;

let ret = await callwxyy("用简单的100个词回答问题:"+question);function transformMsg(message) {

  1. return {
  2.     "choices": [
  3.         {
  4.             "message": {
  5.                 "content": message,
  6.                 "role""assistant"
  7.             }
  8.         }
  9.     ]
  10. };

}

function generateData(message) {

return "data:{\"usage\":null,\"object\":\"chat.completion.chunk\",\"id\":\"cht000b109f@dx18d8423738eb894550\",\"created\":1707318935,\"choices\":[{\"index\":0,\"finish_reason\":null,\"delta\":{\"content\":\"" + message + "\"}}]}\n\ndata:[DONE]";

}

msg.payload = transformMsg(ret);

return msg;

如果是语音服务流程,这个函数节点输入参数就是ASR的结果文本,然后输出到后置处理节点中封装成驱动开发板硬件的JSON模板。

//数据模版,不建议直接修改

const intentTemplate = {

  1. "text""",
  2. "rc"0,
  3. "data": {
  4.     "result": [{
  5.         "id""xxx",
  6.         "type""rgb",
  7.         "value""#00FFFF"
  8.     }]
  9. },
  10. "answer": {
  11.     "text""已完成设置",
  12.     "type""T"
  13. },
  14. "service""bgColor",
  15. "service_pkg""media",
  16. "category""LISTENAI.bgColor"

}

//大模型回复内容

let content = msg.payload.choices[0].message.content || '';

intentTemplate.data.result[0].id = msg.payload.id;

intentTemplate.data.result[0].value = "#000000";

intentTemplate.text = content;

intentTemplate.answer.text = content;

//构造tts合成文本

let ttsMsg = RED.util.cloneMessage(msg);

ttsMsg.payload = {

  1. text: content,
  2. stream: true,
  3. is_last: true

};

//构造设置背景的数据帧给设备

let nluMsg = RED.util.cloneMessage(msg);

nluMsg.payload = {

  1. type: "CUSTOM",
  2. intent: intentTemplate

};

node.send([nluMsg, ttsMsg]);

3.4.3.TTS中合成语音并发送到前端硬件

注意流程图中的两个函数的输出。一方面输出到TTS合成节点,另一条线路输出到下一个环节。特别是后置处理的函数,两个输出要分成两个端口,否则会无法正常运行。

3.4.4.验证结果——整合多个大模型就这么简单

    提问财务方面问题后,会转到文心一言的分支来进行处理,并返回语音。

3.5.怎么实现语音交互呢?

参考手册地址:大模型开发 | 聆思文档中心

3.5.1.获取硬件ID

使用sscom,将设备连接时,串口日志会自动打印出设备的device id。

3.5.2.在聆思平台配置硬件白名单

3.5.3.获取应用ID和密钥

3.5.4.在开发板中配置应用ID和密钥,让硬件对接上流程

flash.set.product\_id "你的product\_id"

flash.set.secret\_id "你的product\_secret"

3.5.5.重写编制一个新的语音交互的流程(并列于文字流程)

文字流程的处理和语音流程不一样,语音流程多了ASR、TTS步骤,在TTS合成之前要先初始化,在合成完成后要输出到设备。所以我建议如果一个应用中需要有文字和语音两种服务入口,应该分成两个流程进行定义。

3.5.6.验证结果,来试试吧!

视频

4.结果

4.1.在熟悉了工作方法后,建设一个新的服务流程变得很简单,十来分钟,一个简单的服务就能搭建起来。而且流程的代码都可以被导出到文本文件,也可以再导入到系统中,这很方便代码的保存和迁移。

4.2.在实际的项目中,可以不断通过流程的调整、扩展、代码的细化来提升服务能力,如果前端的任务模板没有改变,这都不需要对前端程序做任何改变。

4.3.平台有整套的从服务到硬件整合的完整方案,很方便。

4.4.由于我关注的重点在后端服务方面,所以前端没有进行开发。但是从文档看也不难。而且他们服务那么好,应该很容易做到。

5.感受

5.1.聆思科技的工作人员服务态度很好。无论是产品问答,还是技术问题都很及时。我板子的开发环境安装不上,直接远程给我捣鼓了一轮弄好了。做后端的开发测试,凌晨3点提问题都有人回答。非常棒!

5.2.后端的大模型接入和开发过程体验非常好。图形化的配置,非常容易进行过程梳理、开发衔接、甚至有debug。这对大模型产品的研发和运营非常重要。

5.3.前端硬件的功能很丰富,涵盖了与人交互的常用算法和io。

5.4.可以说,如果有了合适的产品定位,基于这套平台很快可以开发出产品了。非常棒。

原文:【聆思大模型AI开发套件】后端服务开发体验 - 极术社区 - 连接开发者与智能计算生态

开发板软硬件资料下载:套件简介 | 聆思文档中心

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/720345
推荐阅读
相关标签
  

闽ICP备14008679号