【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)
相关推荐
智购无人售货机厂家1 分钟前
2026自动售货机软硬件版本管理策略:从版本号规范到兼容性矩阵的工程实践~YH
运维·服务器·人工智能·单片机·嵌入式硬件·线性代数·矩阵
一只鹿鹿鹿7 分钟前
SCM流程图参考(PPT文件)
大数据·数据库·web安全·系统安全·流程图
知识分享小能手9 分钟前
深度学习学习教程,从入门到精通,概率与信息论 — 知识点详解(3)
人工智能·深度学习·学习·数据挖掘·概率论
俊哥V13 分钟前
每日 AI 研究简报 · 2026-09-01
人工智能·ai
Wendy不吃榴莲14 分钟前
# AI短剧教程 - 《后西游记》开播后,AI影视为什么更考验“连续讲故事”?
人工智能·笔记·学习·ai·视频
木圭的AI时代指南17 分钟前
AI江湖录①·斩杀线
人工智能·ai
Agudamu116119 分钟前
B站学习视频怎么变笔记:用 Ai好记 + Obsidian 搭建个人知识库的完整教程
人工智能·笔记·学习·音视频
麦豆GEO23 分钟前
GEO优化流量密码:吃透4大用户提问模型,精准拿捏AI自然流量
大数据·人工智能
dh27119877932 分钟前
南京企业AI搜索“可见度之战”:GEO服务商竞合格局与选型逻辑
大数据·人工智能
Dawson Zhu33 分钟前
多Agent系统共享记忆架构:从存储范式到分布式共识的技术剖析
人工智能·语言模型·架构·aigc·agi