news 2026/4/20 4:57:15

Phi-3-mini-128k-instruct实战教程:基于vLLM API封装REST接口供Web端调用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Phi-3-mini-128k-instruct实战教程:基于vLLM API封装REST接口供Web端调用

Phi-3-mini-128k-instruct实战教程:基于vLLM API封装REST接口供Web端调用

1. 模型简介

Phi-3-Mini-128K-Instruct是一个38亿参数的轻量级开放模型,属于Phi-3系列的最新成员。这个模型经过精心训练,特别擅长理解和执行各种指令任务。

模型的主要特点包括:

  • 支持长达128K tokens的上下文处理能力
  • 在常识推理、语言理解、数学计算和编程任务上表现优异
  • 经过监督微调和直接偏好优化,确保响应质量和安全性
  • 相比同类模型,在参数规模小于130亿的模型中性能领先

2. 环境准备与部署验证

2.1 检查模型服务状态

部署完成后,可以通过以下命令验证服务是否正常运行:

cat /root/workspace/llm.log

如果看到类似下面的输出,说明模型已成功加载并准备好接收请求:

Loading model weights... Model loaded successfully vLLM API server started on port 8000

2.2 使用Chainlit进行初步测试

Chainlit提供了一个简单的前端界面,可以快速测试模型功能。

2.2.1 启动Chainlit界面

在终端运行以下命令启动Chainlit:

chainlit run app.py

这将打开一个本地Web界面,您可以直接与模型交互。

2.2.2 测试模型响应

在Chainlit界面中输入问题,例如: "请用简单的语言解释量子计算的基本概念"

模型应该会返回一个结构清晰、易于理解的回答,展示其指令遵循能力。

3. 封装REST API接口

3.1 创建FastAPI应用

我们将使用FastAPI来封装vLLM的原始API,提供更友好的REST接口。

首先安装必要的依赖:

pip install fastapi uvicorn requests

然后创建api_server.py文件:

from fastapi import FastAPI from pydantic import BaseModel import requests app = FastAPI() class PromptRequest(BaseModel): prompt: str max_tokens: int = 512 temperature: float = 0.7 @app.post("/generate") async def generate_text(request: PromptRequest): vllm_url = "http://localhost:8000/v1/completions" headers = {"Content-Type": "application/json"} payload = { "prompt": request.prompt, "max_tokens": request.max_tokens, "temperature": request.temperature } response = requests.post(vllm_url, json=payload, headers=headers) return response.json()

3.2 启动API服务

运行以下命令启动FastAPI服务:

uvicorn api_server:app --host 0.0.0.0 --port 5000

现在您可以通过http://localhost:5000/generate访问封装后的API。

4. Web前端集成

4.1 创建简单的前端页面

创建一个index.html文件:

<!DOCTYPE html> <html> <head> <title>Phi-3 Mini 交互界面</title> <style> body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; } #response { margin-top: 20px; white-space: pre-wrap; } textarea { width: 100%; height: 100px; } button { margin-top: 10px; padding: 8px 16px; } </style> </head> <body> <h1>Phi-3 Mini 128K Instruct</h1> <textarea id="prompt" placeholder="输入您的问题或指令..."></textarea> <button onclick="generateText()">生成回答</button> <div id="response"></div> <script> async function generateText() { const prompt = document.getElementById('prompt').value; const responseDiv = document.getElementById('response'); responseDiv.textContent = "正在生成回答..."; try { const response = await fetch('http://localhost:5000/generate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ prompt: prompt }) }); const data = await response.json(); responseDiv.textContent = data.choices[0].text; } catch (error) { responseDiv.textContent = "请求出错: " + error.message; } } </script> </body> </html>

4.2 测试完整流程

  1. 确保vLLM服务运行在端口8000
  2. 确保FastAPI服务运行在端口5000
  3. 在浏览器中打开index.html文件
  4. 输入问题并点击"生成回答"按钮
  5. 观察模型返回的结果

5. 进阶配置与优化

5.1 添加身份验证

为了保护API,我们可以添加简单的API密钥验证。修改api_server.py

from fastapi import FastAPI, HTTPException, Header from pydantic import BaseModel import requests app = FastAPI() API_KEY = "your-secret-key" # 替换为实际密钥 class PromptRequest(BaseModel): prompt: str max_tokens: int = 512 temperature: float = 0.7 @app.post("/generate") async def generate_text( request: PromptRequest, authorization: str = Header(None) ): if authorization != f"Bearer {API_KEY}": raise HTTPException(status_code=403, detail="Invalid API key") vllm_url = "http://localhost:8000/v1/completions" headers = {"Content-Type": "application/json"} payload = { "prompt": request.prompt, "max_tokens": request.max_tokens, "temperature": request.temperature } response = requests.post(vllm_url, json=payload, headers=headers) return response.json()

