【2024年版】ChatGPT APIを社内利用する時に採用すべきアーキテクチャを考えた

# 結論

社内システム上の多数のアプリケーションがChatGPT APIを活用しているというシチュエーションを想定し、AI共通基盤が持つべき機能とアーキテクチャを検討しました。
ポイントは以下の３つです。

1. 社内システム上の**あらゆるアプリケーションにChatGPT APIが組み込まれる未来**が想定される
2. アプリケーションごとに必要な実装は重複するため**共通化が可能**
3. **Proxyサーバ**を社内に配置しそこで**共通的な処理**を行い、各アプリケーションはAPI呼び出しのみを行う

# 背景 -ChatGPT APIの2024年を予想する-
## 2023年5月現在のChatGPT APIの活用状況
2023年3月1日にChatGPT APIであるGPT3.5-turboがリリースされ、あらゆるプレイヤーによってこぞって活用方法が模索されています。
現在の活用状況について知見を深めたかったため、TwitterにてChatGPT APIを使っている方々へ向けてヒアリングを募集したところ、なんと**15人ものCEO,CTO,上場企業社員の方々とお話をさせていただくことができました**(余談ですがとても濃い話がたくさんできてとても楽しかったです)。

活用方法は様々でしたが、大別すると次の３つに分類できました。


| パターン        | 説明                                                                                          |
|------------|-------------------------------------------------------------------------------------------|
| ChatGPTクローン  | ChatGPT APIで**社内向けのChatGPT**を構築し、業務改善に利用する。社員の**利用状況の分析**や**プロンプトの共有**など行えるようにしている。                                              |
| インターフェイス変更 | LineやSlackやキーボードなど**別のインターフェイスに組み込んで**、使いやすくする。                                                    |
| ドメイン特化     | ドメインを絞ったり、技術的な改善、**独自データを注入する**などでより精度の高いタスクを行わせる。 |

