【生成AIアプリ100チャレンジ】（20）音楽レビューアプリ

https://ai.nuevo.jp/music_review/

![スクリーンショット 2024-05-06 19.44.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398694/c52ccd3e-87d3-ec36-ee3e-3a5acebc0619.png)


開発環境

|  |  |
|:---:|:---:|
| Server | lightSail |
| Language | Python3.11 |
| Framework | Django |
| DB | sqlite3 |

ローカル環境ではPythonのvenvを使用。エディタはvs codeです。
目的
音楽レビューのフレームワークです。
タイトル、アーティスト、プロデューサー、ジャンル、レーベル、推薦曲、リリース日などを入力して、フレームワークに沿ってレビューを完成してくれます。


# コード
```python:qiita.rb

    chat_results = ""
    if request.method == "POST":
        form = ChatForm(request.POST)
        if form.is_valid():
            title = form.cleaned_data['title']
            artist = form.cleaned_data['artist']
            genre = form.cleaned_data['genre']
            producer  = form.cleaned_data['producer']
            label = form.cleaned_data['label']
            recommend = form.cleaned_data['recommend']
            track_list = form.cleaned_data['track_list']
            members = form.cleaned_data['members']
            if 'release' in form.cleaned_data and form.cleaned_data['release'] is not None:
                release = form.cleaned_data['release']
                release = release.strftime('%Y-%m-%d')
            else:
                release = ''
            review = form.cleaned_data['review']
            try:
                client = OpenAI(
                    api_key = OPENAI_API_KEY,
                )
                review = client.chat.completions.create(
                    model="gpt-3.5-turbo",
                    messages=[
                        {
                            "role": "system",
                            "content": f"""
                            導入部
                            \nーーーーーーーーーーーーーーーーーーーーーー\n
                            {review}
                            \nーーーーーーーーーーーーーーーーーーーーーー\n
                            この音楽作品の評論を書いています。300文字以内に綺麗に校正してまとめてください。
                            """
                        }
                    ],
                )
                review_result = review.choices[0].message.content
                review_result = review_result.replace("\n", "<br>")
                print(review_result)

                tracks = track_list.split("\n")
                numbered_track_list = ""
                for i, track in enumerate(tracks, start=1):
                    numbered_track_list += f"{i}. {track}<br>"
                members = members.replace("\n", "<br>")
                chat_results = "アルバム名:" + title + "<br>アーティスト:" + artist + "<br>ジャンル:" + genre + "<br>プロデューサー:" + producer + "<br>レーベル:" + label + "<br>リリース:" + release + "<br><br>レビュー：<br>" + review_result + "<br><br>おすすめ曲：<br>" + recommend + "<br><br>収録曲：<br>" + numbered_track_list + "<br><br>参加メンバー：<br>" + members

            except Exception as e:
                return HttpResponse(f"API呼び出し中にエラーが発生しました: {str(e)}", status=500)
        else:
            return HttpResponse("フォームのデータが無効です。", status=400)
    else:
        form = ChatForm()

```

各フレームワークの課題に合わせて出力されます。

アプリ画面
![スクリーンショット 2024-05-06 19.44.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398694/a08581c2-8481-11ce-11e9-5dabc157e154.png)


感想
レビューの校正は一部分ですが、収録曲などを整理してフォーマット通りに出力してくれるので助かります。