1 of 43

PHPプロダクトにAIによる自動生成機能を導入するまで

PHPカンファレンス2023 蒲田

2023年10月8日 新倉涼太

(X : @niisantokyo)

Copyright© M&Aクラウド

2 of 43

niisan -i

2

  • PHP歴12年くらい
  • 最近はLaravelを使っているけど、実はそんなにこだわりない
    • DIがあるといいな
    • テストが書きやすいといいな
  • 2023/2 からM&A クラウドにジョイン

AI(Stable Diffusion)君に作ってもらった自分の似顔絵

Copyright© M&Aクラウド

3 of 43

おしながき

おしながき

3

  • プロダクトの中にある自動生成機能の紹介
  • なぜ生成系AIを導入したのか
  • 実装
  • リリースした結果とわかったこと
  • まとめ

Copyright© M&Aクラウド

4 of 43

プロダクトの中にある自動生成機能の紹介

4

Copyright© M&Aクラウド

5 of 43

プロダクトの中の自動生成機能

M&Aクラウドというサービス

5

売り手

買い手

売却案件の登録

買収ニーズの登録

売却の打診

買収のスカウト

Copyright© M&Aクラウド

6 of 43

プロダクトの中の自動生成機能

売却案件登録時の一部の入力項目に自動入力機能が出現!

6

Copyright© M&Aクラウド

7 of 43

プロダクトの中の自動生成機能

AIを使った自動生成

7

自動生成ボタンを押すと、サーバ側で顧客のWebサイトを参照し、得られたデータと特定の文字列を組み合わせ、Azure Open Ai ServiceのChatCompletion APIに送信し、返却された文字列をフロントに返し、ユーザーのフォームを書き換える

Copyright© M&Aクラウド

8 of 43

プロダクトの中の自動生成機能

テレビで紹介されてたり

8

https://corp.macloud.jp/2023/07/19/wbs0719/

テレビに出てる人はブースにいるので会いにいってあげてください

Copyright© M&Aクラウド

9 of 43

なぜ生成系AIを導入したのか

9

Copyright© M&Aクラウド

10 of 43

なぜ生成系AIを導入したのか

生成系AIとは

10

コンテンツを生成することのできるAIで、画像生成のStable Diffusion や会話をするように文章を作成するChatGPTなどがある。今回はChatGPTの話

生成系AI

🗒️

🖌️🖼️

🎹🎵

Copyright© M&Aクラウド

11 of 43

なぜ生成系AIを導入したのか

そもそも会社として生成系AIを活用していくとは言っていたが・・・

11

https://corp.macloud.jp/2023/03/29/chatgpt/

Copyright© M&Aクラウド

12 of 43

なぜ生成系AIを導入したのか

プロダクト上での使い道がいまいちわからん

12

ChatGPTって汎用的に使えそうだけど、プロダクトみたいな特定用途に使うってなると、ちょっと想像つかないな

Q&Aボットとかって専門性高い知識必要そうだけど、ChatGPTでやるのって難しい?適当なこと返されちゃたまらんでぇ

Copyright© M&Aクラウド

13 of 43

なぜ生成系AIを導入したのか

ハッカソンで何に使えるかが見えてきた

13

業務課題の解決にAIを使ってみるというハッカソンを実施し、いくつかの事例を作る

💡

  • 企業紹介記事の自動生成
  • 議事録の自動生成
  • 議事録や資料の要約支援

Copyright© M&Aクラウド

14 of 43

なぜ生成系AIを導入したのか

ハッカソン後のAIに対する意識

14

↑ 私

Copyright© M&Aクラウド

15 of 43

なぜ生成系AIを導入したのか

プロダクト上でAIを利用できるところはないか

15

売り手

買い手

売却案件の登録

買収ニーズの登録

売却の打診

買収のスカウト

事業や会社のキーワードとか強みを入力しなければならない。

入力大変なので、離脱しちゃう・・・

Copyright© M&Aクラウド

16 of 43

なぜ生成系AIを導入したのか

顧客課題とAIがつながる

16

議事録の要約や顧客企業紹介資料の原案作成など、既存の情報を使ってAIに作ってもらうという体験

自分たちの情報であっても、入力が大変で、情報を入力する前に離脱してしまう

AIの利用体験

顧客課題

顧客のWebサイトという既存情報を利用し、買収企業に見せる会社の事業内容やタイトルを自動生成する機能を作ろう!

プロダクトでAIを利用する企画

Copyright© M&Aクラウド

17 of 43

なぜ生成系AIを導入したのか

というわけで、企画スタート!

17

顧客のWebサイトの情報を元にして、顧客の入力を補助する機能を作ろう!

