一个支持多种AI模型的HTTP API服务器,提供OpenAI兼容的接口规范。
docker compose up -d- Embedding模型: BAAI/bge-m3
- Rerank模型: BAAI/bge-reranker-v2-m3
- 语音转文字: Qwen/Qwen2-Audio-7B-Instruct
- 文字转语音: Edge-TTS (多种语音)
如果遇到Python兼容性问题(如numpy安装失败),请先运行:
# 快速修复常见问题
./quick_fix.sh# 安装依赖
./deploy.sh install
# 启动服务
./deploy.sh start
# 运行测试
./deploy.sh test- 克隆项目
git clone <repository-url>
cd llm- 安装依赖
pip install -r requirements.txt- 启动服务
python start.py或者直接运行:
python main.py服务器默认运行在 http://localhost:8000
GET /v1/modelsPOST /v1/embeddings
Content-Type: application/json
{
"input": "你好世界",
"model": "BAAI/bge-m3"
}或批量处理:
{
"input": ["文本1", "文本2", "文本3"],
"model": "BAAI/bge-m3"
}POST /v1/rerank
Content-Type: application/json
{
"model": "BAAI/bge-reranker-v2-m3",
"query": "什么是人工智能?",
"documents": [
"人工智能是计算机科学的一个分支",
"机器学习是人工智能的子领域",
"今天天气很好"
],
"top_k": 2
}POST /v1/audio/transcriptions
Content-Type: multipart/form-data
file: <audio_file>
model: Qwen/Qwen2-Audio-7B-Instruct
language: zh (可选)使用curl示例:
curl -X POST "http://localhost:8000/v1/audio/transcriptions" \
-H "Content-Type: multipart/form-data" \
-F "file=@audio.wav" \
-F "model=Qwen/Qwen2-Audio-7B-Instruct"POST /v1/audio/speech
Content-Type: application/json
{
"model": "tts-1",
"input": "你好,这是一个测试。",
"voice": "alloy",
"response_format": "mp3",
"speed": 1.0
}支持的语音:
alloy: 中文女声echo: 中文男声fable: 中文女声(年轻)onyx: 中文男声(成熟)nova: 中文女声(活泼)shimmer: 中文女声(温柔)
GET /health可以通过环境变量自定义配置:
# 服务器配置
export HOST=0.0.0.0
export PORT=8000
# 模型配置
export EMBEDDING_MODEL=BAAI/bge-m3
export RERANK_MODEL=BAAI/bge-reranker-v2-m3
export STT_MODEL=Qwen/Qwen2-Audio-7B-Instruct
# 设备配置
export DEVICE=auto # auto, cpu, cuda
# 批处理配置
export EMBEDDING_BATCH_SIZE=32
export RERANK_BATCH_SIZE=8
# 限制配置
export MAX_AUDIO_SIZE=25 # MB
export MAX_TEXT_LENGTH=8192
export MAX_DOCUMENTS=100
# 日志配置
export LOG_LEVEL=INFO
export LOG_FILE=app.logimport requests
import json
# 基础URL
base_url = "http://localhost:8000"
# 1. 获取嵌入向量
def get_embeddings(texts):
response = requests.post(
f"{base_url}/v1/embeddings",
json={
"input": texts,
"model": "BAAI/bge-m3"
}
)
return response.json()
# 2. 文档重排序
def rerank_documents(query, documents):
response = requests.post(
f"{base_url}/v1/rerank",
json={
"model": "BAAI/bge-reranker-v2-m3",
"query": query,
"documents": documents,
"top_k": 3
}
)
return response.json()
# 3. 语音转文字
def transcribe_audio(audio_file_path):
with open(audio_file_path, 'rb') as f:
response = requests.post(
f"{base_url}/v1/audio/transcriptions",
files={"file": f},
data={"model": "Qwen/Qwen2-Audio-7B-Instruct"}
)
return response.json()
# 4. 文字转语音
def text_to_speech(text, output_file):
response = requests.post(
f"{base_url}/v1/audio/speech",
json={
"model": "tts-1",
"input": text,
"voice": "alloy",
"response_format": "mp3"
}
)
with open(output_file, 'wb') as f:
f.write(response.content)
# 使用示例
if __name__ == "__main__":
# 测试嵌入
embeddings = get_embeddings(["你好", "世界"])
print(f"嵌入维度: {len(embeddings['data'][0]['embedding'])}")
# 测试重排序
query = "什么是机器学习?"
docs = [
"机器学习是人工智能的一个分支",
"今天天气很好",
"深度学习是机器学习的子集"
]
rerank_result = rerank_documents(query, docs)
print(f"重排序结果: {rerank_result}")
# 测试TTS
text_to_speech("你好,这是一个测试", "output.mp3")
print("语音文件已生成: output.mp3")- GPU加速: 如果有NVIDIA GPU,模型会自动使用CUDA加速
- 批处理: 支持批量处理多个文本/文档
- 异步处理: 使用FastAPI的异步特性提高并发性能
- 内存管理: 模型在启动时加载,避免重复加载
如果遇到安装或运行问题,请查看详细的故障排除指南:
# 查看完整故障排除文档
cat TROUBLESHOOTING.md
# 或者运行快速修复
./quick_fix.sh-
Python兼容性: 运行
./quick_fix.sh自动修复 -
模型下载失败: 设置HuggingFace镜像
export HF_ENDPOINT=https://hf-mirror.com -
CUDA不可用: 设置
export DEVICE=cpu强制使用CPU -
内存不足: 减少批处理大小
export BATCH_SIZE=1 -
端口占用: 更改端口
export PORT=8001 -
语音转文字服务不可用
- 错误信息: "Transcription not available - please install transformers or configure alternative ASR service"
- 快速修复: 运行
./fix_stt_issue.sh - 手动修复步骤:
# 设置镜像源 export HF_ENDPOINT=https://hf-mirror.com # 预下载模型 python3 download_models.py # 或安装 Whisper 备用服务 pip3 install openai-whisper
-
音频处理错误
- 确保音频文件格式支持
- 检查文件大小限制
- 安装必要的音频处理库
# 查看实时日志
tail -f app.log
# 查看错误日志
grep ERROR app.logMIT License
欢迎提交Issue和Pull Request!