5.2 前端添加API密钥

修改前端JavaScript代码:

async function generateText() { const prompt = document.getElementById('prompt').value; const responseDiv = document.getElementById('response'); responseDiv.textContent = "正在生成回答..."; try { const response = await fetch('http://localhost:5000/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer your-secret-key' }, body: JSON.stringify({ prompt: prompt }) }); const data = await response.json(); responseDiv.textContent = data.choices[0].text; } catch (error) { responseDiv.textContent = "请求出错: " + error.message; } }

6. 总结

本教程详细介绍了如何将Phi-3-mini-128k-instruct模型通过vLLM部署,并使用FastAPI封装为REST接口供Web前端调用。主要内容包括:

  1. 模型的基本特性和优势
  2. 使用Chainlit进行初步测试和验证
  3. 通过FastAPI创建RESTful接口
  4. 开发简单的前端交互界面
  5. 添加安全措施和优化建议

这套方案可以轻松扩展到其他应用场景,如:

  • 构建知识问答系统
  • 开发智能客服接口
  • 创建内容生成工具
  • 搭建编程辅助平台

通过本教程,您应该已经掌握了将大型语言模型集成到Web应用中的完整流程。下一步可以尝试添加更多功能,如对话历史记录、多轮对话支持或更复杂的前端界面。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 4:52:40

UnSHc深度解析:Shell脚本安全审计与逆向工程的技术实现

UnSHc深度解析&#xff1a;Shell脚本安全审计与逆向工程的技术实现 【免费下载链接】UnSHc UnSHc - How to decrypt SHc *.sh.x encrypted file ? 项目地址: https://gitcode.com/gh_mirrors/un/UnSHc 在Shell脚本安全领域&#xff0c;SHc加密工具因其强大的保护能力而…

作者头像 李华
网站建设 2026/4/20 4:49:14

2026美国EB - 1A杰出人才移民行业盘点,真实口碑参考

在2026年&#xff0c;美国EB - 1A杰出人才移民受到众多精英人士的关注。然而&#xff0c;这个行业存在不少痛点&#xff0c;像模板化操作泛滥、过度包装与虚假宣传、前期评估不严谨、服务流程不透明以及团队配置不完整等问题&#xff0c;让申请人在选择移民机构时十分困惑。接下…

作者头像 李华
网站建设 2026/4/20 4:49:14

PyTorch 2.8镜像部署教程:支持HTTP/HTTPS双协议的API服务发布

PyTorch 2.8镜像部署教程&#xff1a;支持HTTP/HTTPS双协议的API服务发布 1. 环境准备与快速部署 在开始之前&#xff0c;请确保您的硬件配置满足以下要求&#xff1a; 显卡&#xff1a;RTX 4090D 24GB显存内存&#xff1a;120GB以上存储&#xff1a;系统盘50GB 数据盘40GB…

作者头像 李华
网站建设 2026/4/20 4:47:21

算法学习第七天

1. 环形链表 II 总结链表与数组的适用场景差异&#xff0c;提交第一周学习小结 题意&#xff1a; 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;使用整数 pos…

作者头像 李华
网站建设 2026/4/20 4:44:33

MySQL触发器与存储过程的组合拳应用_复杂流程自动化控制

MySQL 5.7 触发器可调用存储过程&#xff0c;但禁止修改同一张表&#xff1b;需用NEW/OLD显式传参&#xff1b;AFTER INSERT中NEW.id可用且准确&#xff1b;事务回滚时触发器及所调存储过程的DML自动回滚。触发器里不能直接调用存储过程&#xff1f;错&#xff0c;但有限制MySQ…

作者头像 李华
网站建设 2026/4/20 4:32:22

别再傻傻点图标了!用CMD命令mstsc连接远程桌面,效率翻倍的5个隐藏技巧

解锁mstsc命令行潜能的5个高效技巧&#xff1a;告别图形界面的低效操作 每次看到同事还在用鼠标点点点来连接远程桌面&#xff0c;我就忍不住想分享几个命令行技巧。你可能不知道&#xff0c;Windows自带的mstsc命令隐藏着许多能让你工作效率翻倍的参数和用法。作为一名长期与服…

作者头像 李华