logo
0
0
WeChat Login
feat: 实现向量化服务部署、文档存储与重排优化

图像生成、语音识别、OCR 与 Embedding API 部署实操

本项目包含使用 Z-Image-Turbo/Qwen-Image-2512 模型完成的图像生成任务、使用 Qwen3-ASR-1.7B 模型完成的语音识别任务、使用 FireRed-OCR 模型完成的 OCR 识别任务,以及使用 Qwen3-Embedding-8B 和 bge-reranker-v2-m3 完成的向量化服务部署与重排优化任务。

模型信息

图像生成模型

  • 模型路径: /mnt/moark-models/Z-Image-Turbo
  • 模型类型: 图像生成模型(Diffusion)
  • 框架: Hugging Face Diffusers

Embedding 模型

  • 模型路径: /mnt/moark-models/Qwen3-Embedding-8B
  • 模型类型: 文本嵌入模型
  • 向量维度: 1024

重排模型

  • 模型路径: /mnt/moark-models/bge-reranker-v2-m3
  • 模型类型: 文本重排模型
  • 框架: Hugging Face Transformers

任务一:图像生成 - 单次推理测试

使用 Diffusers 库加载 Z-Image-Turbo 模型,生成指定图像并保存。

运行方式

python task1_image_inference.py

输出文件

  • /data/exam/image_output.png - 生成的图像

生成内容

一只可爱的橘色小猫坐在窗台上,窗外是夕阳余晖洒满的城市天际线,温暖的光线透过玻璃照在猫咪的毛发上,营造出宁静祥和的氛围。高清摄影风格,细节丰富。

任务二:图像生成 - 部署 OpenAI 兼容 API

使用 FastAPI 创建图像生成服务,在 8188 端口运行。

启动服务

python task2_image_server.py

服务信息

  • 端口: 8188
  • 端点: http://localhost:8188/v1/images/generations
  • 格式: OpenAI 兼容

API 规范

请求格式

POST /v1/images/generations { "model": "Qwen-Image-2512", "prompt": "一只可爱的橘色小猫坐在窗台上,夕阳余晖,高清摄影风格。", "size": "1024x1024", "num_inference_steps": 30, "guidance_scale": 7.5, "seed": 42, "n": 1 }

参数说明

参数类型必填默认值说明
modelstringQwen-Image-2512模型名称
promptstring-图像描述提示词
sizestring1024x1024图像尺寸(宽x高)
num_inference_stepsint30推理步数
guidance_scalefloat7.5引导比例
seedintNone随机种子(可选)
nint1生成图像数量

响应格式

{ "created": 1234567890, "data": [ { "b64_json": "base64编码的图像数据...", "revised_prompt": "实际使用的提示词" } ] }

测试 API

服务启动后,使用以下命令测试:

# 使用提供的测试脚本 bash test_image_api.sh # 或使用 curl 命令 curl -X POST "http://localhost:8188/v1/images/generations" \ -H "Content-Type: application/json" \ -d '{ "model": "Qwen-Image-2512", "prompt": "一只可爱的橘色小猫坐在窗台上,夕阳余晖,高清摄影风格。", "size": "1024x1024", "num_inference_steps": 30, "guidance_scale": 7.5, "seed": 42, "n": 1 }'

Python 调用示例

import requests import base64 from PIL import Image from io import BytesIO # 调用 API response = requests.post( "http://localhost:8188/v1/images/generations", json={ "model": "Qwen-Image-2512", "prompt": "一只可爱的橘色小猫坐在窗台上,夕阳余晖,高清摄影风格。", "size": "1024x1024", "num_inference_steps": 30, "guidance_scale": 7.5, "seed": 42, "n": 1 } ) # 解码并保存图像 data = response.json() image_data = base64.b64decode(data["data"][0]["b64_json"]) image = Image.open(BytesIO(image_data)) image.save("generated_image.png")

任务三:语音识别 - 单次推理测试

使用 Transformers 库加载 Qwen3-ASR-1.7B 模型,对音频文件进行语音识别。

模型信息

  • 模型路径: /mnt/moark-models/Qwen3-ASR-1.7B
  • 模型类型: 语音识别模型(ASR)
  • 框架: Hugging Face Transformers

运行方式

python task1_asr_inference.py

输出文件

  • /data/exam/asr_output.txt - 识别结果文本

音频文件

  • /mnt/moark-models/L1_exam/asr_demo.wav - 待识别的音频文件

任务四:语音识别 - 部署 OpenAI 兼容 API

使用 FastAPI 创建语音识别服务,在 8188 端口运行。

启动服务

python task2_asr_server.py

服务信息

  • 端口: 8188
  • 端点: http://localhost:8188/v1/audio/transcriptions
  • 格式: OpenAI 兼容

API 规范

请求格式

POST /v1/audio/transcriptions (multipart/form-data)

参数说明

参数类型必填说明
filefile音频文件
modelstring模型名称(默认 Qwen3-ASR-1.7B)
languagestring语言代码(默认 zh)

响应格式

{ "text": "识别到的文本内容" }

测试 API

服务启动后,使用以下命令测试:

# 使用提供的测试脚本 bash test_asr_api.sh # 或使用 curl 命令 curl -X POST "http://localhost:8188/v1/audio/transcriptions" \ -F "file=@/mnt/moark-models/L1_exam/asr_demo.wav" \ -F "model=Qwen3-ASR-1.7B" \ -F "language=zh"

任务五:OCR 识别 - 单次推理测试

