Neuron 多模态
Neuron v3 支持全面支持多模态(输入与输出)
通常纯 AI 音频服务不支持工具和对话等完整的代理能力。因此,您可以将这些组件作为独立服务在代理工作流程中使用,或者因为它们实现了 AIProviderInterface 接口,可以在代理内部使用。在这种情况下,您可以受益于代理工作流程功能,如中间件和护栏。
这些组件对于创建本地语音助手以实现免提与模型交互非常有帮助。典型的流程包括捕获音频,使用单独的语音转文本(STT)服务将其转录为文本,将文本发送到代理进行处理,然后使用文本转语音(TTS)来朗读响应。
本地语音助手
非常适合创建本地语音助手,实现免提(hands-free)与模型的交互。典型流程是:
- 使用独立的 Speech-To-Text (STT) 服务将音频转录为文本
- 再使用 Text-to-Speech (TTS) 将回复文本转为语音播放
作为 Agent 的提供商
namespaceApp\Neuron;use NeuronAI\Agent\Agent;use NeuronAI\Chat\Messages\UserMessage;use NeuronAI\Providers\AIProviderInterface;use NeuronAI\Providers\OpenAI\Audio\OpenAITextToSpeech;classMyAgentextendsAgent{protectedfunctionprovider(): AIProviderInterface{returnnew OpenAITextToSpeech( key: 'OPENAI_API_KEY', model: 'gpt-4o-mini-tts', voice: 'alloy', ); }}// 运行 Agent$message = MyAgent::make() ->chat(new UserMessage("Hi!")) ->getMessage();// 获取消息中的音频部分(base64 格式)$audioBase64 = $message->getAudio()->getContent();// 保存音频文件file_put_contents(__DIR__ . '/assets/speech.mp3', base64_decode($audioBase64));
直接使用
$provider = new OpenAITextToSpeech( key: 'OPENAI_API_KEY', model: 'gpt-4o-mini-tts', voice: 'alloy',);// 从文本生成语音$message = $provider->chat(new UserMessage("Hi, I'm the creator of Neuron AI framework!"));// 获取消息中的音频部分(base64 格式)$audioBase64 = $message->getAudio()->getContent();// 保存音频文件file_put_contents(__DIR__ . '/assets/speech.mp3', base64_decode($audioBase64));
OpenAI Audio
文本转语音
useNeuronAI\Providers\OpenAI\Audio\OpenAITextToSpeech;$provider = new OpenAITextToSpeech( key: 'OPENAI_API_KEY', model: 'gpt-4o-mini-tts', voice: 'alloy',);// 从文本生成语音$message = $provider->chat(new UserMessage("Hi, I'm the creator of Neuron AI framework!"));// 获取消息中的音频部分(base64 格式)$audioBase64 = $message->getAudio();// 保存音频文件file_put_contents(__DIR__ . '/assets/speech.mp3', base64_decode($audioBase64));
语音转文本
useNeuronAI\Providers\OpenAI\Audio\OpenAISpeechToText;$provider = new OpenAISpeechToText( key: 'OPENAI_API_KEY', model: 'gpt-4o-transcribe',);// 转录音频$message = $provider->chat(new UserMessage([new TextContent('This audio is about a math lesson. Take care of the technical words.'),new AudioContent(__DIR__ . '/assets/intro.mp3', SourceType::URL) ]));// 打印从音频文件中提取的文本echo $message->getContent();
ElevenLabs
文本转语音
useNeuronAI\Providers\ElevenLabs\ElevenLabsTextToSpeech;$provider = new ElevenLabsTextToSpeech( key: 'ELEVENLABS_API_KEY', // 注意:这里应使用 ElevenLabs 的 key,而不是 OpenAI// model 和 voice 参数根据 ElevenLabs 实际支持调整(示例中可能沿用 OpenAI 风格,但实际以官方为准) model: 'eleven_multilingual_v2', // 示例,实际参数请参考 ElevenLabs 文档 voice: 'Rachel', // 示例 voice ID);// 从文本生成语音$message = $provider->chat(new UserMessage("Hi, I'm the creator of Neuron AI framework!"));// 获取消息中的音频部分(base64 格式)$audioBase64 = $message->getAudio();// 保存音频文件(注意原文中这里有拼写错误 asserts,应为 assets)file_put_contents(__DIR__ . '/assets/speech.mp3', base64_decode($audioBase64));
语音转文本
useNeuronAI\Providers\ElevenLabs\ElevenLabsSpeechToText; // 注意:文档中写的是 OpenAI\Audio\ElevenLabsSpeechToText,可能为笔误$provider = new ElevenLabsSpeechToText( key: 'ELEVENLABS_API_KEY', model: 'whisper-1', // 示例,ElevenLabs 实际可能使用不同模型);// 转录音频$message = $provider->chat(new UserMessage(new AudioContent(__DIR__ . '/assets/intro.mp3', SourceType::URL) ));// 打印从音频文件中提取的文本echo $message->getContent();
https://docs.neuron-ai.dev/providers/audio