llama-cpp-python

GitHub
10.1k 1.4k 中等 1 次阅读 今天MIT语言模型开发框架
AI 解读 由 AI 自动生成,仅供参考

llama-cpp-python 是著名高性能推理引擎 llama.cpp 的官方 Python 接口,旨在让开发者能轻松在 Python 环境中调用本地大语言模型。它解决了直接在 Python 中高效运行大型模型的技术门槛问题,无需依赖昂贵的云端 GPU 服务,即可在普通电脑甚至树莓派上流畅运行量化后的模型。

这款工具非常适合 AI 开发者、研究人员以及希望构建本地化智能应用的工程师使用。它不仅提供了底层的 C API 访问能力,还封装了易用的高级 Python 接口,支持类似 OpenAI 的调用格式,并能无缝对接 LangChain 和 LlamaIndex 等主流开发框架。此外,它还内置了一个兼容 OpenAI 标准的 Web 服务器,支持代码补全、函数调用及多模态视觉处理等进阶功能。

其独特亮点在于灵活的硬件加速配置,用户可通过简单的环境变量或安装参数,轻松开启对 CPU、GPU(如 CUDA、Metal)等多种后端的支持,实现推理速度的最大化。无论是想快速原型验证,还是部署私有化知识库助手,llama-cpp-python 都能提供稳定且高效的底层支撑,是让大模型“落地”到本地的得力帮手。

使用场景

某初创团队希望在本地笔记本上部署一个支持代码补全和函数调用的私有 AI 助手,以保护敏感业务数据且避免高昂的云端 API 费用。

没有 llama-cpp-python 时

  • 硬件门槛高:必须依赖昂贵的云端 GPU 实例或高性能服务器才能运行大模型,本地普通 CPU 几乎无法启动推理。
  • 集成复杂度高:若想对接现有的 LangChain 应用或模仿 OpenAI 接口,需要自行编写复杂的底层 C++ 绑定代码或寻找不稳定的第三方桥接方案。
  • 隐私与成本焦虑:每次测试新功能都需将代码上传至公有云,既担心核心算法泄露,又因按 Token 计费导致开发测试成本不可控。
  • 功能扩展困难:想要添加多模态(视觉)识别或自定义函数调用逻辑,往往需要修改模型源码或等待官方云端功能更新,响应极慢。

使用 llama-cpp-python 后

  • 轻量本地运行:直接利用笔记本 CPU 甚至集成显卡即可流畅运行量化后的 Llama 模型,无需任何云端依赖,实现真正的离线开发。
  • 无缝生态对接:通过其内置的 OpenAI 兼容服务端和 LangChain 适配器,仅需几行配置即可让旧项目平滑切换至本地模型,保留原有调用逻辑。
  • 数据完全自主:所有推理过程均在本地内存完成,敏感代码和业务数据不出内网,同时彻底消除了云端 API 的调用费用。
  • 灵活功能定制:原生支持函数调用、多模型热切换及视觉输入,开发者可像搭积木一样快速构建具备代码补全能力的本地 Copilot 替代品。

llama-cpp-python 让开发者能以最低的成本和最简单的代码,将强大的大模型能力安全、高效地嵌入到任何本地 Python 应用中。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU
  • 非必需(支持纯 CPU 运行)
  • 若需加速,支持 NVIDIA GPU (CUDA 12.1-12.5)、AMD GPU (ROCm/hipBLAS)、Intel GPU (SYCL/Vulkan) 或 Apple Silicon (Metal/MPS)
  • 预编译 Wheel 要求 CUDA 版本为 12.1, 12.2, 12.3, 12.4 或 12.5
  • 显存大小取决于模型参数量,文中未指定具体数值
内存

未说明

