🙆

ChatGPTが日記にコメントしてくれるシステム

2023/11/04に公開

はじめに

メンタルコントロールの手法として、日記を書こうと考えている筆者です。日々良かったこと、悪かったことが可視化できると、あんまり良い気分でない理由も明確になり翌日対応できます。その際、ChatGPTが、コメントをくれたら日記を書くモチベーションにも繋がると考えました。今回は、pythonでChatGPTが毎日褒めてくれる日記システムを作成したので、解説します。

機能要件

機能要件として、気軽に日記を書ける必要があります。そういった観点から、ターミナルからアクセスできる手法を採用しました。日記の要件としては、日々のポジティブなこと、ネガティブなこと、総括を書きます。ChatGPTは、それぞれにコメントして、最後にユーザーの1日の点数に対して明日へのアドバイスをしてくれる事を要件とします。

コード解説

早速ですが、上記の機能要件を満たすpythonのコードを作成したので、その解説をします。

import datetime
import os
import openai

openai.api_key = "APIKey"

// ChatGPTからのコメントを返すメソッド
def chatgpt_comment(content):
    response =openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      messages=[
        {
          "role": "system",
          "content": "これから日記の文章をおくります。文章ではなく内容に対するコメントやアドバイスをください。200文字以内で返信してください。"
        },
        {
          "role": "user",
          "content": content
        },
      ],
      temperature=1,
      max_tokens=512,
      top_p=1,
      frequency_penalty=0,
      presence_penalty=0
    )
    return response["choices"][0]["message"]["content"]

// mainの関数
// ところどころ、変数に代入してるのは、おまけで触れます。
def main():
    today = datetime.date.today()
    print(f"日記 - {today}")

    positive = input("今日のポジティブな出来事は?: ")
    negative = input("今日のネガティブな出来事は?: ")

    print("\nChatGPTのコメント:")
    positive_comment=chatgpt_comment(positive)
    negative_comment=chatgpt_comment(negative)

    print("\nポジティブに対するコメント")
    print(positive_comment)
    print("\nネガティブに対するコメント")
    print(negative_comment)
    
    summary = input("今日の総括は?: ")
    score = input("\n今日の1日を1〜10で点数化すると?: ")
    summary_comment=chatgpt_comment(summary+"点数にすると"+score)
    print("\n今日の総括に対するコメント")
    print(summary_comment)

if __name__ == "__main__":
    main()

コードの解説として、mainメソッドで、その日のポジティブな内容の日記、ネガティブな内容の日記を入力します。入力した内容をchatgpt_commentに送ってコメントをもらいます。総括も同じ流れです。inputの内容をGPT APIに送って返信を受け取るだけの簡単な仕組みですが、日記を書くモチベーションは通常の日記より高いです。

使用例

このセクションでは実際に、使用した様子をお伝えします。
ターミナルは図1の様な結果がでました。
これだと見辛いので解説します。
ターミナルの様子
図1:ターミナルの様子

ポジティブな出来事へのコメント

今日のポジティブな出来事は?: ダーツをしました!コントロールが良くなってると感じました!夜はモスバーガーを食べて贅沢な気持ちでした!

という日記に対して、

ダーツの練習の成果を感じることができて、うれしいですね!上達していく姿を見るのはとてもやりがいがあります。モスバーガーは贅沢な食事として楽しめたのでしょうか?食事も大切ですが、バランスの取れた食事を心掛>けてください。素晴らしい一日を過ごせたようで、おめでとうございます!次も楽しい日を過ごせますように。

この様なコメントを頂けました。やはり、ポジティブなコメントを頂けると嬉しいですね。自分では、あまり良い1日だと思えなくても客観的に、褒めてくれるのは幸せな気持ちになります。

ネガティブな出来事コメント

今日のネガティブな出来事は?: ダーツのレーティングが下がりました。昼まで寝てて気だるかったです。早く起きたいです。

というネガティブな内容に対しては、

