偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一文讀懂LLM基于JSON Schema的結(jié)構(gòu)化輸出

人工智能
OpenAI推出基于JSON Schema的結(jié)構(gòu)化輸出以解決這一問題。結(jié)構(gòu)化輸出確保模型響應(yīng)遵循嚴(yán)格的格式,減少錯誤,并使將大語言模型集成到需要一致的、機(jī)器可讀數(shù)據(jù)的應(yīng)用程序中變得更加容易,對于一致性和準(zhǔn)確性至關(guān)重要的任務(wù)其輸出更為可靠。

什么是基于JSON Schema的結(jié)構(gòu)化輸出

大語言模型通常會生成無特定結(jié)構(gòu)的自由格式文本,在能夠有效使用之前需要進(jìn)行大量的后期處理。這種不可預(yù)測性會導(dǎo)致錯誤、浪費(fèi)時間并增加成本。

OpenAI推出基于JSON Schema的結(jié)構(gòu)化輸出以解決這一問題。結(jié)構(gòu)化輸出確保模型響應(yīng)遵循嚴(yán)格的格式,減少錯誤,并使將大語言模型集成到需要一致的、機(jī)器可讀數(shù)據(jù)的應(yīng)用程序中變得更加容易,對于一致性和準(zhǔn)確性至關(guān)重要的任務(wù)其輸出更為可靠。

通常情況下,大語言模型基于概率預(yù)測逐個生成文本標(biāo)記。不過,如果需要以特定格式生成文本,這種方法就不太適用了。結(jié)構(gòu)化輸出通過預(yù)定義的規(guī)則或模式來引導(dǎo)這一過程,使每個標(biāo)記都符合所需的結(jié)構(gòu)。

如何使用基于JSON Schema的結(jié)構(gòu)化輸出

并非所有的模型都支持基于JSON Schema的結(jié)構(gòu)化輸出。經(jīng)測試,文心一言支持結(jié)構(gòu)化輸出。通義千問、豆包、deepseek還不支持。

下面以輸出方程求解過程的結(jié)構(gòu)化輸出為例,闡述OpenAI Python SDK使用結(jié)構(gòu)化輸出的兩種方法。

先準(zhǔn)備好開發(fā)環(huán)境,以windows開發(fā)環(huán)境為例:

設(shè)置Python開發(fā)環(huán)境

安裝uv。uv是一個用Rust編寫的極其快速的Python包和項(xiàng)目管理器。

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

創(chuàng)建python虛擬環(huán)境(假設(shè)項(xiàng)目目錄為structured-output)

# Create a new directory for our project
uv init structured-output
cd structured-output

# Create virtual environment and activate it
uv venv
.venv\Scripts\activate

# Install dependencies
uv add openai python-dotenv

設(shè)置環(huán)境變量

創(chuàng)建.env,.env內(nèi)容如下(注意修改OPENAI_API_KEY為您的key)

OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=https://qianfan.baidubce.com/v2
MODEL_NAME=ernie-3.5-128k

把.env添加到.gitignore

結(jié)構(gòu)化輸出方法1:手工定義Schema

通過設(shè)置chat completion的response_format打開結(jié)構(gòu)化輸出。response_format的格式為:

{
    type: "json_schema", 
    json_schema: {
        "strict": true, 
        "schema": ...
    } 
}

完整例子如下:

import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()  # load environment variables from .env


client = OpenAI()
chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "system",
            "content": "你是一位數(shù)學(xué)老師。一步步引導(dǎo)用戶完成解題過程"
        },
        {
            "role": "user",
            "content": "我該如何解7x + 6 = 41這個方程"
        }
    ],
    model=os.getenv("MODEL_NAME"),
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "math_response",
            "schema": {
                "type": "object",
                "properties": {
                    "steps": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "explanation": {"type": "string"},
                                "output": {"type": "string"}
                            },
                            "required": ["explanation", "output"],
                            "additionalProperties": False
                        }
                    },
                    "final_answer": {"type": "string"}
                },
                "required": ["steps", "final_answer"],
                "additionalProperties": False
            },
            "strict": True
        }
    },
)
content = chat_completion.choices[0].message.content
print(content)

輸出結(jié)果如下:

{
    "final_answer":"x = 5",
    "steps":[
        {
            "explanation":"首先,我們需要將方程中的常數(shù)項(xiàng)移至等式的另一邊,使方程左側(cè)只剩下未知數(shù)x的系數(shù)和x本身。",
            "output":"7x = 41 - 6"
        },
        {
            "explanation":"進(jìn)行減法運(yùn)算,簡化方程。",
            "output":"7x = 35"
        },
        {
            "explanation":"接下來,我們需要將x的系數(shù)化為1,以求解x的值。為此,我們將方程兩邊同時除以7。",
            "output":"x = 35 ÷ 7"
        },
        {
            "explanation":"進(jìn)行除法運(yùn)算,得出x的值。",
            "output":"x = 5"
        }
    ]
}

結(jié)構(gòu)化輸出方法2:使用自定義的pydantic模型

通過設(shè)置chat completion的response_format為自定義的pydantic模型MathReasoning

完整例子如下:

import os
from openai import OpenAI
from dotenv import load_dotenv
from pydantic import BaseModel


class Step(BaseModel):
    explanation: str
    output: str


class MathReasoning(BaseModel):
    steps: list[Step]
    final_answer: str


load_dotenv()  # load environment variables from .env


client = OpenAI()
chat_completion = client.beta.chat.completions.parse(
    messages=[
        {
            "role": "system",
            "content": "你是一位樂于助人的數(shù)學(xué)老師。一步步引導(dǎo)用戶完成解題過程"
        },
        {
            "role": "user",
            "content": "我該如何解7x + 6 = 41這個方程"
        }
    ],
    model=os.getenv("MODEL_NAME"),
    response_format=MathReasoning,
)
math_reasoning = chat_completion.choices[0].message.parsed
print(math_reasoning.model_dump_json(indent=4))

輸出結(jié)果為:

{
    "steps":[
        {
            "explanation":"首先,我們需要將方程中的常數(shù)項(xiàng)移至等式的另一邊。從7x + 6 = 41開始,我們可以從兩邊同時減去6。",
            "output":"7x + 6 - 6 = 41 - 6"
        },
        {
            "explanation":"簡化上一步的等式,得到7x = 35。",
            "output":"7x = 35"
        },
        {
            "explanation":"接下來,我們需要解出x的值。為此,我們可以將方程兩邊同時除以7。",
            "output":"7x / 7 = 35 / 7"
        },
        {
            "explanation":"簡化上一步的等式,得到x = 5。",
            "output":"x = 5"
        }
    ],
    "final_answer":"x = 5"
}

JSON Schema結(jié)構(gòu)化輸出 VS JSON模式

JSON Schema結(jié)構(gòu)化輸出是JSON模式的進(jìn)階版本。JSON模式是通過設(shè)置response_format為{ "type": "json_object" }打開。使用JSON模式時,你必須始終通過對話中的某些消息(例如系統(tǒng)消息)指示模型生成JSON。JSON 模式不能保證輸出符合任何特定的模式。

總結(jié)

JSON Schema結(jié)構(gòu)化輸出提供了一個強(qiáng)大的解決方案,可確保您的大語言模型生成可靠、可預(yù)測且機(jī)器可讀的回復(fù)。結(jié)構(gòu)化輸出有助于您在不同應(yīng)用程序中保持一致的數(shù)據(jù)格式,從而更輕松地管理復(fù)雜的工作流程。

責(zé)任編輯:龐桂玉 來源: AI大模型應(yīng)用開發(fā)
相關(guān)推薦

2024-06-04 12:59:41

2024-01-15 05:55:33

2018-01-31 18:10:15

數(shù)據(jù)庫HBase

2024-05-27 00:45:00

2024-05-28 11:32:01

2025-03-12 06:55:00

2021-03-30 18:05:10

數(shù)字化轉(zhuǎn)型計(jì)算機(jī)技術(shù)

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領(lǐng)云

2022-02-15 08:07:17

測試軟件開發(fā)

2017-06-02 15:32:09

大數(shù)據(jù)數(shù)據(jù)可視化

2024-06-24 14:32:33

2024-04-24 10:44:53

語言模型自然語言處理人工智能

2021-09-04 19:04:14

配置LogbackJava

2024-02-29 14:27:37

人工智能機(jī)器學(xué)習(xí)物聯(lián)網(wǎng)

2020-06-05 14:15:29

可視化數(shù)據(jù)集分析

2025-01-03 17:07:23

2023-11-27 17:35:48

ComponentWeb外層

2022-10-20 08:01:23

2023-05-20 17:58:31

低代碼軟件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號