使用 instructor 和 llama-cpp-python 生成结构化输出,完整指南¶
本指南演示如何使用 llama-cpp-python 和 Instructor 生成结构化输出。您将学习如何使用 JSON schema 模式和推测解码从本地 LLM 创建类型安全的响应。
开源 LLM 越来越受欢迎,而 llama-cpp-python 通过结合约束采样和推测解码,使得 llama-cpp
模型可以通过 JSON schema 获取结构化输出。
他们还支持一个与 OpenAI 兼容的客户端,可以用作进程内机制来获取结构化输出,避免任何网络依赖。
补丁¶
Instructor 的补丁通过以下特性增强了 create 调用
create
调用中的response_model
,返回一个 pydantic 模型create
调用中的max_retries
,使用退避策略在调用失败时重试
了解更多
要了解更多信息,请参阅文档。要理解在 Instructor 中使用 Pydantic 的好处,请访问为何使用 Pydantic页面的技巧和窍门部分。如果您想查看在 Instructor 中使用 Pydantic 的示例,请访问示例页面。
llama-cpp-python¶
最近 llama-cpp-python 添加了通过 JSON schema 模式支持结构化输出的功能。这是一种省时的方法,可以替代大量的提示工程,用于获取结构化输出。
在此示例中,我们将介绍 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