依赖
notes1. 安装时会自动从源码构建 llama.cpp,若失败可添加 --verbose 查看日志。2. 支持通过 CMAKE_ARGS 环境变量或 pip config-settings 配置后端加速(如 CUDA, Metal, OpenBLAS 等)。3. macOS M1/M2 用户务必安装 arm64 架构的 Python,否则性能会下降 10 倍;若遇架构错误需强制指定 CMAKE_OSX_ARCHITECTURES=arm64 重新安装。4. 提供预编译 Wheel 以简化 CPU、CUDA 和 Metal 环境的安装。5. 升级或重装时需添加 --upgrade --force-reinstall --no-cache-dir 参数以确保重新构建。
python3.8+
C 编译器 (Linux: gcc/clang, Windows: Visual Studio/MinGW, macOS: Xcode)
huggingface-hub (可选,用于从 HF 下载模型)
llama-cpp-python hero image

快速开始

Python 绑定:针对 llama.cpp 的封装

文档状态 测试 PyPI PyPI - Python 版本 PyPI - 许可证 PyPI - 下载量 GitHub 全部版本

@ggerganovllama.cpp 库提供了一套简单的 Python 绑定。 该包提供了以下功能:

相关文档可在 https://llama-cpp-python.readthedocs.io/en/latest 中找到。

安装

所需条件:

  • Python 3.8 及以上版本
  • C 编译器
    • Linux:gcc 或 clang
    • Windows:Visual Studio 或 MinGW
    • macOS:Xcode

要安装该包,请运行:

pip install llama-cpp-python

此操作还将从源代码构建 llama.cpp,并将其与本 Python 包一同安装。

若安装失败,请在 pip install 命令中添加 --verbose 参数,以查看完整的 CMake 构建日志。

预编译 Wheel(新版本)

您也可以安装一个预编译的 Wheel,以支持基本的 CPU 加速。

pip install llama-cpp-python \
  --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu

安装配置

llama.cpp 支持多种硬件加速后端,以提升推理速度,并且还提供了针对不同后端的特定选项。如需了解完整列表,请参阅 llama.cpp 的 README

所有 llama.cpp 的 CMake 构建选项均可通过环境变量 CMAKE_ARGS 设置,或在安装时通过命令行参数 --config-settings / -C 进行设置。

环境变量
# Linux 和 Mac
CMAKE_ARGS="-DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS" \
  pip install llama-cpp-python
# Windows
$env:CMAKE_ARGS = "-DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS"
pip install llama-cpp-python
命令行/requirements.txt

您也可以通过 pip install -C / --config-settings 命令进行设置,并将配置保存到 requirements.txt 文件中:

pip install --upgrade pip # 确保 pip 已更新
pip install llama-cpp-python \
  -C cmake.args="-DGGML_BLAS=ON;-DGGML_BLAS_VENDOR=OpenBLAS"
# requirements.txt

llama-cpp-python -C cmake.args="-DGGML_BLAS=ON;-DGGML_BLAS_VENDOR=OpenBLAS"

支持的后端

以下是几种常见的后端及其构建命令和所需的额外环境变量。

OpenBLAS(CPU)

要使用 OpenBLAS 安装,请在安装前设置 GGML_BLASGGML_BLAS_VENDOR 环境变量:

CMAKE_ARGS="-DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS" pip install llama-cpp-python
CUDA

要安装支持 CUDA 的版本,请在安装前设置 GGML_CUDA=on 环境变量:

CMAKE_ARGS="-DGGML_CUDA=on" pip install llama-cpp-python

预编译 Wheel(新版本)

您还可以安装一个带有 CUDA 支持的预编译 Wheel。只要您的系统满足以下条件:

  • CUDA 版本为 12.1、12.2、12.3、12.4 或 12.5
  • Python 版本为 3.10、3.11 或 3.12
pip install llama-cpp-python \
  --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/<cuda-version>

其中 <cuda-version> 可以是以下任一版本:

  • cu121:CUDA 12.1
  • cu122:CUDA 12.2
  • cu123:CUDA 12.3
  • cu124:CUDA 12.4
  • cu125:CUDA 12.5

例如,要安装 CUDA 12.1 的 Wheel:

