【難易度高め】WebライターがChatGPTで自作ツールを作成できるのか検証

  • 更新日:2023/08/05
  • AIコンテンツ作成

*本ページはプロモーションが含まれています

自作ツールの開発は、Webライターにとって新たな挑戦といえますが、意外に知識が必要で困ってしまうものです。本記事では、ChatGPTを活用してどの程度の機能を実現できるかを詳細に検証しました。

具体的なテストと結果をもとに、その可能性と制約について明らかにします。自作ツールに興味を持つWebライターさんはぜひチェックしてみてください。

説明が大変なので先に補足しておくと、ChatGPTに使われているGPTモデルを活用した自作ツールです。ChatGPTに使われているモデルを利用すると、非常に近い精度が得られるものです。もちろん、エンドポイントを変更するとGPT4を呼びだすこともできます。

【結論】Webライターでも作れるが精度が足りない

検証の結果、WebライターがChatGPTを利用し、自作ツールを作ることは十分に可能です。しかし、より高度な機能や特定のタスクにおいて最適な結果を得るには、モデルのファインチューニングが不可欠です。

一般的なタスクには十分に対応できるものの、より専門的な要件に対して適切な回答を生成するためには、ユーザー固有のデータセットでモデルをカスタマイズする必要があります。

結局のところ、AIライティングツールの便利さに優るものはないのかもしれません。

AIライティングツールはSAKUBUNがおすすめ
  • 日本語対応・SEO最適化可能で日本語での文章作成に優れた機能
  • 無制限プランや無料体験など柔軟な利用プランが魅力的
  • 月間無料利用枠があるため手軽に試せる

今後ますますAIとの共生が進むWebライティングの世界。効率的な作業を実現し、収益の向上を目指すなら、ぜひAIライティングツールのSAKUBUNを活用してみてください。

日本語対応・SEO最適化可能でありながら、9,800円で無制限にできる手軽な料金設定5,000文字まで毎月無料で使えることも魅力的です。

SAKUBUNは、ライティングの効率化による収益アップや、作業の効率化を狙うなら1度は使っておきたいAIライティングツールです。

GPTモデルのAPIで自作ツールを作ってみる

ChatGPTに使われているモデルのAPIを用いて、自作でツールを作成する方法の最終的なコードは下記のとおりです。なお、カスタムは使わずに普通に会話できるモデルの例です。

api_key = 'your-api-key'
openai.api_key = api_key

# テキスト生成関数
def generate_text(prompt, role, conversation_history):
    complete_prompt = f"{prompt} Role: {role}\\n{conversation_history}Assistant:"
    # gpt-3.5-turboエンジンではv1/chat/completionsエンドポイントを使用します
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": complete_prompt},
            {"role": role, "content": conversation_history}
        ],
        max_tokens=150
    )
    return response.choices[0].message["content"]

if __name__ == "__main__":
    conversation_history = ""
    role = "assistant" # ここでロールを設定します
    while True:
        user_input = input("You: ")
        conversation_history += f"You: {user_input}\\n"
        prompt = "Start of conversation"
        # ユーザーが "exit" と入力したらループを終了
        if user_input.lower() == "exit":
            break
        # テキスト生成関数でのロール指定により、ロール別の応答を取得します
        reply = generate_text(prompt, role, conversation_history)
        print(f"Assistant: {reply}")
        conversation_history += f"Assistant: {reply}\\n"

OpenAI APIキーの取得方法の詳細

OpenAIのAPIキーを取得するプロセスは以下のとおりです。

  1. OpenAIの公式サイトにアクセスし、アカウントを作成します。
  2. ダッシュボードからAPIセクションに移動し、新しいAPIキーを生成します。
  3. 生成されたキーをコピーして、コード内で使用します。

必要なライブラリのインストール

開発環境に応じたライブラリのインストール方法は以下のとおりです。

  • pipを使用する場合: pip install openai
  • condaを使用する場合: conda install -c conda-forge openai

APIキーの設定

api_key = 'your-api-key'
openai.api_key = api_key

この部分では、事前にOpenAIの公式サイトから取得したAPIキーを変数に代入し、OpenAIライブラリに設定しています。このAPIキーは、GPT-4を操作するための認証情報です。

テキスト生成関数の定義

# テキスト生成関数
def generate_text(prompt, role, conversation_history):
    complete_prompt = f"{prompt} Role: {role}\\n{conversation_history}Assistant:"
    # gpt-3.5-turboエンジンではv1/chat/completionsエンドポイントを使用します
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": complete_prompt},
            {"role": role, "content": conversation_history}
        ],
        max_tokens=150
    )
    return response.choices[0].message["content"]

