【AI实践】Mac一天熟悉AI模型&智能体应用(百炼版)

25.6.29增加Gummy 实时/一句话语音识别
25.6.28增加Qwen TTS本地音频和实时播报

背景

准备环境

MacOS M1电脑(其他M系列芯片也可以)

为了方便python的使用环境,使用Miniconda:下载链接:Download Anaconda Distribution | Anaconda

安装阿里模型的依赖库:https://bailian.console.aliyun.com/?tab=api#/doc/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2712193.html%23f3e80b21069aa

为了配置环境变量:https://bailian.console.aliyun.com/?tab=api#/doc/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2803795.html

 

为了方便编辑代码,下载安装最流行的:vscode,最新版本已经有了Github Copilot免费用,记得要打开。

 为了解决使用了Miniconda的python环境,导致vscode自带的运行环境找不到dashscope出错的问题;

  • 按下 Cmd+Shift+P,输入并选择 Python: Select Interpreter
  • 选择你用 miniconda 安装 dashscope 的那个环境(比如 miniconda3/envs/xxx)。
  • 右下角状态栏会显示当前环境。
  • 验证:which python

Gummy-ASR

实时识别

一句话识别

官方demo,未修改;

原理:程序启动时,会开始录音;录音结束判停:经过查看代码,和日志查看,由云端判定的),一分钟音频是上限。

# For prerequisites running the following sample, visit https://help.aliyun.com/document_detail/xxxxx.html
# 一句话识别能够对一分钟内的语音数据流(无论是从外部设备如麦克风获取的音频流,还是从本地文件读取的音频流)进行识别并流式返回结果。


import pyaudio
import dashscope
from dashscope.audio.asr import *


# 若没有将API Key配置到环境变量中,需将your-api-key替换为自己的API Key
# dashscope.api_key = "your-api-key"

mic = None
stream = None

class Callback(TranslationRecognizerCallback):
    def on_open(self) -> None:
        global mic
        global stream
        print("TranslationRecognizerCallback open.")
        mic = pyaudio.PyAudio()
        stream = mic.open(
            format=pyaudio.paInt16, channels=1, rate=16000, input=True
        )

    def on_close(self) -> None:
        global mic
        global stream
        print("TranslationRecognizerCallback close.")
        stream.stop_stream()
        stream.close()
        mic.terminate()
        stream = None
        mic = None

    def on_event(
        self,
        request_id,
        transcription_result: TranscriptionResult,
        translation_result: TranslationResult,
        usage,
    ) -> None:
        print("request id: ", request_id)
        print("usage: ", usage)
        if translation_result is not None:
            print(
                "translation_languages: ",
                translation_result.get_language_list(),
            )
            english_translation = translation_result.get_translation("en")
            print("sentence id: ", english_translation.sentence_id)
            print("translate to english: ", english_translation.text)
            if english_translation.vad_pre_end:
                print("vad pre end {}, {}, {}".format(transcription_result.pre_end_start_time, transcription_result.pre_end_end_time, transcription_result.pre_end_timemillis))
        if transcription_result is not None:
            print("sentence id: ", transcription_result.sentence_id)
            print("transcription: ", transcription_result.text)


callback = Callback()


translator = TranslationRecognizerChat(
    model="gummy-chat-v1",
    format="pcm",
    sample_rate=16000,
    transcription_enabled=True,
    translation_enabled=True,
    translation_target_languages=["en"],
    callback=callback,
)
translator.start()
print("请您通过麦克风讲话体验一句话语音识别和翻译功能")
while True:
    if stream:
        data = stream.read(3200, exception_on_overflow=False)
        if not translator.send_audio_frame(data):
            print("sentence end, stop sending")
            break
    else:
        break

translator.stop()

Qwen-TTS

非实时TTS

将生成的音频,保存到本地。文档见https://bailian.console.aliyun.com/?tab=doc#/doc/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2879134.html&renderType=iframe

修复了tts请求时,response出错的情况(比如API_KEY不对)

import os
import requests
import dashscope

text = "那我来给大家推荐一款T恤,这款呢真的是超级好看,这个颜色呢很显气质,而且呢也是搭配的绝佳单品,大家可以闭眼入,真的是非常好看,对身材的包容性也很好,不管啥身材的宝宝呢,穿上去都是很好看的。推荐宝宝们下单哦。"
response = dashscope.audio.qwen_tts.SpeechSynthesizer.call(
    model="qwen-tts",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    text=text,
    voice="Cherry",
)


