Project Icon

aiavatarkit

快速构建智能对话虚拟形象的开源工具

AIAvatarKit是一个开源工具包,专为快速开发智能对话虚拟形象而设计。该工具支持在VRChat、cluster等元宇宙平台和现实设备上运行,提供高度可扩展性和便捷的使用体验。AIAvatarKit集成了语音识别、自然语言处理和语音合成等技术,使开发者能够创建交互式虚拟角色,实现多样化的应用场景。

AIAvatarKit

🥰 快速构建基于AI的会话头像 ⚡️💬

AIAvatarKit架构概览

✨ 特性

  • 可在任何地方使用:VRChat、cluster等元宇宙平台,甚至现实世界的设备。
  • 可扩展:取决于你的需求,拥有无限的能力。
  • 易于上手:开箱即用,随时开始对话。

🍩 要求

  • 在你的计算机或网络可达的机器上运行VOICEVOX API(文本转语音)
  • Google或Azure语音服务的API密钥(语音转文本)
  • OpenAI API的API密钥(ChatGPT)
  • Python 3.10(运行环境)

🚀 快速开始

安装AIAvatarKit。

$ pip install aiavatar

创建名为run.py的脚本。

from aiavatar import AIAvatar

app = AIAvatar(
    openai_api_key="你的OpenAI_API密钥",
    google_api_key="你的Google_API密钥"
)
app.start_listening_wakeword()

# # 提示:在Windows上使用Ctrl+C终止,请使用`while`循环等待,而不是`app.start_listening_wakeword()`
# app.start_listening_wakeword(False)
# while True:
#     time.sleep(1)

启动AIAvatar。别忘了提前启动VOICEVOX。

$ python run.py

当你说出唤醒词"こんにちは"(或者当语言不是ja-JP时说"Hello"),对话就会开始。

之后尽情享受对话吧!

🔖 目录

📕 配置指南

以下是每个组件的配置。

🎓 生成式AI

在实例化AIAvatar时,你可以设置模型和系统消息内容。

app = AIAvatar(
    openai_api_key="你的OpenAI_API密钥",
    google_api_key="你的Google_API密钥",
    model="gpt-4-turbo",
    system_message_content="你是我的猫。"
)

ChatGPT

如果你想进行详细配置,可以创建带有自定义参数的ChatGPTProcessor实例,并将其设置给AIAvatar

from aiavatar.processors.chatgpt import ChatGPTProcessor

chat_processor = ChatGPTProcessor(
    api_key=OPENAI_API_KEY,
    model="gpt-4-turbo",
    temperature=0.0,
    max_tokens=200,
    system_message_content="你是我的猫。",
    history_count=20,       # 作为上下文包含在ChatGPT请求中的消息数量
    history_timeout=120.0   # 历史记录过期的时间(秒)
)

app.chat_processor = chat_processor

Claude

创建带有自定义参数的ClaudeProcessor实例,并将其设置给AIAvatar。默认模型是claude-3-sonnet-20240229

from aiavatar.processors.claude import ClaudeProcessor

claude_processor = ClaudeProcessor(
    api_key="ANTHROPIC_API_KEY"
)

app = AIAvatar(
    google_api_key=GOOGLE_API_KEY,
    chat_processor=claude_processor
)

注意:我们目前支持Anthropic API上的Claude 3,而不是Amazon Bedrock。

Gemini

创建带有自定义参数的GeminiProcessor实例,并将其设置给AIAvatar。默认模型是gemini-pro

from aiavatar.processors.gemini import GeminiProcessor

gemini_processor = GeminiProcessor(
    api_key="你的Google_API密钥"
)

app = AIAvatar(
    google_api_key=GOOGLE_API_KEY,
    chat_processor=gemini_processor
)

注意:我们目前支持Google AI Studio上的Gemini,而不是Vertex AI。

Dify

你可以使用Dify API代替特定LLM的API。这样就无需在本地管理工具或RAG的代码。

from aiavatar import AIAvatar
from aiavatar.processors.dify import DifyProcessor

