跳过内容

使用llama-cpp-python的结构化输出,完整指南 w/ instructor

本指南演示了如何使用 llama-cpp-python 与 Instructor 生成结构化输出。您将学习如何使用 JSON 模式模式和推测解码从本地 LLM 创建类型安全的响应。

开源的大型语言模型(LLMS)越来越受欢迎,llama-cpp-python 已经使 llama-cpp 模型能够通过结合 constrained samplingspeculative decoding 使用 JSON 模式获取结构化输出。

他们还支持一个OpenAI兼容的客户端,可用于获取结构化输出,作为一种进程内机制,以避免任何网络依赖。

修补

讲师的补丁增强了创建调用,具有以下功能:

  • response_modelcreate 调用中返回一个 pydantic 模型
  • max_retriescreate 调用中,如果调用失败,则使用退避策略重试该调用

了解更多

要了解更多信息,请参阅文档。要了解使用Pydantic与Instructor的好处,请访问为什么使用Pydantic页面的技巧和窍门部分。如果你想查看使用Pydantic与Instructor的示例,请访问示例页面。

llama-cpp-python

最近,llama-cpp-python 添加了对通过 JSON 模式进行结构化输出的支持。这是对广泛提示工程的一种节省时间的替代方案,可用于获取结构化输出。

在这个例子中,我们将介绍JSON_SCHEMA模式的一个更高级的用例,以流式传输部分模型。要了解更多关于部分流式传输的信息,请查看部分流式传输。

import llama_cpp
import instructor
from llama_cpp.llama_speculative import LlamaPromptLookupDecoding
from pydantic import BaseModel


llama = llama_cpp.Llama(
    model_path="../../models/OpenHermes-2.5-Mistral-7B-GGUF/openhermes-2.5-mistral-7b.Q4_K_M.gguf",
    n_gpu_layers=-1,
    chat_format="chatml",
    n_ctx=2048,
    draft_model=LlamaPromptLookupDecoding(num_pred_tokens=2),
    logits_all=True,
    verbose=False,
)


create = instructor.patch(
    create=llama.create_chat_completion_openai_v1,
    mode=instructor.Mode.JSON_SCHEMA,
)


class UserDetail(BaseModel):
    name: str
    age: int


user = create(
    messages=[
        {
            "role": "user",
            "content": "Extract `Jason is 30 years old`",
        }
    ],
    response_model=UserDetail,
)

print(user)
#> name='Jason' age=30