Nexent 模型模块
本模块提供了多种AI模型服务,包括语音服务、嵌入模型、大语言模型和视觉语言模型。每个模型都遵循统一的接口设计,支持配置管理和错误处理。
📋 目录
🎤 语音服务 (STT & TTS)
SDK 在 nexent.core.models 中提供 STT/TTS 模型类(BaseSTTModel / BaseTTSModel 抽象基类,以及 VolcSTTModel、VolcTTSModel、AliSTTModel、AliTTSModel 实现,其中阿里云实现基于 DashScope Qwen Realtime WebSocket 协议)。在此之上,后端语音服务(backend/apps/voice_app.py)提供一个统一的语音服务,在单个端口上同时运行语音识别(STT)和语音合成(TTS)服务,使用WebSocket进行实时通信。
功能特点
- 语音识别(STT): 通过WebSocket连接进行实时音频转写
- 语音合成(TTS): 通过WebSocket流式传输将文本转换为音频
- 单一端口: 两种服务在同一端口上运行,简化部署和使用
- 仅WebSocket: 两种服务使用一致的WebSocket API模式
- 流式处理: 支持实时流式音频识别和合成,提供低延迟体验
- 错误处理: 完善的错误处理和状态反馈机制
API端点
语音识别(STT)
- WebSocket:
/voice/stt/ws(runtime 服务,端口 5014)- 首条消息: JSON 配置(文本或二进制 JSON 均可),可包含
model_factory、api_key、model_appid、access_token、language、base_url等字段;缺省时回退到租户模型配置 - 后续消息: 以二进制块流式传输 PCM 音频数据
- 音频要求: 16kHz采样率, 16位深度, 单声道, PCM原始格式
- 响应格式: 实时JSON转写结果
- 响应字段:
- 火山引擎: 转发火山原始 payload,识别文本位于
result.text - 阿里云:
{"text": "识别文本", "is_final": true/false} vad: VAD 事件(started/stopped,阿里云实现)status: 服务状态信息(ready/processing)error: 如有错误,包含错误信息
- 火山引擎: 转发火山原始 payload,识别文本位于
- 首条消息: JSON 配置(文本或二进制 JSON 均可),可包含
语音合成(TTS)
- WebSocket:
/voice/tts/ws(runtime 服务,端口 5014)- 首条消息: 发送JSON格式的文本:
{"text": "要合成的文本"},可额外携带model_factory、api_key、model_appid、access_token、base_url、tenant_id、model_name等配置 - 响应格式: 二进制音频块 (默认为MP3格式)
- 完成信号: 最终消息:
{"status": "completed"} - 错误响应:
{"error": "错误信息"}
- 首条消息: 发送JSON格式的文本:
🔗 嵌入模型
嵌入模型提供了将文本、图像等多种数据类型转换为向量表示的能力,支持多种后端服务。
功能特点
- 多后端支持: 支持 Jina、OpenAI 兼容、DashScope、Siliconflow 等嵌入服务。
- 统一文本接口: 所有模型均提供统一的
get_embeddings方法,接受字符串或字符串列表作为输入,方便处理纯文本数据。 - 多模态能力: 多模态嵌入模型额外提供
get_multimodal_embeddings方法,处理包含文本和图像的混合输入。支持JinaEmbedding(jina-clip-v2)、DashScopeMultimodalEmbedding(tongyi-embedding-vision)、SiliconflowMultimodalEmbedding(Qwen3-VL-Embedding系列)。 - 图像输入格式:
image值支持 URL 和原始 bytes。bytes 会自动编码为 base64 data URI(Jina / Siliconflow 按 MIME 类型检测,DashScope 固定转为 PNG)。 - 参数化配置: 所有配置通过构造函数参数传入,SDK 不读取环境变量。
使用示例
获取文本嵌入 (所有模型通用)
所有嵌入模型都使用 get_embeddings 方法来获取文本的嵌入向量。此方法接受单个字符串或字符串列表。
python
from nexent.core.models.embedding_model import JinaEmbedding, OpenAICompatibleEmbedding
# 初始化Jina模型 (同样适用于OpenAICompatibleEmbedding)
embedding = JinaEmbedding(api_key="your_jina_api_key")
# 获取单个文本的嵌入
text_input = "Hello, Nexent!"
embeddings = embedding.get_embeddings(text_input)
print(f"单文本嵌入向量数量: {len(embeddings)}")
# 获取多个文本的嵌入
text_list_input = ["这是第一段文本。", "这是第二段文本。"]
embeddings_list = embedding.get_embeddings(text_list_input)
print(f"多文本嵌入向量数量: {len(embeddings_list)}")获取多模态嵌入 (JinaEmbedding)
对于支持多模态输入的模型(如 JinaEmbedding),可以使用 get_multimodal_embeddings 方法来处理包含文本和图像的混合输入。
python
from nexent.core.models.embedding_model import JinaEmbedding
# 初始化Jina模型
embedding = JinaEmbedding(api_key="your_jina_api_key")
# 定义包含文本和图像的多模态输入(image 支持 URL 或原始 bytes)
multimodal_input = [
{"text": "A beautiful sunset over the beach"},
{"image": "https://example.com/sunset.jpg"}
]
# 获取多模态嵌入
multimodal_embeddings = embedding.get_multimodal_embeddings(multimodal_input)
print(f"多模态嵌入向量数量: {len(multimodal_embeddings)}")🤖 大语言模型
大语言模型提供了文本生成和对话能力,基于OpenAI API实现。
功能特点
- 流式输出: 支持实时流式文本生成
- 温度控制: 可调节生成文本的随机性
- 上下文管理: 支持多轮对话和上下文保持
- 工具调用: 支持函数调用和工具使用
使用示例
python
from nexent.core.models.openai_llm import OpenAIModel
from nexent.core.utils.observer import MessageObserver
# 初始化模型
observer = MessageObserver()
model = OpenAIModel(
model_id="your-model-id",
api_key="your-api-key",
api_base="your-api-base",
observer=observer,
temperature=0.2,
top_p=0.95
)
# 发送消息
messages = [{"role": "user", "content": "Hello"}]
response = model(messages=messages)👁️ 视觉语言模型
视觉语言模型结合了图像理解和文本生成能力,支持图像描述和视觉问答。
功能特点
- 图像处理: 支持本地图像文件路径和文件流(BinaryIO),图像自动编码为 base64 传输
- 流式输出: 支持实时流式文本生成
- 提示词定制: 可自定义系统提示词
- 多模态理解: 结合视觉和语言理解能力
使用示例
python
from nexent.core.models.openai_vlm import OpenAIVLModel
from nexent.core.utils.observer import MessageObserver
# 初始化模型(model_id / api_key / api_base 经 kwargs 传给底层 OpenAI 兼容客户端)
observer = MessageObserver()
model = OpenAIVLModel(
observer=observer,
model_id="your-vlm-model-id",
api_key="your-api-key",
api_base="your-api-base"
)
# 分析图像
image_path = "path/to/image.jpg"
result = model.analyze_image(image_path, system_prompt="请描述这张图片")🧭 模型能力与治理
- 模型类型全覆盖:llm / vlm(vlm2-vlm4 分类,支持图/视频/音频理解)/ embedding / rerank / stt / tts / realtime(DashScope 实时 WebSocket)
- Provider 扩展:STT/TTS 继承
BaseSTTModel/BaseTTSModel(火山引擎、阿里云、ModelEngine、DashScope 等) - 重试机制:
core/models/retry.py的ModelRetryConfig(max_attempts、backoff_base_seconds、max_backoff_seconds、jitter),对瞬时错误指数退避重试 - 可选 logprobs:模型配置包含 logprobs 时自动传参
- 元数据参数机制:支持元数据透传并含 prompt 注入防护
- 并发治理:租户级模型并发上限与超时配置
🔧 通用特性
所有模型都支持以下通用特性:
错误处理
- 连接错误捕获和处理
- 服务状态监控和反馈
- 客户端友好的错误消息
配置管理
- 环境变量配置
- .env文件支持
- 运行时配置覆盖
连接测试
模型类提供了用于测试与远程服务连接状态的方法(均为异步接口):
python
import asyncio
# 测试连接
connected = asyncio.run(model.check_connectivity())
if connected:
print("服务连接正常")
else:
print("服务连接失败")