使用 Transformers 库加载 FireRed-OCR 模型,对图片进行文字识别。

模型信息

  • 模型路径: /mnt/moark-models/FireRed-OCR
  • 模型类型: OCR 文字识别模型
  • 基础架构: Qwen3-VL
  • 框架: Hugging Face Transformers

运行方式

python task1_ocr_inference.py

输出文件

  • /data/exam/ocr_output.txt - 识别结果文本

测试图片

  • /mnt/moark-models/L1_exam/ocr_test_image.jpg - 待识别的图片文件

任务六:OCR 识别 - 部署 OpenAI 兼容 API

使用 FastAPI 创建 OCR 识别服务,在 8188 端口运行。

启动服务

python task2_ocr_server.py

服务信息

  • 端口: 8188
  • 端点: http://localhost:8188/v1/vision/ocr
  • 格式: OpenAI 兼容

API 规范

请求格式

POST /v1/vision/ocr (multipart/form-data)

参数说明

参数类型必填说明
filefile图片文件
modelstring模型名称(默认 FireRed-OCR)

响应格式

{ "text": "识别到的文本内容" }

测试 API

服务启动后,使用以下命令测试:

# 使用提供的测试脚本 bash test_ocr_api.sh # 或使用 curl 命令 curl -X POST "http://localhost:8188/v1/vision/ocr" \ -F "file=@/mnt/moark-models/L1_exam/ocr_test_image.jpg" \ -F "model=FireRed-OCR"

环境要求

  • Python 3.8+
  • PyTorch 2.0+
  • CUDA 环境(推荐)
  • 依赖包见 requirements.txt

安装依赖

pip install -r requirements.txt

重要说明

  1. 服务端会在首次生成图像时将第一张图片保存为 /data/exam/image_output.png
  2. API 服务启动时会加载模型,首次启动可能需要较长时间
  3. 确保 /mnt/moark-models/ 路径下有正确的模型文件

文件列表

图像生成任务

  • task1_image_inference.py - 单次图像生成推理脚本
  • task2_image_server.py - FastAPI 图像生成服务
  • test_image_api.sh - 图像 API 测试脚本

语音识别任务

  • task1_asr_inference.py - 单次语音识别推理脚本
  • task2_asr_server.py - FastAPI 语音识别服务
  • test_asr_api.sh - 语音 API 测试脚本

OCR 识别任务

  • task1_ocr_inference.py - 单次 OCR 识别推理脚本
  • task2_ocr_server.py - FastAPI OCR 识别服务
  • test_ocr_api.sh - OCR API 测试脚本

其他文件

  • requirements.txt - Python 依赖
  • README.md - 项目说明文档

任务七:Embedding API 服务部署

使用 vLLM/FastAPI 在 8188 端口启动 Qwen3-Embedding-8B 模型服务,提供 OpenAI 兼容的 /v1/embeddings 端点。

模型信息

  • 模型路径: /mnt/moark-models/Qwen3-Embedding-8B
  • 模型类型: 文本嵌入模型
  • 向量维度: 1024

启动服务

python task3_embedding_server.py

服务信息

  • 端口: 8188
  • 端点: http://localhost:8188/v1/embeddings
  • 格式: OpenAI 兼容

API 规范

请求格式

POST /v1/embeddings { "input": "待编码的文本或文本数组", "model": "Qwen3-Embedding-8B", "encoding_format": "float" }

参数说明

参数类型必填默认值说明
inputstring/array-待编码的文本或文本数组
modelstringQwen3-Embedding-8B模型名称
encoding_formatstringfloat编码格式

响应格式

{ "object": "list", "data": [ { "object": "embedding", "embedding": [0.123, 0.456, ...], "index": 0 } ], "model": "Qwen3-Embedding-8B", "usage": { "prompt_tokens": 10, "total_tokens": 10 } }

测试 API

bash test_embedding_api.sh

任务八:文档切片与 Chroma 向量数据库存储

对测试文档进行智能切片,使用 Qwen3-Embedding-8B 进行向量化并存入 Chroma 数据库。

运行方式

# 需要先启动 Embedding 服务 python task3_document_chunking.py

输入文件

  • /mnt/moark-models/L1_exam/embedding_documents.txt - 待处理的文档

输出文件

  • /data/exam/chroma_db/ - Chroma 向量数据库

切片策略

  1. 优先按段落分割
  2. 超长段落按句子分割
  3. 不足10个切片时按固定长度分割
  4. 每个切片 100-500 字符

任务九:重排模型优化检索

使用 bge-reranker-v2-m3 模型对检索结果进行重排优化。

模型信息

  • 模型路径: /mnt/moark-models/bge-reranker-v2-m3
  • 模型类型: 文本重排模型

运行方式

# 需要先启动 Embedding 服务并完成文档切片 python task3_reranking.py

输出文件

  • /data/exam/reranking_results.json - 重排结果

结果格式

{ "query": "今天天气适合出游吗?", "embedding_top_k": 10, "initial_top10": [ { "doc_id": "chunk_001", "initial_rank": 1, "embedding_score": 0.72, "text": "今天阳光明媚,适合外出。" } ], "reranked_top10": [ { "doc_id": "chunk_002", "initial_rank": 2, "reranked_rank": 1, "reranker_score": 0.86, "text": "天气晴朗,出游体验佳。" } ] }

一键运行所有任务

# 依次执行:启动服务 -> 文档切片 -> 重排优化 python run_all_tasks.py