pip install llama-cpp-python \
  --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu121
Metal

要使用 Metal(MPS)安装,请在安装前设置 GGML_METAL=on 环境变量:

CMAKE_ARGS="-DGGML_METAL=on" pip install llama-cpp-python

预编译 Wheel(新版本)

您还可以安装一个带有 Metal 支持的预编译 Wheel。只要您的系统满足以下条件:

  • macOS 版本为 11.0 或更高
  • Python 版本为 3.10、3.11 或 3.12
pip install llama-cpp-python \
  --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/metal
hipBLAS(ROCm)

要安装支持 hipBLAS / ROCm 的 AMD 显卡版本,请在安装前设置 GGML_HIPBLAS=on 环境变量:

CMAKE_ARGS="-DGGML_HIPBLAS=on" pip install llama-cpp-python
Vulkan

要安装支持 Vulkan 的版本,请在安装前设置 GGML_VULKAN=on 环境变量:

CMAKE_ARGS="-DGGML_VULKAN=on" pip install llama-cpp-python
SYCL

要安装支持 SYCL 的版本,请在安装前设置 GGML_SYCL=on 环境变量:

source /opt/intel/oneapi/setvars.sh   
CMAKE_ARGS="-DGGML_SYCL=on -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx" pip install llama-cpp-python
RPC

要安装支持 RPC 的版本,请在安装前设置 GGML_RPC=on 环境变量:

source /opt/intel/oneapi/setvars.sh   
CMAKE_ARGS="-DGGML_RPC=on" pip install llama-cpp-python

Windows 使用说明

错误提示:无法找到 ‘nmake’ 或 ‘CMAKE_C_COMPILER’

如果您在运行过程中遇到“无法找到 ‘nmake’”、“无法找到 ‘?’”或 CMAKE_C_COMPILER”的报错信息,您可以按照 Llama.cpp 仓库中的说明 的步骤,将 w64devkit 解压并手动将其添加到 CMAKE_ARGS 中,然后再运行 pip 安装:

$env:CMAKE_GENERATOR = "MinGW Makefiles"
$env:CMAKE_ARGS = "-DGGML_OPENBLAS=on -DCMAKE_C_COMPILER=C:/w64devkit/bin/gcc.exe -DCMAKE_CXX_COMPILER=C:/w64devkit/bin/g++.exe"

请参考上述说明,并将 CMAKE_ARGS 设置为您想要使用的 BLAS 后端。

macOS 使用说明

有关详细的 macOS Metal GPU 安装文档,请访问 docs/install/macos.md

M1 Mac 性能问题

注意:如果您使用的是 Apple Silicon(M1)Mac,请确保已安装支持 arm64 架构的 Python 版本。例如:

wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
bash Miniforge3-MacOSX-arm64.sh

否则,在安装时,系统会默认构建 x86 版本的 llama.cpp,而该版本在 Apple Silicon(M1)Mac 上的运行速度会慢 10 倍。

M Series Mac 错误:`(mach-o 文件,但架构不兼容(需为 ‘x86_64’,需为 ‘arm64’))`

尝试通过以下命令进行安装:

CMAKE_ARGS="-DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_APPLE_SILICON_PROCESSOR=arm64 -DGGML_METAL=on" pip install --upgrade --verbose --force-reinstall --no-cache-dir llama-cpp-python

升级与重新安装

要升级并重新构建 llama-cpp-python,您可以在 pip install 命令中添加 --upgrade --force-reinstall --no-cache-dir 标志,以确保包从源代码重新构建。

高级 API

API 参考

高级 API 提供了一个简单、易用的管理接口,可通过 Llama 类实现。

以下是一个简短示例,演示如何使用高级 API 进行基础文本补全:

from llama_cpp import Llama

