AI项目二十七:豆包大模型API测试

若该文为原创文章,转载请注明原文出处。

参考:【豆包大模型】-Python调用豆包大模型API及文本转语音TTS_豆包tts-CSDN博客

代码是基于下面地址修改测试的, 如需源码,留下邮箱

https://download.csdn.net/download/Jlinkneeder/89743078

一、环境安装

使用的是自己的电脑,没有GPU

1、环境创建

conda create -n tts_env python=3.11.3
conda activate tts_env

2、依赖安装

pip install pyttsx3 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install python-dotenv -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install volcengine-python-sdk -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install httpx -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pydantic -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install SpeechRecognition -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install PyAudio -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pipwin -i https://pypi.tuna.tsinghua.edu.cn/simple

其中安装有一个会出错,

如果报以下错误:

note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for volcengine-python-sdk
  Running setup.py clean for volcengine-python-sdk
Failed to build volcengine-python-sdk
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (volcengine-python-sdk)


 是因为Windows 系统有最长路径限制,可能会导致安装失败,请按照以下方式设置:

1. 按下 Win+R ,输入 regedit 打开注册表编辑器。
2. 设置 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 路径下的变量 LongPathsEnabled 为 1 即可。
修改完注册表后再次运行pip命令即可成功安装volcengine-python-sdk。

二、大模型后台设置


1. 注册登录


进入火山引擎官网,注册并登录:

https://console.volcengine.com/auth/login?redirectURI=%2Fhome


2. 获取API访问密钥


进入火山引擎API访问密钥网页,获取API访问密钥:

https://console.volcengine.com/iam/keymanage/
具体流程如下:

此处获得的Access Key和Secret Access Key非常重要,后续需要配置到Python程序中。

3. 获取API Key


进入火山引擎API Key网页,获取API Key:

https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey
具体流程如下: 

即可获取到API Key。 

4. 获取model


进入火山引擎model获取网页,获取model:

https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint?current=1&pageSize=10
具体流程如下:

模型选择Doubao-pro-32k,主线模型选择240515即可。

接入点名称下的这一串代码就是 ENDPOINT_ID,非常重要,后续需要填到Python程序中。

5. 开通模型


进入以下网站,开通模型:

https://console.volcengine.com/ark/region:ark+cn-beijing/openManagement


 开通Doubao-pro-4k的模型服务。

三、测试

功能是,录制一段音频,在转成文本,文本通过豆包大模型在输出。

1、TTS测试

import speech_recognition as sr
 
# 初始化识别器
r = sr.Recognizer()
 
# 使用默认麦克风作为音频来源
with sr.Microphone() as source:
    print("请说些什么吧...")
    audio = r.listen(source)
 
    try:
        # 使用Google Web Speech API进行识别
        print("Google Speech Recognition thinks you said:")
        text = r.recognize_google(audio, language='zh-CN') # 根据需要设置语言
        print(text)
    except sr.UnknownValueError:
        print("Google Speech Recognition could not understand audio")
    except sr.RequestError as e:
        print(f"Could not request results from Google Speech Recognition service; {e}")

2、模型测试

import os
import pyttsx3
from volcenginesdkarkruntime import Ark
import dotenv

# 加载环境变量
dotenv.load_dotenv(".env")

# 初始化 Ark 客户端
client = Ark()

# 初始化 pyttsx3 引擎
engine = pyttsx3.init()

# 配置 TTS 的语速和音量(可选)
engine.setProperty('rate', 150)  # 语速
engine.setProperty('volume', 1)  # 音量

# 从环境变量中获取模型 ID
model_id = os.getenv("ENDPOINT_ID")

# 欢迎语
Welcome_Text = "您好,我是豆包,您的大模型对话助手,请问有什么可以帮到您?(输入 'exit' 退出对话)"
print(Welcome_Text)
engine.say(Welcome_Text)
engine.runAndWait()  # 等待语音播放完毕

# 进入多轮对话的循环
while True:
    # 从终端获取用户输入
    user_input = input("User:\r\n")

    # 检查用户是否想退出
    if user_input.lower() in ["exit", "quit"]:
        print("AI:感谢您的使用,再见!")
        break

    # 创建流式对话请求
    stream = client.chat.completions.create(
        model=model_id,
        messages=[
            {"role": "system", "content": "你是豆包,是由字节跳动开发的 AI 人工智能助手"},
            {"role": "user", "content": user_input},  # 使用终端输入的内容
        ],
        stream=True
    )

    print("AI:")
    # 初始化一个空字符串来存储所有文本
    full_text = ""

    # 逐块读取流式输出并将结果打印
    for chunk in stream:
        if not chunk.choices:
            continue
        # 获取文本内容
        text = chunk.choices[0].delta.content

        # 输出文本到控制台
        print(text, end="")

        # 将文本累积到 full_text
        full_text += text

    # 当流式结果全部接收完成后,开始将累积的文本通过 TTS 朗读出来
    if full_text:
        engine.say(full_text)
        engine.runAndWait()  # 等待语音播放完毕

    print("\r\n")

代码里有个.env文件,需要把上面的参数修改成自己注册的API等参数

3、完整功能

import speech_recognition as sr
import pyttsx3

# 初始化语音识别器
r = sr.Recognizer()

# 初始化语音合成引擎
engine = pyttsx3.init()

