LINE 上で音声を文字起こしし、GPT-3.5-turbo によって整形された文章を返信する LINE Bot の FastAPI サーバー側のソースコード
↓のツイートを見て LINE でサクッと出来たら便利だなと思ったのがきっかけで作りました。
@kensuu 1: 超おもしろい記事を頭の中で書く 2: それをそのまま言葉で話す 3:音声入力でテキストにする 4:ChatGPTで整形してもらう 5:noteに貼る 6:細かいところを修正
ブログ書くのがめちゃくちゃ楽になってしまった。文章書くのが苦手な人でも、これならブログを毎日書けたりするのでは!
- OpenAI Whisper API による音声メッセージの文字起こし
- GPT-3.5-turbo による文章整形
- LINE Developers で LINE Messaging API のチャンネルを作成し、チャンルアクセストークンとチャネルシークレットを取得
- OpenAI でアカウントを作成し、API キーを取得
- Python 3.9 以上がインストールされていることを確認
- このリポジトリをクローン
poetry
をインストールpoetry install
を実行して、必要なパッケージをインストール.env.sample
を参考に、CHANNEL_ACCESS_TOKEN
、CHANNEL_SECRET
、OPENAI_API_KEY
を取得した API キーに置き換えた.env
ファイルを作成
sh dev.sh
を実行して、APIサーバーを起動http://127.0.0.1:8000/
にアクセスし、{"message": "Hello World"}
が返ってくることを確認
- ngrok をインストールして、
ngrok http 8000
を実行 - LINE Developers コンソールで、Webhook URL を
https://*****/.ngrok.io/webhook
(ngrok で発行されたURL)に設定
- LINE アプリで、Whisper GPT LINE Bot に音声メッセージを送信
- 文字起こしと整形された文章が返信される
AWS Lambda へのデプロイを想定
sh build.sh
を実行すると、デプロイ時に必要な zip ファイルが作成される- AWS Console > AWS Lambda から「関数の作成」
- 一から作成
- 関数名は任意(これを {func_name} とする)
- Python 3.9
- x86_64
- 「コード」>「アップロード元」>「.zipファイル」から
artifact.zip
をアップロード - 「コード」>「ランタイム設定」から、ハンドラの値を
{func_name}.main.lambda_handler
に設定 - 「設定」>「環境変数」から、
.env
ファイルに記載した環境変数を設定
- 一から作成
- AWS Console > API Gateway から 「APIの作成」
- REST API
- 新しいAPI
- 「リソース」>「アクション」>「メソッドの作成」
- ANY
- 統合タイプ: Lambda 関数
- Lambda プロキシ統合の使用を選択
- Lambda リージョン: ap-northeast-1
- Lambda 関数: {func_name}
- デフォルトタイムアウトの使用を選択
- ANY
- 「リソース」>「アクション」>「リソースの作成」
- 「プロキシリソースとして設定する」を選択
- リソース名: proxy
- リソースパス:
/{proxy+}
- 統合タイプ: Lambda 関数プロキシ
- Lambda リージョン: ap-northeast-1
- Lambda 関数: {func_name}
- デフォルトタイムアウトの使用を選択
- 「アクション」>「APIのデプロイ」
- 新しいステージ
- REST API
- エンドポイントのURLの後ろに
/webhook
を追加して、LINE Developers コンソールで Webhook URL に設定
- ChatGPT に投げる prompt の改善
MIT License