• 作者:老汪软件技巧
  • 发表时间:2024-11-17 15:03
  • 浏览量:

本教程将带你从零开始构建一个简单的情感陪伴应用,应用基于 Chainlit 框架,结合 OpenAI API,实现文本聊天和语音输入功能。最终,用户可以与应用进行情感交流,并获得温暖的回应。

完整代码:/XiaomingX/c…

image.png

1. 准备工作

在开始之前,你需要准备以下环境和工具:

通过以下命令安装这些依赖项:

pip install chainlit openai speechrecognition pydub

2. 构建项目框架

创建一个新的 Python 文件,例如 emotion_bot.py,并引入所需的库:

import chainlit as cl
from chainlit.input_widget import Select
from openai import OpenAI
import asyncio
from datetime import datetime
import speech_recognition as sr
import hashlib
import os
from pydub import AudioSegment
from pydub.playback import play

3. 初始化 OpenAI 客户端

我们将创建一个 OpenAI 客户端,方便与其 API 交互:

client = OpenAI()

4. 添加语音输入功能

实现一个函数,用于捕获语音输入并转化为文本:

def save_and_convert_voice():
    recognizer = sr.Recognizer()
    with sr.Microphone() as source:
        print("请说话...")
        audio = recognizer.listen(source)
        # 生成语音文件的 hash 名
        audio_data = audio.get_wav_data()
        audio_hash = hashlib.sha256(audio_data).hexdigest()
        file_name = f"{audio_hash}.wav"
        # 保存音频文件
        with open(file_name, "wb") as f:
            f.write(audio_data)
        # 使用 pydub 播放音频文件(可选)
        audio_segment = AudioSegment.from_wav(file_name)
        play(audio_segment)
        # 将语音转化为文字
        try:
            text = recognizer.recognize_google(audio, language="zh-CN")
            print(f"语音转文字结果: {text}")
            return text
        except sr.UnknownValueError:
            print("无法理解语音")
            return "抱歉,我无法理解您的语音。"
        except sr.RequestError as e:

手把手教你全栈实现基于 OpenAI 的情感陪伴应用_手把手教你全栈实现基于 OpenAI 的情感陪伴应用_

print(f"语音识别服务错误: {e}") return "抱歉,语音识别服务出现错误。"

5. 定义与 OpenAI API 的交互逻辑

添加一个异步函数,用于发送用户输入到 OpenAI 并接收响应:

async def get_data_from_openai(prompt, chat_history):
    print(chat_history)
    messages = chat_history + [{"role": "user", "content": prompt}]
    completion = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages
    )
    return completion.choices[0].message.content

6. 设置聊天会话逻辑

通过 Chainlit 提供的装饰器,定义聊天的启动和消息处理逻辑:

6.1 启动聊天

在启动时给用户发送欢迎消息:

@cl.on_chat_start
async def start():
    await asyncio.sleep(1)  # 模拟思考时间
    await cl.Message(
        content=f"我是一个简单的聊天机器人。请问有什么我可以帮你的吗?"
    ).send()

6.2 处理用户消息

根据用户输入类型(文本或语音)处理请求,并与 OpenAI API 交互:

@cl.on_message
async def main(message: cl.Message, chat_history=[]):
    # 新增:检查用户是否选择了语音输入
    if message.content.lower() == "语音输入":
        voice_text = save_and_convert_voice()
        message.content = voice_text
    
    # 优化数据获取函数,支持异步
    response = await get_data_from_openai(message.content, chat_history)
    
    # 更新聊天历史
    chat_history.append({"role": "user", "content": message.content})
    chat_history.append({"role": "assistant", "content": response})
    
    # 发送响应
    await cl.Message(content=response).send()

7. 启动应用

运行以下命令,启动你的情感陪伴应用:

chainlit run emotion_bot.py

在浏览器中访问 :8000,即可体验你的应用!

8. 测试你的应用

试着与应用聊天,或者在消息框输入“语音输入”,用语音与机器人对话。应用会记录聊天历史,并根据你的输入生成实时响应。

image.png

提示和优化建议语音功能改进:可以添加更多语音转文本引擎,例如 Microsoft Azure Speech,提高识别率。模型选择:根据需求切换到更强大的 OpenAI 模型(如 GPT-4)。用户界面优化:结合 Chainlit 的 input_widget 增强用户体验。

通过这篇教程,你已经成功实现了一个基于 Chainlit 和 OpenAI 的情感陪伴应用。快将它部署给更多人使用吧!


上一条查看详情 +100款支持 .NET 多版本的强大 WPF 控件库
下一条 查看详情 +没有了