· HARUBOUYA · dataflow · 6 min read

既存システムにAI機能を後付けするときの連携設計

生成処理は数十秒かかります。既存の画面からそのまま呼ぶとタイムアウトします。非同期の受け渡しと契約の決め方を整理します。

JavaとPython/FastAPIが双方向に連携することを表したイメージ

すでに動いている業務システムに、文章の自動生成のようなAI機能を足す案件の話です。難所はAIそのものではなく、既存側と新しい処理をどうつなぐかにあります。

問題

生成処理は1回あたり数十秒かかることがあります。既存の画面から「押したら結果が返るまで待つ」形で呼ぶと、こうなります。

症状原因
画面が固まります応答を待つ間ずっと接続したまま
一定時間で切れます通信経路のタイムアウト設定
同じ文章が二重に作られます待ちきれずに再度ボタンを押します
失敗の理由が分かりません生成側のエラーがそのまま流れてきます

つなぐ方式を決めないまま実装を始めると、この4つは必ず出ます。

仕組み

新旧をつなぐときに決めることは4点です。

決めること選択肢
呼び出し方式待って受け取る/依頼して後で受け取ります
契約の形入力と出力の項目・型・必須の定義
失敗の伝え方エラーの分類と再試行の可否
重複の防ぎ方依頼ごとの識別子

生成処理のように時間がかかるものは、依頼して後で受け取る方式が基本です。既存側は「依頼を登録する」「状態を問い合わせる」の2つを呼ぶだけになり、待ち時間の問題が構造的に消えます。

やること

1. 依頼と受け取りを分ける

処理の流れを3段階にします。

  1. 既存側から生成の依頼を登録します。すぐに受付番号が返ります
  2. 生成側は裏側で処理し、状態を「処理中」「完了」「失敗」で持ちます
  3. 既存側は受付番号で状態を問い合わせるか、完了時に通知を受け取ります

画面は「作成中です」と表示して先に進める作りにします。

2. 入出力の定義を1か所に集める

項目名、型、必須かどうかを一覧にし、両チームが同じものを見る状態にします。仕様書を別々に管理すると、項目名の食い違いが必ず起きます。API定義を自動で出力できる仕組みがあるなら、それを唯一の正とします。

3. エラーを分類して返す

生成側で起きる失敗を、既存側が判断できる分類に置き換えます。

分類既存側の対応
一時的な混雑時間を空けて再試行
入力が不正利用者に修正を促します
出力の形式が不正自動で1回だけ再生成
上限に到達管理者に通知

4. 重複を防ぐ

依頼ごとに識別子を付け、同じ識別子の依頼が来たら新規生成せず前回の結果を返します。二重押しと再送の両方をこれで防げます。

5. 記録を残す

どの依頼で、どの版の指示文を使い、何秒かかり、どういう結果になったかを記録します。この記録が後の改善作業の材料になります。

失敗例

やりがちなこと起きること
待って受け取る方式で作ります本番の混雑時にタイムアウトが多発
定義を口頭とチャットで決めます項目名の食い違いで結合時に手戻り
失敗を全部「エラー」で返します再試行すべきかが判断できません
識別子を付けません同じ文章が複数保存されます
記録を残しません改善の根拠が作れません

まとめ

  • 時間のかかる処理は依頼と受け取りを分けます
  • 入出力の定義は1か所に集め、それを正とします
  • 失敗は分類して返し、対応を決めておきます
  • 依頼ごとの識別子で二重生成を防ぎます
  • 記録を最初から残します

後から足す機能ほど、つなぎ目の設計で品質が決まります。

Share:

参考になったら、いいねを押してください。

コメント

    お名前とコメントは、確認後にこのページで公開されます。メールアドレスや電話番号などは書かないでください。

    Back to Blog

    Related Posts

    View All Posts »