llm = Llama(
      model_path="./models/7B/llama-model.gguf",
      # n_gpu_layers=-1, # 如需启用 GPU 加速,请取消注释
      # seed=1337, # 如需设置特定种子,请取消注释
      # n_ctx=2048, # 如需扩大上下文窗口大小,请取消注释
)
output = llm(
      "Q: 请说出太阳系中的行星名称?A: ", # 提示语
      max_tokens=32, # 生成最多 32 个 token,若设为 None,则可生成至上下文窗口的末尾
      stop=["Q:", "\n"], # 在模型生成新问题之前停止生成
      echo=True # 将提示语回传至输出中
) # 生成补全结果,也可调用 create_completion
print(output)

默认情况下,llama-cpp-python 会以 OpenAI 兼容的格式生成补全结果:

{
  "id": "cmpl-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "object": "text_completion",
  "created": 1679561337,
  "model": "./models/7B/llama-model.gguf",
  "choices": [
    {
      "text": "Q: 请说出太阳系中的行星名称?A: 水星、金星、地球、火星、木星、土星、天王星、海王星和冥王星。",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 14,
    "completion_tokens": 28,
    "total_tokens": 42
  }
}

文本补全功能可通过 Llama 类的 __call__ 方法以及 create_completion 方法实现。

从 Hugging Face Hub 下载模型

您可以通过 from_pretrained 方法,直接从 Hugging Face 下载 Llamagguf 格式模型。

要使用此功能,您需要先安装 huggingface-hub 包(pip install huggingface-hub)。

llm = Llama.from_pretrained(
    repo_id="lmstudio-community/Qwen3.5-0.8B-GGUF",
    filename="*Q8_0.gguf",
    verbose=False
)

默认情况下,from_pretrained 方法会将模型下载至 Hugging Face 缓存目录中;您随后可以使用 hf 工具来管理已安装的模型文件。

聊天补全

高级 API 也提供了一套简单的聊天补全接口。

聊天补全要求模型能够将消息格式化为单个提示语。Llama 类会通过预先注册的聊天格式(如 chatmlllama-2gemma 等)来完成这一任务,或者通过提供自定义的聊天处理对象来实现。

模型会按照以下优先级顺序对消息进行格式化,以生成单个提示语:

  • 如果提供了 chat_handler,则使用该方法
  • 如果提供了 chat_format,则使用该方法
  • 如果 gguf 模型元数据中包含 tokenizer.chat_template,则使用该方法(适用于大多数新模型;旧型号可能未配备此功能)
  • 若以上方法均未生效,则退而采用 llama-2 的聊天格式

若要查看所选的聊天格式,请将 verbose 参数设置为 True

from llama_cpp import Llama
llm = Llama(
      model_path="path/to/llama-2/llama-model.gguf",
      chat_format="llama-2"
)
llm.create_chat_completion(
      messages = [
          {"role": "system", "content": "您是一位能够完美描述图像的助手。"},
          {
              "role": "user",
              "content": "请详细描述这张图片。"
          }
      ]
)

聊天补全功能可通过 Llama 类的 create_chat_completion 方法实现。

为了兼容 OpenAI API v1,您可以使用 create_chat_completion_openai_v1 方法,该方法会返回 Pydantic 模型,而非字典形式的结果。

JSON 与 JSON Schema 模式

要将聊天回复严格限制为仅包含有效的 JSON 或特定的 JSON Schema,请在 create_chat_completion 中使用 response_format 参数。

JSON 模式

以下示例会将回复严格限定为仅包含有效的 JSON 字符串。

from llama_cpp import Llama
llm = Llama(model_path="path/to/model.gguf", chat_format="chatml")
llm.create_chat_completion(
    messages=[
        {
            "role": "system",
            "content": "您是一位乐于助人的助手,能够以 JSON 格式输出结果。"
        },
        {"role": "user", "content": "2020 年世界大赛的冠军是谁?"}
    ],
    response_format={
        "type": "json_object"
    },
    temperature=0.7
)

JSON Schema 模式

若要进一步将回复严格限制为特定的 JSON Schema,只需在 response_format 参数的 schema 属性中添加该 Schema 即可。

from llama_cpp import Llama
llm = Llama(model_path="path/to/model.gguf", chat_format="chatml")
llm.create_chat_completion(
    messages=[
        {
            "role": "system",
            "content": "您是一位乐于助人的助手,能够以 JSON 格式输出结果。"
        },
        {"role": "user", "content": "2020 年世界大赛的冠军是谁?"}
    ],
    response_format={
        "type": "json_object",
        "schema": {
            "type": "object",
            "properties": {"team_name": {"type": "string"}}
        }
    },
    temperature=0.7
)

函数调用

高级 API 支持与 OpenAI 兼容的函数和工具调用。可通过 functionary 预训练模型的聊天格式,或通过通用的 chatml-function-calling 聊天格式实现这一功能。

from llama_cpp import Llama
llm = Llama(model_path="path/to/chatml/llama-model.gguf", chat_format="chatml-function-calling")
llm.create_chat_completion(
      messages = [
        {
          "role": "system",
          "content": "一场好奇的用户与人工智能助手之间的对话。助手会为用户提供有帮助、详尽且礼貌的回答。必要时,助手会调用相关函数并提供恰当的输入。"
        },
        {
          "role": "user",
          "content": "请提取 Jason 的年龄"
        }
      ],
      tools=[{
        "type": "function",
        "function": {
          "name": "UserDetail",
          "parameters": {
            "type": "object",
            "title": "UserDetail",
            "properties": {
              "name": {
                "title": "姓名",
                "type": "string"
              },
              "age": {
                "title": "年龄",
                "type": "integer"
              }
            },
            "required": [ "name", "age" ]
          }
        }
      }],
      tool_choice={
        "type": "function",
        "function": {
          "name": "UserDetail"
        }
      }
)
Functionary v2

该系列模型的多种 gguf 转换文件可在此处找到 链接。Functionary 能够智能地调用函数,并能分析任何提供的函数输出,从而生成连贯的回复。所有 Functionary v2 版本的模型均支持 并行函数调用。在初始化 Llama 类时,您可以选择使用 functionary-v1functionary-v2 作为 chat_format

由于 llama.cpp 与 Hugging Face 的分词器之间存在差异,因此在使用 Functionary 时,必须提供 Hugging Face 分词器。可以通过初始化 LlamaHFTokenizer 类,并将其传递给 Llama 类来实现。这将覆盖 Llama 类中默认使用的 llama.cpp 分词器。分词器文件已内置于托管 gguf 文件的相应 Hugging Face 仓库中。

from llama_cpp import Llama
from llama_cpp.llama_tokenizer import LlamaHFTokenizer
llm = Llama.from_pretrained(
  repo_id="meetkai/functionary-small-v2.2-GGUF",
  filename="functionary-small-v2.2.q4_0.gguf",
  chat_format="functionary-v2",
  tokenizer=LlamaHFTokenizer.from_pretrained("meetkai/functionary-small-v2.2-GGUF")
)

注意:无需提供 Functionary 默认的系统消息,因为这些消息已在 Functionary 聊天处理程序中自动添加。因此,消息应仅包含聊天消息和/或系统消息,以为模型提供额外的上下文信息(例如:日期时间等)。

多模态模型

llama-cpp-python 支持多种模型,例如 llava1.5,该模型能够同时从文本和图像中读取信息,用于语言模型的处理。

以下是支持的多模态模型及其对应的聊天处理程序(Python API)和聊天格式(Server API):

模型 LlamaChatHandler chat_format
llava-v1.5-7b Llava15ChatHandler llava-1-5
llava-v1.5-13b Llava15ChatHandler llava-1-5
llava-v1.6-34b Llava16ChatHandler llava-1-6
moondream2 MoondreamChatHandler moondream2
nanollava NanollavaChatHandler nanollava
llama-3-vision-alpha Llama3VisionAlphaChatHandler llama-3-vision-alpha
minicpm-v-2.6 MiniCPMv26ChatHandler minicpm-v-2.6
qwen2.5-vl Qwen25VLChatHandler qwen2.5-vl

接下来,您需要使用自定义的聊天处理程序来加载剪辑模型,并对聊天消息和图像进行处理。

from llama_cpp import Llama
from llama_cpp.llama_chat_format import Llava15ChatHandler
chat_handler = Llava15ChatHandler(clip_model_path="path/to/llava/mmproj.bin")
llm = Llama(
  model_path="./path/to/llava/llama-model.gguf",
  chat_handler=chat_handler,
  n_ctx=2048, # n_ctx 应该增加以适应图像嵌入
)
llm.create_chat_completion(
    messages = [
        {"role": "system", "content": "您是一位能完美描述图像的助手。"},
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "这张图片里有什么?"},
                {"type": "image_url", "image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg" } }
            ]
        }
    ]
)

