ChatGPTのAPIによるブログ記事の添削!Pythonで実装してみた。

※当サイトは、アフィリエイト広告を利用しています。

くれとむ

今日はChatGPTのAPI使用して記事添削するブログ記事を書くので結果の内容を共有しようと思っているます。。

チーズくん

なんか日本語おかしいよ。

くれとむ

ChatGPTに添削してもらおう。

ChatGPT API

“修正前”: “今日はChatGPTのAPI使用して記事添削するブログ記事を書くので結果の内容を共有しようと思っているます。。”,

“修正後”: “今日はChatGPTのAPIを使用して記事を添削するブログ記事を書き、その結果を共有しようと思います。”

上記のように極端でなくとも、文章の違和感は自分では気が付かない場合も多々あります。
その解決方法として、ChatGPTのAPIを使って、添削処理を実装してみました。

本記事では、処理の流れと実装方法などについてご紹介します。

処理の流れ

大まかな処理の流れは以下です。

  1. Pythonコードの実行
  2. 添削したい記事のURLの入力
  3. URLからHTMLを呼び出し、本文を抽出
  4. ChatGPTが本文を添削して、応答

実際にブログ記事を添削してみた

くれとむ

実際に自身のブログ記事を添削してみました。

まず初めに、「【Alexaスキル】HOT PEPPERのAPIを呼び出して、おすすめの店をAmazon SNSでメール送信してみた。」というブログ内容を添削してみます。

以下のような添削結果となりました。

ブログ記事添削結果①
  1. “修正前”: “くれとむBlog AWS2024.03.172024.03.18 ※当サイトは、アフィリエイト広告を利用しています。”,
    “修正後”: “くれとむBlog AWS 2024.03.17 – 2024.03.18 ※当サイトは、アフィリエイト広告を利用しています。”
  2.   “修正前”: “Lambdaで呼び出す環境変数は、Lambda関数の画面の「設定」→「「環境変数」から登録します。”,
    “修正後”: “Lambdaで呼び出す環境変数は、Lambda関数の画面の「設定」→「環境変数」から登録します。”
  3.   “修正前”: “osコマンドを使用して、HOT PEPPERのAPIキーを環境変数を呼び出します。”,
    “修正後”: “osコマンドを使用して、HOT PEPPERのAPIキーを含む環境変数を呼び出します。”
  4.  “修正前”: “アレクサのカスタムスキルとは、自身が実装した処理に従ってアレクサが応答を返してくれるというものです。”,
    “修正後”: “アレクサのカスタムスキルとは、開発者が実装した処理に従ってアレクサが応答を返す機能です。”
  5. “修正前”: “Lambda関数画面の「設定」→「アクセス権限」から実行ロール名をコピーします。”,
    “修正後”: “Lambda関数の「設定」→「アクセス権限」から、実行ロール名をコピーします。”
  6. “修正前”: “また今回は、地名とジャンルのみで店の検索を行いましたが、HOT PEPPERのAPIには他にも様々な機能があるようなので、さらに上手な活用方法も考えてみようかと思みたいと思います。”,
    “修正後”: “また今回は、地名とジャンルのみで店の検索を行いましたが、HOT PEPPERのAPIには他にも多くの機能があり、これらをさらに上手く活用する方法も探求していきたいと思います。”

  “修正前”: “osコマンドを使用して、HOT PEPPERのAPIキーを環境変数を呼び出します。”,
“修正後”: “osコマンドを使用して、HOT PEPPERのAPIキーを含む環境変数を呼び出します。”

くれとむ

上記のように違和感のある日本語が添削できてるね。


次に「【ずんだもんが喋る】アレクサとChatGPTとVOICEVOXを連携してみた【カスタムスキル】」というのブログを添削してみました。


添削した結果が以下です。