# ====== 开始检查 response 是否有效 ======
print(response)
if not hasattr(response, 'output') or response.output is None:
    print("响应中没有 output 字段,请检查权限或模型是否开通")
    exit()

if not hasattr(response.output, 'audio') or response.output.audio is None:
    print("响应中没有 audio 数据,请检查返回内容")
    exit()

if not hasattr(response.output.audio, 'url'):
    print("响应中 audio 没有 url 字段,请检查返回结构")
    exit()

# ====== 结束检查 response 是否有效 ======


audio_url = response.output.audio["url"]

save_path = "downloaded_audio.wav"  # 自定义保存路径

try:
    response = requests.get(audio_url)
    response.raise_for_status()  # 检查请求是否成功
    with open(save_path, 'wb') as f:
        f.write(response.content)
    print(f"音频文件已保存至:{save_path}")
except Exception as e:
    print(f"下载失败:{str(e)}")

问题1:pip install pyaudio失败

解决方案:

(1)先安装brew:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)",重启

(2)再安装brew install portaudio

(3)再安装pip install pyaudio

生成的TTS音频文件,放到了本地。适合音频生成离线播报场景,比如PPT。

不适合实时的语音交互,我们需要实时TTS。

实时TTS

按照官方demo跑就好。

我们把实时TTS封装成函数api,并提供了api测试demo;

函数封装代码:qwen_play_tts.py

# coding=utf-8

import os
import dashscope
import pyaudio
import time
import base64
import numpy as np

def qwen_play_tts(text, voice="Ethan", api_key=None):
    """
    使用通义千问 TTS 进行流式语音合成并播放
    :param text: 合成文本
    :param voice: 发音人
    :param api_key: Dashscope API Key(可选,默认读取环境变量)
    """
    api_key = api_key or os.getenv("DASHSCOPE_API_KEY")
    if not api_key:
        raise ValueError("DASHSCOPE_API_KEY is not set.")

    p = pyaudio.PyAudio()
    stream = p.open(format=pyaudio.paInt16,
                    channels=1,
                    rate=24000,
                    output=True)

    responses = dashscope.audio.qwen_tts.SpeechSynthesizer.call(
        model="qwen-tts",
        api_key=api_key,
        text=text,
        voice=voice,
        stream=True
    )
    for chunk in responses:
        audio_string = chunk["output"]["audio"]["data"]
        wav_bytes = base64.b64decode(audio_string)
        audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
        stream.write(audio_np.tobytes())

    time.sleep(0.8)
    stream.stop_stream()
    stream.close()
    p.terminate()

# 示例调用
if __name__ == "__main__":
    sample_text = "你好,这是一段测试语音。"
    qwen_play_tts(sample_text)

api测试代码:qwen_api_test.py

from qwen_play_tts import qwen_play_tts

qwen_play_tts("这是一个函数调用测试。")

