Skip to content

Repository files navigation

AI Models API Server

一个支持多种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

方法1: 使用部署脚本(推荐)

# 安装依赖
./deploy.sh install

# 启动服务
./deploy.sh start

# 运行测试
./deploy.sh test

安装

  1. 克隆项目
git clone <repository-url>
cd llm
  1. 安装依赖
pip install -r requirements.txt
  1. 启动服务
python start.py

或者直接运行:

python main.py

API接口

服务器默认运行在 http://localhost:8000

1. 模型列表

GET /v1/models

2. 文本嵌入 (Embeddings)

POST /v1/embeddings
Content-Type: application/json

{
  "input": "你好世界",
  "model": "BAAI/bge-m3"
}

或批量处理:

{
  "input": ["文本1", "文本2", "文本3"],
  "model": "BAAI/bge-m3"
}

3. 文档重排序 (Rerank)

POST /v1/rerank
Content-Type: application/json

{
  "model": "BAAI/bge-reranker-v2-m3",
  "query": "什么是人工智能?",
  "documents": [
    "人工智能是计算机科学的一个分支",
    "机器学习是人工智能的子领域",
    "今天天气很好"
  ],
  "top_k": 2
}

4. 语音转文字 (Speech-to-Text)

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"

5. 文字转语音 (Text-to-Speech)

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: 中文女声(温柔)

6. 健康检查

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.log

使用示例

Python客户端示例

import 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")

性能优化

  1. GPU加速: 如果有NVIDIA GPU,模型会自动使用CUDA加速
  2. 批处理: 支持批量处理多个文本/文档
  3. 异步处理: 使用FastAPI的异步特性提高并发性能
  4. 内存管理: 模型在启动时加载,避免重复加载

故障排除

安装问题

如果遇到安装或运行问题,请查看详细的故障排除指南:

# 查看完整故障排除文档
cat TROUBLESHOOTING.md

# 或者运行快速修复
./quick_fix.sh

常见问题

  1. Python兼容性: 运行 ./quick_fix.sh 自动修复

  2. 模型下载失败: 设置HuggingFace镜像 export HF_ENDPOINT=https://hf-mirror.com

  3. CUDA不可用: 设置 export DEVICE=cpu 强制使用CPU

  4. 内存不足: 减少批处理大小 export BATCH_SIZE=1

  5. 端口占用: 更改端口 export PORT=8001

  6. 语音转文字服务不可用

    • 错误信息: "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
  7. 音频处理错误

    • 确保音频文件格式支持
    • 检查文件大小限制
    • 安装必要的音频处理库

日志查看

# 查看实时日志
tail -f app.log

# 查看错误日志
grep ERROR app.log

许可证

MIT License

贡献

欢迎提交Issue和Pull Request!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages