2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Make×WebAPI×生成AI】契約書の相手先情報の記入を自動化

Posted at

:white_check_mark: 全体フロー概要

法人番号からWebAPIを用いて企業名、所在地を取得し、代表者の情報を生成AIに推測させ、契約書テンプレート(Googleドキュメント)に埋めるツールをMakeを使って作成しました。

  1. Google Sheets: 法人番号を取得
  2. HTTPモジュール: gBizINFO APIで所在地取得
    1. gBizINFOでAPI利用申請を実施
    2. headerにリクエストヘッダと上記で払い出しを受けたAPIトークンを設定
    3. API仕様ページにて、JSON形式のサンプルを取得
  3. Google Sheets: エラーケースを考慮
  4. JSONモジュール: 上記APIで取得したサンプルをGenerateで設定
  5. OpenAIモジュール: GPTで代表者名を推測
    1. OpenAIのプラットフォームでAPIキーを取得
  6. Google Docs: テンプレートをコピーして値差し込み
    1. HTTPモジュール等から取得する値を代入する場所を指定
    2. Google Driveにテンプレートを保存
  7. Google Drive: 完成した文書を保存(モジュール化不要)

:arrow_down_small: Make(旧Integromat)シナリオ全体図

{36EAE445-9915-4F15-B987-74B1EFF6F927}.png

:speech_balloon: 制作背景

  • 元々は雛形(Word)をそのまま相手先に送付していたのですが、その後の修正されたファイルの命名規則がバラバラであったり、企業情報がブランクで返ってくる場合もあって、最後に開いてみて確認しなければいけないという煩雑さがありました
  • 加えて、どの企業に雛形を送ったか、という履歴を取りたい意図があり、一覧作成から相手先情報入りの雛形作成ができれば、ステータス管理にも役立つのではないかというところから、ツール化を思い立ちました
  • 情報はなるべくAPIで取得したかったのですが、無料の範囲では限界があり、代表者名については生成AIに補足させています

:1234: 各モジュール構成と画面イメージ

:one: Google Sheets: 法人番号を取得

Google Sheets: Watch New Rows)新規行追加をトリガーにして起動

{7909150F-CAA0-4B41-BE14-05B2D4E7D84B}.png

Google Sheets: 詳細設定)情報を取得したいファイル名(パス)、Sheet名を記載

{139D8E79-64BF-49B0-9BF9-875D2F6B8101}.png

Google Sheets: 必須項目(法人番号)を追記

{9CA01A39-BDD4-4DCE-BE12-8D2C9D6907E2}.png※エラー判定カラムについては、後述にて説明

:two: HTTPモジュール: gBizINFO APIで所在地取得

gBizINFOでAPI利用申請を実施

下記のサイトから利用申請を実施します。
:arrow_right: https://info.gbiz.go.jp/hojin/api_registration/form
{A7D9823B-F598-4CD5-ABC4-8837481339A2}.png
申請が完了すると下記のメールが届きます。
{82DC5783-2D5B-4D52-9038-48108FCEA18A}.png
メールで届いたURLにアクセスすると、トークンを入手できます。
{B1509B4C-A683-4A15-839C-CF08A069F0AC}.png

HTTPモジュール: リクエストヘッダと上記で払い出しを受けたAPIトークンを設定

URL:https://info.gbiz.go.jp/hojin/v1/hojin
name:X-hojinInfo-api-token
Value:取得したAPIトークン
{2A6838ED-2A99-44B4-8B95-9AB5654E4391}.png

HTTPモジュール:Itemに「法人番号」を設定

{9A908FBB-1949-4909-8643-743838FD2578}.png
これで法人番号をKeyにAPIを実行し、情報を取得する準備が整いました。

:three: Google Sheets: エラーケースを考慮

Set up a filterにて、DataErrorの場合は分岐するよう設定

{97A27855-9B06-401E-B17F-C3CC7771CFD9}.png

Google Sheets: 指定のカラムに「法人番号該当なし」と書き込むよう設定

{5759B87F-BEC7-4E9B-81AB-CF7CD8D8B734}.png

:four: JSONモジュール: 上記APIで取得したサンプルをGenerateで設定

JSONモジュール: HTTPモジュールで取得したdataをJSON stringに設定

{4172F934-27B1-4F92-AC38-6BFB2F766C4B}.png

JSONモジュール: Generateでsample dataを読込

{837A4038-FB7D-40C7-AD8F-DE0ED379934F}.png

{
 "id": "4010401098455",
 "errors": null,
 "message": "200 - OK.",
 "hojin-infos": [
  {
   "corporate_number": "4010401098455",
   "postal_code": "4500002",
   "location": "愛知県名古屋市中村区名駅3丁目28番12号",
   "name": "Qiita株式会社",
   "kana": "きーた",
   "status": "-",
   "update_date": "2021-12-24T00:00:00+09:00"
  }
 ]
}

:five: OpenAIモジュール: GPTで代表者名を推測

OpenAIのプラットフォームでAPIキーを取得 下記のプラットフォームへアクセスして、API Keyを取得します。

:arrow_right: https://platform.openai.com/

対話文でWebAPIで取得した法人名から代表者氏名の推測を指示

{197F6D42-D999-4984-97C5-DB60DEF2EEA3}.png

次の企業の代表取締役社長の名前を端的に、肩書と氏名の形で回答してください。
確証が持てない場合には【責任部署・責任者名】の形で返却してください。
会社名:{{3.`hojin-infos`[].name}}

:six: Google Docs: テンプレートをコピーして値差し込み

Google Docsテンプレートにプレースホルダを設定
乙 {{Company_Address}}
    {{Company_Name}}
    {{Representative}} ㊞
Google Docsモジュール: HTTPモジュール等からプレースホルダに変数を代入し、新規ファイルとして保存

{71C0E7B1-500A-4B46-BC90-B6A4436530A3}.png

:end: 成果物レビュー

  • Googleスプレッドシートに行追加があると起動するシンプルな設計
  • 国税庁のAPIから取得した法人名、所在地は(当然ながら)正確
  • Googleドキュメントのプレースホルダに変数を埋め、テンプレートから新規ファイルを作成する全体の動きは問題なし

ということで、エラーハンドリングも例外なく、うまく動いてくれました。
しかしながらOpenAIを用いて代表者の氏名を推察させる動きは課題が多く、実用化に堪えないと判断しました。
試しに、Qiita株式会社の情報を取得させてみたのですが・・・社長 is 誰 :interrobang:
{134ED185-BA39-40EE-9FE0-42C815C7B1A8}.png
もちろん、うまく取得できる企業もあるのですが、ファクトチェックが面倒なのと、誤った情報を相手先に送ってしまうと失礼にあたるため、残念ながら代表者名を推察する機能についてはお蔵入りになりそうです。

:repeat: 振り返り

実装にあたっては、構想から生成AIを利用してみました。
ツールの選定や構成の提案も行えるため、Makeの実装はモジュールを並べて設定を施すだけの簡単な作業になりました。
無料APIでも情報の補完ができるのではないかと夢見ていましたが、正確さが求められる情報に対してAIの活用は難しい(高度な実装や、ファクトチェックの併用が必須)ことを実感する結果になりました。
ちなみに、ChatGPTに提案された手順と書き方がわかりやすかったので、こちらの記事構成にも流用しています。
生成AIによって実装方法を模索する時間が短縮できたため、検証に時間をかけることができました。
今後も、生成AIとの対話を繰り返しながら、アイディアを形にしていきたいです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?