見出し画像

LINEとChatGPTを使用したチャットボットの改良


序章 - LINEとChatGPTを使用したチャットボット

1.1 ChatGPTの基本機能

ChatGPTは、OpenAI社が開発した自然言語処理AIで、ユーザーと自然な形で対話を行うことができます。質問に対して答えるだけではなく、文章の生成や編集、情報の検索など多彩なタスクをこなすことができます。これにより、より人間らしい対話が可能となり、ユーザーとのコミュニケーションを円滑に進めることができます。

1.2 LINE向けチャットボットの必要性

LINEは、アジアを中心に利用されているメッセージアプリであり、多くの人々が日常的に使用しています。メッセンジャーアプリ、LINE向けのチャットボットは、ユーザーにとって身近なコミュニケーション手段であるため、情報提供やサポートなどを容易に行うことができます。また、ユーザーとの関係性を深めることができるので、ビジネスやマーケティングの分野でも重要な役割を担っています。

このNoteで紹介するLINE向けチャットボットスクリプトは、ChatGPT研究所の有償Note記事を元に改良を行っています。また、このスクリプトをベースに、ご自身でカスタマイズや拡張を行うことが可能です。

注意事項

このスクリプトは有償コードであるため、拡張前の状態で利用する際も拡張後で利用する際もChatGPT研究所のNote記事で購入することをお忘れなく。

改良後のスクリプトは同じくChatGPT研究所がDiscord内に設立したコミュニティ内で公開されています。


第2章:機能拡張前のチャットボットの紹介

2.1 基本機能の概要

機能拡張前のチャットボットは、一般的な会話と質問への回答という基本機能を提供しています。ユーザーと日常的な会話を楽しむことができます。元のスクリプトはGoogle Apps Scriptで設置でき、データベースとしてスプレッドシートを使用することで費用を抑えることができました。また、スクリプトはLINEのBot APIの無料枠の範囲内で使用することが可能です。

2.2 開発の経緯

当初、筆者はGoogle Apps Script環境で使われているJava Scriptの開発経験は無く、チャットボットを拡張する予定はありませんでした。しかし、ChatGPT研究所がDiscord内で作成したコミュニティ内で議論とJava Scriptの技術の勉強に取りつかれ、最終的に以下の機能の実装に至りました。

・キャラクター性の強化
・時刻認識機能の実装
・個別情報への対応の向上
・画像認識機能の実装
・グループチャット機能の実装
・LINEスタンプ認識機能の実装
・Web検索機能の実装
・地図検索機能の実装

機能拡張前の構成

第3章:機能拡張後のチャットボットの紹介

3.1 拡張機能の概要

機能拡張後のチャットボットでは、多くの新しい機能を追加し、ユーザー体験を向上させました。キャラクター性を強化することで、ロボット的な会話が減り、会話がより自然になりました。また、時刻認識機能によって、チャットボットは会話内の時刻を認識できるようになりました。

機能拡張後の構成

画像認識機能は、Cloud Vision APIを使用して実装され、チャットボットがユーザーが送信した写真を認識できるようになりました。名前認識機能では、ユーザーの名前を自動的に認識し、よりパーソナライズされた対応が可能になりました。

キャラクターとデートにだって行けちゃいます(いけません)

グループチャット機能を実装することで、チャットボットがグループチャット内で活用できるようになり、LINEスタンプ認識機能によって、チャットボットはユーザーが送信したスタンプの意味を理解できるようになりました。

Web検索機能は、Google Custom Searchとスクレイピングを組み合わせて実装され、インターネット検索を行い、チャットボットがWeb検索結果を提供できるようになりました。また、地図検索機能は、Place APIを使用して実装され、チャットボットが地図上の情報を検索できるようになりました。

3.2 ユーザー体験の向上