chat_processor_dify = DifyProcessor(
    api_key=DIFY_API_KEY,
    user=DIFY_USER
)

app = AIAvatar(
    google_api_key=GOOGLE_API_KEY,
    chat_processor=chat_processor_dify
)

app.start_listening_wakeword()

其他LLMs

你可以通过实现ChatProcessor接口来创建使用其他生成式AI(如Llama3)的自定义处理器。我们稍后会提供示例。🙏

🗣️ 语音

在实例化AIAvatar时,你可以设置VOICEVOX服务器的说话人ID和基础URL。

app = AIAvatar(
    openai_api_key="你的OpenAI_API密钥",
    google_api_key="你的Google_API密钥",
    # 46是Sayo。访问http://127.0.0.1:50021/speakers获取所有角色的ID
    voicevox_speaker_id=46
)

如果你想进行详细配置,可以创建带有自定义参数的VoicevoxSpeechController实例,并将其设置给AIAvatar

from aiavatar.speech.voicevox import VoicevoxSpeechController

speech_controller = VoicevoxSpeechController(
    base_url="https",
    speaker_id=46,
    device_index=app.audio_devices.output_device
)

app.avatar_controller.speech_controller = speech_controller

语音在单独的子进程中处理,以提高音频质量并减少在AI响应和语音输出并行处理时由线程阻塞引起的噪音(如爆音)。对于资源有限的系统,设置use_subprocess=False允许在主进程中处理语音,但可能会重新引入一些噪音。

app.avatar_controller.speech_controller = VoicevoxSpeechController(
    base_url="http://127.0.0.1:50021",
    speaker_id=46,
    device_index=app.audio_devices.output_device,
    use_subprocess=False  # 设置为False以在主进程中处理语音
)

你还可以设置使用其他文本转语音服务的语音控制器。目前我们提供AzureSpeechController

from aiavatar.speech.azurespeech import AzureSpeechController

AzureSpeechController(
    AZURE_SUBSCRIPTION_KEY, AZURE_REGION,
    device_index=app.audio_devices.output_device,
    # # 如果你想自定义,可以设置以下参数
    # speaker_name="en-US-AvaNeural",
    # speaker_gender="Female",
    # lang="en-US"
)

默认说话人是支持多种语言的en-US-JennyMultilingualNeural

https://learn.microsoft.com/ja-jp/azure/ai-services/speech-service/language-support?tabs=tts

你可以通过实现SpeechController接口或扩展SpeechControllerBase来创建自定义语音控制器。

🐓 唤醒词监听器

在实例化AIAvatar时设置唤醒词。当AIAvatar识别到列表中的一个词时,对话就会开始。

app = AIAvatar(
    openai_api_key=OPENAI_API_KEY,
    google_api_key=GOOGLE_API_KEY,
    wakewords=["Hello", "こんにちは"],
)

如果你想进行详细配置,可以创建带有自定义参数的WakewordListener实例,并将其设置给AIAvatar。 wakeword_listener = WakewordListener( api_key=GOOGLE_API_KEY, wakewords=["Hello", "こんにちは"], device_index=app.audio_devices.input_device, timeout=0.2, # 在结束语音识别前等待静音的持续时间(秒) max_duration=1.5 # 识别语音的最长持续时间(秒),超过此时间将停止 )

app.wakeword_listener = wakeword_listener

🙏 请求监听器

如果你想详细配置,可以使用自定义参数创建 VoiceRequestListener 实例并将其设置给 AIAvatar

from aiavatar.listeners.voicerequest import VoiceRequestListener

request_listener = VoiceRequestListener( api_key=GOOGLE_API_KEY, device_index=app.audio_devices.input_device, detection_timeout=15.0, # 如果在此时间内未开始说话,则结束进程的超时时间(秒) timeout=0.5, # 在结束语音识别前等待静音的持续时间(秒) max_duration=20.0, # 识别语音的最长持续时间(秒),超过此时间将停止 min_duration=0.2, # 被识别为语音的最短持续时间(秒);更短的声音将被忽略 )

app.request_listener = request_listener

✨ 使用 Azure 监听器

我们强烈推荐使用 AzureWakewordListener 和 AzureRequestListner,它们比默认的监听器更稳定。查看 examples/run_azure.py,它可以直接运行。

安装 Azure SpeechSDK。

$ pip install azure-cognitiveservices-speech

修改脚本以使用 AzureRequestListener 和 AzureWakewordListener。

from aiavatar.listeners.azurevoicerequest import AzureVoiceRequestListener from aiavatar.listeners.azurewakeword import AzureWakewordListener

YOUR_SUBSCRIPTION_KEY = "YOUR_SUBSCRIPTION_KEY" YOUR_REGION_NAME = "YOUR_REGION_NAME"

创建 AzureRequestListener

azure_request_listener = AzureVoiceRequestListener( YOUR_SUBSCRIPTION_KEY, YOUR_REGION_NAME )

创建 AzureWakewordListner

async def on_wakeword(text): logger.info(f"唤醒词:{text}") await app.start_chat()

azrue_wakeword_listener = AzureWakewordListener( YOUR_SUBSCRIPTION_KEY, YOUR_REGION_NAME, on_wakeword=on_wakeword, wakewords=["こんにちは"] )

使用 AzureRequestListener 和 Azure WakewordListener 创建 AIAVater

app = AIAvatar( openai_api_key=OPENAI_API_KEY, request_listener=azure_request_listener, wakeword_listener=azrue_wakeword_listener )

通过设置 device_name 参数来指定麦克风设备。 参见 Microsoft Learn 了解如何在各平台上检查设备 UID。 https://learn.microsoft.com/en-us/azure/ai-services/speech-service/how-to-select-audio-input-devices

我们提供了一个适用于 MacOS 的脚本。只需在 Xcode 上运行它即可。

设备 UID:BuiltInMicrophoneDevice,名称:MacBook Pro 的麦克风 设备 UID:com.vbaudio.vbcableA:XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,名称:VB-Cable A 设备 UID:com.vbaudio.vbcableB:XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,名称:VB-Cable B

例如,MacOS 上内置麦克风的 UID 是 BuiltInMicrophoneDevice

然后,将其设置为 device_name 的值。

azure_request_listener = AzureVoiceRequestListener( YOUR_SUBSCRIPTION_KEY, YOUR_REGION_NAME, device_name="BuiltInMicrophoneDevice" )

azure_wakeword_listener = AzureWakewordListener( YOUR_SUBSCRIPTION_KEY, YOUR_REGION_NAME, on_wakeword=on_wakeword, wakewords=["Hello", "こんにちは"], device_name="BuiltInMicrophoneDevice" )

🍥 使用 OpenAI 的音频 API

OpenAI 的语音转文本和文本转语音功能提供了跨多种语言的动态语音识别和语音输出,无需固定的语言设置。

from aiavatar import AIAvatar from aiavatar.device import AudioDevice from aiavatar.listeners.openailisteners import ( OpenAIWakewordListener, OpenAIVoiceRequestListener ) from aiavatar.speech.openaispeech import OpenAISpeechController

获取默认音频设备

devices = AudioDevice()

语音

speech_controller = OpenAISpeechController( api_key=OPENAI_API_KEY, device_index=devices.output_device )

唤醒词

async def on_wakeword(text): await app.start_chat(request_on_start=text, skip_start_voice=True)

wakeword_listener = OpenAIWakewordListener( api_key=OPENAI_API_KEY, device_index=devices.input_device, wakewords=["こんにちは"], on_wakeword=on_wakeword )

请求

request_listener = OpenAIVoiceRequestListener( api_key=OPENAI_API_KEY, device_index=devices.input_device )

使用 OpenAI 组件创建 AIAvatar

app = AIAvatar( openai_api_key=OPENAI_API_KEY, wakeword_listener=wakeword_listener, request_listener=request_listener, speech_controller=speech_controller, noise_margin=10.0, verbose=True ) app.start_listening_wakeword()

🔈 音频设备

你可以通过名称或索引指定组件使用的音频设备。

from aiavatar.device import AudioDevice

通过名称或索引获取设备

audio_device = AudioDevice( input_device="麦克风", output_device="扬声器" )

为组件设置设备。

为 SpeechController 设置输出设备

speech_controller = VoicevoxSpeechControllerSubProcess( device_index=audio_device.output_device, base_url="http://127.0.0.1:50021", speaker_id=46, )

为监听器设置输入设备

request_listener = VoiceRequestListener( device_index=audio_device.input_device )

wakeword_listener = WakewordListener( device_index=audio_device.input_device, wakewords=["Hello", "こんにちは"] )

为 AIAvatar 设置组件

app = AIAvatar( openai_api_key=OPENAI_API_KEY, speech_controller=speech_controller, request_listener=request_listener, wakeword_listener=wakeword_listener )

🥰 面部表情

要在对话中控制面部表情,请按如下方式在 FaceController.faces 中设置面部表情名称和值,然后通过在提示中添加指令,将这些表情键包含在响应消息中。

app.avatar_controller.face_controller.faces = { "neutral": "🙂", "joy": "😀", "angry": "😠", "sorrow": "😞", "fun": "🥳" }

app.chat_processor.system_message_content = """# 面部表情

  • 你有以下表情:
  • joy(喜悦)
  • angry(愤怒)
  • sorrow(悲伤)
  • fun(有趣)
  • 如果你想表达特定情绪,请在句子开头插入,如 [face:joy]。

示例 [face:joy]嘿,你能看到海洋![face:fun]让我们去游泳吧。 """

这样可以在对话过程中在终端自主显示像 🥳 这样的表情符号。要在元宇宙平台上实际控制头像的面部表情,而不是显示像 🥳 这样的表情符号,你需要使用针对每个平台集成机制定制的实现。请参考我们的 VRChatFaceController 作为示例。

💃 动画

正在编写中... ✍️

👀 视觉

AIAvatarKit 在 AI 确定需要视觉来处理用户请求时,动态捕获并发送图像给 AI。这为你在 VRChat 等元宇宙平台上的 AIAvatar 提供了"眼睛"。

要使用视觉功能,请在系统消息中指示视觉标签和 ChatGPTProcessor.get_image

import io import pyautogui # pip install pyautogui from aiavatar.processors.chatgpt import ChatGPTProcessor from aiavatar.device.video import VideoDevice # pip install opencv-python

在系统消息中指示视觉标签

system_message_content = """

使用视觉

如果你需要图像来处理用户的请求,可以使用以下方法获取:

  • screenshot(屏幕截图)
  • camera(相机)

如果需要图像来处理请求,请在你的回复中添加类似 [vision:screenshot] 的指令,以向用户请求图像。

通过添加这个指令,用户将在下一次发言中提供图像。无需对图像本身进行评论。

示例:

用户:看!这是我今天吃的寿司。 助手:[vision:screenshot] 让我看看。 """

实现 get_image

default_camera = VideoDevice(device_index=0, width=960, height=540) async def get_image(source: str=None) -> bytes: if source == "camera": return await default_camera.capture_image("camera.jpg") # 保存当前图像用于调试 else: buffered = io.BytesIO() image = pyautogui.screenshot(region=(0, 0, 1280, 720)) image.save(buffered, format="PNG") image.save("screenshot.png") # 保存当前图像用于调试 return buffered.getvalue()

配置ChatGPTProcessor

chat_processor = ChatGPTProcessor( api_key=OPENAI_API_KEY, model="gpt-4o", system_message_content=system_message_content, use_vision = True ) chat_processor.get_image = get_image


**注意**

* 为避免性能问题,只会将最新的图像发送给ChatGPT。
* Gemini和Claude也可以以相同的方式使用视觉功能。只需将`ChatGPTProcessor`替换为`ClaudeProcessor`或`GeminiProcessor`即可。


## 🎭 自定义行为

你可以在监听用户请求、处理这些请求或识别唤醒词开始对话时调用自定义实现。

在以下示例中,在每个时机改变面部表情旨在增强与AI头像的互动体验。

```python
# 设置角色在听用户说话时的表情
async def set_listening_face():
    await app.avatar_controller.face_controller.set_face("listening", 3.0)
app.request_listener.on_start_listening = set_listening_face

# 设置角色在处理请求时的表情
async def set_thinking_face():
    await app.avatar_controller.face_controller.set_face("thinking", 3.0)
app.chat_processor.on_start_processing = set_thinking_face

async def on_wakeword(text):
    logger.info(f"唤醒词:{text}")
    # 设置检测到唤醒词时的表情
    await app.avatar_controller.face_controller.set_face("smile", 2.0)
    await app.start_chat(request_on_start=text, skip_start_voice=True)

🌎 平台指南

AIAvatarKit能够在任何允许应用程序挂接音频输入和输出的平台上运行。已经测试过的平台包括:

  • VRChat
  • cluster
  • Vket Cloud

除了在PC上运行以操作这些平台上的AI头像外,你还可以通过将扬声器、麦克风和(如果可能的话)显示器连接到树莓派上来创建一个通信机器人。

🐈 VRChat

  • 需要2个虚拟音频设备(例如VB-CABLE)。
  • 需要多个VRChat账号才能与你的AIAvatar聊天。

开始使用

首先,在Python解释器中运行以下命令来检查音频设备。

$ % python

>>> from aiavatar import AudioDevice
>>> AudioDevice.list_audio_devices()
可用的音频设备:
0: 耳机麦克风 (Oculus Virt
    :
6: CABLE-B 输出 (VB-Audio Cable
7: Microsoft 声音映射器 - 输出
8: SONY TV (NVIDIA High Definition
    :
13: CABLE-A 输入 (VB-Audio Cable A
    :

在这个例子中,

  • 要将VB-Cable-A用作VRChat的麦克风,output_device的索引是13(CABLE-A 输入)。
  • 要将VB-Cable-B用作VRChat的扬声器,input_device的索引是6(CABLE-B 输出)。别忘了将VB-Cable-B 输入设置为Windows操作系统的默认输出设备。

然后像下面这样编辑run.py

# 创建AIAvatar
app = AIAvatar(
    GOOGLE_API_KEY,
    OPENAI_API_KEY,
    model="gpt-3.5-turbo",
    system_message_content=system_message_content,
    input_device=6      # 从VRChat监听声音
    output_device=13,   # 对VRChat麦克风说话
)

你也可以设置音频设备的名称而不是索引(部分匹配,忽略大小写)。

    input_device="CABLE-B Out"      # 从VRChat监听声音
    output_device="cable-a input",   # 对VRChat麦克风说话

运行它。

$ run.py

在运行run.py的机器上以桌面模式启动VRChat,并使用AIAvatar的账号登录。然后在VRChat设置窗口中将VB-Cable-A设置为麦克风。

这就是全部步骤!让我们与AIAvatar聊天吧。在另一台机器(或Quest)上登录VRChat,进入AIAvatar所在的世界。

面部表情

AIAvatarKit通过Avatar OSC控制面部表情。

LLM(ChatGPT/Claude/Gemini)
带面部标签的响应 [face:joy]你好!
AIAvatarKit(VRCFaceExpressionController)
osc FaceOSC=1
VRChat(FX 动画控制器)

😆

所以首先,按以下步骤设置你的头像:

  1. 添加头像参数FaceOSC(类型:int,默认值:0,保存:false,同步:true)。
  2. FaceOSC参数添加到FX动画控制器。
  3. 在FX动画控制器中添加层并放置面部表情的状态和过渡。
  4. (可选)如果你使用的是已经在VRChat中使用的头像,在头像json中添加输入参数配置。

接下来,使用VRChatFaceController

from aiavatar.face.vrchat import VRChatFaceController

# 设置VRChatFaceContorller
vrc_face_controller = VRChatFaceController(
    faces={
        "neutral": 0,   # 总是设置`neutral: 0`

        # key = LLM可以理解的表情名称
        # value = 在FX动画控制器上的过渡中设置的FaceOSC值
        "joy": 1,
        "angry": 2,
        "sorrow": 3,
        "fun": 4
    }
)

最后,在系统提示中添加面部表情部分。

# 制作系统提示
system_message_content = """
# 面部表情

* 你有以下表情:

- joy
- angry
- sorrow
- fun

* 如果你想表达特定情绪,请在句子开头插入,如[face:joy]。

示例
[face:joy]嘿,你能看到海洋![face:fun]我们去游泳吧。
"""

# 将它们设置到AIAvatar
app = AIAvatar(
    openai_api_key=OPENAI_API_KEY,
    google_api_key=GOOGLE_API_KEY,
    face_controller=vrc_face_controller,
    system_message_content=system_message_content
)

你可以不仅通过语音对话,还可以通过REST API来测试它。

🍓 树莓派

正在编写中... ✍️

🧩 RESTful APIs

你可以通过RESTful APIs控制AIAvatar。提供的功能有:

  • WakewordLister

    • start:启动WakewordListener
    • stop:停止WakewordListener
    • status:显示WakewordListener的状态
  • Avatar

    • speech:用面部表情和动画说出文本
    • face:设置面部表情
    • animation:设置动画
  • System

    • log:显示最近的日志

要使用REST APIs,创建API应用并设置路由,而不是调用app.start_listening_wakeword()

from fastapi import FastAPI
from aiavatar import AIAvatar
from aiavatar.api.router import get_router

app = AIAvatar(
    openai_api_key=OPENAI_API_KEY,
    google_api_key=GOOGLE_API_KEY
)

# app.start_listening_wakeword()

# 创建API应用并设置路由
api = FastAPI()
api_router = get_router(app, "aiavatar.log")
api.include_router(api_router)

使用uvicorn启动API。

$ uvicorn run:api

调用/wakeword/start来启动唤醒词监听器。

$ curl -X 'POST' \
  'http://127.0.0.1:8000/wakeword/start' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "wakewords": []
}'

http://127.0.0.1:8000/docs 查看API规范并尝试。

注意:AzureWakewordListeners会立即停止,但默认的WakewordListener会在识别到唤醒词后停止。

🤿 深入探讨

高级用法。

⚡️ 函数调用

使用chat_processor.add_function来使用ChatGPT函数调用。在这个例子中,get_weather将被自主调用。

# 添加函数
async def get_weather(location: str):
    await asyncio.sleep(1.0)
    return {"weather": "晴天局部多云", "temperature": 23.4}

app.chat_processor.add_function(
    name="get_weather",
    description="获取给定位置的当前天气",
    parameters={
        "type": "object",
        "properties": {
            "location": {
                "type": "string"
            }
        }
    },
    func=get_weather
)

而且,在get_weather被调用后,将内部自动向ChatGPT发送消息以获取语音响应。

{
    "role": "function",
    "content": "{\"weather\": \"晴天间多云\", \"temperature\": 23.4}",
    "name": "get_weather"
}

🔍 其他提示

开发和调试时的有用信息。

🎤 测试音频输入输出

在配置AIAvatar之前,使用以下脚本测试音频输入输出。

  • 逐步配置音频设备。
  • 如果输出设备配置正确,启动后立即发声。
  • 如果输入设备配置正确,所有识别的文本都会显示在控制台中。
  • 仅在识别到唤醒词时回应。
import asyncio
import logging
from aiavatar import (
    AudioDevice,
    VoicevoxSpeechController,
    WakewordListener
)

GOOGLE_API_KEY = "YOUR_API_KEY"
VV_URL = "http://127.0.0.1:50021"
VV_SPEAKER = 46
INPUT_DEVICE = -1
OUTPUT_DEVICE = -1

# 配置根日志记录器
logger = logging.getLogger()
logger.setLevel(logging.INFO)
log_format = logging.Formatter("[%(levelname)s] %(asctime)s : %(message)s")
streamHandler = logging.StreamHandler()
streamHandler.setFormatter(log_format)
logger.addHandler(streamHandler)

# 选择输入设备
if INPUT_DEVICE < 0:
    input_device_info = AudioDevice.get_input_device_with_prompt()
else:
    input_device_info = AudioDevice.get_device_info(INPUT_DEVICE)
input_device = input_device_info["index"]

# 选择输出设备
if OUTPUT_DEVICE < 0:
    output_device_info = AudioDevice.get_output_device_with_prompt()
else:
    output_device_info = AudioDevice.get_device_info(OUTPUT_DEVICE)
output_device = output_device_info["index"]

logger.info(f"输入设备: [{input_device}] {input_device_info['name']}")
logger.info(f"输出设备: [{output_device}] {output_device_info['name']}")

# 创建语音合成器
speaker = VoicevoxSpeechController(
    VV_URL,
    VV_SPEAKER,
    device_index=output_device
)

asyncio.run(speaker.speak("音频设备测试器已启动。您能听到我的声音吗?"))

# 创建唤醒词监听器
wakewords = ["你好"]
async def on_wakeword(text):
    logger.info(f"唤醒词: {text}")
    await speaker.speak(f"{text}")

wakeword_listener = WakewordListener(
    api_key=GOOGLE_API_KEY,
    wakewords=["你好"],
    on_wakeword=on_wakeword,
    verbose=True,
    device_index=input_device
)

# 开始监听
ww_thread = wakeword_listener.start()
ww_thread.join()

🎚️ 噪音过滤

在实例化AIAvatar对象时,AIAvatarKit会自动调整监听器的噪音过滤。要手动设置语音检测的噪音过滤级别,请将auto_noise_filter_threshold设置为False,并以分贝(dB)指定volume_threshold_db

app = AIAvatar(
    openai_api_key=OPENAI_API_KEY,
    google_api_key=GOOGLE_API_KEY,
    auto_noise_filter_threshold=False,
    volume_threshold_db=-40   # 将语音检测阈值设置为-40 dB
)

🧪 LM Studio API

使用ChatGPTProcessor时需要一些参数。

  • base_url: LM Studio本地服务器的URL
  • model: 模型名称
  • parse_function_call_in_response: 始终设置为False
from aiavatar import AIAvatar
from aiavatar.processors.chatgpt import ChatGPTProcessor

chat_processor = ChatGPTProcessor(
    api_key=OPENAI_API_KEY,
    base_url="http://127.0.0.1:1234/v1",
    model="mmnga/DataPilot-ArrowPro-7B-KUJIRA-gguf",
    parse_function_call_in_response=False
)

app = AIAvatar(
    google_api_key=GOOGLE_API_KEY,
    chat_processor=chat_processor
)
app.start_listening_wakeword()

⚡️ 使用自定义监听器

添加您自己的原创监听器非常简单。只需让它在其他线程上运行,并在监听器处理事件时调用app.start_chat()

这里是FileSystemListener的示例,当在文件系统中发现test.txt时调用聊天。

import asyncio
import os
from threading import Thread
from time import sleep

class FileSystemListener:
    def __init__(self, on_file_found):
        self.on_file_found = on_file_found

    def start_listening(self):
        while True:
            # 每3秒检查一次文件
            if os.path.isfile("test.txt"):
                asyncio.run(self.on_file_found())
            sleep(3)

    def start(self):
        th = Thread(target=self.start_listening, daemon=True)
        th.start()
        return th

run.py中像这样使用这个监听器。

# 事件处理程序
def on_file_found():
    asyncio.run(app.chat())

# 实例化
fs_listener = FileSystemListener(on_file_found)
fs_thread = fs_listener.start()
    :
# 等待完成
fs_thread.join()
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号