【vLLM 学习】API 客户端

vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。

更多 vLLM 中文文档及教程可访问 →vllm.hyper.ai/

源代码:vllm-project/vllm

ini 复制代码
"""Example Python client for `vllm.entrypoints.api_server`
NOTE: The API server is used only for demonstration and simple performance
benchmarks. It is not intended for production use.
For production use, we recommend `vllm serve` and the OpenAI client API.
"""
"""用于 `vllm.entrypoints.api_server` 的 Python 客户端示例


注意:API 服务器仅用于演示和简单的性能基准测试。它并不适合用于生产环境。
对于生产环境,我们推荐使用 `vllm serve` 和 OpenAI 客户端 API。
"""


import argparse
import json
from typing import Iterable, List

import requests


def clear_line(n: int = 1) -> None:
    LINE_UP = '\033[1A'
    LINE_CLEAR = '\x1b[2K'
 for _ in range(n):
 print(LINE_UP, end=LINE_CLEAR, flush=True)


def post_http_request(prompt: str,
                      api_url: str,
                      n: int = 1,
                      stream: bool = False) -> requests.Response:
    headers = {"User-Agent": "Test Client"}
    pload = {
 "prompt": prompt,
 "n": n,
 "use_beam_search": True,
 "temperature": 0.0,
 "max_tokens": 16,
 "stream": stream,
 }
    response = requests.post(api_url,
                             headers=headers,
                             json=pload,
                             stream=stream)
 return response


def get_streaming_response(response: requests.Response) -> Iterable[List[str]]:
 for chunk in response.iter_lines(chunk_size=8192,
                                     decode_unicode=False,
                                     delimiter=b"\0"):
 if chunk:
            data = json.loads(chunk.decode("utf-8"))
            output = data["text"]
 yield output


def get_response(response: requests.Response) -> List[str]:
    data = json.loads(response.content)
    output = data["text"]
 return output


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--host", type=str, default="localhost")
    parser.add_argument("--port", type=int, default=8000)
    parser.add_argument("--n", type=int, default=4)
    parser.add_argument("--prompt", type=str, default="San Francisco is a")
    parser.add_argument("--stream", action="store_true")
    args = parser.parse_args()
    prompt = args.prompt
    api_url = f"http://{args.host}:{args.port}/generate"
    n = args.n
    stream = args.stream

 print(f"Prompt: {prompt!r}\n", flush=True)
    response = post_http_request(prompt, api_url, n, stream)

 if stream:
        num_printed_lines = 0
 for h in get_streaming_response(response):
            clear_line(num_printed_lines)
            num_printed_lines = 0
 for i, line in enumerate(h):
                num_printed_lines += 1
 print(f"Beam candidate {i}: {line!r}", flush=True)
 else:
        output = get_response(response)
 for i, line in enumerate(output):
 print(f"Beam candidate {i}: {line!r}", flush=True)源代码:vllm-project/vllm
"""Example Python client for `vllm.entrypoints.api_server`
NOTE: The API server is used only for demonstration and simple performance
benchmarks. It is not intended for production use.
For production use, we recommend `vllm serve` and the OpenAI client API.
"""
"""用于 `vllm.entrypoints.api_server` 的 Python 客户端示例


注意:API 服务器仅用于演示和简单的性能基准测试。它并不适合用于生产环境。
对于生产环境,我们推荐使用 `vllm serve` 和 OpenAI 客户端 API。
"""


import argparse
import json
from typing import Iterable, List

import requests


def clear_line(n: int = 1) -> None:
    LINE_UP = '\033[1A'
    LINE_CLEAR = '\x1b[2K'
 for _ in range(n):
 print(LINE_UP, end=LINE_CLEAR, flush=True)


def post_http_request(prompt: str,
                      api_url: str,
                      n: int = 1,
                      stream: bool = False) -> requests.Response:
    headers = {"User-Agent": "Test Client"}
    pload = {
 "prompt": prompt,
 "n": n,
 "use_beam_search": True,
 "temperature": 0.0,
 "max_tokens": 16,
 "stream": stream,
 }
    response = requests.post(api_url,
                             headers=headers,
                             json=pload,
                             stream=stream)
 return response


def get_streaming_response(response: requests.Response) -> Iterable[List[str]]:
 for chunk in response.iter_lines(chunk_size=8192,
                                     decode_unicode=False,
                                     delimiter=b"\0"):
 if chunk:
            data = json.loads(chunk.decode("utf-8"))
            output = data["text"]
 yield output


def get_response(response: requests.Response) -> List[str]:
    data = json.loads(response.content)
    output = data["text"]
 return output


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--host", type=str, default="localhost")
    parser.add_argument("--port", type=int, default=8000)
    parser.add_argument("--n", type=int, default=4)
    parser.add_argument("--prompt", type=str, default="San Francisco is a")
    parser.add_argument("--stream", action="store_true")
    args = parser.parse_args()
    prompt = args.prompt
    api_url = f"http://{args.host}:{args.port}/generate"
    n = args.n
    stream = args.stream

 print(f"Prompt: {prompt!r}\n", flush=True)
    response = post_http_request(prompt, api_url, n, stream)

 if stream:
        num_printed_lines = 0
 for h in get_streaming_response(response):
            clear_line(num_printed_lines)
            num_printed_lines = 0
 for i, line in enumerate(h):
                num_printed_lines += 1
 print(f"Beam candidate {i}: {line!r}", flush=True)
 else:
        output = get_response(response)
 for i, line in enumerate(output):
 print(f"Beam candidate {i}: {line!r}", flush=True)
相关推荐
ACP广源盛1392462567310 小时前
WAIC2026 国产超节点算力浪潮下@ACP#IX9104 在算力矩阵中的定位与落地场景
大数据·数据库·人工智能·嵌入式硬件·线性代数·矩阵
tedcloud12310 小时前
book-to-skill 怎么部署?把技术书和文档转换成可复用的 AI Skill
运维·服务器·人工智能·开源·ai编程
鱼日先生10 小时前
Dify 高级实验(09):测试用例生成——如何让 AI 自动产出测试用例?
人工智能·测试用例·工作流·dify·ai agent·大模型应用·ai 训练
回归27210 小时前
LM Studio切换国内HF-Mirror镜像进行模型下载
人工智能
m4Rk_10 小时前
【论文阅读】Agent 记忆机制(38):AMA——用多智能体协作动态选择记忆粒度
论文阅读·人工智能·学习
青春不败 177-3266-052010 小时前
基于R、Python的Copula变量相关性分析及AI大模型应用
人工智能·python·r语言·贝叶斯·统计学·copula
wx_xkq128810 小时前
2026企业级AI Agent落地观察:从工具集到组织级智能体
大数据·人工智能·saas·ai营销
珠***格10 小时前
通信链路全打通:西格电力四可装置的 4G/5G + 加密认证技术详解
大数据·数据库·分布式·5g·架构·能源
盗理者10 小时前
AI Agent 技能分享|从零实现 MCP Server,让 Agent 安全读取数据库
数据库·oracle
AI_AGENT_DEV_AI11 小时前
AI 英语口语 APP的开发
人工智能