見出し画像

【生成AIアプリ100チャレンジ】(21)格言検索

#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_IMAGE_KEY']
except KeyError:
    return HttpResponse("OPENAI_API_APIキーが設定されていません。", status=500)
try:
    API_KEY = os.environ['DEEPL_API_KEY']
except KeyError:
    return HttpResponse("DEEPL_APIキーが設定されていません。", status=500)
translator = ""
english_result = ""
japanese_result = ""
if request.method == "POST":
    form = ChatForm(request.POST)
    if form.is_valid():
        category = form.cleaned_data['category']
        details = form.cleaned_data['texts']
        try:
            def translate_text(text, auth_key, source_lang, target_lang):
                translator = deepl.Translator(auth_key)
                result = translator.translate_text(text, source_lang = source_lang, target_lang = target_lang)
                return result.text
            details = translate_text(details, API_KEY, 'JA', 'EN-GB')
            client = OpenAI(
                api_key = OPENAI_API_KEY,
            )
            response = client.chat.completions.create(
                model="gpt-4",
                messages=[
                    {
                        "role": "user",
                        "content": f"""
                        You are a historian.
                        What are some sayings of famous people from the past and present and what is the name of the famous person?
                        category is {category} And about {details}
                        Please pick three aphorisms.
                        Please output in the form of ' aphorisms <br /> by speaker '.
                        """
                    },
                ],
            )
            english_result = response.choices[0].message.content
            japanese_result = translate_text(english_result, API_KEY, 'EN', 'JA')
        except Exception as e:
            return HttpResponse(f"API呼び出し中にエラーが発生しました: {str(e)}", status=500)
    else:
        return HttpResponse("フォームのデータが無効です。", status=400)
else:
    form = ChatForm()

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

アプリ画面


感想
格言・名言を検索して、発言者とともに出力してくれます。
日本語と英語で出力されます。

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