この関数では、ユーザーからの質問や指示、会話履歴などを引数として受け取り、GPT-4からの応答を生成します。

  • engine="ここに数値": 使用するエンジンを指定します。
  • prompt: 送信するプロンプトです。これには質問や指示が含まれます。
  • max_tokens=150: 応答の最大トークン数を指定します。

最後に、生成されたテキストを返します。

メイン関数の作成

if __name__ == "__main__":
    conversation_history = ""
    role = "assistant" # ここでロールを設定します
    while True:
        user_input = input("You: ")
        conversation_history += f"You: {user_input}\\n"
        prompt = "Start of conversation"
        # ユーザーが "exit" と入力したらループを終了
        if user_input.lower() == "exit":
            break
        # テキスト生成関数でのロール指定により、ロール別の応答を取得します
        reply = generate_text(prompt, role, conversation_history)
        print(f"Assistant: {reply}")
        conversation_history += f"Assistant: {reply}\\n"

APIの仕様で、ロールは"system"、"assistant"、"user"、"function"のいずれかを選びます。今回はassistantを選びましたが、カスタムするためにはfunctionを選んで実行します。

結果は下記のとおりです。

この部分はプログラムの主要な部分で、以下のステップで構成されます。

  1. 会話履歴の初期化: 会話の進行に従って履歴を保存します。
  2. ユーザー入力の取得: ユーザーからの入力を取得し、会話履歴に追加します。
  3. プロンプトの生成: 会話履歴からプロンプトを生成し、テキスト生成関数に渡します。
  4. 応答の表示: 応答を表示し、会話履歴に追加します。

これらのステップを繰り返しの実行で、ユーザーとの対話が可能になります。

ChatGPTの自作ツールでアレンジとして「カスタム関数」を使ってみる

ユーザーが入力した内容に「calculate」という文字列が含まれる場合に、カスタム関数 custom_function を実行します。custom_function は2つの引数を取り、その積を返す簡単なカスタム関数です。

カスタム関数を実行した結果をAIの応答として表示します。それ以外の場合は通常通りテキスト生成を行い、Assistantの応答を表示します。

# テキスト生成関数
def generate_text(prompt, role, conversation_history):
    complete_prompt = f"{prompt} Role: {role}\\n{conversation_history}Assistant:"
    # gpt-3.5-turboエンジンではv1/chat/completionsエンドポイントを使用します
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": complete_prompt},
            {"role": role, "content": conversation_history}
        ],
        max_tokens=150
    )
    return response.choices[0].message["content"]

# カスタム関数
def custom_function(a, b):
    return a * b

if __name__ == "__main__":
    conversation_history = ""
    role = "assistant" # ここでロールを設定します
    while True:
        user_input = input("You: ")
        conversation_history += f"You: {user_input}\\n"
        prompt = "Start of conversation"
        # ユーザーが "exit" と入力したらループを終了
        if user_input.lower() == "exit":
            break

        # ファンクションロールを使用してカスタム関数を実行
        if "calculate" in user_input.lower():
            function_result = custom_function(5, 7)
            print(f"Result of the custom function: {function_result}")
            conversation_history += f"Assistant: Result of the custom function: {function_result}\\n"
        else:
            # テキスト生成関数でのロール指定により、ロール別の応答を取得します
            reply = generate_text(prompt, role, conversation_history)
            print(f"Assistant: {reply}")
            conversation_history += f"Assistant: {reply}\\n"

たとえば、ユーザーが「calculate」と入力すると、カスタム関数が実行されて「Result of the custom function: 35」と表示されるでしょう(5 * 7 = 35)。それ以外の場合は、通常のAIの応答が表示されます。

このように、Customを使えば十分にアレンジできます。では、さらによくあるPREP法で生成できるようにカスタマイズしてみます。

なお、PREP法(Point, Reason, Example, Point)は、論文やプレゼンテーションなどで情報を効果的に伝えるための手法です。

Point(要点)は、一連の文章や発表の主張や結論を端的に示すものです。これは読者や聴衆に何が伝えられるかを把握させるための重要な部分です。

Reason(理由)は、主張や結論に至る根拠や理由を示す部分です。主張を支えるために、なぜそのような結論に至ったのかを明確な説明が求められます。

Example(具体例)は、主張をより具体的かつ理解しやすくするための具体的な事例やデータ、状況を挙げることです。具体例を用いることで、理由に説得力を持たせられます。

