【AI小智后端部分(一)】

AI小智后端部分(一)

  • [调用 DeepSeek 获取回答](#调用 DeepSeek 获取回答)
  • [调用语音合成 edgeTTS](#调用语音合成 edgeTTS)

链接: B站UP出处

调用 DeepSeek 获取回答

1、申请 API

keyhttps://open.bigmodel.cn/usercenter/apiproKey (ChatGLM)

注册前请自己建立 apiKey 如: 2d3f2a9c485844b2dc6b74f0c3da9dde.0887Vm8oP4Xdt5(这个是我的要用自己的)
2、在 anaconda 的 ai-server 的虚拟环境中安装 openai 库依赖

c 复制代码
conda activate ai-server  #激活虚拟环境

pip install openai  #安装依赖包

3、查看集成文档

https://github.com/openai/openai-python

4、编写代码

调用 ChatGLM → 生成并打印文本回复

c 复制代码
# 从openai库中导入OpenAI客户端类(注意:该库可适配兼容OpenAI接口的第三方大模型,如ChatGLM)
from openai import OpenAI

# 定义一个大语言模型(LLM)操作类,封装模型调用的核心逻辑
class LLM:
    # 构造方法:初始化模型配置
    # 参数config:字典类型,包含模型名称、API密钥、接口地址等配置项
    def __init__(self, config):
        # 从配置中获取模型名称(如ChatGLM)
        self.model_name = config.get("model_name")
        # 从配置中获取API密钥(访问模型的身份凭证,需替换为自己的)
        self.api_key = config.get("api_key")
        # 从配置中获取模型接口地址(DeepSeek/ChatGLM的专属接口地址)
        self.url = config.get("url")
        # 创建OpenAI客户端实例:
        # - api_key:验证身份的密钥
        # - base_url:指定第三方模型的接口地址(而非OpenAI官方地址)
        self.client = OpenAI(api_key=self.api_key, base_url=self.url)

    # 核心方法:调用模型获取对话响应
    # 参数dialogue:列表类型,包含对话消息(格式为[{"role":角色, "content":内容}])
    def response(self, dialogue):
        # 调用客户端的chat.completions.create方法发起请求
        responses = self.client.chat.completions.create(
            model=self.model_name,  # 指定要调用的模型名称
            messages=dialogue,      # 传入对话消息列表
            stream=False            # 关闭流式响应,直接返回完整结果
        )
        # 提取响应结果中的核心内容(模型回复的文本)并返回
        return responses.choices[0].message.content

# 定义主运行函数,封装调用流程
def run():
    # 模型配置字典:需根据自己的实际信息替换
    config = {
        "model_name": "ChatGLM",  # 要调用的模型名称(ChatGLM)
        "url": "https://open.bigmodel.cn/api/paas/v4/",  # ChatGLM的API接口地址
        "api_key": "2d2af9c458884b20b6c740fc6a30ad5c.0B6l7VmbBOqAXdts",  # 示例API密钥(需替换为自己的)
    }

    # 实例化LLM类,传入配置
    llm = LLM(config)
    # 构造对话消息:role为user表示用户提问,content为提问内容
    messages = [
        {"role": "user", "content": "你好"}
    ]
    # 调用response方法获取模型回复
    resource = llm.response(messages)
    # 打印完整的模型响应结果
    print("\n完整响应:", resource )

# 程序入口:仅直接运行当前文件时执行run函数
if __name__ == "__main__":
    run()

调用语音合成 edgeTTS

1、在 anaconda 的 ai-server 的虚拟环境中安装 edge_tts 库依赖

c 复制代码
conda activate ai-server  #激活虚拟环境

pip install edge_tts  #安装依赖包

2、导入依赖

c 复制代码
import edge_tts

3、编写代码

调用 ChatGLM 生成文本回复 → 通过 edge_tts 将文本转为语音 → 播放语音文件

c 复制代码
# 需补充导入依赖(代码中用到但未显示,实际运行需添加)
import edge_tts  # 导入微软edge_tts库,用于语音合成
import asyncio   # 导入异步编程库,运行异步函数
import os        # 导入操作系统库,执行播放音频的系统命令

# 定义Edge_TTS类,封装微软Edge TTS语音合成的核心逻辑
class Edge_TTS:
    # 构造方法:初始化语音合成的默认配置
    def __init__(self):
        # 设置语音类型:中文晓晓女声(微软内置的语音模型)
        self.voice = "zh-CN-XiaoxiaoNeural"

    # 异步方法:将文本转换为语音并保存到指定路径
    # 参数text:需要合成语音的文本内容
    # 参数audio_path:音频文件保存的路径(如"test.mp3")
    async def text_to_speech(self, text, audio_path):
        # 创建Communicate实例:传入待合成的文本和指定的语音类型
        communicate = edge_tts.Communicate(text, self.voice)
        # 异步保存音频文件到指定路径(await必须在异步函数中使用)
        await communicate.save(audio_path)
        # 返回音频文件路径,方便后续调用(如播放)
        return audio_path


if __name__ == "__main__":
    # 1. 调用ChatGLM大模型生成文本回复(依赖之前的ChatGLM_LLM类)
    llm = ChatGLM_LLM()  # 实例化ChatGLM模型类(需提前定义,对应之前的ChatGLM调用逻辑)
    resource = llm.generate_response("你在干嘛?")  # 向ChatGLM提问,获取文本回复
    
    # 2. 将ChatGLM的文本回复转换为语音
    tts = Edge_TTS()  # 实例化语音合成类
    # 运行异步的text_to_speech方法:把ChatGLM的回复转为语音,保存为test.mp3
    output_file = asyncio.run(tts.text_to_speech(resource, "test.mp3"))
    
    # 3. Windows系统下播放生成的音频文件(start命令是Windows特有)
    os.system(f"start {output_file}")
    
    # 打印ChatGLM返回的文本回复,方便查看
    print(resource)
  1. 同步执行(没有 async/await)
    如果text_to_speech是普通同步方法,执行流程是:
c 复制代码
调用text_to_speech → 程序卡住,文本转为音频保存 → 保存完成后,才执行后续的播放、打印逻辑

👉 问题:语音合成需要和微软的 TTS 服务器交互(网络请求 + 文件写入),这个过程会耗时(比如几百毫秒到几秒),同步执行时程序会完全 "停在这一步",没法做其他事。

  1. 异步执行(有 async/await)

text_to_speech标记为async,内部用await communicate.save(),执行流程是:

c 复制代码
调用text_to_speech → 遇到await,程序"暂时让出控制权" → 去处理其他任务(如果有的话)→ 文本转为音频保存好了,再回来继续执行后续
相关推荐
编程小Y2 小时前
Adobe Animate 2024:2D 矢量动画与交互创作利器下载安装教程
人工智能
laplace01232 小时前
Part 3:模型调用、记忆管理与工具调用流程(LangChain 1.0)笔记(Markdown)
开发语言·人工智能·笔记·python·langchain·prompt
mys55182 小时前
杨建允:AI搜索优化对汽车服务行业获客的影响
人工智能·aigc·geo·ai搜索优化·ai引擎优化
winfredzhang2 小时前
深度解析:利用 Python + Playwright 攻克动态网页 PPT 导出难题
python·powerpoint·截图·自动翻页
2501_936146042 小时前
鱼类识别与分类:基于freeanchor_x101-32x4d_fpn_1x_coco的三种鱼类自动检测
人工智能·分类·数据挖掘
鲨莎分不晴2 小时前
拯救暗淡图像:深度解析直方图均衡化(原理、公式与计算)
人工智能·算法·机器学习
好奇龙猫2 小时前
【人工智能学习-AI-MIT公开课-10. 学习介绍、最近邻】
人工智能·学习
风送雨2 小时前
八周Python强化计划(七)
开发语言·python
ππ很开心6662 小时前
DAY 32 函数专题2:装饰器
开发语言·python