アプリケーションにおいて、AIの活用はますます広がっています。AIは複雑なJSONを生成したり、文書からデータを抽出したり、構造化された応答を提供したりすることができます。しかし、問題もあります。AIはミスを犯したり、フィールドを省略したり、さらには架空の情報を生成したりする可能性があるのです。
そこで不可欠となるのがJSONスキーマです。これは、AIの応答が期待される構造を厳密に遵守しているかを確認するための枠組みとして機能し、4Dアプリケーションにおいてデータの信頼性と実用性を確保します。
AI利用においてJSONスキーマが重要な理由
JSONスキーマを使用すると、以下のことが可能になります:
- AIが生成した応答を自動的に検証する
- エラー、不整合、または欠落したフィールドを検出する
- これらのエラーをAIにフィードバックし、自動修正を行う
- モデルが進化したり、誤りを犯したりした場合でも、利用可能なデータを保証する
実際には、スキーマはセーフティネットとして機能し、4Dアプリケーション向けに予測可能で管理されたフォーマットを維持しつつ、AIの力を引き続き活用できます。
4D AI KitでのJSONスキーマの使用
4D AI Kit には、AI に特定のスキーマに従って構造化された JSON レスポンスを返すよう要求できる、非常に便利な機能が含まれています。
これにより、以下を正確に定義できます:
- 期待されるフィールド、
- それらの型、
- さらには特定の制約(許可される値、数値の範囲など)まで定義できます。
このアプローチについては、4Dのブログ記事2本で詳しく解説されています。1つは「構造化出力」に焦点を当てたもので、AIに対して事前定義されたレスポンス形式に従うよう明示的に指示する方法を扱っています。もう1つは、最新の標準規格をサポートし、AIが生成したJSONに対してより厳格かつ表現力豊かな検証を可能にする「JSON Schema Draft 2020-12」パーサーを紹介するものです。
例:テキスト分析とエンティティ抽出
テキスト分析APIを使用して文中のエンティティを認識していると仮定しましょう。AIの応答は次のようなものになる可能性があります:
{
"model": "gpt-text-analyzer-v2",
"input": "Steve Jobs founded Apple in Cupertino.",
"entities": [
{ "type": "PERSON", "text": "Steve Jobs", "confidence": 0.98 },
{ "type": "ORG", "text": "Apple", "confidence": 0.95 },
{ "type": "LOCATION", "text": "Cupertino", "confidence": 0.93 }
]
}
検証用JSONスキーマ
AIがこの構造を遵守するようにするため、Draft 2020-12に準拠したJSONスキーマを定義できます:
{
"$schema": "https://json-schema.org/draft/2020-12/schema#",
"title": "AI Text Analysis Response",
"type": "object",
"properties": {
"model": { "type": "string" },
"input": { "type": "string" },
"entities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": { "type": "string", "enum": ["PERSON", "ORG", "LOCATION"] },
"text": { "type": "string" },
"confidence": { "type": "number", "minimum": 0, "maximum": 1 }
},
"required": ["type", "text", "confidence"]
}
}
},
"required": ["model", "input", "entities"]
}
このスキーマは、AIが返すデータの構造を保証します。JSONスキーマは回答の意味的な妥当性を検証するものではありませんが、4Dアプリケーションが信頼性が高く実用的なデータで動作できるようにする厳格な枠組みを強制します。
システムプロンプト:AIの挙動を定義する
システムプロンプトは不可欠です。これはAIの役割を定義し、出力形式に対して厳格な規律を課します。
あなたはAIテキスト分析エンジンです。 あなたのタスクは、提供されたテキストを分析し、固有表現を抽出することです。 以下のエンティティを特定する必要があります: - 人物 (PERSON) - 組織 (ORG) - 場所 (LOCATION) 結果は、指定されたJSONスキーマに厳密に従ったJSONオブジェクトとして返してください。 余分なフィールドを追加しないでください。 JSONの外部に説明やテキストを追加しないでください。 エンティティが見つからない場合は、「entities」として空の配列を返してください。
このプロンプトは:
- タスクを明確に定義し、
- 制約を明示的に再確認し、
- モデルからの創造的な逸脱を厳しく制限しています。
4D AI Kit による実装
それでは、4D AI Kitを使用して、4D側でこのメカニズムを実装する方法を見ていきましょう。
チャットとスキーマの設定
この例では、JSONスキーマとシステムプロンプトがアプリケーションリソースに保存され、呼び出し時に明示的にモデルに渡されます。
// Retrieve the system prompt
var $systemPrompt:=File("/RESOURCES/prompt.txt").getText()
// Retrieve the JSON Schema to validate the AI response
var $schema:=JSON Parse(File("/RESOURCES/schema.json").getText())
// Define chat parameters
var $params:=cs.AIKit.OpenAIChatCompletionsParameters.new()
$params.model:="gpt-text-analyzer-v2"
$params.response_format:={\
type: "json_schema"; \
json_schema: {name: "analyse_schema"; schema: $schema}}
// Create AI chat helper
var $ai:=cs.AIKit.OpenAI.new($openAIKey)
var $chatHelper:=$ai.chat.create($systemPrompt; $params)
この設定により、AI は生成すべきフォーマットを正確に把握できるため、エラーが大幅に減少します。
AIの呼び出し
スキーマと応答形式の設定が完了したら、あとは AI を呼び出し、分析するテキストを指定するだけです。
// Send the user prompt to the AI
var $userPrompt:="Steve Jobs founded Apple in Cupertino."
var $result:=$chatHelper.prompt($userPrompt)
// Convert AI response to object
var $response:=JSON Parse($result.choice.message.text)
AI レスポンスの検証とエラー処理
スキーマが提供されている場合でも、4D 側でレスポンスを検証してから使用することが不可欠です。AI は、切り捨て、生成エラー、または曖昧なコンテキストにより、無効なレスポンスを生成する可能性があります。
// Validate the JSON against the schema
var $validation:=JSON Validate($response; $schema)
// Handle validation errors
If (Not($validation.success))
// If the JSON is invalid, build an error prompt to send back to the AI
var $errorPrompt:=\
"The JSON you returned does not match the expected schema. "+\
"Here are the validation errors:\n"+\
JSON Stringify($validation.errors)+\
"\nPlease return a corrected JSON that strictly follows the schema."
// Resend the prompt (or send error prompt) to let AI correct its output
$result:=$chatHelper.prompt($userPrompt)
Else
// If the JSON is valid, continue with your processing
// e.g., save to database, display in form, or trigger further actions
End if
この仕組みにより、AI → 4D → AI のループを実現できます:
- AIがJSONレスポンスを生成します。
- 4Dはスキーマに基づいてJSONを検証します。
- エラーが検出された場合、4Dは不足している情報や誤った情報をAIに返送します。
- AIは応答を修正し、有効なJSONを返します。
この自動フィードバックループにより、AIが誤りを犯した場合でも、データの信頼性が確保されます。
具体的なメリット
- 信頼性が高く一貫性のある、AI生成のJSON
- 検証ループによる自動エラー修正
- APIからAIまでのパイプライン全体にわたるセキュリティと管理
- フォーム、処理、分析に常に活用できるデータ
結論
JSON Schemaを4D AI Kitに統合することで、AIの活用方法が一変します。「予測不能なAI」ワークフローから、予測可能で制御された、堅牢かつ自動化されたプロセスへと移行します。
4D側での構造化出力、JSONスキーマ、および検証を組み合わせることで、AIの力を最大限に活用しつつ、信頼性が高く、安全で、本番環境向けのデータを確保できます。
このアプローチは、単なるテキスト分析をはるかに超えています。AIが生成したデータを4Dアプリケーションに安全に統合する必要があるあらゆるシナリオに、この同じパターンを適用できます。
JSONスキーマはAIを「知的」にするわけではありませんが、予測可能にするのです。
現在、この投稿へのコメント機能は利用できません。