- 作者:老汪软件技巧
- 发表时间:2024-11-17 15:03
- 浏览量:
本教程将带你从零开始构建一个简单的情感陪伴应用,应用基于 Chainlit 框架,结合 OpenAI API,实现文本聊天和语音输入功能。最终,用户可以与应用进行情感交流,并获得温暖的回应。
完整代码:/XiaomingX/c…
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:
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. 测试你的应用
试着与应用聊天,或者在消息框输入“语音输入”,用语音与机器人对话。应用会记录聊天历史,并根据你的输入生成实时响应。
提示和优化建议语音功能改进:可以添加更多语音转文本引擎,例如 Microsoft Azure Speech,提高识别率。模型选择:根据需求切换到更强大的 OpenAI 模型(如 GPT-4)。用户界面优化:结合 Chainlit 的 input_widget 增强用户体验。
通过这篇教程,你已经成功实现了一个基于 Chainlit 和 OpenAI 的情感陪伴应用。快将它部署给更多人使用吧!