跳过内容

使用Cortex的结构化输出

Cortex.cpp 是一个运行时,帮助您开箱即用地运行开源 LLMs。它支持多种模型,并为它们的 Jan 平台提供动力。本指南提供了如何使用 Cortex 与 instructor 进行结构化输出的快速入门。

快速开始

Instructor 自带对 OpenAI 客户端的支持,因此您无需安装任何额外的内容。

pip install "instructor"

一旦完成此操作,请确保拉取您想要使用的模型。在这个例子中,我们将使用一个量化的llama3.2模型。

cortex run llama3.2:3b-gguf-q4-km

让我们从初始化下面的客户端开始 - 注意我们需要在这里提供一个基础URL和一个API密钥。API密钥并不重要,它只是为了让OpenAI客户端不会抛出错误。

import os
from openai import OpenAI

client = from_openai(
    openai.OpenAI(
        base_url="http://localhost:39281/v1",
        api_key="this is a fake api key that doesn't matter",
    )
)

简单用户示例(同步)

from instructor import from_openai
from pydantic import BaseModel
import openai

client = from_openai(
    openai.OpenAI(
        base_url="http://localhost:39281/v1",
        api_key="this is a fake api key that doesn't matter",
    )
)


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


resp = client.chat.completions.create(
    model="llama3.2:3b-gguf-q4-km",
    messages=[{"role": "user", "content": "Ivan is 27 and lives in Singapore"}],
    response_model=User,
)

print(resp)
# > name='Ivan', age=27

简单用户示例(异步)

import os
from openai import AsyncOpenAI
import instructor
from pydantic import BaseModel
import asyncio

# Initialize with API key
client = from_openai(
    openai.AsyncOpenAI(
        base_url="http://localhost:39281/v1",
        api_key="this is a fake api key that doesn't matter",
    )
)

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

async def extract_user():
    user = await client.chat.completions.create(
        model="llama3.2:3b-gguf-q4-km",
        messages=[
            {"role": "user", "content": "Extract: Jason is 25 years old"},
        ],
        response_model=User,
    )
    return user

# Run async function
user = asyncio.run(extract_user())
print(user)
#> User(name='Jason', age=25)

嵌套示例

from instructor import from_openai
from pydantic import BaseModel
import openai

client = from_openai(
    openai.OpenAI(
        base_url="http://localhost:39281/v1",
        api_key="this is a fake api key that doesn't matter",
    )
)


class Address(BaseModel):
    street: str
    city: str
    country: str


class User(BaseModel):
    name: str
    age: int
    addresses: list[Address]


user = client.chat.completions.create(
    model="llama3.2:3b-gguf-q4-km",
    messages=[
        {
            "role": "user",
            "content": """
            Extract: Jason is 25 years old.
            He lives at 123 Main St, New York, USA
            and has a summer house at 456 Beach Rd, Miami, USA
        """,
        },
    ],
    response_model=User,
)

print(user)

#> {
#>     'name': 'Jason',
#>     'age': 25,
#>     'addresses': [
#>         {
#>             'street': '123 Main St',
#>             'city': 'New York',
#>             'country': 'USA'
#>         },
#>         {
#>             'street': '456 Beach Rd',
#>             'city': 'Miami',
#>             'country': 'USA'
#>         }
#>     ]
#> }

在本教程中,我们已经看到了如何使用Cortex运行本地模型,同时通过我们简单的接口简化了许多关于管理重试和函数调用的逻辑。

我们将发布更多关于Cortex以及如何与本地模型合作的内容,请继续关注。

更新和兼容性

Instructor 保持与最新的 OpenAI API 版本和模型的兼容性。查看 更新日志 以获取更新信息。