処理中ファイル書式 | 状態取得書式 | ユーザーデータ書式 | グローバルデータ書式 | ローカルデータ書式 | 日付書式 | 文字列書式 | 数学書式 | 制御書式 | ファイルシステム書式 | テキストファイル書式 | データベース書式 | プロセス書式 | Web書式 | DocuWorks書式 | DocuWorks書式 (アノテーション関連) | PDF書式 | Excel書式 | 画像処理書式 | AI書式 | その他の書式
AI書式のマクロは、AI解析サーバー「eDocAIServer」と連携し、画像をAI(画像解析モデル)に渡して、指示文に従った情報の読み取り(OCR・項目抽出など)を行います。利用には eDocAIServer のセットアップと起動が必要です。
eDocAIServerは現在開発中のアプリケーションです。AI書式マクロは現在は使用できません。
接続先は eDocAIServer 側の「接続先(クライアント)」設定(ホスト/ポート/APIキー)を参照します。同一PCで運用する場合は既定(127.0.0.1:8765)で動作します。別PCのAIサーバーを利用する場合は、接続先がローカル以外のときに画像を自動で base64 化して送信します。
| 項目 | 説明 |
|---|---|
| 指示文 | 読み取ってほしい内容を自由な文章で指定します。結果のキー名は指示文で指定します(例「注文番号を読み取って」→キー「注文番号」)。指示文中にカンマ「,」を含める場合は、マクロの引数区切りと区別するため |, とエスケープして記述します(例「A|,B|,Cを読み取って」)。 |
| 結果の格納 | 解析結果は結果属性名のスレッド配下にユーザーデータとして格納されます。{%GET_U(結果属性名,項目名)}で取得します。読み取れなかった項目は空文字になります。 |
| 成否判定 | 結果属性名スレッド内の_status(ok / error / timeout)で判定します。エラー内容は_errorに格納されます。同期マクロは戻り値でも同じ値を返します。 |
| 画像 | ローカルドライブのパスで指定します。DocuWorks文書はDW_OUTPUT_JPEG_IMAGE等で一時画像を出力して渡します。 |
| think(任意) | 末尾の任意引数。推論モード(on|off|auto)。省略時は既定が使われます。 |
| プロンプト名(任意) | 末尾の任意引数。eDocAIServer に登録した名前付きプロンプトの選択。省略または「デフォルト」で既定プロンプトを使用します。 |
画像をAIサーバーに送り、指示文に従って解析した結果をユーザーデータに格納します。解析が完了するまで待機する同期処理です。少量・対話的な処理に向いています。
戻り値は ok / error / timeout を返します(結果属性名スレッド内の
_status
と同じ値)。結果の各項目は結果属性名スレッド配下に格納され、
{%GET_U(結果属性名,項目名)}
で取得します。
| 引数 | 説明 |
|---|---|
| 画像パス | 解析する画像ファイルのパス。 |
| 指示文 | 読み取り内容の指示。指示文中にカンマを含める場合は |, とエスケープします。 |
| 結果属性名 | 結果を格納するユーザーデータ名。 |
| think(任意) | 推論モード on|off|auto。省略時は既定。 |
| プロンプト名(任意) | 名前付きプロンプトの選択。省略時は既定。 |
{%AI_ANALYZE_IMAGE({%GET(FullPathFileName)},注文番号と氏名を読み取って,Res)}
{%IF({%GET_U(Res,_status)}=ok,
{%WRITE_LOG(注文番号:{%GET_U(Res,注文番号)} 氏名:{%GET_U(Res,氏名)})}
,
{%WRITE_ERROR_LOG(AI解析失敗:{%GET_U(Res,_error)})}
)}
画像をAIサーバーに非同期で投入します。投入後すぐに戻るため、大量の画像を次々に投入できます。解析が完了すると、サーバーが結果ファイルパスに結果を書き出します。戻り値はジョブID(投入に失敗した場合は空文字)です。
エコー属性名には、結果に同梱したい文脈データ(対象ファイル名やページ番号など)のユーザーデータ名を指定します(事前に
SET_U
で設定)。サーバーはこのデータを結果ファイルにそのまま書き出すため、どの入力に対する結果かを回収側で判別できます。
結果ファイルは
LOAD_USER_DATA
形式(UTF-8)で書き出されます。回収側のバッチで結果ファイル(例 .txt)をフォルダ監視し、
{%LOAD_USER_DATA(...,Leave,UTF-8)}
で読み込みます。読み込んだ後、根の
_status
、結果属性名スレッド、エコー属性名スレッドを参照します。
| 引数 | 説明 |
|---|---|
| 画像パス | 解析する画像ファイルのパス。 |
| 指示文 | 読み取り内容の指示。指示文中にカンマを含める場合は |, とエスケープします。 |
| 結果属性名 | 結果ファイル内で解析結果を格納するスレッド名。 |
| エコー属性名 | 結果に同梱する文脈データのユーザーデータ名(事前に SET_U で設定)。 |
| 結果ファイルパス | 解析完了時にサーバーが結果を書き出すファイルのフルパス。 |
| think(任意) | 推論モード on|off|auto。省略時は既定。 |
| プロンプト名(任意) | 名前付きプロンプトの選択。省略時は既定。 |
{%SET_U(Echo,対象ファイル名,{%GET(FileName)})}
{%SET_U(Echo,ページ,1)}
{%AI_ANALYZE_IMAGE_ASYNC({%GET(FullPathFileName)},注文番号を読み取って,Res,Echo,D:\AI\Temp\{%GET(FileNameWithoutExtension)}.txt)}
{%LOAD_USER_DATA({%GET(FullPathFileName)},Result,Leave,UTF-8)}
{%IF({%GET_U(Result,_status)}=ok,
{%WRITE_LOG(対象:{%GET_U(Result,Echo,対象ファイル名)} 注文番号:{%GET_U(Result,Res,注文番号)})}
,
{%WRITE_ERROR_LOG(AI解析失敗:{%GET_U(Result,_error)})}
)}
複数の画像をまとめて解析します。画像パスをユーザーデータに順に追加(
ADD_U
)し、そのユーザーデータ名を画像リストユーザーデータ名に指定します。解析が完了するまで待機する同期処理です。
結合に
each
を指定すると画像ごとに独立して解析し、結果属性名スレッド配下に 1, 2, … の番号スレッドで格納します(各番号スレッドには画像単位の
_status
も付きます)。
together
を指定すると全画像を1回でまとめて解析します。
| 引数 | 説明 |
|---|---|
| 画像リストユーザーデータ名 | 画像パスを順に格納したユーザーデータ名(ADD_U で追加)。 |
| 指示文 | 読み取り内容の指示。指示文中にカンマを含める場合は |, とエスケープします。 |
| 結果属性名 | 結果を格納するユーザーデータ名。 |
| 結合 | each(画像ごとに独立)|together(まとめて1回)。 |
| think(任意) | 推論モード on|off|auto。省略時は既定。 |
| プロンプト名(任意) | 名前付きプロンプトの選択。省略時は既定。 |
{%ADD_U(ImgList,D:\AI\Temp\0001.jpg)}
{%ADD_U(ImgList,D:\AI\Temp\0002.jpg)}
{%AI_ANALYZE_IMAGES(ImgList,注文番号を読み取って,Res,each)}
{%WRITE_LOG(1枚目:{%GET_U(Res,1,注文番号)})}
{%WRITE_LOG(2枚目:{%GET_U(Res,2,注文番号)})}
複数の画像をAIサーバーに非同期で投入します。投入後すぐに戻り、解析完了時にサーバーが結果ファイルパスに結果を書き出します。戻り値はジョブID(投入に失敗した場合は空文字)です。
引数は AI複数画像解析(同期) に、エコー属性名と結果ファイルパスを加えたものです。エコー・結果ファイルの扱いは AI画像解析(非同期) と同じです。
{%ADD_U(ImgList,{%GET(FullPathFileName)})}
{%SET_U(Echo,対象ファイル名,{%GET(FileName)})}
{%AI_ANALYZE_IMAGES_ASYNC(ImgList,2つの画像の相違点を読み取って,Res,Echo,D:\AI\Temp\{%GET(FileNameWithoutExtension)}.txt,together)}
AIサーバーが稼働し、解析モデルがロード済みかを確認します。利用可能な場合は
ok
を、未稼働またはモデル未ロードの場合は
ng
を返します。バッチの先頭でサーバーの状態を確認する用途に使用します。
{%IF({%AI_HEALTH()}=ok,
{%AI_ANALYZE_IMAGE({%GET(FullPathFileName)},注文番号を読み取って,Res)}
,
{%WRITE_ERROR_LOG(AIサーバーが利用できません。)}
)}