使用llama-cpp-python的结构化输出,完整指南 w/ instructor¶
本指南演示了如何使用 llama-cpp-python 与 Instructor 生成结构化输出。您将学习如何使用 JSON 模式模式和推测解码从本地 LLM 创建类型安全的响应。
开源的大型语言模型(LLMS)越来越受欢迎,llama-cpp-python 已经使 llama-cpp 模型能够通过结合 constrained sampling 和 speculative decoding 使用 JSON 模式获取结构化输出。
他们还支持一个OpenAI兼容的客户端,可用于获取结构化输出,作为一种进程内机制,以避免任何网络依赖。
修补¶
讲师的补丁增强了创建调用,具有以下功能:
response_model在create调用中返回一个 pydantic 模型max_retries在create调用中,如果调用失败,则使用退避策略重试该调用
了解更多
要了解更多信息,请参阅文档。要了解使用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