序文
現在、ほとんどのLLMは数万Tokenの出力に対応しています。しかし、実際のビジネスの現場では、LLMがこちらの指定したフォーマット通りに出力してくれないという事態にしばしば遭遇する。
特に、下流の仕事を続けられるように、アウトプットを構造化する必要がある。
jsonフォーマットは本質的にプロプレーンテキストなので、LLMに出力を構造化させたい場合、通常はjsonとして出力され、その後、jsonが抽出され、辞書に変換され、下流のタスクに続けられる。
しかし、完全なjson出力を得られない原因はたくさんある。
次に、Jsonのいくつかのケースの出力の半分である。
2.1 トークン・オン・ラインのLLMサポートを超える出力
- 入力コンテキストが長すぎるため、LLMが完全な答えを出すには、出力に残された位置が少なすぎる。
- CoTテクニックを使うにはタスクが複雑すぎて、LLMの出力に中間的な思考プロセスが多く残り、結果的にLLMが最終結果を出力する余地があまりなかった。最終結果が得られないか、結果が出力の半分だけで止まってしまう
2.2 センシティブ・ワード傍受LLMの出力
LLMが悪用され、不適切なコンテンツが出力されるのを防ぐため。地域によってセンシティブなコンテンツは異なるため、結果を外部に出力する際には、場所によってセンシティブな単語がフィルタリングされたりブロックされたりするのが普通だ。数年前、メタが犯罪傾向のあるAIを開発したように、全世界で許されるものではない。
つまり、これもまた、センシティブな内容を無秩序に出力し、中途半端な結果を出力したときに、あなたのllmが切り捨てられたときに起こることなのだ。
2.3 指示に厳密に従わなかった場合
この方がずっと一般的だ。どんなに優秀なLLMでもスヌーズする時間はあるし、出力があなたの望む形式になる保証はない。
出力されたjsonの中で、私たちはしばしば、ある状況に遭遇する:
- 重要な句読点が欠けている:
{"question": お元気ですか!}。
二重引用符なしでこの出力をそのまま解析することは不可能だ。 - 句読点が正しい位置にない:
{ "question": "お元気ですか!" {"answer": "元気です" }.
真ん中の句読点が半角ではなく全角になっており、これもjson出力に失敗する原因となっている。 - 他にも多くのシナリオがあるので、すべてを挙げることはしないが、この種の問題を解決する方法を紹介しよう。
III.オープンソース・ソリューション
上記の3つの問題を解決するには、通常3つの方法がある:
- jsonの完了:主にjsonの答えの出力ケースの半分、つまり、jsonの半分が完全なjson形式にすべてではないので、jsonの解析の条件を持っています。
- jsonの修正:主に、句読点がない、または句読点が正しくない状況でのjsonの回答が対象。
- jsonのコンテンツの一部を破棄:主にいくつかのjsonは、アカウントに特別な状況を取ることができない、通常のコンテンツを保持し、不規則なコンテンツを破棄します。
3.1 ストリーミングjson-pyソリューション
これはオープンソースのソリューションで、以下を提供する。
- streaming-json-go`
- ストリーミングjson-py
- ストリーミングjson-js
さまざまな環境のニーズに応えるため、3つのプログラミング言語が用意されている。
その結果を実際に見てみよう。
pip install streamingjson
lexer = streamingjson.Lexer() #でJSONセグメントを追加する lexer.append_string('{"a":') 1JSONを完成させる print(lexer.complete_json()) #は`{"a":null}`と表示します。 #はさらにJSONセグメントを追加する lexer.append_string('[tr') #がJSONを再度補完する print(lexer.complete_json()) #は`{"a":[true]}`と表示します。
このオープンソースのソリューションは、jsonを補完することに重点を置いている。
代替案だ:無効なJSON文字列を修正し、LLMによって生成されたJSONデータで起こりうるフォーマットエラーを解決しました。
改善のためのプログラム
私たちは、主にjsonの句読点の欠如とjsonの間違いを検出することによって、jsonの形式を修正し、その後、達成するためにjsonを完成させるために支援し、最終的にコンテンツのjson部分の抽出を介して、構造化された結果を得るために、独自の改良されたスキーム。
例を2つ挙げる。
output = '''必要な答えは ``jsonn{"question": "2024年のオリンピックはどこで開催されますか?"'' です。n, n "answer": "パリ n'''' です。
ここには3つの誤りがある:
属
中国語で、正しく解析できないフランスの首都パリ
引用の間違い、引用の欠落がある。- 三重引用符と
}
結局、上記のエラーは完璧に修正され、正しい出力が得られた。
{'question': 「2024年のオリンピックはどこで開催されますか?, 'answer': 'パリ'}.