跳到内容

使用 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 版本和模型保持兼容。请查看更新日志以获取更新信息。