PO

よっしゃー!

Copyright© M&Aクラウド

18 of 43

なぜ生成系AIを導入したのか

ここまでの簡単なまとめ

18

  • はじめは生成系AIをプロダクトどう活用すればいいかわからない状態だった
  • ハッカソンで課題解決してみるイベントを開催した結果、どういうところで生成系AIを使えるかの実例を得ることができた
  • プロダクト上での課題解決手段と生成系AIを結び付けて、企画がスタート!

Copyright© M&Aクラウド

19 of 43

なぜ生成系AIを導入したのか

ちなみに、こんなこと思ってました

19

ハッカソンやってわかったことだが、AIの機能の検証はとてもやり易い

うかうかしていると、競合企業がAIを使った機能を出してくる可能性が高い

どうせなら一番を狙いたいね!

Copyright© M&Aクラウド

20 of 43

実装

20

Copyright© M&Aクラウド

21 of 43

実装

AIは自前で実装しない

21

前提として、AI自体は自前で実装しない。今回はOpenAI社が開発したAIをAzure OpenAI ServiceのWeb APIを通して使うことになる

プロダクト

AI

AI

プロダクト

client

Web API

Copyright© M&Aクラウド

22 of 43

実装

AIと連携して、「すごい文字列処理関数」として使う

22

前提として、AI自体は自前で実装しない。今回はOpenAI社が開発したAIをAzure OpenAI ServiceのWeb APIを通して使うことになる

AI

client

string

complesion

PHPの型宣言

はPHP7から返り値にも使えるようになりました

chat

PHPって、何に使うの?

主にWebアプリの構築に使いますね

embedding

PHP最高!!

(0.1, 0.05, 0, -0.001….)

Copyright© M&Aクラウド

23 of 43

実装

使用技術

23

openai-php/client

https://github.com/openai-php/client

AIサーバとやりとりするためのクライアント

symfony browserKit

https://symfony.com/doc/current/components/browser_kit.html

Webサイトを取得するために使うライブラリ

Copyright© M&Aクラウド

24 of 43

実装

Azure OpenAI Service

24

当時は、OpenAI ChatGPTにエンタープライズ向けのものがなかったのと、セキュリティ的に良さそうなAzure OpenAI Serviceを使用。

https://azure.microsoft.com/ja-jp/products/ai-services/openai-service

Copyright© M&Aクラウド

25 of 43

実装

Azure OpenAI Service

25

データ、プライバシー、セキュリティについて、以下のように宣言している

https://learn.microsoft.com/ja-jp/legal/cognitive-services/openai/data-privacy

AIを利用する際に使った入力データ、出力、訓練データについて

  • 他の消費者には使えない
  • OpenAIも利用できない
  • OpenAIのモデル改善に使われない( 学習に使われない )
  • Microsoftやサードパーティのプロダクトやサービスの改善に使われない
  • 自身がデプロイしたモデルであっても、自動的にモデル改善に使われることはない
  • 自身がfine-tuneしたモデルは自身が独占的に利用する

Copyright© M&Aクラウド

26 of 43

実装

実装のアーキテクチャ

26

  • Scrapingで取得したWebサイトの文字情報とテンプレートを合わせてプロンプト(AIに渡す文字列で、AIはこれを元に返却文字列を生成する)を生成
  • AiClientにプロンプトを渡して文字列を生成
  • ログを出したりした上で、生成文字列を返却する

Copyright© M&Aクラウド

27 of 43

実装

実装のアーキテクチャ

27

  • Scrapingで取得したWebサイトの文字情報とテンプレートを合わせてプロンプト(AIに渡す文字列で、AIはこれを元に返却文字列を生成する)を生成
  • AiClientにプロンプトを渡して文字列を生成
  • ログを出したりした上で、生成文字列を返却する

Copyright© M&Aクラウド

28 of 43

実装

実装のアーキテクチャ

28

Copyright© M&Aクラウド

29 of 43

実装

各インターフェースに対する実装として取りうること

29

  • AIClient
    • OpenAI Clientのラッパー
    • AI基盤を別途用意しているのなら、そちらへのアクセス
  • Scraping
    • curlベースのアクセス
    • ヘッドレスブラウザを使ったアクセス(CSRサイトへの対応)
  • Generator
    • ScrapingとAIClientを組み合わせた実装
    • URLを渡したらその内容について質問に答えてくれるAIへの問い合わせ

Copyright© M&Aクラウド

30 of 43

実装

AIを取り巻く周辺環境に対応できる設計

30

次々とAIのサービスが打ち出されていて、今使っているものがいつ陳腐化するかわからない

