LINEbotとOpenAIのAPIを用いて、オンライン英会話をLINEbotで学べる「AI英会話くん」を開発しました！！

<h1> 目次</h1>

<p>１.はじめに</p>
<p>2.LINEbotの概要</p>
<p>3.実行環境</p>
<p>4.開発の流れ</p>
<p>5.苦労した点、気づいたこと</p>
<p>6.最後に</p>


<h2>１.はじめに</h2>
<p>私がこのLINEbotを開発しようと思った動機は、「すでに存在するサービスをLINEbotでより簡単に少ないコストで利用できるようにしたいと思った」からです。その中で今回「英会話」を選んだ理由は、LINEbotというメッセージメインのプロダクトの中で１番実現性が高く、需要が大きいと思ったからです。もちろん自分自身も英会話に興味がありました。</p>

<p>また、検索でヒットするオンライン英会話サービスの内容を見てみると、ほとんどがLINEbotで実現することができると思ったのも選定理由の1つです。もちろん英会話なので発音などを学べることは大きいのかもしれませんが、より安価あるいは無料で提供できるのであれば利用したい人はいるのではないかと思いました。今回はその機能の概要とやり方を軽く説明していきます。</P>

<p>こちらから友達追加できます。</p>

![627mvuvr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/4d307f9b-756a-8ac0-6fe0-1aa194a91657.png)



<h2>2.LINEbotの概要</h2>
<p>今回私が開発した「AI英会話くん」は主に4つの機能が存在します。</p>

①フリートーク機能
②英文添削機能
③発表練習機能
④会話フレーズ講義機能

これから上記4つの機能について説明していきます。
<h3>①フリートーク機能</h3>
<p>この機能はユーザーが話したいトピックを選定し、それについて自由に話してくれる機能です。これは他の英会話botでもよくある機能ですね。</p>

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/78654344-266d-db64-975f-b352011b86ba.jpeg">

<p>しかし、トーク終了後には自分の英文の使い方などに対して、良かった点と改善点をフィードバックしてくれます。これはオンライン英会話などで会話をした後に講師からフィードバックを貰う流れを再現しました。英会話をしてくれるbotはありますが、ここは差別化のポイントです。また、会話の途中で分からない質問があった時はクリックリプライで「分からない」を押すと、別の質問をしてくれます。</p>

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/8ad2ccec-6279-0a53-273a-5a932d0800c1.jpeg">


<h3>②英文添削機能</h3>
<p>この機能は定番ですが、英語で書いた文章を文法的に正しい丁寧な英語に書き換えてくれる機能になります。これも英会話サービスだと講師が直々にやってくれので時間が限られますが、botなら送り放題です！！今回はメール文で試してみました！</p>
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/8778d8fc-6b51-eefd-8925-c4bc3a818ace.jpeg">

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/f12801e8-279f-9ff9-c457-bd4919c8f3f6.jpeg">

<h3>③発表練習機能</h3>
<p>この機能は英語の発表などで使う発表原稿などを送信すると、聞き手が質問しそうなところを質問してくれる機能です。これによって発表の練習の再現度がかなり高くなると思います！この機能はなかなか見た事がないので珍しいのではないかと思います。また、これに関しても発表練習のフィードバック機能がついています！！以下は文章送信後の質問の流れです。</p>

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/9fab1bc5-bb78-4ccd-477c-511cf4bed440.jpeg">

<p>発表文を送信すると、想定される質問が1つずつ出力されます。ユーザーは送られた質問に答えます。質問に答えると次の質問がきます。発表の流れをかなり再現できているのではないでしょうか。分からない質問に関してはクイックリプライの「分からない」を押すと、別の質問をしてくれます。</p>

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/9664988f-6329-f166-fded-9afbc76ff587.jpeg">

<p>そしてクイックリプライで「完了」を押すと、今までの会話からフィードバックが貰えます！</p>

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/568f4fde-ec9e-4481-5d9a-96a6a9d050c9.jpeg">

<h3>④会話フレーズ講義</h3>
<p>この機能はユーザーが学びたいジャンルを全12種類から選択すると、そのジャンルで使われるフレーズについての講義を生成し、実際に練習まで体験できる機能になります！この機能によってインプットの機会も与え、よりオンライン英会話に近づいたのではないかと思います！
</p>

<p>ジャンルを選択すると講義内容、フレーズ、例文、練習の流れで文章が作成されます。</p>

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/622d9280-0afd-1f74-00d3-1be59d0b381d.jpeg">

<p>練習に関してはシナリオを生成してくれるので、そこから会話を始めることで実際にそのフレーズを使用した練習ができます。</p>

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3445338/c3bb695b-f37f-1231-e36d-2439deb724c0.jpeg">


<h2>3.実行環境</h2>
<ul>
<li>Python3.9</li>
<li>AWS(Lambda、DynamoDB使用)</li>
</ul>


<h2>4.開発の流れ</h2>
①LINE Developersに登録する（プロバイダーを作成)<br>
②Open AIのAPI作成(APIkeyの発行）<br>
③AWSの設定(アカウント作成後にLambda関数とDynamoDBを使用)

<p>以下の記事を参考にしました！</p>

https://itc.tokyo/gas/gas-line-bot-with-chatgpt/

https://qiita.com/sasao3/items/2960642fd0b329be4846

<h2>5.苦労した点、気づいたこと</h2>
<p>
・プロンプト文の提案<br>
今回OpenAIと組み合わせたLINEbotの開発をしてみて、AIと対話する際のプロンプト文の提案はすごく時間が掛かりました。例えば今回の発表練習機能では1回で質問を全て出すのではなく、会話の中で質問をするように指示する際に何度分かりやすく書いてもうまくいきませんでした。そこでプロンプト文の最後に例をあげることでうまく実装することができました。ここから何も分からない人が見ても分かるくらいの明確で具体的な指示ができるかがとても大切だと実感しました。今回、chatGPT4のAPIを利用しましたが、chatGPT-3.5のAPIだと発表練習機能や会話フレーズ講義はうまくいかなかったので、そこも学びがありました。

・パラメーター調整
また、パラメータ調整の重要性も感じました。temperatureを変更することで出力にちらばりを発生させるなどができるのは、ユーザー体験が飽きづらくなるのかもしれないと思いました。
</p>



<h2>6.最後に</h2>
<p>このLINEbotアカウントは、私のインターン先での業務の一環として開発しました。AWSやOpenAPIを利用した事がないところから学び始め、１ヶ月ほどで完成する事ができました！今後もインターンでの活動や個人開発での学びなどを発信していくのでフォロー、いいね、保存よろしくお願い致します。</p>