您也可以通过 from_pretrained 方法,从 Hugging Face Hub 中拉取模型。

from llama_cpp import Llama
from llama_cpp.llama_chat_format import MoondreamChatHandler

chat_handler = MoondreamChatHandler.from_pretrained(
  repo_id="vikhyatk/moondream2",
  filename="*mmproj*"
)

llm = Llama.from_pretrained(
  repo_id="vikhyatk/moondream2",
  filename="*text-model*",
  chat_handler=chat_handler,
  n_ctx=2048, # n_ctx 应该增加以适应图像嵌入
)

response = llm.create_chat_completion(
    messages = [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "这张图片里有什么?"},
                {"type": "image_url", "image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg" } }

            ]
        }
    ]
)
print(response["choices"][0]["text"])

注意:多模态模型还支持工具调用和 JSON 格式。

加载本地图像

图像可以作为 Base64 编码的数据 URI 传递。以下示例展示了如何实现这一点。

import base64

def image_to_base64_data_uri(file_path):
    with open(file_path, "rb") as img_file:
        base64_data = base64.b64encode(img_file.read()).decode('utf-8')
        return f"data:image/png;base64,{base64_data}"

# 将 'file_path.png' 替换为您的 PNG 文件的实际路径
file_path = 'file_path.png'
data_uri = image_to_base64_data_uri(file_path)