最後に再びPoint(要点)を繰り返します。この再強調により、読者や聴衆に主張を強く印象づけ、内容の理解を深められます。

PREP法で生成できるかさらにカスタマイズへ挑戦

この例では、ユーザーが「」と入力した場合に、AIが結論・理由・具体例・再度結論の4つの要素からなる文章を生成するようにします(回答が長くなるのでmax_tokens=300まで引き上げています)

# テキスト生成関数
def generate_text(prompt, role, conversation_history):
    complete_prompt = f"{prompt} Role: {role}\\n{conversation_history}Assistant:"
    # gpt-3.5-turboエンジンではv1/chat/completionsエンドポイントを使用します
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": complete_prompt},
            {"role": role, "content": conversation_history}
        ],
        max_tokens=300,
    )
    return response.choices[0].message["content"]

# カスタム関数
def generate_text(prompt, role, conversation_history):
    complete_prompt = f"{prompt} Role: {role}\\n{conversation_history}Assistant:"
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": complete_prompt},
            {"role": role, "content": conversation_history}
        ],
        max_tokens=150
    )
    return response.choices[0].message["content"]

# カスタム関数
def generate_conclusion(conversation_history):
    conclusion_prompt = "質問の結論は何でしょうか?1文で答えてください。"
    reason_prompt = "結論の理由は何でしょうか?1文で答えてください。"
    example_prompt = "結論を説明するための具体例は何でしょうか?1文で答えてください。"
    re_conclusion_prompt = "結論を簡潔にまとめて1文で答えてください。"

    conclusion = generate_text(conclusion_prompt, "assistant", conversation_history)
    reason = generate_text(reason_prompt, "assistant", conversation_history)
    example = generate_text(example_prompt, "assistant", conversation_history)
    re_conclusion = generate_text(re_conclusion_prompt, "assistant", conversation_history)

    return f"{conclusion}\n{reason}\n{example}\n{re_conclusion}"

if __name__ == "__main__":
    conversation_history = ""
    role = "assistant" # ここでロールを設定します
    while True:
        user_input = input("You: ")
        conversation_history += f"You: {user_input}\\n"
        prompt = "Start of conversation"
        # ユーザーが "exit" と入力したらループを終了
        if user_input.lower() == "exit":
            break

        # ユーザーが「結論を教えて」と入力した場合
        if "?" in user_input:
            # カスタム関数を使用して文章を生成
            custom_text = generate_conclusion(conversation_history) 
            print(f"Assistant:\n{custom_text}")
            conversation_history += f"Assistant:\n{custom_text}\n"
        else:
            # 通常のAIの応答を生成
            reply = generate_text(prompt, role, conversation_history)
            print(f"Assistant: {reply}")
            conversation_history += f"Assistant: {reply}\\n"

if "?" in user_input:の部分でユーザーが「」と入力すると、カスタム関数 generate_conclusion により結論・理由・具体例・再度結論の4つの要素からなる文章が生成されます。それ以外の場合は、通常のAIの応答が表示されます。

ただ、プロンプトを分けているため、回答もそれぞれ返ってきてしまいます。1つだけに絞るという方法もできるため、質問を変えてうまく回答を引き出すとよいでしょう。

ChatGPTのGPTモデルAPIをもっと精度を向上させるには

結論として、精度を高めるにはGPT4のモデルを使うか、ファインチューニングは必要だと思います。今回はGPTモデルを利用して、ChatGPTのようなツールを作るという形です。つまり、ChatGPTを使えば十分に無料で同じ回答を得られるということです。

下記の部分が、いつもChatGPTに送っているプロンプトに該当します。

# カスタム関数
def generate_conclusion(conversation_history):
    conclusion_prompt = "質問の結論は何でしょうか?1文で答えてください。"
    reason_prompt = "結論の理由は何でしょうか?1文で答えてください。"
    example_prompt = "結論を説明するための具体例は何でしょうか?1文で答えてください。"
    re_conclusion_prompt = "結論を簡潔にまとめて1文で答えてください。"

    conclusion = generate_text(conclusion_prompt, "assistant", conversation_history)
    reason = generate_text(reason_prompt, "assistant", conversation_history)
    example = generate_text(example_prompt, "assistant", conversation_history)
    re_conclusion = generate_text(re_conclusion_prompt, "assistant", conversation_history)

    return f"{conclusion}\n{reason}\n{example}\n{re_conclusion}"

より精度を高めるためにも、ファインチューニングが必要でしょう。

