小智AI助手/女友的代码分析 deepseek 豆包

快到春节的时候, 发现了一个非常神奇的东西:
在这里插入图片描述
加上deepseek的爆火, 作为嵌入人, 怎么能放过这个大佬开源, 向大佬好好学习的机会?

早几个月, 我就想做一个语音助手, 一方便能听懂人类语音, 一方面能接入大语言模型, 一方面能用电机驱动做点小动作.
结果买了个这个:
在这里插入图片描述
号称开源, 其实也是拿库封装好了, 就暴露一个接口, 加上我真的对cpp了解太少, 一看到什么week, auto, 加上异步, 脑子就嗡的一下, 放下了…

这下倒好, 大佬直接开源了:
https://github.com/78/xiaozhi-esp32

先看看效果吧.:

小智

怎样, 这个速度, 可能不做技术的没法理解这种感动, 这可是ASR+LLM+TTS啊…这么快?

先说说这几个概念吧, 一段语音, 要AI去理解并作出反应, 首先第一步就是要做ASR(Automatic Speech Recognition), 就是把一段声音中间的语音信息提取出来, 并转为对应的文字.
是不是有点像从一张图片中, 找到人脸, 并做识别, 也是分两步, 第一步, 找到声音中的可能包含的人的声音的部分, 截取出来, 第二步, 把声音截取出来, 做识别, 类似人脸识别中的先detect, 再recognition, 文字识别的ocr也是差不多这样, 第一步, 找到图片中的可能是文字的部分即detect, 抠出来, 第二步, 做recognition.

翻了小智的github, 原来后台部分也是部分开源的,我滴天呐…ASR部分用的阿里的开源funasr, 即fun-asr, github地址:

https://github.com/modelscope/FunASR

这个方案的最大好处就是模型可以部署在本地, 即只要你有个显卡, 就可以用这个模型, 将用户使用ESP上传的声音, 直接转成文字了.

from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess

model_dir = "iic/SenseVoiceSmall"

model = AutoModel(
    model=model_dir,
    vad_model="fsmn-vad",
    vad_kwargs={"max_single_segment_time": 30000},
    device="cuda:0",
)

# en
res = model.generate(
    input=f"{model.model_path}/example/en.mp3",
    cache={},
    language="auto",  # "zn", "en", "yue", "ja", "ko", "nospeech"
    use_itn=True,
    batch_size_s=60,
    merge_vad=True,  #
    merge_length_s=15,
)
text = rich_transcription_postprocess(res[0]["text"])
print(text)

简简单单几行, 就把一段mp3中的说话, 转成了文字, 且直接流式输出.
最后这个rich_transcription_postprocess的部分, 就是把转出来的文字做了一个合理化的后处理, 比如去掉一些标点符号, 明显不合理的句子等等.
最终输出的就是我们要送入LLM的文字了.

LLM, 我们可以使用字节的Doubao-1.5-lite-32k, 速度实在太快了…
调用方法几乎傻瓜式…

    def access_doubao_api(self, content, model_name="ep-20250205145412-2mzdp"):
        sentence = ""
        # 记录开始时间
        start_time = time.time()

        logging.info("----- streaming request -----")
        stream = self.ark_client.chat.completions.create(
            model=model_name,  # your model endpoint ID
            messages=[
                {"role": "system", "content": "你是大宝,是由字节跳动开发的 AI 人工智能助手,简要回答问题"},
                {"role": "user", "content": content},
            ],
            stream=True
        )
        for chunk in stream:
            if not chunk.choices:
                continue
            response_text_chunk = chunk.choices[0].delta.content
            sentence += response_text_chunk
            if self.if_sentence(response_text_chunk):
                logging.info(sentence)
                sentence = ""

        # 打印耗时
        logging.info(f"LLM耗时: {time.time() - start_time}")

大家可以花30块钱, 试试这个可怕的速度跟模型能力…
30块, 买不了吃亏, 买不了上当…如果是公司账号, 送30万token使用额度…

LLM搞定了, 接下来就要做TTS了, TTS就是文字转语音, 根据小智开源的记录, 有两个可以使用的tts, 一个是火山的, 一个是阿里家的, 著名的弯弯小何, 就是星火的一个音色, 这部分的调用小智已经开源成js了, 大家用自己访问密钥, 直接调用js的接口就行了.

在这里插入图片描述
由于大佬把所有东西几乎都开源了, 他们公司自己用的是自己的qwen的大预言模型, 咱们如果要自己搭服务器, 用自己擅长的语言, 实现上面图中的dispatcher部分就好了. 一方面起一个websocket服务器, 让ESP32可以连接, 并上传json文本或者二进制语音数据, 将这些先丢到ASR前端去做识别, 识别完, 返回文本后用, 去拿豆包的接口, 拿到之后, 交给tts服务转为语音, 再把语音返回给ESP32, 做解码播放, 基本流程就是这样.

整个春节, 没咋休息, 除了看了几部恐怖片(异教徒, 危笑), 几步动作片(死侍与金刚狼,毒液3), 就在分析大佬的代码了…祝大家新春快乐! 代码无bug,功能都复用…

### 创建与DeepSeek平台的AI集成或API连接 为了创建与DeepSeek平台的AI集成或API连接,需先完成环境设置和必要的安装工作。在 `.env` 文件中应配置 DeepSeek API 密钥如下: ```plaintext DEEPSEEK_API_KEY=your_api_key_here ``` 此操作确保应用程序能够安全访问 DeepSeek 提供的服务[^1]。 接着,在项目环境中安装所需的依赖项,并启动服务来使集成生效。这一步骤通常涉及执行包管理器命令以获取必需库和支持工具。 对于遇到 `deepseek-coder-v2` 模型无法成功连接至 Ollama API 的情况,切换到 VSCode 集成方案可以有效解决问题。VSCode 插件提供了更稳定可靠的开发体验,减少了外部接口调用失败的风险[^2]。 #### Python代码示例:使用DeepSeek API发送请求 下面是一个简单的Python脚本例子,展示了如何通过HTTP POST方法向DeepSeek服务器发起查询请求: ```python import os import requests api_key = os.getenv('DEEPSEEK_API_KEY') url = "https://api.deepseek.com/v1/query" headers = { 'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json' } data = {"text": "What is the weather like today?"} response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() print(result['answer']) else: print(f"Error: Received status code {response.status_code}") ``` 该脚本读取存储于环境变量中的API密钥,并将其用于构建认证头;随后定义要传递给API的数据体以及目标URL地址。最后发出POST请求并将返回的结果解析打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值