ココナラ法律相談の法律Q&Aに ChatGPT を導入した話
こんにちは。ココナラ法律相談 の開発をしているエンジニアの大川と高崎です。
ChatGPT、話題にならない日がないくらい話題ですよね。
先日の ChatGPTを駆使して実現したAIアシスタント機能の開発ストーリー に引き続き、ココナラ法律相談でもChatGPTを組み込んで既存機能を改善した話をしていきます。
ChatGPTを活用した機能を企画・開発するにあたってさまざまな課題がありました。
今回は、その課題を解決するにあたり、何に苦労しどう工夫したかについて書いていければと思います。
もうすでに取り組んでいる方、これから取り組む方のご参考になるのではないでしょうか。
つくったもの
法律Q&A投稿画面 の相談内容から相談タイトルを自動生成する機能をリリースしました。
ChatGPT導入後の投稿画面
背景
ココナラ法律相談はいわゆるメディアサービスであり、多くのユーザーがサイトを訪問し、コンテンツを閲覧して頂くことで付加価値が増します。そのため安定的な集客がビジネスのキモになります。現在ユーザーの大きな流入元になっているのが 法律Q&A というコンテンツです。
毎日たくさんの投稿が行われており、ユーザーの方にも好評の機能なのですが、日々生成される投稿内容に課題もありました。
ChatGPT導入前の投稿画面
多くのユーザーにとって重要なのは質問内容そのものであり、わかりやすいタイトルを考えるという行為は負荷が高く、結果としてわかりにくいタイトルや意図が不明なタイトルの記事ページが作られてしまっていました。
法律Q&Aページの相談タイトルはtitle
タグやh1
要素としても使用されており、SEOの観点からもそのまま検索エンジンにインデックスされる可能性が高いため、そのページ内でとても重要なテキストとなります。
つまり、相談タイトル作成がユーザーにとっては重要度が低く、サービスを運営する我々にとっては重要度が高いというアンバランスな構造が発生していました。
また、「助けてください。」「至急教えてください。」などの質問内容が不明なタイトルを減らすことにより、弁護士から回答がしやすくなり、記事のボリューム数増加やユーザー体験の向上など複数のメリットも期待できます。
テキスト生成はChatGPTが最も得意とするところであり、AI導入により上記の様な課題を解決出来るのではないか?という仮説を立てました。
上記の様にかなりざっくりした企画だったのですが、チームの雑談チャンネルでちらっとアイデアをつぶやいたところ、上司から前向きなコメントがあり、実際に業務として進めることにしました。
実際のSlackでのやり取り
苦労・工夫したこと
仕様検討
通常、開発プロジェクトでは、ビジネスサイドが仕様検討を行った後、デザイナー・エンジニアと相談しながらプロジェクトを進めていきます。しかし、今回はエンジニアが主導するプロジェクトだったため、最初にエンジニアが考えているイメージをFigmaに反映し、上司と議論を始めました。
最初のプロトタイプ
一口にタイトルを自動生成する機能と言っても、いろいろなデザインのパターンが考えられます。また、OpenAI API の制約(速度面、費用、精度など)と上手く付き合いつつ、ユーザーにとって価値のある機能を作る必要があります。
途中からはデザイナーにも入ってもらい、仕様とデザインの詳細を詰めていきました。最終的には採用をしませんでしたが、「投稿内容の確認」ボタンをクリックした際にタイトルの自動生成を行う仕様(自動生成のデフォルト化)など複数パターン検討しました。
さまざまなUIデザインを検討
ココナラ法律相談アプリケーションとOpenAI APIの連携
ココナラ法律相談はバックエンドAPIに Ruby on Rails を使用しているため、今回はシンプルに既存のRailsアプリケーション内に OpenAI API と通信する REST API を実装することにしました。
OpenAI の公式ドキュメントには、Node.js や Python の実装例が示されていますが、Ruby で使いたい場合、Ruby OpenAI をインストールすれば、ほぼ同じように使うことが出来ます。
以下は実際に、Rubyから OpenAI API にリクエストする際の例です。
client = OpenAI::Client.new(access_token: [your_api_key])
response = client.chat(
parameters: {
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: prompt_string, }],
temperature: 0.7,
max_tokens: 80,
n: 1,
}
)
temperatureは、GPT モデルのテキスト生成時のランダム性や創造性を制御するパラメータです。temperatureは0から1の範囲の値をとり、その値が大きいほど、生成されるテキストの多様性やランダム性が高くなります。今回の機能は1つの質問に対して、複数回タイトル生成することを許容しているため、ある程度、回答にゆらぎがある方が適切と考えtemperatureを0.7に設定しました。
nパラメータは、APIリクエストから得られる応答の数を示しています。nに指定された数値に応じて、モデルは複数の異なる回答(選択肢)を生成します。これは、生成されるテキストの異なるバリエーションを取得したい場合に便利です。今回は質問内容から質問タイトルを1つ得る、というシンプルなものなので、n:1を指定しています。
またモデルは費用も安く、速度も速いとされる gpt-3.5-turbo を指定しています。
50文字を超えるタイトルが生成されてしまう問題
相談タイトルを生成する機能は、相談内容を要約してタイトルを生成する機能です。
相談タイトルは10文字から50文字以内なので、生成するタイトルの文字数をプロンプトで制限しました。また、生成精度を向上させるために、いくつかの指示をプロンプトに含めました。
しかし、初期構築したプロンプトは精度が悪く、度々50文字を超えるタイトルが生成されてしまいました。
次の質問の見出しを50文字以内で作成してください。〜〜〜して下さい。〜〜〜して下さい。...
質問: {ユーザーが入力した質問}
検証や調査を重ねていく中で、以下の条件を満たしていると比較的精度よく生成してくれることがわかりました。
- プロンプトへの指示は最小限にする
- 最小限にすることで特定の指示が無視されることを避ける
- 背景を説明する
- 条件は箇条書きにする
精度は最後に記載しますが、上記を適用することで満足できる精度を出せています。
OpenAI APIキーの発行にあたるOrganizationとAPIキーの単位検討
OpenAI API のキーを発行するにあたって、まずはOpenAIアカウントのOrganizationを作成する必要があります。
ココナラ法律相談は、スキルマーケットの ココナラ とは別のアプリケーションとして開発されており、リポジトリやサーバー等は完全に分離されています。
このような状況下で、どの単位をOrganizationとするかを検討しました。
結論としては、プロダクト(ココナラ法律相談)をOrganization として作成しました。
比較表
Organizationの単位については、以下3つの単位を検討しました。
- 会社(ココナラ)をOrganizationとする
- プロダクト(ココナラ法律相談)をOrganizationとする
- プロダクトの機能(ココナラ法律相談の相談Q&A機能)をOrganizationとする
これを、「保守・運用」「セキュリティ」「モニタリング」の3観点で検討しました。
最終的にプロダクト(ココナラ法律相談)をOrganizationとした理由としては、上記3つの観点をバランスよく満たしてくれるからです。
具体的には
- プロダクトごとのAPI利用料金のモニタリングが容易
- APIキーが必要以上に増えない
- 不要な権限付与を避けることができる
などが挙げられます。
リリースしてみた結果
リリースしてみた結果、生成したタイトルの6~7割はそのまま利用されており、8割以上のタイトルは参考にされている 結果となりました 🥳
想像よりも多くの方に利用されており、継続的に利用されれば法律Q&A全体の質が向上し、SEO的にも有利に働くのではないかと考えています。
最後に
今回はココナラ法律相談にChatGPTを初めて導入しました。
試験的な意味合いもあったのですが、クイックにコストパーフォーマンスの高い機能をリリースできたのではないかと考えています。
今後も、弁護士と悩みを抱える相談者をつなぐためAIの活用を検討していきます!
ココナラ法律相談の開発チームは小さいチームですが、エンジニア主導でプロジェクトを進めることができる環境です。
主体的にプロダクトを良くしていきたい方、今回の話に興味を持っていただけた方は是非ご応募ください!
Discussion