|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
構造化された出力と LLM の理解と最適な使用法を強化するのに役立ちます
In the previous article, we were introduced to structured outputs using OpenAI. Since the general availability release in ChatCompletions API (v1.40.0), structured outputs have been applied across dozens of use cases, and spawned numerous threads on OpenAI forums.
前回の記事では、OpenAI を使用した構造化された出力について紹介しました。 ChatCompletions API (v1.40.0) の一般提供リリース以来、構造化出力は数十のユースケースに適用され、OpenAI フォーラムに多数のスレッドを生成しました。
In this article, our aim is to provide you with an even deeper understanding, dispel some misconceptions, and give you some tips on how to apply them in the most optimal manner possible, across different scenarios.
この記事の目的は、さらに深く理解を深め、いくつかの誤解を払拭し、さまざまなシナリオに可能な限り最適な方法でそれらを適用する方法についてのヒントを提供することです。
## Structured outputs overview
## 構造化された出力の概要
Structured outputs are a way of enforcing the output of an LLM to follow a pre-defined schema — usually a JSON schema. This works by transforming the schema into a context free grammar (CFG), which during the token sampling step, is used together with the previously generated tokens, to inform which subsequent tokens are valid. It’s helpful to think of it as creating a regex for token generation.
構造化出力は、LLM の出力が事前定義されたスキーマ (通常は JSON スキーマ) に従うように強制する方法です。これは、スキーマをコンテキスト フリー グラマー (CFG) に変換することで機能します。CFG は、トークン サンプリング ステップ中に、以前に生成されたトークンとともに使用され、後続のどのトークンが有効であるかを通知します。トークン生成用の正規表現を作成するものと考えるとわかりやすいでしょう。
OpenAI API implementation actually tracks a limited subset of JSON schema features. With more general structured output solutions, such as Outlines, it is possible to use a somewhat larger subset of the JSON schema, and even define completely custom non-JSON schemas — as long as one has access to an open weight model. For the purpose of this article, we will assume the OpenAI API implementation.
OpenAI API 実装は実際には、JSON スキーマ機能の限られたサブセットを追跡します。アウトラインなど、より一般的な構造化出力ソリューションを使用すると、オープンウェイト モデルにアクセスできる限り、JSON スキーマのやや大きなサブセットを使用したり、完全にカスタムの非 JSON スキーマを定義したりすることもできます。この記事では、OpenAI API の実装を想定します。
### JSON Schema and Pydantic
### JSON スキーマと Pydantic
According to JSON Schema Core Specification, “JSON Schema asserts what a JSON document must look like, ways to extract information from it, and how to interact with it”. JSON schema defines six primitive types — null, boolean, object, array, number and string. It also defines certain keywords, annotations, and specific behaviours. For example, we can specify in our schema that we expect an array and add an annotation that minItems shall be 5 .
JSON スキーマのコア仕様によると、「JSON スキーマは、JSON ドキュメントがどうあるべきか、JSON ドキュメントから情報を抽出する方法、および JSON ドキュメントと対話する方法を規定します。」 JSON スキーマは、null、boolean、object、array、number、string の 6 つのプリミティブ型を定義します。また、特定のキーワード、注釈、および特定の動作も定義します。たとえば、配列を期待することをスキーマで指定し、 minItems が 5 であることを示す注釈を追加できます。
Pydantic is a Python library that implements the JSON schema specification. We use Pydantic to build robust and maintainable software in Python. Since Python is a dynamically typed language, data scientists do not necessarily think in terms of variable types — these are often implied in their code. For example, a fruit would be specified as:
Pydantic は、JSON スキーマ仕様を実装する Python ライブラリです。私たちは Pydantic を使用して、Python で堅牢で保守可能なソフトウェアを構築します。 Python は動的に型指定される言語であるため、データ サイエンティストは必ずしも変数の型を考慮する必要はありません。多くの場合、変数の型はコードに暗黙的に含まれています。たとえば、果物は次のように指定されます。
```python
「」パイソン
fruit = "apple"
果物=「リンゴ」
```
「」
…while a function declaration that returns “fruit” from some piece of data would often be specified as:
…一方、データの一部から「果物」を返す関数宣言は、次のように指定されることがよくあります。
```python
「」パイソン
def get_fruit(data):
def get_fruit(データ):
return data
データを返す
```
「」
Pydantic on the other hand allows us to generate a JSON-schema compliant class, with properly annotated variables and type hints, making our code more readable/maintainable and in general more robust, i.e.
一方、Pydantic を使用すると、適切に注釈が付けられた変数と型ヒントを備えた JSON スキーマ準拠のクラスを生成できるため、コードがより読みやすく、保守しやすくなり、一般的により堅牢になります。
```python
「」パイソン
class Fruit(BaseModel):
クラスフルーツ(BaseModel):
fruit: str
フルーツ: str
```
「」
OpenAI actually strongly recommends the use of Pydantic for specifying schemas, as opposed to specifying the “raw” JSON schema directly. There are several reasons for this. Firstly, Pydantic is guaranteed to adhere to the JSON schema specification, so it saves you extra pre-validation steps. Secondly, for larger schemas, it is less verbose, allowing you to write cleaner code, faster. Finally, the openai Python package actually does some housekeeping, like setting additionalProperties to False for you, whereas when defining your schema “by-hand” using JSON, you would need to set these manually, for every object in your schema (failing to do so results in a rather annoying API error).
実際、OpenAI は、「生の」JSON スキーマを直接指定するのではなく、スキーマを指定するために Pydantic を使用することを強く推奨しています。これにはいくつかの理由があります。まず、Pydantic は JSON スキーマ仕様に準拠していることが保証されているため、余分な事前検証手順が省かれます。次に、大規模なスキーマの場合、冗長性が低くなり、よりクリーンなコードをより速く作成できるようになります。最後に、openai Python パッケージは実際に、AdditionalProperties を False に設定するなどのハウスキーピングを実行します。一方、JSON を使用してスキーマを「手動で」定義する場合は、スキーマ内のすべてのオブジェクトに対してこれらを手動で設定する必要があります (実行に失敗します)。そのため、かなり厄介な API エラーが発生します)。
## Limitations
## 制限事項
As we alluded to previously, the ChatCompletions API provides a limited subset of the full JSON schema specification. There are numerous keywords that are not yet supported, such as minimum and maximum for numbers, and minItems and maxItems for arrays — annotations that would be otherwise very useful in reducing hallucinations, or constraining the output size.
前に言及したように、ChatCompletions API は完全な JSON スキーマ仕様の限定されたサブセットを提供します。数値の最小値と最大値、配列の minItems と maxItems など、まだサポートされていないキーワードが多数あります。これらの注釈は、幻覚を軽減したり、出力サイズを制限したりするのに非常に役立ちます。
Certain formatting features are also unavailable. For example, the following Pydantic schema would result in API error when passed to response_format in ChatCompletions:
特定の書式設定機能も使用できません。たとえば、次の Pydantic スキーマは、ChatCompletions の response_format に渡されると API エラーになります。
```python
「」パイソン
class Post(BaseModel):
クラスPost(BaseModel):
date_published: datetime
date_published: 日時
```
「」
It would fail because openai package has no format handling for datetime , so instead you would need to set date_published as a str and perform format validation (e.g. ISO 8601 compliance) post-hoc.
openai パッケージには datetime の形式処理がないため失敗します。そのため、代わりに date_published を str として設定し、事後的に形式検証 (ISO 8601 準拠など) を実行する必要があります。
Other key limitations include the following:
その他の主な制限には次のものがあります。
- Schemas must be able to be represented using Pydantic models.
- スキーマは Pydantic モデルを使用して表現できなければなりません。
- Schemas must be able to be serialized to JSON.
- スキーマは JSON にシリアル化できる必要があります。
- Schemas must be able to be validated using Pydantic models.
- スキーマは Pydantic モデルを使用して検証できる必要があります。
- Schemas must be able to be deserialized from JSON.
- スキーマは JSON から逆シリアル化できる必要があります。
## Tips and tricks
## ヒントとコツ
With all this in mind, we can now go through a couple of use cases with tips and tricks on how to enhance the performance when using structured outputs.
これらすべてを念頭に置いて、構造化された出力を使用するときにパフォーマンスを向上させる方法に関するヒントとテクニックを含むいくつかのユースケースを見てみましょう。
### Creating flexibility using optional parameters
### オプションのパラメーターを使用して柔軟性を作成する
Let’s say we are building a web scraping application where our goal is to collect specific components from the web pages. For each web page, we supply the raw HTML in the user prompt, give specific scraping instructions in the system prompt, and define the following Pydantic model:
Web ページから特定のコンポーネントを収集することが目標である Web スクレイピング アプリケーションを構築しているとします。 Web ページごとに、ユーザー プロンプトで生の HTML を提供し、システム プロンプトで特定のスクレイピング指示を与え、次の Pydantic モデルを定義します。
```python
「」パイソン
免責事項:info@kdj.com
提供される情報は取引に関するアドバイスではありません。 kdj.com は、この記事で提供される情報に基づいて行われた投資に対して一切の責任を負いません。暗号通貨は変動性が高いため、十分な調査を行った上で慎重に投資することを強くお勧めします。
このウェブサイトで使用されているコンテンツが著作権を侵害していると思われる場合は、直ちに当社 (info@kdj.com) までご連絡ください。速やかに削除させていただきます。
-
- ETFが1,000億ドルの歴史的マイルストーンを突破
- 2024-11-22 03:55:02
- 今週水曜日、米国で承認された12のビットコイン・スポットETFの運用資産総額は合計1005億5000万ドルに達した。
-
- TipRouter の提案に基づいて、Jito トークン所有者が給料日に予定されている
- 2024-11-22 03:55:02
- 地頭の経済レールの変革が進行中である。
-
- IntelMarkets コミュニティは Quantum ウォレットの発売を待っています。 Solana TVLが80億ドルを突破、XRPニュース
- 2024-11-22 03:55:02
- SOLは、トークンの新高値への期待が高まりニュースを伝えています。これは、Solana TVLが80億ドルに達したという最近のニュースに続くものです。投資家はアルトコインのさらなる高値を待っている。 SOL が見出しを飾る中、IntelMarkets も Quantum ウォレットの立ち上げで注目を集めています。 XRPニュースにより、リップルが1.96ドルの水準に近づき、新高値を更新したことが明らかになりました。
-
- Qubetics、Chainlink、Stellar: 2024 年 12 月に投資するのに最適な仮想通貨
- 2024-11-22 03:55:02
- 2024 年 12 月、仮想通貨業界に重大な動きが起こりました。ブラジル中央銀行は、チェーンリンクのクロスチェーン相互運用性プロトコル(CCIP)を使用してCBDCの取り組みを進めており、ブロックチェーンを活用した貿易金融に向けた大胆な一歩を示しています。ステラ(XLM)は長年続いたチャネルを抜け出した後、24%の急騰に乗り、持続的な上昇への期待に火をつけている。一方、Qubetics ($TICS) は暗号通貨投資のルールを書き換えており、9 回目のプレセールステージを破棄し、1 億 9,000 万以上のトークンを販売して 250 万ドル以上を調達しています。