<think>我们正在回答用户关于在本地部署AI聊天模型的问题。用户希望了解所需工具和步骤。根据之前的引用,我们知道有教程指导在Mac上部署(Windows同理),使用Ollama这个开源项目。虽然引用中提到了Mac,但步骤在Windows上也类似,我们可以给出通用步骤。步骤:1.准备环境:确保计算机满足基本要求(如内存、操作系统本)。2.安装Ollama:根据操作系统下载并安装Ollama。3.下载模型:通过Ollama下载所需的AI模型(如Llama2,Mistral等)。4.运行模型:使用命令行与模型交互,或者通过API方式集成到其他应用。注意:引用中提到了Ollama,它是一个在本地运行大型语言模型的工具,支持macOS和Linux(Windows可能通过WSL或官方已支持?)。由于引用[2]提到“Win同理”,我们可以认为在Windows上也有相应的方法。详细步骤:步骤1:环境准备-操作系统:macOS,Linux,或Windows(建议Windows10或11)。-内存:至少8GB RAM(推荐16GB或更多,因为大模型需要较多内存)。-存储空间:根据模型大小,需要几GB到几十GB的空间。步骤2:安装Ollama-访问Ollama官网(https://ollama.com/)下载安装包。-对于macOS,下载.dmg文件并安装;对于Windows,下载.exe安装程序;Linux用户可通过命令行安装。-安装完成后,确保Ollama服务已启动。步骤3:下载模型-Ollama提供了多个预训练模型,例如Llama2、Mistral、Gemma等。-打开终端(或命令提示符/PowerShell),运行命令下载模型。例如,下载Llama27B模型:ollama pullllama2:7b注意:模型名称后可以指定本或大小,如`llama2:13b`表示13B参数的本。步骤4:运行模型并与AI聊天-在终端运行以下命令启动聊天:ollama runllama2:7b-然后就可以直接与模型进行对话了。另外,如果想要通过API方式使用(比如构建一个聊天界面),Ollama提供了与OpenAI兼容的API。-启动Ollama服务后,API默认在`http://localhost:11434`提供。-例如,使用curl发送请求:curlhttp://localhost:11434/api/generate-d'{"model":"llama2:7b","prompt":"为什么天空是蓝色的?"}'或者,可以使用Ollama的Web UI(需要额外安装)或与其他前端集成(如Chatbot UI)。注意:模型越大,对硬件要求越高。如果遇到性能问题,可以尝试更小的模型(如7B参数本)或量化本(如q4_0)。引用[2]中提到,即使是配备了几年前硬件的电脑也能运行,但可能仅限于较小的模型。扩展:除了Ollama,还有其他工具可以在本地运行大模型,如LMStudio、GPT4All等,但这里我们主要按照引用中的Ollama来介绍。因此,总结步骤:1.安装Ollama。2.拉取想要的模型。3.运行模型进行聊天。相关问题:1.如何选择适合本地部署的AI模型?2. Ollama支持哪些模型?3.如何优化本地部署的AI模型的性能?4.除了Ollama,还有哪些工具可以在本地运行AI聊天模型?5.如何将本地部署的AI模型集成到自己的应用中?注意:在回答中,我们引用了引用[2]的内容,所以我们在回答末尾添加引用标识[^2]。</think>### 如何在本地部署AI聊天模型(通用步骤) 在本地部署AI聊天模型主要分为**环境准备→工具安装→模型部署→交互测试**四个阶段,以下以开源工具Ollama为例(支持Windows/macOS/Linux): --- #### **一、所需工具与环境** 1. **硬件要求** - 内存 ≥ 16GB(7B参数模型最低要求) - 存储空间 ≥ 10GB(模型文件+依赖库) - 支持AVX指令集的CPU(Intel/AMD近十年产品均可) 2. **软件依赖** - [Python 3.8+](https://www.python.org/downloads/) - [Docker](https://www.docker.com/)(可选,简化环境配置) --- #### **二、详细部署步骤** ##### **1. 安装模型运行框架** 推荐使用**Ollama**(开源跨平台工具): ```bash # macOS/Linux 安装命令 curl -fsSL https://ollama.com/install.sh | sh # Windows 用户下载安装包: https://ollama.com/download/OllamaSetup.exe ``` ##### **2. 下载AI聊天模型** Ollama支持多种开源模型,例如: ```bash # 下载7B参数的Llama2聊天模型(约4.3GB) ollama pull llama2:7b-chat # 或下载轻量模型Mistral(更适合低配置设备) ollama pull mistral ``` ##### **3. 启动本地聊天服务** ```bash # 运行模型(自动启动API服务) ollama run llama2:7b-chat ``` 服务将监听端口:`http://localhost:11434` ##### **4. 与模型交互** - **命令行直接对话**: 启动后直接在终端输入问题(如"你好") - **通过API调用**(示例使用curl): ```bash curl http://localhost:11434/api/generate -d '{ "model": "llama2:7b-chat", "prompt": "解释量子力学", "stream": false }' ``` --- #### **三、进阶部署方案** | 场景 | 推荐工具 | 特点 | |------------------|-----------------------------------|--------------------------------| | 可视化聊天界面 | [Ollama WebUI](https://github.com/ollama-webui/ollama-webui) | 类ChatGPT网页交互 | | 移动端访问 | [Ollama+Ngrok](https://ngrok.com/) | 内网穿透实现手机远程访问 | | 企业级部署 | [vLLM](https://github.com/vllm-project/vllm) | 支持高并发/分布式推理 | --- #### **四、常见问题解决** - **内存不足报错** → 改用更小模型(如`phi`或`tinyllama`) - **下载中断** → 手动下载模型:[Ollama模型库](https://ollama.com/library) - **GPU加速** → 安装CUDAOllama(需NVIDIA显卡) > 部署过程仅需基础命令行操作,无需深度学习背景。通过本地部署,可完全离线运行AI对话,避免隐私泄露风险[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值