messages = [
    {"role": "system", "content": "您是一位能完美描述图像的助手。"}, 
    {
        "role": "user",
        "content": [
            {"type": "image_url", "image_url": {"url": data_uri }},
            {"type": "text", "text": "请详细描述这张图片。"}
        ]
    }
]

思考性解码

llama-cpp-python 支持思考性解码功能,使模型能够基于草稿模型生成完整的结果。

使用思考性解码的最快方式是通过 LlamaPromptLookupDecoding 类。

在初始化 Llama 类时,只需将此类作为草稿模型传入即可。

from llama_cpp import Llama
from llama_cpp.llama_speculative import LlamaPromptLookupDecoding

llama = Llama(
    model_path="path/to/model.gguf",
    draft_model=LlamaPromptLookupDecoding(num_pred_tokens=10) # num_pred_tokens 是要预测的 token 数量;10 是默认值,通常对 GPU 来说效果不错,而 2 则更适合仅使用 CPU 的机器。
)

嵌入式表示

要生成文本嵌入,可使用 create_embeddingembed。请注意,在创建模型时,必须将 embedding=True 传递给构造函数,才能使这些方法正常工作。

import llama_cpp

llm = llama_cpp.Llama(model_path="path/to/model.gguf", embedding=True)

embeddings = llm.create_embedding("你好,世界!")

# 或者一次性创建多个嵌入式表示

embeddings = llm.create_embedding(["你好,世界!", "再见,世界!"])

Transformer 风格的模型中,嵌入式表示主要有两种概念:token 级别序列级别。序列级别嵌入式表示是通过将 token 级别嵌入式进行“池化”得到的,通常采用平均值或使用第一个 token 作为基础。

