【大语言模型_8】vllm启动的模型通过fastapi封装增加api-key验证

背景:

      vllm推理框架启动模型不具备api-key验证。需借助fastapi可以实现该功能

代码实现:

rom fastapi import FastAPI, Header, HTTPException, Request,Response
import httpx
import logging

# 创建 FastAPI 应用
app = FastAPI()
logging.basicConfig(level=logging.DEBUG)
# 配置 vLLM 的服务地址
VLLM_BASE_URL = "http://localhost:25010"

# 定义合法的 API Key 列表(可以根据需要扩展为数据库或配置文件)
VALID_API_KEYS = {"zml_123456789", "zml_1234567890"}

# 中间件:验证 API Key
# 验证 API Key
async def verify_api_key(authorization: str = Header(None)):
    # 打印接收到的 Authorization 字段
    logging.debug(f"Received Authorization header: {authorization}")

    # 检查 Authorization 是否存在且以 "Bearer " 开头
    if not authorization or not isinstance(authorization, str) or not authorization.startswith("Bearer "):
        raise HTTPException(status_code=403, detail="Invalid Authorization Header")

    # 提取 API Key
    try:
        api_key = authorization.split(" ")[1]  # 提取 "Bearer " 后的部分
    except IndexError:
        raise HTTPException(status_code=403, detail="Malformed Authorization Header")

    # 验证 API Key 是否合法
    if api_key not in VALID_API_KEYS:
        raise HTTPException(status_code=403, detail="Invalid API Key")



# 代理路由:转发请求到 vLLM
@app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE"])
async def proxy(request: Request, path: str, authorization: str = Header(None)):
    # 验证 API Key
    logging.debug(f"Received request with path: {path}")
    logging.debug(f"Received headers: {request.headers}")
    await verify_api_key(authorization)

    # 构造转发的目标 URL
    target_url = f"{VLLM_BASE_URL}/{path}"

    # 获取请求体和查询参数
    body = await request.body()
    query_params = request.query_params

    # 使用 httpx 转发请求
    async with httpx.AsyncClient() as client:
        # 根据请求方法转发
        response = await client.request(
            method=request.method,
            url=target_url,
            params=query_params,
            data=body,
            headers={key: value for key, value in request.headers.items() if key != "host"}
        )

    # 返回 vLLM 的响应
    return Response(content=response.content, status_code=response.status_code, headers=dict(response.headers))

三、启动

uvicorn my_fastapi:app  --host=0.0.0.0 --port=12345
# my_fastapi 为脚本名称

通过访问fastapi提供的12345即可实现改功能

<think>好的,用户想要在本地部署DeepSeek模型,并将其接入微信机器人或群聊功能。首先,我需要理清整个流程的步骤,确保每个环节都覆盖到。 第一步是本地部署DeepSeek模型。这需要先了解DeepSeek的模型格式和依赖项。通常,这类模型可能需要PyTorch或TensorFlow框架,用户需要检查模型的文档,确认所需的库和版本。然后,下载模型文件,可能需要从官方渠道获取,比如Hugging Face Hub或者GitHub仓库。安装完依赖后,编写一个简单的推理脚本,测试模型是否能正常运行,比如输入一些测试文本看是否有输出。 接下来是API封装。本地运行的模型需要暴露为API,方便微信机器人调用。这里常用的工具是FastAPI或Flask。创建一个简单的HTTP端点,接收用户输入,调用模型生成回复,再返回结果。需要注意API的安全性和性能,比如设置请求速率限制和身份验证。 然后是微信机器人的接入。根据用户提供的引用,可以使用现有的微信机器人框架,如Wechaty或ItChat。引用[2]提到企业微信的群机器人功能,但用户可能想用个人微信,所以需要选择支持个人账号的库。配置机器人需要处理微信的登录、消息监听和回复逻辑。需要注意的是,微信官方对自动化操作有严格限制,可能存在封号风险,用户需要了解并承担相关风险。 将API与微信机器人连接。在机器人代码中,每当收到群聊或私聊消息时,调用本地部署的DeepSeek模型API,获取回复后发送回微信群。这里需要处理消息的异步响应,确保机器人能及时回复而不阻塞。 此外,引用[3]提到的Dify平台可能简化应用开发,用户可以考虑是否使用此类平台来管理模型API,但用户的需求是本地部署,所以可能需要更多手动配置。引用[4]中的野火IM提供了群组托管功能,如果用户需要更复杂的群组管理,可以集成相关SDK,但基础功能可能不需要。 最后,测试整个流程。部署完成后,进行端到端测试,模拟用户发送消息,检查机器人是否能正确调用模型并返回响应。同时,处理可能的异常,比如模型服务宕机或高延迟。 用户可能遇到的难点包括模型部署的环境配置、微信账号的封禁风险、API的稳定性和延迟。需要提醒用户注意这些方面,并提供解决方案,比如使用代理、优化模型推理速度等。</think>### 分步实现方案 #### 一、本地部署 DeepSeek 模型 1. **环境准备** - 安装 Python 3.8+ 和 CUDA 驱动(GPU 加速需 NVIDIA 显卡) - 下载 DeepSeek 模型文件(需从官方渠道获取) - 安装依赖库: ```bash pip install torch transformers deepseek-sdk ``` 2. **启动本地推理服务** 使用 FastAPI 封装模型 API: ```python from fastapi import FastAPI from pydantic import BaseModel from transformers import AutoModelForCausalLM, AutoTokenizer app = FastAPI() model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-llm-7b-chat") tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-llm-7b-chat") class Request(BaseModel): prompt: str @app.post("/generate") def generate_text(request: Request): inputs = tokenizer(request.prompt, return_tensors="pt") outputs = model.generate(**inputs, max_length=512) return {"response": tokenizer.decode(outputs[0])} ``` 启动服务: ```bash uvicorn api:app --port 8000 ``` --- #### 二、微信机器人接入 1. **选择机器人框架** - 个人微信:使用逆向工程框架如 `itchat` 或 `Wechaty`(存在封号风险)[^2] - 企业微信:通过官方 API 创建群机器人(稳定但功能受限) 2. **配置消息监听与转发** ```python import requests from itchat import MsgRegister, config @MsgRegister(config.msg_types.INCOME_MSG) def reply(msg): if msg.text.startswith("/ask"): response = requests.post("http://localhost:8000/generate", json={"prompt": msg.text[5:]}).json() msg.reply(response["response"]) ``` --- #### 三、安全与优化 1. **API 网关保护** - 使用 Nginx 反向代理并配置 HTTPS - 添加 API 密钥验证: ```python @app.post("/generate") def generate_text(request: Request, api_key: str = Header(None)): if api_key != "YOUR_SECRET_KEY": raise HTTPException(status_code=403) # ...原有逻辑 ``` 2. **性能优化** - 启用模型量化(4/8-bit)减少显存占用 - 使用异步推理框架如 `vLLM` 或 `TGI` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值