# 进入多轮对话的循环
while True:
    # 使用麦克风获取用户语音输入
    with sr.Microphone() as source:
        print("请说些什么吧...")
        audio = r.listen(source)

        try:
            # 使用Google Web Speech API进行识别
            user_input = r.recognize_google(audio, language='zh-CN')  # 根据需要设置语言
            print(f"User:{user_input}\r\n")
        except sr.UnknownValueError:
            print("Google Speech Recognition could not understand audio")
            continue
        except sr.RequestError as e:
            print(f"Could not request results from Google Speech Recognition service; {e}")
            continue

    # 检查用户是否想退出
    if user_input.lower() in ["exit", "quit"]:
        print("AI:感谢您的使用,再见!")
        break

    # 创建流式对话请求
    stream = client.chat.completions.create(
        model=model_id,
        messages=[
            {"role": "system", "content": "你是豆包,是由字节跳动开发的 AI 人工智能助手"},
            {"role": "user", "content": user_input},  # 使用语音识别的内容
        ],
        stream=True
    )

    print("AI:")
    # 初始化一个空字符串来存储所有文本
    full_text = ""

    # 逐块读取流式输出并将结果打印
    for chunk in stream:
        if not chunk.choices:
            continue
        # 获取文本内容
        text = chunk.choices[0].delta.content

        # 输出文本到控制台
        print(text, end="")

        # 将文本累积到 full_text
        full_text += text

    # 当流式结果全部接收完成后,开始将累积的文本通过 TTS 朗读出来
    if full_text:
        engine.say(full_text)
        engine.runAndWait()  # 等待语音播放完毕

    print("\r\n")

功能基本正常。

四、使用C++测试

有打算部署到 RK3568,所以使用curl测试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>

// 回调函数,用于处理服务器返回的数据
size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) {
    ((char *)userp)[size * nmemb] = '\0'; // 确保字符串以null结尾
    printf("%s", (char *)contents);
    return size * nmemb;
}

int main(void) {
    CURL *curl;
    CURLcode res;
    char postData[1024];
    char response[4096];
    const char *apiKey = "67b818e6-5f1f-40ca-bd67-b1ef5404934d"; // 替换为你的API密钥
    char userInput[256];

    // 初始化libcurl
    curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();
    if(curl) {
        // 设置URL
        curl_easy_setopt(curl, CURLOPT_URL, "https://ark.cn-beijing.volces.com/api/v3/chat/completions");

        // 设置HTTP头
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Content-Type: application/json");
        char authHeader[256];
        snprintf(authHeader, sizeof(authHeader), "Authorization: Bearer %s", apiKey);
        headers = curl_slist_append(headers, authHeader);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

        // 获取用户输入
        printf("请输入你的问题: ");
        if (fgets(userInput, sizeof(userInput), stdin) != NULL) {
            // 去掉换行符
            userInput[strcspn(userInput, "\n")] = '\0';
        } else {
            fprintf(stderr, "读取输入失败\n");
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
            curl_global_cleanup();
            return 1;
        }

        // 设置POST数据
        snprintf(postData, sizeof(postData), "{\"model\": \"ep-20250214134145-g6lj5\", \"messages\": [{\"role\": \"system\", \"content\": \"你是豆包,是由字节跳动开发的 AI 人工智能助手.\"}, {\"role\": \"user\", \"content\": \"%s\"}]}", userInput);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);

        // 设置回调函数和用户数据
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)response);

        // 执行请求
        res = curl_easy_perform(curl);
        if(res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        } else {
            printf("Response: %s\n", response);
        }

        // 清理
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();
    return 0;
}

测试结果,响应很慢,有点不符合预期,响应好几秒,在通过TTS播放,那对话的体验效果不理想。

如有侵权,或需要完整代码,请及时联系博主。

### 豆包 API 和 OneAPI 的开发文档与使用教程 #### 一、豆包 API 接入指南 对于初次接触 AI API 的开发者而言,获取详细的接入资料至关重要。小豆包 API 提供了一套完整的接入文档,帮助用户快速上手并实现功能集成[^1]。 - **接口调用方式**:支持 HTTP/HTTPS 协议下的 GET 或 POST 请求方法。 - **认证机制**:采用 Token 认证模式,在每次请求头中携带有效的访问令牌以验证身份合法性。 - **参数说明**:详细列出了各个接口所需传递的具体参数及其含义,确保使用者能够准确无误地构建查询语句。 ```json { "method": "POST", "url": "/v1/api/example", "headers": { "Authorization": "Bearer YOUR_ACCESS_TOKEN" }, "body": { "param1": "value1", "param2": "value2" } } ``` #### 二、OneAPI 功能特性概览 作为统一通信平台的一部分,OneAPI 设计之初即旨在简化跨运营商服务部署流程,降低多网络环境下的编程复杂度。 - **消息发送能力**:允许应用程序通过单一接口向不同移动网络终端发送短信或彩信内容。 - **位置信息服务**:提供基于蜂窝基站定位以及 GPS 坐标的地理坐标转换工具集。 - **支付网关对接**:实现了安全可靠的在线交易处理方案,适用于各类电子商务场景需求。 #### 三、最佳实践案例分享 为了更好地理解如何利用上述两种 API 构建实际应用项目,这里给出几个典型的应用实例: - 整合多种支付渠道完成便捷高效的订单结算操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殷忆枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值