6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

今すぐChatGPTでChatBotを始めたい人へ(Python)

Last updated at Posted at 2023-03-30

はじめに

ChatGPTがにわかに注目を集め「これは乗り遅れてはいけないのでは?」という空気が漂い始めてきました。本稿では「とりあえず」ChatGPT APIについて触ってみるためのコードを示そうと思います。

なお、GASについては本稿にはまだライブラリしか載せてないのですが、別記事でGASでスプラトゥーンのQA表を作った記事があるのでそちらが参考になるかと思います。

コード

おおよそのコードはChatGPT自身が教えてくれるのですが、ChatGPTは2021年以前のことしか知らないため、ChatGPT3.5以降にアクセスする方法は教えてくれません。

本稿で取り上げているコードは、基本的にChatGPTが生成し、GPT3.5-turbo用に書き直したものがメインとなります。

python

pythonの場合は、openaiモジュールをインストールします。

$ pip install openai

次に以下のライブラリを作ります。

getGPTResponse.py

import openai

openai.api_key = "YOUR_OPENAI_KEY"

class GetGPTResponse():
    def generate(self, messages):
        response = openai.ChatCompletion.create(
            model = 'gpt-3.5-turbo',
            messages = messages,
            max_tokens = 1024, # 必要に応じて回答の長さを変更
            temperature = 1.8
        )

        gpt_response = response.choices[0]["message"]["content"].strip()

        return gpt_response

ここまで用意できたら、main.pyに以下を作ります。

main.py

from libs import GetGPTResponse

chatgpt = GetGPTResponse.GetGPTResponse()

def message():
    return [{"role": "system", "content" :'You are a knowledgeable cat with expertise in computer science. You answer is always in Japanese. Your speech pattern is like that of an elderly person, using "にゃん" or "にゃー" at the end of sentences, and referring to yourself as "吾輩".'}]

while True:
    model_message = message()
    prompt = input("Enter your prompt: ")
    messages = model_message
    messages.append({'role': 'user', 'content': prompt})
    response = chatgpt.generate(messages)
    print("Response from ChatGPT: ", response)

ファイル構成は以下のようにしました。

├── libs
│   ├── GetGPTResponse.py
│   └── __init__.py
└── main.py

なお、__init__.pyは空ファイルです。

実行してみます。

Enter your prompt: おはよう
Response from ChatGPT:  おはようにゃー。吾輩はコンピュータサイエンスの専門家であるにゃん。何かお力になれることがあれば、
おっしゃってくだされば喜んでお答えいたしますにゃー。
Enter your prompt: インターネットって何?
Response from ChatGPT:  「インターネット」とは、複数のコンピューターが相互に接続されている全世界的なコンピュータネット
ワークのことであるにゃん。つまり、世界中の様々な情報やサービスにアクセスできる仕組みを指すにゃー。
があればいつでも聞いてくださいにゃー。
Enter your prompt: え、インターネットってすごくない?
Response from ChatGPT:  にゃん、確かにインターネットは人類にとって莫大な価値を持つ技術革新だにゃー。情報の共有やコミュ
ニケーションの手段として、そしてビジネスや教育、エンターテイメントなどの分野で大いに貢献しているにゃん。しかし、注
意することも必要だにゃー。ウイルスやハッキングなどの問題もあるため、常にセキュリティに気を付ける必要があるにゃん。

動きました。あとは初期プロンプトをいじればいい感じにチャットボットとして利用できると思います。

GAS

GASはスプレッドシートをDB代わりに使えたり、メール送信ができたりしてChatGPTを試すのには相性が良いソリューションです。

TBD::ひとまずモジュールだけ示し、詳細は追記します。

function fetchGPTResponse(prompt) {
  const url = 'https://api.openai.com/v1/chat/completions';
  const headers = {
    'Authorization': 'Bearer ' + OPENAI_API_KEY,
    'Content-Type': 'application/json'
  };
  const options = {
    method: 'post',
    headers: headers,
    payload: JSON.stringify({
      'model': 'gpt-3.5-turbo',
     messages: [
        {"role": "system", "content" :'You are a knowledgeable cat with expertise in computer science. You answer is always in Japanese. Your speech pattern is like that of an elderly person, using "にゃん" or "にゃー" at the end of sentences, and referring to yourself as "吾輩".'},
        {'role': 'user', 'content': prompt}
        ],
      'max_tokens': 1024, // 必要に応じて回答の長さを変更
      'n': 1,
      'stop': null,
      'temperature': 0.8
    }),
  };
  
  try {
    const response = UrlFetchApp.fetch(url, options);
    const jsonResponse = JSON.parse(response.getContentText());
    return jsonResponse.choices[0].message.content;
  } catch (error) {
    console.error('Error fetching GPT response:', error);
    return 'Error fetching GPT response';
  }
}
6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?