これらの機能拡張により、ユーザー体験は大幅に向上しました。機能拡張前に存在していた問題点が解消され、より多彩な機能を利用できるようになりました。ChatGPT4のAPIに変更すればもっと機能を向上させることが可能かもしれませんが開発の方向性としてはキャラクター性を強化しつつリーズナブルな価格での運用を重視することに重きを置くことにしたのでChatGPT3.5を採用しています。

第4章:キャラクター強化

キャラクター性の維持は、チャットボットがユーザーとの対話中に一貫性を保つために重要です。ChatGPTを使用したチャットボットは、プロンプトで設定されたキャラクターが崩れないようにするために、いくつかの工夫が施されています。

キャラがAIであることに気が付いてしまった例。筆者はMeAI病と呼称している。

4.1 個性的なキャラクターの設計

ChatGPTのチャットボットに個性的なキャラクターを持たせるには、システムプロンプトにキャラクターの個性を設定します。例えば、ボットが「忍者」という性格を持っている場合、システムプロンプトに「あなたは忍者です。一人称は"拙者"で語尾に"ござる"をつけてください。」と設定します。ユーザーと話す際はまるでチャットボットが忍者であるかのように話し始めます。ただし会話が長くなるとチャットボットは忍者であることを忘れてしまうことがあります。

4.2 キャラクター性を反映させる対話スタイルの開発

キャラクターが崩れないようにするために、ChatGPTへの返信に「[ボット名]として返信して」というフレーズを含めることで、一貫したキャラクター性を維持できます。これにより、ChatGPTはキャラクターを反映させた返信を生成することができます。

ユーザーのキャラクター改ざんを防御

このように、ChatGPTを使用したチャットボットでは、キャラクターが崩れないようにするために、いくつかの工夫が施されています。これにより、完全ではありませんがユーザーはチャットボットとの対話中に一貫性のあるキャラクターと交流することができ、より安定したキャラクター会話体験を得ることができます。

第5章:キャラクターの行動スケジュールによるリアリティ向上

システムプロンプトで設定されたキャラクターの行動スケジュールは、ChatGPTが提供する回答や対話のリアリティを向上させるために役立ちます。本章では、キャラクターの行動スケジュールを考慮した回答の変化について説明します。

5.1 キャラクターの生活感の演出

システムプロンプトで設定したキャラクターの行動スケジュールは、そのキャラクターが現在どのような状況や時間帯にいるのかをChatGPTに示すことができます。これにより、キャラクターに生活感を与え、リアリティを増すことができます。例えば、キャラクターが出社前の時間帯であれば、仕事に関連する話題や、その日の準備についての会話が生じます。

キャラクターに時間の概念が生まれている

5.2 スケジュールに応じた回答の変化

行動スケジュールを設定することで、キャラクターの生活感が表現され、よりリアルな対話が実現できます。ChatGPTは、設定されたスケジュールに従ってキャラクターの行動や反応を生成することで、ユーザーとの対話の中でキャラクターの矛盾しない振る舞いを保つことができます。

スケジュールに沿った解答例
貴方は平日、以下のように過ごしています。 
6:00〜6:30⏰:起床🛌、シャワーを浴びる🚿、朝食をとる🍞☕
6:30〜7:00⏰:通勤準備(服装👗、化粧💄など)
7:00〜11:30⏰:あかねさんより先に出社🏢し、業務に従事する💼
11:30〜12:30⏰:昼休み🍱、あかねさんと被らない時間でランチを食べる🍴
12:30〜18:30⏰:業務に従事する💻
18:30〜19:00⏰:退社準備👜、通勤する🚉
19:00〜20:00⏰:帰宅🏠し、夕食をとる🍚
20:00〜21:00⏰:自己の時間(ゲーム🎮、アニメ鑑賞📺、パソコンでWebサーフィン💻)
21:00〜22:00⏰:家族との時間👨‍👩‍👧、テレビを見たり📺、会話を楽しむ🗣️
22:00〜22:30⏰:風呂に入る🛁、寝る準備をする🌙
22:30〜⏰:就寝する😴

