見出し画像

【生成AIアプリ100チャレンジ】(19)映像作品レビューアプリ

#Python #API #django #生成AI #ChatGPT

開発環境

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

ローカル環境ではPythonのvenvを使用。エディタはvs codeです。
目的
読書感想文につづけて映像作品のレビューを評論フレームワークにあわせて、校正して出力してくれるアプリです。断片的なワードでもそれっぽくまとめていただけるので、インプットの後にアウトプットするときに使用するのが目的です。
コード

コード


try:
    OPENAI_API_KEY = os.environ['OPENAI_API_KEY']
except KeyError:
    return HttpResponse("APIキーが設定されていません。", status=500)
chat_results = ""
if request.method == "POST":
    form = ChatForm(request.POST)
    if form.is_valid():
        title = form.cleaned_data['title']
        director = form.cleaned_data['director']
        playwright = form.cleaned_data['playwright']
        distributing = form.cleaned_data['distributing']
        music = form.cleaned_data['music']
        casts = form.cleaned_data['casts']
        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 = ''
        introduction = form.cleaned_data['introduction']
        summary = form.cleaned_data['summary']
        impressions = form.cleaned_data['impressions']
        conclusion = form.cleaned_data['conclusion']
        try:
            client = OpenAI(
                api_key = OPENAI_API_KEY,
            )
            introduction_review = client.chat.completions.create(
                model="gpt-3.5-turbo",
                messages=[
                    {
                        "role": "system",
                        "content": f"""
                        導入部
                        \nーーーーーーーーーーーーーーーーーーーーーー\n
                        {introduction}
                        \nーーーーーーーーーーーーーーーーーーーーーー\n
                        この映像作品を読んだきっかけを書いてありますので、300文字以内に綺麗に校正してまとめてください。
                        """
                    }
                ],
            )
            introduction_result = introduction_review.choices[0].message.content
            introduction_result = introduction_result.replace("\n", "<br>")
            summary_review = client.chat.completions.create(
                model="gpt-3.5-turbo",
                messages=[
                    {
                        "role": "system",
                        "content": f"""
                        あなたは日本語が詳しい優秀な映像作品評論家です。
                        内容の要約
                        \nーーーーーーーーーーーーーーーーーーーーーー\n
                        {summary}
                        \nーーーーーーーーーーーーーーーーーーーーーー\n
                        主要な登場人物、設定、ストーリーの流れを簡潔に要約してあります。
                        映像作品の中で特に印象に残った場面やテーマについて触れています。
                        この映像作品の要約を書いてありますので、300文字以内に綺麗に校正してまとめてください。
                        """
                    }
                ],
            )
            summary_result = summary_review.choices[0].message.content
            summary_result = summary_result.replace("\n", "<br>")

            impressions_review = client.chat.completions.create(
                model="gpt-3.5-turbo",
                messages=[
                    {
                        "role": "system",
                        "content": f"""
                        あなたは日本語が詳しい優秀な映像作品評論家です。
                        感想・考察
                        \nーーーーーーーーーーーーーーーーーーーーーー\n
                        {impressions}
                        \nーーーーーーーーーーーーーーーーーーーーーー\n
                        物語から何を感じ取ったか、どのような考えを持ったかのかが書かれています。
                        この映像作品の感想・考察を書いてありますので、300文字以内に綺麗に校正してまとめてください。
                        """
                    }
                ],
            )
            impressions_result = impressions_review.choices[0].message.content
            impressions_result = impressions_result.replace("\n", "<br>")

            conclusion_review = client.chat.completions.create(
                model="gpt-3.5-turbo",
                messages=[
                    {
                        "role": "system",
                        "content": f"""
                        あなたは日本語が詳しい優秀な像作品評論家です。
                        結論
                        \nーーーーーーーーーーーーーーーーーーーーーー\n
                        {conclusion}
                        \nーーーーーーーーーーーーーーーーーーーーーー\n
                        物語から何を感じ取ったか、どのような考えを持ったかを述べています。
                        物語のテーマやメッセージが自分の人生にどのように活かしていくかを書いています。
                        この映像作品の結論を書いてありますので、300文字以内に綺麗に校正してまとめてください。
                        """
                    }
                ],
            )
            conclusion_result = conclusion_review.choices[0].message.content
            conclusion_result = conclusion_result.replace("\n", "<br>")
            casts = casts.replace("\n", "<br>")
            chat_results = "作品名:" + title + "<br>監督:" + director + "<br>脚本家:" + playwright + "<br>配給会社:" + distributing + "<br>公開日:" + release + "<br>主題歌:" + music + "<br><br>出演者:<br>" + casts + "<br><br>導入部:<br>" + introduction_result + "<br><br>内容の要約:<br>" + summary_result + "<br><br>感想・考察:<br>" + impressions_result + "<br><br>結論:<br>" + conclusion_result

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

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

アプリ画面

感想
映像作品の感想を簡単に書けるので、フィルマークスにレビューを書くときに使いたい。

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