社内でもAI研究チームが蠢いていて、強力なAI基盤がいつ出てきてもおかしくない状況

実装を常に最適な状態にするために、実装を簡単に入れ替えられるようにしないといけない

こうなるかもしれない

Copyright© M&Aクラウド

31 of 43

実装

実装も順調だが、何かが様子が・・・

31

なんか文字数オーバーしているよ?

内容変じゃない?

自動生成した文章、ワードの品質がイマイチ安定しない...

あいうえおあいうえおあいうえお

(15 / 10)

車両の部品を専門で製造するM&Aプラットフォーム!!

Copyright© M&Aクラウド

32 of 43

実装

品質の不安定さをなんとかできないか

32

  • プロンプトの指示部分の改善
    • 文字数、禁止ワードなどを明示
    • 例文を示す
    • 指示部分とwebページ部分の分離

改善できること

  • プロンプトを無視する問題
    • 文字数オーバーや禁止ワード入れるといったことがたまにある(クォリティを上げるためにやっていると思われ)
  • Webサイトの情報量少ない問題
    • 自社Webサイトの情報が少なかったり、CSRでcurlでは情報を取りきれない時
  • 文字数上限
    • Webサイトの情報量が多くても、プロンプトに入れられる文字数制限を超えちゃう場合は、途中でぶった斬っている

対処が難しいこと

Copyright© M&Aクラウド

33 of 43

実装

期待値の調整

33

AI自動生成によって、ベストなものができるかどうか、こちらでは制御しきれない。プロンプト( AIに渡す文言 ) を頑張っても、妙な結果が出てくる可能性がある

ベータ版なので、これから改善するよという宣言

自動入力されたものを鵜呑みにしないで、ちゃんと確認の上、修正するなどしてから入力を確定してねというお願い

Copyright© M&Aクラウド

34 of 43

実装

その他気にしたこと

34

  • トークンわからない問題
    • ChatGPTでは入力文字列を「トークン」という単位に区切って解析し、このトークン数で課金したりするが、日本語をどうやってトークンに分けているかはよくわからない
    • 大体、1文字1トークンくらいでザックリ勘定している
    • Webサイトの文字列数が多すぎる場合は、途中でバッサリ切っている
  • トークン数制限
  • エラーレスポンス定義がわからない問題
    • トークン数制限などで、本当にエラーが出るかどうかについて、実際に手動で確認したりしている

Copyright© M&Aクラウド

35 of 43

実装

ここまでのまとめ

35

  • Azure OpenAI ServiceのWeb APIを使って、PHPからChatGPTなどのAIを使うことができる
  • AI界隈の成長は著しいので、実装上もインターフェースを細かく設定して、いつでも実装をアップデートできるようにしている
  • AIから出力されたデータは、品質が安定しないため、期待値を調節してユーザーとの軋轢を低減する

Copyright© M&Aクラウド

36 of 43

リリースした結果

36

Copyright© M&Aクラウド

37 of 43

リリースした結果

登録完了率の変化

37

自動生成を使った場合

80%

全体の登録完了率

63%

自動生成を使わなかったユーザー

45%

Copyright© M&Aクラウド

38 of 43

リリースした結果

実際のデータについて、評価できている

38

リリース後初期の段階で、ユーザーがAI生成した案件タイトルが、買い手側のCSから見て、十分魅力的に見えるかどうかという定性的なデータを出した

OK

39%

もうちょい

35%

伝わらなそう

26%

ほとんどはWebサイトが見れない or 情報が足りないとかであった

作ったワード

OK!

もうちょい

伝わらない

Copyright© M&Aクラウド

39 of 43

リリースした結果

感情の変化

39

初期

実装後

Copyright© M&Aクラウド

40 of 43

まとめ

まとめ

40

  • プロダクトにAIによる自動生成機能を導入した
  • 業務と生成系AIを結びつける実例を蓄積することで、プロダクト上におけるAIの利用に繋げられるかもしれない
  • AIは現在も成長している分野なので、キャッチアップしていけるように柔軟な実装にしよう
  • AIの出力は安定しない場合があるため、そのような場合は一旦期待値を調整しつつリリースし、改善していこう
  • 自動生成機能では、7割程度の確率で、それなりに使えるものができている

Copyright© M&Aクラウド

41 of 43

まとめ

41

AIは未だ成長分野です!恐れず使って検証して実例を貯めて、プロダクトへの導入に挑戦しましょう!

Copyright© M&Aクラウド

42 of 43

おわり!

42

Copyright© M&Aクラウド

43 of 43

リリースした結果

43

Copyright© M&Aクラウド