专门针对嵌入式表示设计的模型,默认情况下会返回序列级别嵌入式,每条输入字符串对应一个序列级别嵌入式。而像那些专为文本生成设计的非嵌入式模型,则通常只返回 token 级别嵌入式,每条序列中的每个 token 都对应一个嵌入式表示。因此,返回类型的空间维度在 token 级别嵌入式的情况下会高出一个维度。

在某些情况下,您可以通过在模型创建时使用 pooling_type 标志来控制池化行为。您可以使用 LLAMA_POOLING_TYPE_NONE 来确保任何模型都能返回 token 级别嵌入式。不过,目前无法让面向生成任务的模型生成序列级别嵌入式,但您始终可以手动执行池化操作。

调整上下文窗口

Llama 模型的上下文窗口决定了一次可以处理的最大 token 数量。默认情况下,该窗口大小设置为 512 个 token,但您可根据实际需求进行调整。

例如,如果您希望处理更大的上下文,可以在初始化 Llama 对象时,通过设置 n_ctx 参数来扩展上下文窗口:

llm = Llama(model_path="./models/7B/llama-model.gguf", n_ctx=2048)

与 OpenAI 兼容的 Web 服务器

llama-cpp-python 提供了一个 Web 服务器,旨在作为 OpenAI API 的即插即用替代品。 通过使用该服务器,您可以将兼容 llama.cpp 的模型与任何兼容 OpenAI 的客户端(如语言库、服务等)配合使用。

要安装服务器软件包并开始使用:

pip install 'llama-cpp-python[server]'
python3 -m llama_cpp.server --model models/7B/llama-model.gguf

与上述“硬件加速”部分类似,您也可以通过支持 GPU(cuBLAS)的版本进行安装,如下所示:

CMAKE_ARGS="-DGGML_CUDA=on" FORCE_CMAKE=1 pip install 'llama-cpp-python[server]'
python3 -m llama_cpp.server --model models/7B/llama-model.gguf --n_gpu_layers 35

访问 http://localhost:8000/docs 即可查看 OpenAPI 文档。

若要绑定到 0.0.0.0 以启用远程连接,请使用 python3 -m llama_cpp.server --host 0.0.0.0。 同样地,若要更改端口(默认为 8000),请使用 --port 参数。

您可能还希望设置提示格式。对于 chatml 格式,可以使用:

python3 -m llama_cpp.server --model models/7B/llama-model.gguf --chat_format chatml

此命令会根据模型的预期格式化提示。您可以在模型详情页中找到具体的提示格式。 有关可用选项,请参阅 llama_cpp/llama_chat_format.py,并查找以 @register_chat_format 开头的行。

如果您已安装 huggingface-hub,还可以使用 --hf_model_repo_id 标志从 Hugging Face Hub 加载模型。

python3 -m llama_cpp.server --hf_model_repo_id lmstudio-community/Qwen3.5-0.8B-GGUF --model '*Q8_0.gguf'

Web 服务器功能

Docker 镜像

Docker 镜像已在 GHCR 上提供。要运行服务器:

docker run --rm -it -p 8000:8000 -v /path/to/models:/models -e MODEL=/models/llama-model.gguf ghcr.io/abetlen/llama-cpp-python:latest

目前,只有通过 Termux 运行此服务的方法是已知的(需 root 权限)。有关更多信息,请参阅 Termux 支持问题

低级 API

API 参考

低级 API 是对 llama.cpp 提供的 C API 的直接 ctypes 绑定。整个低级 API 可在 llama_cpp/llama_cpp.py 中找到,并且直接映射了 C API 的结构于 llama.h 中。

以下是一个简短示例,演示如何使用低级 API 对提示进行分词:

import llama_cpp
import ctypes
llama_cpp.llama_backend_init(False) # 必须在每个程序启动时调用一次
params = llama_cpp.llama_context_default_params()
# 使用字节类型表示 char * params
model = llama_cpp.llama_load_model_from_file(b"./models/7b/llama-model.gguf", params)
ctx = llama_cpp.llama_new_context_with_model(model, params)
max_tokens = params.n_ctx
# 使用 ctypes 数组来存储数组参数
tokens = (llama_cpp.llama_token * int(max_tokens))()
n_tokens = llama_cpp.llama_tokenize(ctx, b"Q: 请说出太阳系中的行星名称?A: ", tokens, max_tokens, llama_cpp.c_bool(True))
llama_cpp.llama_free(ctx)