これらの要素が組み合わさることで、プロンプトで設定されたキャラクターの行動スケジュールは、ChatGPTが提供する回答や対話のリアリティを向上させる役割を果たします。

第6章:画像認識

6.1 画像解析の技術と応用

画像解析機能は、AIや機械学習によって画像の特徴を抽出し、特定のタスクを実行するために使用されます。ChatGPT4では画像認識機能が使えるようになる予定ですが現在のChatGPT4のAPI使用料とても高いのでCloud Vision APIで代用することにしました。

Cloud Vision APIは、Googleが提供する機械学習モデルを利用した画像解析サービスです。このAPIは、画像から物体検出、顔認識、テキスト抽出(OCR)、ランドマーク認識、ロゴ認識などのタスクを実行することができます。

以下の関数がCloud Vision APIを使用して画像の情報を取得し、解析結果を文字列に変換する役割を果たしています。

  • analyzeImage関数:画像をBase64形式にエンコードし、APIリクエストで使用します。リクエストボディには、画像データと検出する特徴を指定します。この例では、ラベル検出、テキスト検出、ランドマーク検出、顔検出、オブジェクトのローカライズ、文書テキスト検出が指定されています。

  • visionResultsToString関数:Cloud Vision APIからの検出結果を整形して文字列に変換します。各アノテーションのリストから説明(description)を取得し、それらをカンマ区切りの文字列に変換します。ラベル、テキスト、ランドマーク、顔の数、オブジェクトがそれぞれの結果として返されます。

Vision APIによる活用例1


6.2 画像に基づく情報提供と対話


画像認識機能を利用したチャットボットは、ユーザーが送信した画像を元に情報提供や対話を行うことができます。例えば、ユーザーが送信した画像に含まれるテキストを読み取り、その内容に応じた返答を生成することができます。

ソースコードでは、ユーザーが画像を送信すると、getImage関数を使用して画像のURLを取得し、Googleドライブ上のドキュメントに画像を貼り付けます。次に、analyzeImage関数でVision APIによる画像解析を行い、visionResultsToString関数で解析結果を文字列に変換して返答します。

Vision APIによる活用例2

このように、画像認識技術を活用したチャットボットは、ユーザーが送信した画像に基づく情報提供や対話を実現することができます。これにより、ユーザーとのやり取りがより豊かで効果的になります。以下は、画像認識技術を活用したチャットボットのいくつかの応用例です。

  1. 観光情報の提供: ユーザーが旅行先で撮った写真をチャットボットに送信し、その場所に対するキャラクターの反応を楽しむことができます。

  2. 商品検索: ユーザーが商品の画像を送信し、キャラクターがその製品に対する意見を述べることができます。

  3. レシピ提案: ユーザーが冷蔵庫にある食材の画像を送信し、チャットボットがその食材を認識して適切なレシピを提案することができます。

  4. 画像からの情報抽出: ユーザーが書籍や記事の画像を送信し、チャットボットがそのテキスト情報を抽出し、要約や翻訳を提供することができます。

これらの例からわかるように、画像認識技術を活用したチャットボットは、多様なシーンでユーザーのニーズに応える情報提供や対話が可能です。このような技術の進歩により、AIと人間のコミュニケーションがさらにスムーズになり、より多くの利便性がもたらされることが期待されます。

第7章:名前認識

7.1 個別ユーザーへのパーソナライズ対応

AIチャットボットは、LINEのユーザープロファイルから取得したLINEアカウントのニックネームをメッセージに付与することで、個別ユーザーへのパーソナライズ対応を実現します。これにより、ユーザーの名前を用いて会話を行うことができます。

7.2 名前を活用した親密度向上

LINEのニックネームを活用することで、チャットボットはユーザーとの親密度を向上させることができます。ユーザーの名前を使うことで、よりパーソナライズされた対話が可能になり、ユーザーとのつながりを深めることができます。

