本项目包含使用 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/mnt/moark-models/Qwen3-Embedding-8B/mnt/moark-models/bge-reranker-v2-m3使用 Diffusers 库加载 Z-Image-Turbo 模型,生成指定图像并保存。
python task1_image_inference.py
/data/exam/image_output.png - 生成的图像一只可爱的橘色小猫坐在窗台上,窗外是夕阳余晖洒满的城市天际线,温暖的光线透过玻璃照在猫咪的毛发上,营造出宁静祥和的氛围。高清摄影风格,细节丰富。
使用 FastAPI 创建图像生成服务,在 8188 端口运行。
python task2_image_server.py
http://localhost:8188/v1/images/generationsPOST /v1/images/generations
{
"model": "Qwen-Image-2512",
"prompt": "一只可爱的橘色小猫坐在窗台上,夕阳余晖,高清摄影风格。",
"size": "1024x1024",
"num_inference_steps": 30,
"guidance_scale": 7.5,
"seed": 42,
"n": 1
}
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| model | string | 否 | Qwen-Image-2512 | 模型名称 |
| prompt | string | 是 | - | 图像描述提示词 |
| size | string | 否 | 1024x1024 | 图像尺寸(宽x高) |
| num_inference_steps | int | 否 | 30 | 推理步数 |
| guidance_scale | float | 否 | 7.5 | 引导比例 |
| seed | int | 否 | None | 随机种子(可选) |
| n | int | 否 | 1 | 生成图像数量 |
{
"created": 1234567890,
"data": [
{
"b64_json": "base64编码的图像数据...",
"revised_prompt": "实际使用的提示词"
}
]
}
服务启动后,使用以下命令测试:
# 使用提供的测试脚本
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
}'
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.7Bpython task1_asr_inference.py
/data/exam/asr_output.txt - 识别结果文本/mnt/moark-models/L1_exam/asr_demo.wav - 待识别的音频文件使用 FastAPI 创建语音识别服务,在 8188 端口运行。
python task2_asr_server.py
http://localhost:8188/v1/audio/transcriptionsPOST /v1/audio/transcriptions (multipart/form-data)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | file | 是 | 音频文件 |
| model | string | 否 | 模型名称(默认 Qwen3-ASR-1.7B) |
| language | string | 否 | 语言代码(默认 zh) |
{
"text": "识别到的文本内容"
}
服务启动后,使用以下命令测试:
# 使用提供的测试脚本
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"
使用 Transformers 库加载 FireRed-OCR 模型,对图片进行文字识别。
/mnt/moark-models/FireRed-OCRpython task1_ocr_inference.py
/data/exam/ocr_output.txt - 识别结果文本/mnt/moark-models/L1_exam/ocr_test_image.jpg - 待识别的图片文件使用 FastAPI 创建 OCR 识别服务,在 8188 端口运行。
python task2_ocr_server.py
http://localhost:8188/v1/vision/ocrPOST /v1/vision/ocr (multipart/form-data)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | file | 是 | 图片文件 |
| model | string | 否 | 模型名称(默认 FireRed-OCR) |
{
"text": "识别到的文本内容"
}
服务启动后,使用以下命令测试:
# 使用提供的测试脚本
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"
requirements.txtpip install -r requirements.txt
/data/exam/image_output.png/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 测试脚本task1_ocr_inference.py - 单次 OCR 识别推理脚本task2_ocr_server.py - FastAPI OCR 识别服务test_ocr_api.sh - OCR API 测试脚本requirements.txt - Python 依赖README.md - 项目说明文档使用 vLLM/FastAPI 在 8188 端口启动 Qwen3-Embedding-8B 模型服务,提供 OpenAI 兼容的 /v1/embeddings 端点。
/mnt/moark-models/Qwen3-Embedding-8Bpython task3_embedding_server.py
http://localhost:8188/v1/embeddingsPOST /v1/embeddings
{
"input": "待编码的文本或文本数组",
"model": "Qwen3-Embedding-8B",
"encoding_format": "float"
}
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| input | string/array | 是 | - | 待编码的文本或文本数组 |
| model | string | 否 | Qwen3-Embedding-8B | 模型名称 |
| encoding_format | string | 否 | float | 编码格式 |
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [0.123, 0.456, ...],
"index": 0
}
],
"model": "Qwen3-Embedding-8B",
"usage": {
"prompt_tokens": 10,
"total_tokens": 10
}
}
bash test_embedding_api.sh
对测试文档进行智能切片,使用 Qwen3-Embedding-8B 进行向量化并存入 Chroma 数据库。
# 需要先启动 Embedding 服务
python task3_document_chunking.py
/mnt/moark-models/L1_exam/embedding_documents.txt - 待处理的文档/data/exam/chroma_db/ - Chroma 向量数据库使用 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