请查看 [examples/low_level_api] 文件夹,了解更多关于低级 API 的使用示例。

文档

文档可通过 https://llama-cpp-python.readthedocs.io/ 获取。 如果您发现文档有任何问题,请随时提交问题或创建 PR。

开发

本软件包正处于积极开发阶段,我们欢迎任何贡献。

要开始使用,请克隆仓库并以可编辑/开发模式安装软件包:

git clone --recurse-submodules https://github.com/abetlen/llama-cpp-python.git
cd llama-cpp-python

# 升级 pip(适用于可编辑模式)
pip install --upgrade pip

# 通过 pip 安装
pip install -e .

# 安装开发工具(测试、文档、ruff)
pip install -e '.[dev]'

# 如果您想使用 fastapi / openapi 服务器
pip install -e '.[server]'

# 若需安装所有可选依赖项
pip install -e '.[all]'

# 清理本地构建缓存
make clean

现在尝试运行测试:

pytest

在提交 PR 前,请检查格式化和代码检查:

python -m ruff check llama_cpp tests
python -m ruff format --check llama_cpp tests

# 或者使用 Makefile 目标
make lint
make format

Makefile 中包含了一些实用的目标。典型的流程如下:

make build
make test

您还可以通过在 vendor/llama.cpp 子模块中检出所需的提交,然后再次运行 make cleanpip install -e .,来测试 llama.cpp 的特定提交。如果 llama.h API 发生变更,您需要对 llama_cpp/llama_cpp.py 文件进行相应修改,以匹配新的 API(其他地方也可能需要进行额外的调整)。

常见问题

是否有预编译的二进制文件或二进制轮子可供使用?

推荐的安装方式是按照上述说明从源码编译安装。原因在于,llama.cpp 是基于特定于您系统的编译器优化而构建的。若使用预编译的二进制文件,您需要禁用这些优化,或者为每个平台支持大量预编译的二进制文件。

不过,您仍然可以通过发布版以及社区提供的轮子获取一些预编译的二进制文件。

未来,我希望能为常见平台提供预编译的二进制文件和轮子,并乐于接受任何在这方面的有用贡献。目前,这一工作正在 #741 中进行跟踪。

llama.cpp 的其他 Python 绑定相比,它有何不同?

我最初编写这个软件包是为了满足自己的需求,主要有两个目标:

  • 提供一种简单便捷的方式,用于安装 llama.cpp 并从 Python 调用 llama.h 中的完整 C API。
  • 提供一个高级别的 Python API,可作为 OpenAI API 的即插即用替代品,从而轻松将现有应用迁移到使用 llama.cpp 的环境中。

任何对该软件包的贡献和修改,都将围绕以上目标展开。

许可证

本项目采用 MIT 许可证授权。

版本历史

v0.3.20-metal2026/04/03
v0.3.20-cu1242026/04/03
v0.3.20-cu1232026/04/03
v0.3.20-cu1222026/04/03
v0.3.20-cu1212026/04/03
v0.3.19-metal2026/03/25
v0.3.19-cu1242026/03/25
v0.3.19-cu1232026/03/25
v0.3.19-cu1222026/03/25
v0.3.19-cu1212026/03/25
v0.3.192026/03/26
v0.3.18-cu1242026/03/25
v0.3.18-cu1232026/03/25
v0.3.18-cu1222026/03/25
v0.3.18-cu1212026/03/25
v0.3.18-metal2026/03/24
v0.3.182026/03/24
v0.3.17-metal2026/03/23
v0.3.16-metal2025/08/15
v0.3.16-cu1242025/08/15

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架