自然言語ではなく構造情報を作成するには、 LLM(大規模な言語モデル)が必要な場合があります。最も簡単な方法は、JSONを使用することです。
しかし、応答の最後のトークンを受信する前に、JSONは壊れているため、 JSON.parse
使用してデコードできません。ただし、データをユーザーにストリーミングしたいと考えています。
partial-json
は、部分的なJSON文字列を解析するための軽量でカスタマイズ可能なライブラリです。これがデモです。
(Pythonの実装もあることに注意してください)
npm i partial-json # or pnpm / bun / yarn
partial-json
は純粋にJavaScriptに実装されており、 commonjs
とesm
ビルドの両方を持っています。
このようなライブラリからparse
機能とAllow
オブジェクトをインポートできます。
import { parse , Allow } from "partial-json" ;
Allow
オブジェクトは、オプションの列挙です。どのタイプが部分的であるかを決定します。 allow
に含まれていないタイプは、完了後にのみ表示されます。
parse
関数は、完全なJSON文字列を解析するときに組み込みのJSON.parse
と同じように機能します。
let result = parse ( '{"key":"value"}' ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
追加のパラメーターをparse
関数に渡すことにより、部分的なJSON文字列を解析できます。このパラメーターは、 Allow
オブジェクトからの定数のビットワイズです。
( partial-json
から必要な定数を直接インポートできることに注意してください)
import { parse , STR , OBJ } from "partial-json" ;
result = parse ( '{"key": "v' , STR | OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'v' }
この例では、 Allow.STR
文字列が不完全である場合は問題であり、 Allow.OBJ
パーサーにオブジェクトとして指示することをパーサーに伝えます。パーサーは、できるだけ多くのデータを返しようとします。
部分的な文字列を許可しない場合、 "v
近づいていないため、オブジェクトに"key"
を追加しません。
result = parse ( '{"key": "v' , OBJ ) ;
console . log ( result ) ; // Outputs: {}
result = parse ( '{"key": "value"' , OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
類似性では、許可する場合は、部分的な配列や部分的な特別な値を解析できます。
(Allowがデフォルトがallow
ことに注意してくださいAllow.ALL
)
result = parse ( '[ {"key1": "value1", "key2": [ "value2' ) ;
console . log ( result ) ; // Outputs: [ { key1: 'value1', key2: [ 'value2' ] } ]
result = parse ( "-Inf" ) ;
console . log ( result ) ; // Outputs: -Infinity
JSON文字列が奇形である場合、 parse
機能はエラーをスローします。
parse ( "wrong" ) ; // MalformedJSON [Error]: SyntaxError: Unexpected token 'w', "wrong" is not valid JSON at position 0
jsonString
<string>
:解析するjson文字列。allowPartial
<number>
:JSONの解析中に許可される部分性の種類を指定します(デフォルト: Allow.ALL
)。解析されたJavaScript値を返します。
JSONの解析中に許可される部分性の種類を指定するオブジェクト。次のプロパティがあります。
STR
:部分文字列を許可します。NUM
:部分数を許可します。ARR
:部分配列を許可します。OBJ
:部分オブジェクトを許可します。NULL
:部分ヌルを許可します。BOOL
:部分ブールを許可します。NAN
:部分的なナンを許可します。INFINITY
:部分無限を許可します。_INFINITY
:部分的なインフィニティを許可します。INF
:部分無限とインフィニティの両方を許可します。SPECIAL
:すべての特別な値を許可します。ATOM
:すべての原子値を許可します。COLLECTION
:すべての収集値を許可します。ALL
:すべての値を許可します。 このライブラリのテストを実行するには、リポジトリをクローンして依存関係をインストールする必要があります。
git clone https://github.com/promplate/partial-json-parser-js.git
cd partial-json-parser-js
npm i
次に、vitestを使用してテストを実行できます。
npm run test
できるだけ多くのエッジケースをカバーするよう努めているが、場合によってはカバーされない可能性があることに注意してください。
このプロジェクトは、MITライセンスの下でライセンスされています。