記憶を消去した直後に話しかけても名前を付けて回答される。

LINEから取得したメッセージにLINEのニックネームを付与しChatGPTにユーザーの会話と合わせて送信することで名前認識を実現しています。この機能により、チャットボットは個別ユーザーに対してより適切な対応ができるようになります。

第8章:グループチャット機能の追加

チャットボットは、個人との会話だけでなく、グループチャットでも活躍します。この章では、複数ユーザーとの対話管理とグループチャットでの役割分担を実現する方法を紹介します。

8.1 グループチャットでの役割分担

グループチャットでは、発言者が複数いるため、誰がどのような役割を担っているかを把握することが重要です。LINEのユーザープロファイルから取得したLINEのニックネームを用いて、各発言者の識別が可能です。

また、ボットが会話に割り込まないよう、ボット名が呼ばれた場合のみ応答するよう設定しています。これにより、ボットは必要な時だけ会話に参加し、適切な対応ができるようになります。

8.2 複数ユーザーとの対話管理

複数ユーザーとの対話を管理するために、グループチャットでのメッセージのやり取りを適切に処理する必要があります。名前認識と同じ仕組みを使用し、個々の発言者を識別しています。また、ボットが適切なタイミングで応答するために、ボット名が会話に含まれない際は会話の内容だけを記録しChatGPTへの送信は行われません。ボット名が呼ばれた場合のみメッセージを処理しています。

これらの機能により、ボットは複数ユーザーとの対話を効果的に管理し、グループチャットでの役割分担を実現することができます。これによって、ユーザーはボットを介したコミュニケーションがスムーズになり、効率的な情報交換が可能になります。

第9章:Lineスタンプ認識を活用した対話システム

LINEスタンプは、会話中に送信できるイラストやアニメーションを提供しており、ユーザーが感情や意見を表現する手段として使われます。

9.1 スタンプに対応した返信生成

LINEスタンプを利用して返信を生成する際には、まずスタンプに設定されたキーワードを読み取ります。Lineから取得したメッセージのタイプが "sticker" である場合、スタンプに設定されたキーワードを取得しています。ただし、LINE非公式のスタンプではキーワードが設定されていない場合があるため、そのようなスタンプに対応できないこともあります。

9.2 表現力豊かな対話の実現

スタンプに対応した返信を生成することで、ユーザーとの対話がより表現力豊かになります。ユーザーが送信したスタンプに応じて、適切な返信を生成し、ユーザーとのコミュニケーションをスムーズに進めることができます。このシステムを利用することで、スタンプに設定されたキーワードに基づいて返信を生成し、ユーザーとのコミュニケーションをより表現力豊かに進めることができます。

スタンプによるキャラクターの反応例

第10章:Web検索機能の実装

GoogleのCustom Search APIを用いたスクレイピング技術によって、インターネット上の情報を収集し、ボットに情報を提供することが可能になります。

10.1 インターネット情報を活用した対話


ChatGPTは、2021年までの情報しか保有していないため、生成された情報は不正確なものが多いです。そこで、GoogleのCustom Search APIを使ってインターネット上の情報を収集し、ChatGPTに提供することで正確な回答を得ることができます。ユーザーがLINEのクイックリプライからWeb検索を実行することでインターネット検索の関数が実行されます。インターネット関数の実行はその時だけ実行されるのでインターネット検索で利用されるAPIの追加の利用料を節約しています。

クイックリプライを選択することによりAPIアクセスを発動させる

10.2 ユーザーの質問に対する即時回答


ユーザーがWeb検索を実行すると、ボットはGoogleのCustom Search APIを使ってインターネット上の情報を収集し、その情報を元に回答を生成します。回答は、最新の情報に基づいて回答されるため、ユーザーはお気入りのキャラクターと新しい情報で会話を楽しむことができます。

ニュースサイトよりリアルタイムの情報を取得して表示

