25年以上PHPを中心にWebシステムを作ってきた中で、ここ数年で新しく取り組んでいるのが、OpenAI APIを組み込んだシステム開発です。契約書の自動チェックツールの改修や、お問合せ対応用のAIチャットボットの開発など、複数のプロジェクトでOpenAI APIをPHPに組み込んできました。

「枯れた技術」であるPHPの上に、生成AIという新しいレイヤーを載せる。この組み合わせで実際に見えてきた、設計上の勘所や注意点をまとめます。

なぜPHP × OpenAI APIという組み合わせなのか

生成AIを使ったシステムというと、Pythonでの開発を思い浮かべる方も多いかもしれません。ただ、実務では「すでに動いているPHPの業務システムに、AI機能を後から追加したい」というケースが非常に多いです。

既存のシステムをまるごと作り直すのではなく、安定して動いている基盤の上に、必要な部分だけAPI連携という形で新しい価値を追加する。この考え方であれば、PHPで組んだ既存システムに手を入れすぎることなく、AI機能を組み込めます。OpenAI APIはHTTPベースのAPIなので、言語を問わず呼び出せるのも、この組み合わせを選びやすい理由の一つです。

実際に開発したもの:お問合せ対応AIチャットボット

現在、お問合せ用のAIチャットボットを開発しています。主な機能は次の通りです。

  • RAG(検索拡張生成)を使って、社内資料をもとに回答するAIチャットボット
  • PDF・Word・Excel・HTML(URL指定)など、複数形式の資料を読み込んで知識源にできる
  • AIだけで対応しきれない問い合わせは、メールやWebhookで担当者にエスカレーションする
  • 過去のチャット履歴を分析し、ナレッジに追加すべき質問を自動で提案・登録する

このプロジェクトを通じて実感したのは、「AIに何でも答えさせようとしない設計」が一番の肝になるということでした。

設計で気をつけていること

1. RAGで"根拠のある回答"に絞る

AIモデル単体に自由に回答させると、事実と異なる内容をもっともらしく答えてしまう「ハルシネーション」のリスクがあります。これを抑えるために、事前に用意した資料(PDF・Word・Excelなど)から関連情報を検索し、その内容をもとに回答させるRAGという仕組みを使っています。

PHP側では、資料をあらかじめベクトル化してデータベースに保存しておき、ユーザーからの質問が来たタイミングで関連度の高い情報を検索し、その内容をプロンプトに含めてAPIに渡す、という流れを組んでいます。

2. 「分からない」を、ちゃんと言わせる

AIチャットボットの設計で特に重視しているのが、AIだけで対応しきれない場合に、無理に答えさせず、人間の担当者にエスカレーションする仕組みです。

回答の確信度が低いケースや、資料に該当情報が見つからないケースでは、メールやWebhookで担当者に通知が飛ぶようにしています。AIに何でも答えさせようとすると、誤った情報を自信満々に返してしまうリスクが高まります。「分からないときは、分からないと言わせる」設計が、業務利用における信頼性を大きく左右します。

3. 使われるほど賢くなる仕組みを作る

チャット履歴を定期的に分析し、「ナレッジに追加した方が良さそうな質問」をAIに提案させ、自動でナレッジベースに登録する仕組みも組み込んでいます。運用を続けるほど、資料でカバーできていなかった質問への回答精度が上がっていく設計です。

導入時点で完璧な資料を用意するのは現実的ではないため、「運用しながら育てていく」前提で設計しておくことが、長期的な精度向上につながります。

PHPでの実装面で気をつけていること

APIのレスポンス遅延・タイムアウトへの対応

OpenAI APIは、通常のAPI通信に比べてレスポンスに数秒かかることがあります。PHPの実行時間制限に引っかからないよう、タイムアウト設定を見直し、必要に応じて非同期処理やキューを使う設計にしています。ユーザーを待たせすぎないよう、処理中であることが分かるUIも合わせて重要です。

APIコストの管理

APIの呼び出し回数やトークン数に応じて費用が発生するため、無制限にAPIを呼び出す設計にはしていません。RAGで渡す情報量を必要最小限に絞り込む、キャッシュを活用して同じような質問への再呼び出しを減らすなど、コストと精度のバランスを意識した設計をしています。

エラーハンドリングを厚めに設計する

外部APIである以上、通信エラーやレート制限に引っかかるケースは避けられません。契約書自動チェックツールの改修でも、API呼び出しが失敗した場合のリトライ処理やフォールバック(一時的にAI機能を使わず、従来の処理に戻す)の仕組みを組み込みました。AI機能が止まっても、システム全体は止まらない設計にしておくことが重要です。

まとめ

OpenAI APIをPHPプロジェクトに組み込んだ経験から見えてきたのは、技術的な目新しさよりも、「AIをどこまで信用させ、どこから人に渡すか」という設計思想の方が重要だということでした。

  • RAGを使い、根拠のある情報をもとに回答させる
  • AIが対応しきれない領域は、無理に答えさせず人にエスカレーションする
  • 運用しながらナレッジを育てていく前提で設計する
  • タイムアウト・コスト・エラーハンドリングなど、外部API連携としての基本を丁寧に押さえる

長年運用されてきた安定した基盤の上に、必要な範囲でAIという新しいレイヤーを組み合わせていく。この考え方は、これからPHPでAI機能を組み込もうとしている方にも、一つの参考になるのではないかと思います。