15147| 25
|
[M10项目] 免翻墙!讯飞星火大语言模型AI语音助手 |
1. 项目背景自从OpenAI的ChatGPT从2022年底火出圈之后,2023年成为世界“AI大语言模型元年”,各种对标ChatGPT的大语言模型如雨后春笋般涌现出来,可谓百花齐放! 目前已经有很多基于ChatGPT的语音交互机器人或者音箱的创客作品,比如: 不过这些作品复刻起来有一个最大的痛点,那就是需要科学上网环境,毕竟ChatGPT对中国并不开放,而且有段时间还疯狂封杀中国的账号,我就被封杀了两个,原因可能是OpenAI识别出我用中国的IP地址调用他们的API服务,虽然我访问他们的网页版是OK的。 看起来直接调用OpenAI的API有被封号的风险,这个方案也有使用上的门槛——需要科学上网。其他的方案也有,比如可以考虑自己调用微软Azure云服务封装的OpenAI接口,可以合规使用;又或者自己利用海外的云主机自己搭建一个代理服务器。但是这些手段也有一定的学习开发门槛。 由于国内使用ChatGPT存在各种门槛,极大地限制了这些创新作品的复制和传播,即使代码开源,也只能沦为一小部分极客的私人玩物。 2. 项目目标本项目的目标:面向儿童用户开发一款容易复刻和使用的大语言模型AI助手,并具备以下特性:
3. 方案设计本项目借鉴了“行空板ChatGPT智能音箱”开源项目,主要从两个方面改善使用体验:
4 硬件部分4.1 材料清单
4.2 零件组装5. 软件部分本项目所有程序已开源,git仓库地址:https://gitee.com/robinkam/xf-spark-unihiker-speaker 。 代码使用必读:在 services 目录下的 Privacy.py 文件中填入在百度和讯飞的开放平台申请到的API调用必填通用参数后,程序方可正常运行。 这些参数的获取请参考5.1和5.2两个小节。 5.1 开通百度智能云语音技术服务
5.2 申请讯飞星火大模型API免费试用
5.3 下载和封装星火大模型SDK首先,从讯飞官方文档中找到星火认知大模型的Web文档,并从中找到并下载Python调用示例(是一个zip包,解压后得到Python调用示例代码) 示例代码zip包解压出来有两个文件:SparkApi.py和test.py。前者是讯飞官方封装的函数库,用websocket来调用讯飞星火大模型的API。后者看名字就知道是一个测试程序,可以直接执行,调用前者,实现在命令行里跟星火大模型AI聊天。由于test.py中对SparkApi.py的调用方法有点繁琐,分为4步: 1) 将命令行中的用户输入的提问内容追加到聊天历史数组中,存入question变量; 我希望将这4步简化成1步,并将示例代码进行一些封装,方便后续调用。具体做法如下:
1) 在main函数每次执行的时候自动给answer全局变量设置为空字符串,省得每次调用main函数之前都需要手动设置一次。
3) 将test.py中的while(1)死循环里的主要逻辑封装为SparkClient类的chat方法(),按需调用; 4) 将test.py里的函数和变量重命名,提高代码可读性。
完整代码请参考开源代码仓库中的services目录下的SparkApi.py、SparkClient.py、SparkTest.py这3个python文件。 5.4 开发GUI主程序在实现核心功能之前,我们首先需要创建基本的图形交互界面。 行空板的unihiker库中的GUI类是开发图形化界面的主要途径。它是基于python自带的GUI库tkinter进行二次封装的。由于其文档中介绍的API比较有限,如果要实现更复杂的UI,建议阅读其源代码,查出其所有暴露的方法和属性,如果还不满足需求,可以直接查询tkinter库的文档,GUI类也暴露了底层的tkinter对象。 不过我们目前的程序还算简单,GUI类的能力基本够用。本项目的GUI程序主要涉及以下一些方面: 1) 绘制文本和按钮这两种基础控件,主要用到GUI类里的add_button和draw_text方法。 具体代码实现在仓库根目录[main.py]()中,总共就一百多行代码,大家看看应该就明白了,细节就不赘述了。 5.5 实现AI问答功能有了GUI主程序框架,加上之前封装的星火大模型SDK,实现AI问答功能就很简单了。核心流程如下: 具体代码实现在仓库根目录[main.py]()中,总共就一百多行代码,大家看看应该就明白了,细节就不赘述了。 5.6 实现听写功能听写功能比较简单,其实是AI问答功能的一个子集,只需要实现核心流程的前两步即可,只是将STT返回的文字内容以更大的字体显示出来,以便查看汉字结构和临摹。 具体代码实现在仓库根目录[main.py]()中,总共就一百多行代码,大家看看应该就明白了,细节就不赘述了。 6. 心得体会6.1 开发效率在开发这个作品的过程中,我解决了一个影响开发效率的问题,那就是通过修改unihiker库内部代码解决了代码在Mac端无法直接运行调试的问题。 行空板一个很大的优点是能直接运行常规Python程序,因此理论上不牵涉到特定硬件驱动的Python程序都可以在电脑上运行。这代表我们不需要模拟器,可以直接在电脑上调试程序,这将极大提升开发效率,因为电脑上开发一般Python程序有很多高效强大的IDE,比如PyCharm,而不局限于行空板提供的Mind+和Jupiter等IDE。 行空板主要提供2个库:unihiker行空库和pingpong硬件控制库。pingpong库封装了行空板GPIO和传感器的硬件编程接口,电脑端不能直接运行,而本项目刚好也不需要使用pingpong库。而unihiker行空库中主要封装了GUI和Audio两个类,一个负责图形化界面,一个负责音频输入输出,虽然也依赖屏幕、麦克风等硬件,但是这些电脑上也有。 经过实验,基于GUI类绘制的图形化界面程序在电脑端可以直接运行和渲染,因为其底层使用的是Python自带的tkinter GUI库,而基于Audio类开发的录音和播放音频的程序在我的苹果本Mac系统上不能直接运行。但是分析这个类的源代码之后发现里面有一处判断,只考虑了Windows和Linux系统,没考虑到Mac系统。我简单将里面对于Windows系统的判断改为对Mac系统的判断,具体做法如下: 改好之后,这个程序就可以直接在Mac系统上正常运行了,下面的截图就是程序在Mac上运行的效果,看窗口顶部标题栏样式就知道了。 6.2 改进方向这个作品仅是抛砖引玉实现了基本功能,仍有很多可以改进的地方,比如:
|
robinkam 发表于 2023-11-20 18:01 V0.3.3系统开始增加的功能:https://www.unihiker.com.cn/wiki/ReleaseLogs |
请问关于“解决Mac端无法直接运行调试的问题”,具体修改unihiker库内部代码的路径和内容是什么? |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed