AIAvatarKit
🥰 快速构建基于AI的会话头像 ⚡️💬
✨ 特性
- 可在任何地方使用: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 动画控制器)
↓
😆
所以首先,按以下步骤设置你的头像:
- 添加头像参数
FaceOSC
(类型:int,默认值:0,保存:false,同步:true)。 - 将
FaceOSC
参数添加到FX动画控制器。 - 在FX动画控制器中添加层并放置面部表情的状态和过渡。
- (可选)如果你使用的是已经在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()