Pipeline steps#
AIパイプラインの各ステップは、その操作タイプとオプションの構成オブジェクトによって定義されます。オペレーション名を文字列としてaidb.create_pipeline()
のstep_N
パラメーターに渡し、構成をJSONBとして対応するstep_N_options
パラメーターに渡します。
SELECT aidb.create_pipeline(
name => my_pipeline,
source => my_source_table,
source_key_column => id,
source_data_column => content,
step_1 => ChunkText,
step_1_options => aidb.chunk_text_config(desired_length => 120, max_length => 150),
step_2 => KnowledgeBase,
step_2_options => aidb.knowledge_base_config(model => bert, data_format => Text)
);
以下で説明するヘルパーファンクションを使用して、各操作タイプのstep_N_options
値を構築します。すべてのヘルパーファンクションは、JSONB
構成オブジェクトを結果ます。
中間ストレージ#
すべてのステップは、自分の出力を次のステップまたは最後のステップの場合、パイプラインの最終宛先に渡すことに加えて、自分自身の出力を専用のテーブルに永続化できます。これは、マルチステップパイプラインのデバッグ、またはパイプラインの外部で中間結果チャンクテキストなどを再利用する場合に役立ちます。デフォルトではオフになっています。
そのステップのstep_N_options のintermediate_destination
キーで設定します。ステップ構成ヘルパーaidb.chunk_text_config()
、aidb.pdf_parse_config()
などにはまだパラメーターがないため、ヘルパー自分の出力とともにプレーンJSONとして追加し、||
演算子とマージします。
step_1_options => aidb.chunk_text_config(desired_length => 100) || jsonb_build_object(
intermediate_destination, jsonb_build_object(enabled, true)
)
または、jsonb_build_object()
を使用してオプションオブジェクト全体を直接ビルドします。
step_1_options => jsonb_build_object(
desired_length, 100,
intermediate_destination, jsonb_build_object(enabled, true)
)
Key |
Type |
Default |
Description |
|---|---|---|---|
enabled |
BOOLEAN |
Required |
このステップの中間ストレージをオンにします。 |
destination |
TEXT |
NULL |
ステップの出力を保存するテーブル。省略すると`pipeline_<name>_step_<N>`として自動生成されます。 |
最も単純なフォームは、それをオンにして、AIDBにテーブルに名前を付けます。
{"enabled": true}
または、宛先テーブルに明示的に名前を付けます。
{"enabled": true, "destination": "my_custom_chunk_storage"}
宛先テーブルは、他のパイプライン宛先テーブルsource_id
、part_ids 、およびステップの出力を保持するvalue
列と同じ形状です。
パイプラインの last ステップでintermediate_destination
を設定しても、テーブルを作成してそれに書き込みますが、
promoteb.retrieve_text() のintermediate_steps
列がそれを表面化することはありません。そのルックアップは、最後の「次のステップ」がないため、最後のステップの前のステップのみを考慮します。自分の出力が中間になる前に。読み取る必要がある場合は、代わりに宛先テーブルを直接照会します。これはKnowledgeBase
にとって最も重要であり、これは常にパイプラインの最後のステップである必要があります。したがって、中間ストレージを有効にする理由はほとんどありません。
!!!note intermediate_destination は、enabled
キーおよびオプションでdestination
を持つオブジェクトである必要があります。他のJSONタイプは、パイプラインの作成時にエラーを発生します。
ERROR: Invalid options for step 1: intermediate_destination must be an object with keys enabled and optionally destination; got a string
ChunkText#
LLMコンテキストウィンドウ内に収まるように、テキストを小さなセグメントに分割します。
ヘルパーファンクション aidb.chunk_text_config()
Parameter |
Type |
Default |
Description |
|---|---|---|---|
desired_length |
INTEGER |
Required |
ターゲットチャンクサイズ。単位は`strategy`に依存します。 |
max_length |
INTEGER |
NULL |
最大チャンクサイズ。省略した場合、`desired_length`は厳密な上限です。 |
overlap_length |
INTEGER |
NULL |
連続するチャンク間でオーバーラップするコンテンツの量。デフォルト0オーバーラップなし。 |
strategy |
TEXT |
NULL |
文字ベースの場合は`'chars'デフォルト、ワードベースのチャンクの場合は'words'`。 |
基本的なチャンクの例
SELECT aidb.create_pipeline(
name => chunk_pipeline,
source => source_table,
source_key_column => id,
source_data_column => content,
step_1 => ChunkText,
step_1_options => aidb.chunk_text_config(
desired_length => 100,
max_length => 150,
overlap_length => 20,
strategy => words
)
);
結果#
ChunkText は、 part_id
列を導入することにより、データの形状を変換します。各ソース行は、チャンクごとに1つずつ、複数の出力行を生成する場合があります。
ParseHtml#
HTML文字列から可読テキストを抽出し、論理構造を保持しながらタグを削除します。
ヘルパーファンクション aidb.html_parse_config()
Parameter |
Type |
Default |
Description |
|---|---|---|---|
method |
TEXT |
NULL |
プレーンテキスト抽出の場合は`'StructuredPlaintext'デフォルト、または階層を保持する場合は'StructuredMarkdown'`。 |
SELECT aidb.create_pipeline(
name => html_pipeline,
source => web_data_table,
source_key_column => id,
source_data_column => html_content,
step_1 => ParseHtml,
step_1_options => aidb.html_parse_config(method => StructuredMarkdown),
step_2 => ChunkText,
step_2_options => aidb.chunk_text_config(desired_length => 120)
);
結果#
ParseHtml
は結果のネストを解除しません。各ソース行は、元の行の対応関係が保持された状態で、抽出されたテキストを含む出力行を1つだけ生成します。
ChunkText
とペアにして、上記の例のように、抽出されたテキストをより小さなセグメントに分割します。
ParsePdf#
非準拠または複雑なファイルを処理するオプションを使用して、バイナリPDFデータからテキストを抽出します。
ヘルパーファンクション aidb.pdf_parse_config()
Parameter |
Type |
Default |
Description |
|---|---|---|---|
method |
TEXT |
NULL |
'Structured' デフォルト — PDF仕様を使用してテキストブロックを識別します。 |
allow_partial_parsing |
BOOLEAN |
NULL |
`true`デフォルトの場合、個々のページでエラーが発生した場合に解析を続行します。 |
結果のpart_id
列は、各テキストブロックが抽出されたページインデックスにマップします。
SELECT aidb.create_pipeline(
name => pdf_pipeline,
source => pdf_files_table,
source_key_column => id,
source_data_column => pdf_data,
step_1 => ParsePdf,
step_1_options => aidb.pdf_parse_config(
method => Structured,
allow_partial_parsing => true
),
step_2 => KnowledgeBase,
step_2_options => aidb.knowledge_base_config(model => bert, data_format => Text)
);
結果#
ParsePdf
は結果のネストを解除します。マルチページPDFはページごとに1行を生成し、それぞれにページインデックスに対応するpart_id
があります。
PdfToImage#
PDFドキュメントの各ページを画像に変換します。
ソースPDFがスキャンされた文書、画像の多いレイアウト、またはテキストレイヤーが存在しないまたは信頼できないPDFである場合、この手順を使用します。
レンダリングされたページ画像は、テキスト抽出のためにPerformOcr
ステップに直接渡すことができます。
ネイティブテキストレイヤーを含むデジタル生成PDFの場合、代わりにParsePdf
を使用します。より速く、OCRモデルは必要ありません。
オプション形式 オプションをJSONリテラルとして渡します。
Parameter |
Type |
Default |
Description |
|---|---|---|---|
dpi |
INTEGER |
300 |
各ページのレンダリングに使用される1インチあたりのドット数の解像度。値が高いほど、より鮮明な画像が生成されますが、ファイルサイズが大きくなります。 |
first_page |
INTEGER |
NULL |
レンダリングする最初のページ1ベース。省略すると最初からレンダリングされます。 |
last_page |
INTEGER |
NULL |
レンダリングする最後のページ。1ベースを含みます。省略すると最後までレンダリングされます。 |
max_pages |
INTEGER |
NULL |
レンダリングするページの最大数。 `first_page`および`last_page`に関係なく、安全キャップとして機能します。 |
render_annotations |
BOOLEAN |
true |
レンダリングされた出力にPDFの注釈コメントやフォームフィールドなどを含めるかどうか。 |
format |
JSONB |
{"type": "png"} |
出力画像フォーマット。受け入れられる値 {"type": "png"}、{"type": "jpeg"}。出力を`PerformOcr`に渡す場合は、`{"type": "png"}`を使用します。 |
出力画像は、 format
オプションに応じて、PNGまたはJPEG形式です。出力をPerformOcr
ステップに渡すときは、"png" デフォルトを使用します — NVIDIA NIM
PaddleOCRには、PNGまたはJPEG入力が必要です。
PerformOcr
を含むパイプラインでこのステップを使用する前に、OCR対応モデルを登録します。
SELECT aidb.create_model(
my_paddle_ocr_model,
nim_paddle_ocr,
credentials => {"api_key": "<NVIDIA_NIM_API_KEY>"}::JSONB -- or credentials_env to read this from an environment variable instead
);
次に、パイプラインを作成します。
SELECT aidb.create_pipeline(
name => pdf_ocr_pipeline,
source => pdf_files_table,
source_key_column => id,
source_data_column => pdf_data,
step_1 => PdfToImage,
step_1_options => {"dpi": 150}::json,
step_2 => PerformOcr,
step_2_options => aidb.ocr_config(model => my_paddle_ocr_model),
step_3 => KnowledgeBase,
step_3_options => aidb.knowledge_base_config(model => bert, data_format => Text)
);
結果#
PdfToImage は結果のネストを解除します。ソースPDFの各ページは、
format
オプションに応じて、PNGまたはJPEG画像としてレンダリングされたページを含む1つの出力行を生成します。
part_id 列は、ページインデックス0ベースにマップします。
この出力形状は、入力としてイメージバイトを想定するPerformOcr
ステップと直接互換性があります。
PerformOcr#
NVIDIA NIM PaddleOCRなどのOCR対応AIモデルを使用して、画像からテキストを抽出します。
ヘルパーファンクション aidb.ocr_config()
Parameter |
Type |
Default |
Description |
|---|---|---|---|
model |
TEXT |
Required |
使用する登録済みのOCRモデルの名前。 |
この手順を使用する前に、OCR対応モデルを登録します。
SELECT aidb.create_model(
my_paddle_ocr_model,
nim_paddle_ocr,
credentials => {"api_key": "<NVIDIA_NIM_API_KEY>"}::JSONB -- or credentials_env to read this from an environment variable instead
);
次に、パイプラインでそれを参照します。
SELECT aidb.create_pipeline(
name => ocr_pipeline,
source => images_table,
source_key_column => id,
source_data_column => image_data,
step_1 => PerformOcr,
step_1_options => aidb.ocr_config(model => my_paddle_ocr_model),
step_2 => KnowledgeBase,
step_2_options => aidb.knowledge_base_config(model => bert, data_format => Text)
);
結果#
PerformOcr
は結果のネストを解除します。単一の画像から、検出されたテキストブロックごとに1つずつ、複数の行が生成される場合があります。
NVIDIA NIMプロバイダーは、現在png およびjpeg
形式のみをサポートしています。
SummarizeText#
AI言語モデルを使用して、長いテキストの一節の簡潔な概要を生成します。
ヘルパーファンクション aidb.summarize_text_config()
Parameter |
Type |
Default |
Description |
|---|---|---|---|
model |
TEXT |
Required |
要約に使用する登録モデルの名前。 |
chunk_config |
JSONB |
NULL |
要約前に適用されるオプションのチャンク構成`aidb.chunk_text_config()`から 。 |
prompt |
TEXT |
NULL |
概要をガイドするカスタムプロンプト。省略すると標準のプロンプトを使用します。 |
strategy |
TEXT |
NULL |
|
reduction_factor |
INTEGER |
NULL |
`'reduce'`ストラテジーで使用されます。反復ごとにテキストをどの程度積極的に削減するかを制御しますデフォルトは3です。 |
inference_config |
JSONB |
NULL |
オプションの実行時推論設定`aidb.inference_config()`から。 |
SELECT aidb.create_pipeline(
name => summary_pipeline,
source => articles_table,
source_key_column => id,
source_data_column => body,
step_1 => SummarizeText,
step_1_options => aidb.summarize_text_config(
model => my_t5_model,
chunk_config => aidb.chunk_text_config(100, 120, 10, words),
prompt => Summarize the key points concisely,
strategy => reduce,
reduction_factor => 3
),
step_2 => KnowledgeBase,
step_2_options => aidb.knowledge_base_config(model => bert, data_format => Text)
);
ナレッジベース#
処理されたテキストまたは画像データをベクター埋め込みに変換し、検索可能なナレッジベースに保存します。このステップは、その出力が後続のステップで入力として使用できないVECTOR
タイプであるため、常にパイプラインの 最後のステップ
である必要があります。セマンティックまたはハイブリッド検索を使用したナレッジベースの照会については、
Knowledge bases reference を参照してください。
ヘルパーファンクション aidb.knowledge_base_config()
Parameter |
Type |
Default |
Description |
|---|---|---|---|
model |
TEXT |
Required |
埋め込みモデルの名前。 |
data_format |
aidb.PipelineDataFormat |
Required |
'Text'`または'Image'`。 |
distance_operator |
aidb.DistanceOperator |
NULL |
類似度メトリック L2`デフォルト 、`InnerProduct、Cosine、L1、Hamming、または`Jaccard` |
vector_index |
JSONB |
NULL |
`aidb.vector_index_hnsw_config()`などのベクターインデックスヘルパーでビルドされたベクターインデックス構成。 |
SELECT aidb.create_pipeline(
name => kb_pipeline,
source => source_table,
source_key_column => id,
source_data_column => content,
step_1 => KnowledgeBase,
step_1_options => aidb.knowledge_base_config(
model => bert,
data_format => Text,
distance_operator => Cosine,
vector_index => aidb.vector_index_hnsw_config(m => 16, ef_construction => 64)
)
);
aidb.knowledge_base_config_from_kb(data_format)
を使用して、パイプラインを既存のナレッジベースに接続します。これにより、複数のパイプラインが1つのベクターテーブルを共有でき、ナレッジベースからモデル、距離演算子、およびベクターインデックスを継承します。
Multi-pipeline knowledge bases を参照してください。
宛先テーブル#
KnowledgeBaseステップは、 destination
パラメーターで名前付けの宛先テーブルを作成します。 destination
が設定されていない場合、テーブルはデフォルトのpipeline_<pipeline_name>
に設定されます。複数のパイプラインがナレッジベースを共有する場合、それらはすべて同じテーブルに書き込みます。
Column |
Type |
Description |
|---|---|---|
id |
BIGSERIAL |
主キー。 |
pipeline_id |
INT |
元のパイプラインへの参照。 |
source_id |
TEXT |
元のソースレコードのID。 |
part_ids |
BIGINT[] |
データがチャンクまたは解析された場合、セグメントを追跡します。 |
value |
VECTOR |
pgvector埋め込み。 |
ナレッジベースビュー、取得機能、およびライフサイクル動作については、 Knowledge bases reference および Knowledge bases reference を参照してください。
完全なエンドツーエンドのワークフローで一緒に使用されるパイプラインステップを確認するには、 Examples を参照してください。