ただし、Google Apps Script (GAS)環境ではスクレイピングを禁止している応答が返らないサイトが検索結果に含まれると、ブロックされてしまうことがあります。Google Apps Scriptが利用しているIPアドレスがブロック対象としてWebサイト側で登録されている可能性が高いため、Google Apps Script以外の環境でスクレイピングを行うことが望ましいです。

天気サイトよりリアルタイムの情報を取得して表示

第11章:地図検索機能の実装

ChatGPTの機能では位置情報に関する質問をするとデタラメな答えが返ってきます。地図検索機能を使用することで、ユーザーが位置情報に関連する質問をした際に、適切な情報や周辺施設の検索結果を提供することができます。

11.1 位置情報を利用した情報提供


地図検索機能を実装することで、ユーザーが位置情報に関連する質問をした際に、AIチャットボットは正しい地図情報を提供できます。例えば、「近くの駅はどこですか?」や「近くで食事ができる場所を検索して?」といった質問に対して、適切な情報を提供することができます。これにより、ユーザーは簡単かつ迅速に求める情報を得ることができます。

11.2 周辺施設検索とキャラクターの感想に基づくおすすめスポット紹介


地図検索機能の中でも、周辺施設検索は特に重要です。ユーザーが周辺のレストランやコンビニなどの施設を探したい場合に、AIチャットボットは適切な施設情報を提供できます。特に、本ボットではキャラクターの感想に基づいたおすすめスポットが紹介されます。
ユーザーが地図検索を行うと、ボットは周辺施設の情報を取得し、それを元にキャラクターが感想を述べます。例えば、おしゃれなカフェや美味しいレストランがある場合、キャラクターは「この近くに素敵なカフェがあるみたいだよ!試してみては?」や「このエリアには評判の良いレストランがたくさんあるよ。ディナーにオススメだよ!」といった感想を述べ、おすすめスポットを紹介します。

位置情報によりキャラクターからおすすめが提示される。下部にPlace APIの検索結果上位三位が表示されるが残念ながらキャラクターの発言との関連性はない

これにより、ユーザーはただ施設情報を受け取るだけでなく、キャラクターの感想を通じて、より親密なつながりを感じることができます。

第12章:結論 - ChatGPTの可能性と今後の展望

本書では、ChatGPTを用いたLINE向けチャットボットの開発とその機能拡張について説明しました。キャラクター性の強化、時刻認識機能の実装、個別情報への対応の向上 、画像認識機能の実装、グループチャット機能の実装 、LINEスタンプ認識機能の実装、Web検索機能の実装、そして地図検索機能の実装の実装を通じて、ユーザー体験の向上が図られました。そして筆者自信もGoogle Apps ScriptでJava Scriptを開発するという経験を得られました。

12.1 総括

これまでの章で取り上げた機能拡張は、ChatGPTをより有用で親密なチャットボットへと進化させるものでした。それぞれの機能が相互に補完し合い、ユーザーとの対話を円滑にし、多彩なサービスを提供することが可能になりました。

12.2 今後の開発と応用分野

今後のChatGPTの開発では、さらなる機能拡張や技術革新が期待されます。例えば、音声認識や自然言語理解の向上により、より自然な対話が実現されるでしょう。また、ディープラーニング技術の進化に伴い、チャットボットの知識や理解力も向上し、より幅広い分野での活用が可能になることが期待されます。

ChatGPTの応用分野も広がりを見せており、教育、医療、企業のカスタマーサポートなど、多岐にわたる分野で活躍が期待されています。さらなる技術革新とともに、ChatGPTは私たちの生活をより便利で豊かなものにしてくれることでしょう。

最後にもう一度今回お世話になったChatGPT研究所さんのリンクを貼っておきます。このコードがなければ私は今回の記事とスクリプトを書けませんでした。ありがとうございました。


この記事が気に入ったらサポートをしてみませんか?