ツのレーティングが下がったことは残念ですね。昼まで寝てしまうことで気だるい気持ちになってしまったのかもしれません。早起きするためには、夜の睡眠時間を調整することも大切です。また、目覚まし時計や睡眠サイクルアプリを活用してみると良いでしょう。頑張って早起きを実現してください!

しっかりとアドバイスもくれました。最初のダーツが、うまく表示できていませんが、大方しっかりと文章になってます。個人的に目覚まし時計などのアドバイスをくれるのは印象が良い返信でした。

総括

総括はポジティブ、ネガティブすべての文章をみて総括してくれます。

朝早く起きることは、充実した一日を過ごすためには重要ですね。ただし、楽しく過ごすためには具体的な計画や目標が必要かもしれません。自分の興味がある活動や趣味に時間を割くことを考えてみてはいかがでしょうか?また、日記の中で具体的な楽しい出来事や感動したことを書くと、良い思い出になりますよ。その他にも、朝のルーティンや自己管理についても意識してみてください。

今回は日記に対するコメントをくれました。全体を通じて、褒めすぎず厳しすぎず、良い感じでコメントをくれました。毎日書く日記ですが、コメントがあるだけで客観的にみれて明日も書いてみたいと思いました。

おわりに

毎日書く日記がGPTを活用する事で、彩豊かになりました。今後もGPTを使ったおもしろい使用方法を考えて記事にします。面白かった!便利だと思った人は、是非いいねで応援してください。

おまけ結果をmdファイルにする

せっかくなので、日記の内容をMarkdown形式で保存する機能を追加しました。
改良したコードが以下のとおりです。

import datetime
import os
import openai

openai.api_key = ""

def chatgpt_comment(content):
    response =openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      messages=[
        {
          "role": "system",
          "content": "これから日記の文章をおくります。文章ではなく内容に対するコメントやアドバイスをください。200文字以内で返信してください。"
        },
        {
          "role": "user",
          "content": content
        },
      ],
      temperature=1,
      max_tokens=512,
      top_p=1,
      frequency_penalty=0,
      presence_penalty=0
    )
    return response["choices"][0]["message"]["content"]

def save_to_md_file(today, positive, negative, summary, score, positive_comment, negative_comment, summary_comment):
    filename = f"日記_{today}.md"
    with open(filename, "w", encoding="utf-8") as f:
        f.write(f"# 日記 - {today}\n")
        f.write(f"## 今日のポジティブな出来事\n")
        f.write(f"{positive}\n")
        f.write(f"### ChatGPTのコメント\n")
        f.write(f"{positive_comment}\n")
        f.write(f"## 今日のネガティブな出来事\n")
        f.write(f"{negative}\n")
        f.write(f"### ChatGPTのコメント\n")
        f.write(f"{negative_comment}\n")
        f.write(f"## 今日の総括\n")
        f.write(f"{summary}\n")
        f.write(f"### 点数\n")
        f.write(f"{score}\n")
        f.write(f"### ChatGPTのコメント\n")
        f.write(f"{summary_comment}\n")

def main():
    today = datetime.date.today()
    print(f"日記 - {today}")

    positive = input("今日のポジティブな出来事は?: ")
    negative = input("今日のネガティブな出来事は?: ")

    print("\nChatGPTのコメント:")
    positive_comment=chatgpt_comment(positive)
    negative_comment=chatgpt_comment(negative)

    print("ポジティブに対するコメント")
    print(positive_comment)
    print("ネガティブに対するコメント")
    print(negative_comment)
    
    summary = input("\n今日の総括は?: ")
    score = input("\n今日の1日を1〜10で点数化すると?: ")
    summary_comment=chatgpt_comment(summary+score+"点です。")
    print("今日の総括に対するコメント")
    print(summary_comment)
    
    save_to_md_file(today,positive,negative,summary,score,positive_comment,negative_comment,summary_comment)

if __name__ == "__main__":
    main()

Discussion