ブログ記事添削結果②
  1.   “修正前”: “くれとむBlog AWS2023.05.272024.03.28”,
      “修正後”: “くれとむBlog AWS 更新日: 2023.05.27 – 2024.03.28”
  2.   “修正前”: “前回アレクサとChatGPTを繋げてたけど、声が機械的すぎてイマイチ会話に感情がこもらないんだよね。”,
      “修正後”: “前回は、アレクサとChatGPTを接続したのですが、声が機械的過ぎて、会話に感情がこもらなかったのです。”
  3.     “修正前”: “VOICEVOXって何なの?”,
        “修正後”: “「VOICEVOXって何?」と思うかもしれませんね。”
  4.     “修正前”: “Alexaのカスタムスキルを作成し、アレクサとChatGPTとVOICEVOXを連携してみました。”,
        “修正後”: “そこで、Alexaのカスタムスキルを作成し、Alexa、ChatGPT、VOICEVOXを連携させてみました。”
  5.     “修正前”: “主な構成要素は以下のとおりです。”,
        “修正後”: “このプロジェクトの主な構成要素を以下に示します。”
  6.     “修正前”: “Lambdaのコンソール画面から、レイヤーを選択します。”,
        “修正後”: “次に、Lambdaのコンソール画面からレイヤーを選択します。”
  7.     “修正前”: “EC2とLambdaが接続するためには、LambdaとEC2が同じVPC内にある必要があります。”,
        “修正後”: “EC2とLambdaを接続するには、両者が同じVPC内に配置されている必要があります。”
  8.     “修正前”: “VOICEVOXはサーバ上で音声合成用のエンジンを立ち上げて使用します。”,
        “修正後”: “VOICEVOXを使用するには、サーバ上で音声合成エンジンを起動します。”
  9.     “修正前”: “この時、ランタイムはPython3.8としてください。”,
        “修正後”: “ラムダ関数のランタイムはPython 3.8に設定してください。”
  10.     “修正前”: “EC2の名前は任意で大丈夫です。”,   
      “修正後”: “EC2の名前は任意で問題ありません。”
  11.     “修正前”: “今後もChatGPT含め、思いついたものを作っていければなと思います。”,
        “修正後”: “今後もChatGPTを含む、色々なアイデアを形にしていきたいと考えています。”

    “修正前”: “主な構成要素は以下のとおりです。”,
    “修正後”: “このプロジェクトの主な構成要素を以下に示します。”

    “修正前”: “VOICEVOXはサーバ上で音声合成用のエンジンを立ち上げて使用します。”,
    “修正後”: “VOICEVOXを使用するには、サーバ上で音声合成エンジンを起動します。”

くれとむ

特に上記のような添削は、主語の付け足し、読みやすい文章への修正がされており、良い添削だと感じました。

コード実装のポイント

コード実装のポイントは以下の3つです。

  1. 添削対象のURLをinputで受け取る
  2. BeautifulSoupライブラリで本文を抽出する
  3. OpenAIのAPI「gpt-4-0125-preview」で添削する

添削対象のURLをinputで受け取る

inputで入力を受け取ります。
これにより、コード実行時に添削対象のURLを指定できるようにしました。

    # ユーザーからURLを入力として受け取る
    user_input_url = input("記事のURLを入力してください: ")

上記のコードにより、実行時にURLを動的に格納することが可能です。

BeautifulSoupライブラリで本文を抽出する

入力したURLから本文を抽出するために「BeautifulSoup(※)」というライブラリを用います。
((※)PythonでHTMLやXMLファイルからデータを抽出するためのライブラリです。)

今回は、HTMLの<p>タグ(ウェブページ上でテキストを表示する際の情報)をもとに、本文を抽出しています。

   import requests
   from bs4 import BeautifulSoup

    # URLからHTMLを取得
    response = requests.get(url)

    # ステータスコードのチェック
    if response.status_code == 200:
        html = response.content
        soup = BeautifulSoup(html, 'html.parser')
        article_contents = soup.find_all('p')
        
        # 記事の本文を結合する
        article_text = ' '.join([content.get_text(strip=True) for content in article_contents])
        return article_text
    else:
        return f"Error: Status code {response.status_code}"

このコードにより、入力したURLから下記のように本文を抽出することが可能です。

OpenAIのAPI「gpt-4」で添削する


抽出した本文の添削には、OpenAIのAPI「gpt-4」を用います。
gpt-4を使うことで、より精度の高い添削が実現できます。

GPT-4 APIの場合、扱える最大トークン数は約8,000です。
8000字を超える記事の場合、全ての文章を添削できないので、注意が必要です。

    import openai
    import os

   openai_key = os.getenv('OPENAI_API_KEY')

    messages = [
        {
            "role": "system",
            "content": ("ユーザーから渡されたpromptの具体的な修正案を箇条書きで提案してください。"
                        "修正案を提示するときは、具体的な修正箇所を明記し、元の文章と修正後の文章を比較してください。"
                        "修正案の記載形式は次を参考にして。"
                        "1. 修正前の文章。"
                        "→ 修正後の文章"
                        "最初に、「添削します。」という文字を出力してください。"
                        "出力形式は、以下のようにしてください。"
                        "○修正すべきポイントは以下です。"
                        "最後に、「添削が完了しました」という文字を出力してください。"
                        "出力形式は、No.を1列目に、修正前を2列目に、修正後を3列目にして、json形式で出力して。")
        },
        {
            "role": "user",
            "content": prompt,
        }
    ]

    res=openai.chat.completions.create(
        model="gpt-4-0125-preview",
        messages=messages,
        max_tokens = 2000
    )

    answer = res.choices[0].message.content
    print(answer)