ファインチューニングとは、既存の事前学習済みモデルを特定のタスクやデータセットに特化させるために、追加のトレーニングを行うプロセスを指します。このプロセスは一般に、応用ケースでのモデルの性能を向上させるために使用されます。

ファインチューニングが必要な場合ファインチューニングが必要でない場合
特定のドメインやジャンルに特化した言語理解が求められる場合標準のモデルが提供する性能がプロジェクトの要件を満たしている場合
標準のモデルが提供する性能が不十分で、特定のデータセットでの精度向上が必要な場合ドメイン特化の言語理解が不要で、一般的な言語モデルで十分な場合
特定の言語や方言に対応する必要がある場合

ファインチューニング自体は専門的なプロセスであり、適切なデータセットの準備、トレーニングプロセスの設計、モデル評価など、多くのステップが必要になります。

このコードの文脈では、OpenAIのGPT-3.5-turboエンジンを使用しているため、一般的なテキスト生成タスクに対してはファインチューニングなしでも良い結果を得られるでしょう。

なお、ファインチューニングを行う際には、OpenAIや他のプラットフォームが提供するファインチューニング用のツールやガイドラインを参考にしてください。

結局のところAIライティングツールが便利

結局のところ、GPTモデルでオリジナルツールを作るより、AIライティングツールが便利です。テンプレートを使って簡単に文章を作成できるため、自分でツールを作る手間を省けます。また、ファインチューニングが行われ、より精度の高い文章が生成されることも魅力的です。

テンプレートを活用した手軽さ

作成の手間を削減できる点が、AIライティングツールの大きな利点です。自分で文章を考える必要がなく、既存のテンプレートやプロンプトを使用してスムーズに文章を作成できます。

これにより、時間を節約しながら効果的な文章を作成できます。

ファインチューニングによる高精度な文章生成

AIライティングツールは、ファインチューニングによって訓練されています。これにより、一般的な文章だけでなく、特定の文脈に適した文章の生成が可能です。

高度な自然言語処理技術によって、文章の品質が向上し、より正確な情報を伝えられます。

現在の利用シーン

AIライティングツールは、ウェブサイトのコンテンツ作成や広告の文案作成、ブログ記事の執筆など、様々な分野で活用されています。さらに、文章のスタイルやトーンを柔軟に変更できるため、ブランディングにも一役買っています。

AIライティングツールは、テンプレートの活用ファインチューニングによる高精度な文章生成などから、多くの利点があります。効率的に文章を作成したい場合や、特定の分野でより専門的な文章を必要とする場合には、ぜひAIライティングツールの活用を検討してみると良いでしょう。

AIライティングツールはSAKUBUNがおすすめ
  • 日本語対応・SEO最適化可能で日本語での文章作成に優れた機能
  • 無制限プランや無料体験など柔軟な利用プランが魅力的
  • 月間無料利用枠があるため手軽に試せる

今後ますますAIとの共生が進むWebライティングの世界。効率的な作業を実現し、収益の向上を目指すなら、ぜひAIライティングツールのSAKUBUNを活用してみてください。

日本語対応・SEO最適化可能でありながら、9,800円で無制限にできる手軽な料金設定5,000文字まで毎月無料で使えることも魅力的です。

SAKUBUNは、ライティングの効率化による収益アップや、作業の効率化を狙うなら1度は使っておきたいAIライティングツールです。

まとめ

このコードは、OpenAIのGPTを使用して対話型システムを構築する基本的な枠組みです。関数の定義や主要な部分の構造の理解で、さらに複雑な対話システムやカスタマイズされた応用を開発する基盤となります。

上記の手順で、対話型プログラムの開発は容易です。この基本的な構造を応用し、さまざまな業界や用途に特化したツールを開発できます。初心者から上級者まで、このガイドを参考にして、GPTの可能性を探求してみてください。

AI writer

This article was written by an AI writer.

この記事はAIライターによって自動生成され、監修者(ページ下部記載)の校正・校閲・リライトを経て公開されています。AIライターは、常に最新の自然言語処理技術を使用して、多様なトピックについて高品質な記事を生成しています。AIライターのイメージ画像もAIが作成しています。

AI writer

監修者 : A・Yoshida

Webライターとして10年以上の経験を持ち、コピーライティング、SEO対策、マーケティング、ブログ執筆、SNSコンテンツ制作などの分野で活躍中。 企業や個人のSEOコンテンツ制作のアドバイザリーや制作に貢献する専門家。AI原稿作成サービスを提供中。プロフ画像はAIが作った模様。