GPTは汎用AIであるため多様なユースケースが考えられ、現在続々とドメイン特化アプリが出てきています。
![MicrosoftTeams-image (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/34396187-200b-8b29-aab4-34f76401e5a1.png)
(引用: [DS協会_ChatGPTによって描かれる未来とAI開発の変遷](https://speakerdeck.com/hirosatogamo/0421dsxie-hui-chatgptniyotutemiao-kareruwei-lai-toaikai-fa-nobian-qian?slide=33 ) )


また、既存のアプリケーションに対してChatGPT APIを導入することでさらに高いレベルのUXを実現する流れも盛んです。
![スクリーンショット 2023-04-30 13.46.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/8d880e5a-a96a-1ac4-ecde-9a7ea58a655c.png)
(引用: [DS協会_ChatGPTによって描かれる未来とAI開発の変遷](https://speakerdeck.com/hirosatogamo/0421dsxie-hui-chatgptniyotutemiao-kareruwei-lai-toaikai-fa-nobian-qian?slide=33 ) )

## OpenAIの事例(ちょっと先の未来)
ChatGPT APIの活用方法として、**一歩先の未来に行っているのがOpenAI自身**です。
以下のソースコードは、OpenAIが開発中のChatGPT Plugins(ChatGPTが外部APIを実行する機能)のコードの一部です。なんと**コードの中でChatGPT APIが使われています**。
「**メタデータをJSONで返してください**」というプロンプトをChatGPTに投げて、その結果をjson.loadでパースさせてそのまま返り値にしているのです。

![スクリーンショット 2023-04-30 13.56.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/11ea3b16-a6f6-c4ef-3b68-4d96b800274f.png)
(引用: https://github.com/openai/chatgpt-retrieval-plugin/blob/main/services/extract_metadata.py)

ChatGPTは開発支援を行うだけでなく、**コードの中にまで入り込んでシステムの一部になっていく可能性が高い**と私は思っています。

## 2024年の未来予想図
上記の流れからDXならぬAIXの流れができて、既存の業務やビジネスを**AIで代替**できないか探索される時代が来ると思っています。そうすると社内のシステムのあらゆるところでChatGPT APIが使われるようになるでしょう。
ワークフローや自社サービスにもChatGPT APIを使うことで、今までできなかった業務工数削減やビジネス価値向上が実現できるためです。

![未来予想図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/3806a31d-cfae-9f53-7937-1effb84165c7.png)


# 採用すべきアーキテクチャについて考える
上記未来予想図をもとに、どのようなアーキテクチャが最適か考えていきます。

## Lv.1 黎明期の社内アプリ乱立時代
![アーキテクチャ.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/b04ccd6c-aa94-d287-59dc-ac9056588a1c.png)

今は**ほとんどの企業がこの状態**だと思います。
社内用ChatGPTの導入や、既存機能へのChatGPT APIの導入などが各々**別プロジェクトとして走って社内に構築**されています。

### バックエンドの機能構成
* **利用回数制限**・・・特定ユーザが乱用してコスト破産を起こさないように限界値を設定するため
* **リトライ処理**・・・OpenAI APIがレートリミット等で失敗することがあるのでバックオフのリトライ処理が必要であるため
* **システムプロンプトの注入**・・・プロンプトインジェクション対策や、意図しない使われ方をさせないため
* **禁止ワード**・・・システムプロンプトを漏らさないようにするため
* **キャッシュ**・・・コスト削減、E2Eテスト実現のため

### データベースに保存されるリクエストログ
* **日付**
* **ユーザID**
* **プロンプト**
* **リクエストパラメータ**(temperature等)
* **AIのレスポンス**
* **トークン数**(コスト計算のため)
* **ステータスコード**(エラー判別のため)

### 管理画面
リクエストごと、ユーザごと、アプリごとの利用状況やコスト分析を行える機能が必要です。

![スクリーンショット 2023-04-30 15.50.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/f832f0b5-fcab-ddbd-03ec-2080f9f0937c.png)
(リクエストごとのログデータ確認画面)

![スクリーンショット 2023-04-30 15.51.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/f4a1a377-8790-8a65-a37f-f36a00ceae84.png)
(ユーザごとの利用状況分析)

### Azure上での構築
行政や大企業などのエンタープライズでは、ほとんどの場合がAzureでシステムが構築されている模様です。
マイクロソフトがSLAやセキュリティ周りの痒い所にしっかりと手を差し伸べています。
![MicrosoftTeams-image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/1313d614-60c1-0199-5cc4-526bacdbe4ad.png)
(引用: [DS協会_ChatGPTによって描かれる未来とAI開発の変遷](https://speakerdeck.com/hirosatogamo/0421dsxie-hui-chatgptniyotutemiao-kareruwei-lai-toaikai-fa-nobian-qian?slide=33 ) )


## Lv.2 共通機能の集約
ChatGPT APIを使ったソリューションの**構成や機能はほとんど同じ**というのがヒアリングの中で得られた所感です。ここで気づくのですが、**バックエンドの機能、データベース、管理画面をアプリケーションごとに個別に実装している現状はかなり効率が悪い**のではないか？ということです。
つまり、**共通機能の集約**が可能であるということです。

このレベルにすでに達している企業はほとんどいないと思いますが、アメリカのスタートアップ[Helicone](https://www.helicone.ai/)がここに対してソリューションを構築しています。
Heliconeは**URLを差し替えるだけで、ログの保存や、回数制限・リトライ・キャッシュ等の周辺機能をカバーしてくれる**というものです。
HeliconeがChatGPT APIへのProxyサーバになっていて、間で諸々の共通機能を提供するという仕組みになっています。

![スクリーンショット 2023-04-30 16.06.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/1382cc99-d5b8-1915-dfba-48763d5e383a.png)

Heliconeを使うことで、個別のアプリケーションはログの保存や周辺開発から解放され、**BackendはAPIを叩くだけ**にできるようになります。

![アーキテクチャLv2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/000d6400-8fc4-1372-a6f6-e225af0e3435.png)

ただし、Heliconeを使うとログ情報は社内システム外に保存されるため、セキュリティ的懸念が増えます。機密情報等が他社のサーバに保存されることになるのでポリシー的にNGのところが多いでしょう。

また、Heliconeはレイテンシーを緩和させるために、処理をCloudfrare workerに配置し、回数制限等の設定値もリクエストのヘッダーから取得するような実装になっています。

## Lv.3 共通基盤化
Heliconeの**Proxyサーバによる共通機能の集約**というソリューションは間違いなくExcellentです。
共通機能を備えたProxyサーバを社内システムに配置し、各アプリケーションはそこを経由してAPIを呼び出すことで**開発工数を大幅に抑える**ことができます。また**アプリケーションごとのログが１箇所に集約されるため、高度な利用分析も可能**になります。

![アーキテクチャLv3.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/e7c02be9-4ae4-fe9e-abf6-0cfbf6bdae3a.png)

# 実際に触ってみたい人へ
上記のシステムを開発したので、個人開発者向けに**無料**でサービスを提供しています。
ChatGPT APIを使った開発をしている方はぜひ、すぐに使える状態になっているので、一度使ってみていただけたら嬉しいです😆

https://nextgpt.dev/


PS(2023/05/01) 
多くの反響いただきとても嬉しいです！
自社への実装についてご相談については以下のURLからお問合せください！

https://next-gpt.studio.site/