OpenAIのAPIキー取得


GPTおよびDALL-E3のAPIを使用するためには、OpenAIのAPIキーが必要です。
APIキーを取得されていない方は、まずOpenAIのAPI発行画面からAPIキーを発行しましょう。

Create new secret keyを押下します。

「Create secret key」を押下します。

作成されたキーをコピーしておきます。
画面を閉じてしまうとキーがコピーできなくなるため、注意してください。


ChatGPTのAPIでは、応答の形式を細かく指定することが可能です。
今回は、以下のようにroleを設定しました。

gptのrole設定

(“ユーザーから渡されたpromptの具体的な修正案を箇条書きで提案してください。” “修正案を提示するときは、具体的な修正箇所を明記し、元の文章と修正後の文章を比較してください。”
“修正案の記載形式は次を参考にして。”
“1. 修正前の文章。”
“→ 修正後の文章”
“最初に、「添削します。」という文字を出力してください。”
“出力形式は、以下のようにしてください。”
“○修正すべきポイントは以下です。”
“最後に、「添削が完了しました」という文字を出力してください。”
“出力形式は、No.を1列目に、修正前を2列目に、修正後を3列目にして、json形式で出力して。”)

チーズくん

指示した内容に沿って応答が返ってきているね。

OpenAIのAPI「gpt-4」の料金

今回用いたOpenAIのAPI「gpt-4-0125-preview」の料金は、100万トークンで$10.00です。

ModelInputOutput
gpt-4-0125-preview$10.00 / 1M tokens$30.00 / 1M tokens
gpt-4-1106-preview$10.00 / 1M tokens$30.00 / 1M tokens
gpt-4-1106-vision-preview$10.00 / 1M tokens$30.00 / 1M tokens
pricing

4000字の本文を添削した場合、本文のinputで約0.04$です。
outputは、上記の実行例で約1000文字でしたので、約0.01$です。

したがって、今回の場合は1実行あたり約0.05$です。
(1文字をおおよそ1トークンと見積もった場合)

APIで記事の添削をするメリット

チーズくん

ところで、わざわざAPIでコード実装しなくても、Web版のChatGPTでも記事の添削できるんじゃないの?

くれとむ

記事の添削自体はできるけど、Web版のChatGPTだと、本文を手入力でコピペする手間が発生して面倒だと思ったんだ。

今回の実装だと「URLを入力するだけで記事が添削できる」から楽だよ。


Web版のChatGPTで添削する場合、コピペが大変でした。
特にブログ記事の場合、吹き出しや画像があったりするので、記事全部の本文をコピペしてChatGPTに入力するのはとても手間がかかると思います。

Web版でChatGPTに添削する場合


対して、今回の実装したコードを使って添削する場合、記事のURLを入力するだけです。
本文抽出からChatGPTによる添削までを自動で実施してくれます。

APIを使ってコードで添削する場合

まとめ

今回は、ChatGPTのAPIを使って、添削するコードを実装してみました。

ChatGPTを使ってブログ記事を1から書かせることに注目されがちですが、自身で作成した記事のクオリティを高めるための利用も非常に便利だと思いました。

くれとむ

自分では気が付かない日本語の間違いも、一瞬で添削してくれるのが良いね。

くれとむ

リアルタイムの会話もChatGPTに日本語の添削をしてもらうのはどうかな。

くれとむ

喋ってる時に細かく指摘されるのはちょっと嫌かも・・・

最後まで読んでいただきありがとうございました!










コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


ABOUT US
くれとむ
IT企業3年目のエンジニアです。 日常の便利なものやITに関する記事を投稿しています。 AWS認定12冠(CLF, SAA, DVA, SOA, SAP, DOP, ANS, SCS, MLS, DAS, DBS, PAS)、基本情報技術者、応用情報技術者、TOEIC L&R 870点 このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。