Closed57

GPT-3のプロンプトをいろいろやってみる

kun432kun432

GPT-3では、APIに対して自然言語で質問することにより得たい回答を得ることができるが、質問にヒントを付け加えることでより回答の精度があがり求めているものに近しいものになる。このときの質問やヒントを「プロンプト」という。

より期待する回答を得やすくするためにはこのプロンプトの与え方が重要で、これを一種のプログラミングと考えて「プロンプトプログラミング」「プロンプトエンジニアリング」というような言い方もされていたりする。

このプロンプトは公式ドキュメントに多くの例がある。

https://beta.openai.com/examples

ふわっとよしなにやってくれるぐらいの認識なので、一通り順番に試して理解を深めてみたい。なお、かんたんなスクリプトも添える。

1: Q&A
2: Grammar correction
3: Summarize for a 2nd grader
4: Natural language to OpenAI API
5: Text to command
6: English to other languages
7: Natural language to Stripe API
8: SQL translate
9: Parse unstructured data
10: Classification
11: Python to natural language
12: Movie to Emoji
13: Calculate Time Complexity
14: Translate programming languages
15: Advanced tweet classifier
16: Explain code
17: Keywords
18: Factual answering
19: Ad from product description
20: Product name generator
21: TL;DR summarization
22: Python bug fixer
23: Spreadsheet creator
24: JavaScript helper chatbot
25: ML/AI language model tutor
26: Science fiction book list maker
27: Tweet classifier
28: Airport code extractor
29: SQL request
30: Extract contact information
31: JavaScript to Python
32: Friend chat
33: Mood to color
34: Write a Python docstring
35: Analogy maker
36: JavaScript one line function
37: Micro horror story creator
38: Third-person converter
39: Notes to summary
40: VR fitness idea generator
41: Essay outline
42: Recipe creator (eat at your own risk)
43: Chat
44: Marv the sarcastic chat bot
45: Turn by turn directions
46: Restaurant review creator
47: Create study notes
48: Interview questions

kun432kun432

前提

実行しやすいようにbashで書く。OpenAIのAPIキーは.envファイルに書いておく。

OPENAI_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

これをbashで読み込む

#!/usr/bin/env bash

source ./.env
(snip)

bashのスクリプトは編集しやすいようにこんな感じで書くつもり。

#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
〜プロンプト〜
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["\n"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

ヒアドキュメントの部分を好きなように修正すればよいだけにしておく。

プロンプト部分をdatファイルか何かで切り出そうと思ったけど、パラメータの部分がめんどくさかったので1つのファイルにした。パラメータは必要なら適宜修正ということで。

kun432kun432

1. QA

質問に対する回答。すでに学習された内容がベースになっているので、当然ながら最近のことはわからないと思われる。(text-davinci-003は2021/01までの情報がベースとなっている)

プロンプト(DeepLで翻訳して少し修正しています)

私は高度に知的な質問応答ボットです。もしあなたが事実に基づいた質問をしたなら、私はあなたに答えを教えます。もし、あなたの質問がナンセンス、トリッキー、あるいは明確な答えのない場合、私は「不明」と答えるでしょう。

Q:日本人の平均寿命は?
A:日本人の平均寿命は78歳です。

Q:1973年の日本の総理大臣は誰ですか?
A:1973年の日本の総理大臣は田中角栄です。

Q: 彼はどの政党に所属していましたか?
A: 彼は,自由民主党に所属していました。

Q:バナナの平方根は何ですか?
A:不明

Q:望遠鏡はどのように機能しますか?
A:望遠鏡はレンズや鏡を使って光を収束させ、物体を近くに見せます。

Q:1964年のオリンピックはどこで開催された?
A:1964年のオリンピックは日本の東京で開催されました。

Q:庭には鶏が何匹いますか?
A:不明

Q:金閣寺はどこにありますか?
A:

最初にボットの定義を行う。ここでボットの特徴やできること・できないことを明確に記載する。あとはヒントとしていくつかの質問・回答例を並べて、最後に質問を記載する。

コード
01_qa.sh
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
私は高度に知的な質問応答ボットです。もしあなたが事実に基づいた質問をしたなら、私はあなたに答えを教えます。もし、あなたの質問がナンセンス、トリッキー、あるいは明確な答えのない場合、私は「不明」と答えるでしょう。

Q:日本人の平均寿命は?
A:日本人の平均寿命は78歳です。

Q:1973年の日本の総理大臣は誰ですか?
A:1973年の日本の総理大臣は田中角栄です。

Q: 彼はどの政党に所属していましたか?
A: 彼は,自由民主党に所属していました。

Q:バナナの平方根は何ですか?
A:不明

Q:望遠鏡はどのように機能しますか?
A:望遠鏡はレンズや鏡を使って光を収束させ、物体を近くに見せます。

Q:1964年のオリンピックはどこで開催された?
A:1964年のオリンピックは日本の東京で開催されました。

Q:庭には鶏が何匹いますか?
A:不明

Q:金閣寺はどこにありますか?
A:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["\n"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .
{
  "id": "cmpl-6eLlv4AiIWJ7tlsNXSjNUO9haNS8f",
  "object": "text_completion",
  "created": 1675074831,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "金閣寺は、京都府京都市東山区にあります。",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 554,
    "completion_tokens": 33,
    "total_tokens": 587
  }
}
kun432kun432

2. Grammar correction

文法の誤り等を訂正する。

以下を標準的な正しい日本語に修正して下さい。

行ってきたよ、スーパーに。
コード
02_grammer_correction.sh
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下を標準的な正しい日本語に修正して下さい。

行ってきたよ、スーパーに。
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 60,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

実行結果

{
  "id": "cmpl-6eLrmgeLkwJH7p2GWRWaB0b6tgw84",
  "object": "text_completion",
  "created": 1675075194,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "\nスーパーに行ってきました。",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 53,
    "completion_tokens": 15,
    "total_tokens": 68
  }
}
kun432kun432

3. Summarize for a 2nd grader

難しい内容のテキストを「子供でもわかる」ようにかんたんに要約する

小学2年生向けに要約してみましょう。

木星は、太陽から5番目の惑星で、太陽系で最も大きい惑星です。木製は、ガス惑星であり、質量は太陽の1000分の1、太陽系の他の惑星の2.5倍です。木星は、夜空で肉眼で見える最も明るい天体の一つであり、歴史に記録されている以前から古代文明に知られていました。木星の名前は、ローマ神話の神ユピテルにちなんで名付けられています。地球から見ると、木星は、その反射光が目に見える影を落とすほど明るく、夜の空で月と金星に次いで平均して3番目に明るい自然界の天体です。
コード
03_summarize_for_2nd_grader.sh
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
小学2年生向けに要約してみましょう。

木星は、太陽から5番目の惑星で、太陽系で最も大きい惑星です。木製は、ガス惑星であり、質量は太陽の1000分の1、太陽系の他の惑星の2.5倍です。木星は、夜空で肉眼で見える最も明るい天体の一つであり、歴史に記録されている以前から古代文明に知られていました。木星の名前は、ローマ神話の神ユピテルにちなんで名付けられています。地球から見ると、木星は、その反射光が目に見える影を落とすほど明るく、夜の空で月と金星に次いで平均して3番目に明るい自然界の天体です。
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.7,
  "max_tokens": 500,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eM118gBXL9hfpksnjZwOvaSJ2U0J",
  "object": "text_completion",
  "created": 1675075767,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "\n木星は、太陽系で最も大きい惑星です。夜空では月と金星に次いで明るいです。その名前は、神ユピテルにちなんでいます。",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 362,
    "completion_tokens": 81,
    "total_tokens": 443
  }
}
kun432kun432

4. Natural language to OpenAI API

OpenAIのAPIでテキスト補完を行うコードを自然言語で記述して作成する。ストップシーケンスの使い方がいまいちわからないけど。

コード系のモデルはcode-davinciを使う様子

"""
Utilは以下を公開しています:

util.openai() -> 認証を行い、openaiモジュールを返します。モジュールは以下の関数を持っています:
openai.Completion.create(
    prompt="<my prompt>", # The prompt to start completing from
    max_tokens=123, # The max number of tokens to generate
    temperature=1.0 # A measure of randomness
    echo=True, # Whether to return the prompt in addition to the generated completion
)
"""
import util
"""
プロンプト「かつてAIは・・・」から始まるOpenAIの補完を、5トークン以内で作成してください。プロンプトは含みません。
"""
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
"""
Utilは以下を公開しています:

util.openai() -> 認証を行い、openaiモジュールを返します。モジュールは以下の関数を持っています:
openai.Completion.create(
    prompt="<my prompt>", # The prompt to start completing from
    max_tokens=123, # The max number of tokens to generate
    temperature=1.0 # A measure of randomness
    echo=True, # Whether to return the prompt in addition to the generated completion
)
"""
import util
"""
プロンプト「かつてAIは・・・」から始まるOpenAIの補完を、5トークン以内で作成してください。プロンプトは含みません。
"""
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["\"\"\""]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eS6xvFitrUkLpy1vOxexn4aLKFKC",
  "object": "text_completion",
  "created": 1675099199,
  "model": "code-davinci-002",
  "choices": [
    {
      "text": "openai = util.openai()\ncompletion = openai.Completion.create(\n    prompt=\"かつてAIは・・・\",\n    max_tokens=5,\n    temperature=1.0,\n    echo=False\n)\n\nprint(completion.choices[0].text)\n\n",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 227,
    "completion_tokens": 76,
    "total_tokens": 303
  }
}

生成されたコード部分だけ抜粋するとこんな感じ。

openai = util.openai()
completion = openai.Completion.create(
    prompt="かつてAIは・・・",
    max_tokens=5,
    temperature=1.0,
    echo=False
)

print(completion.choices[0].text)
kun432kun432

5. Text to command

テキストをプログラム的なコマンドに変換する。サンプルの例は実際のプログラムとかコマンドじゃなくて、例文から一定のルールに基づいてプログラム「的」「っぽい」ものを生成するみたい。

以下のテキストをプログラムコマンドに変換します。

例: 妻にパンが必要かどうかを聞く
出力: send-msg `find wife` パンは必要?

スキーショップに木曜日に出発する前にスキーを直せるかどうかを聞く。
コード
05_text_to_command.sh
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<'EOS' | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下のテキストをプログラムコマンドに変換します。

例: 妻にパンが必要かどうかを聞く
出力: send-msg `find wife` パンは必要?

スキーショップに木曜日に出発する前にスキーを直せるかどうかを聞く。
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0.2,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eNRYevR0KukBTDzFETVIMAf9Bc6l",
  "object": "text_completion",
  "created": 1675081256,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "\n出力: send-msg `find ski-shop` 木曜日にスキーを直せますか?",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 129,
    "completion_tokens": 37,
    "total_tokens": 166
  }
}

微妙に翻訳されててちょっと違うw

kun432kun432

6. English to other languages

英文を他の言語に翻訳する。

以下の英文をフランス語、スペイン語、日本語に翻訳して下さい。

What rooms do you have avalilable?

1.
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<'EOS' | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下のテキストをプログラムコマンドに変換します。

例: 妻にパンが必要かどうかを聞く
出力: send-msg `find wife` パンは必要?

スキーショップに木曜日に出発する前にスキーを直せるかどうかを聞く。
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0.2,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eNUy4dfS9kuLY8E9XazZj8ZMMJ20",
  "object": "text_completion",
  "created": 1675081468,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "フランス語: Quels sont les chambres que vous avez disponibles ?\n\n2. スペイン語: ¿Qué habitaciones tienes disponibles?\n\n3. 日本語: どんな部屋がありますか?",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 61,
    "completion_tokens": 86,
    "total_tokens": 147
  }
}

当然ながら他の言語からもできる。

以下の日本語文を英語、フランス語、スペイン語に翻訳して下さい。

どの部屋が利用可能ですか?

1.
{
  "id": "cmpl-6eNaljXQOoiIMj8g8IPohPLQVqRyb",
  "object": "text_completion",
  "created": 1675081827,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "English: Which rooms are available?\n\n2. French: Quelles sont les chambres disponibles ?\n\n3. Spanish: ¿Qué habitaciones están disponibles?",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 77,
    "completion_tokens": 45,
    "total_tokens": 122
  }
}
kun432kun432

7. Natural language to Stripe API

  1. Natural language to OpenAI APIと似たような感じで、今度はStripeのAPIを叩くコードを生成する。同じくcode-davinciで。
"""
Utilは以下を公開しています:

util.openai() -> 認証を行い、stripeモジュールを返します。モジュールはstripe.Charge.createなどという感じで使います。
"""
import util
"""
ユーザーのクレジットカードを使用してStripeトークンを作成します。5555-4444-3333-2222、有効期限12 / 28、cvc 521
"""

コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
"""
Utilは以下を公開しています:

util.openai() -> 認証を行い、stripeモジュールを返します。モジュールはstripe.Charge.createなどという感じで使います。
"""
import util
"""
ユーザーのクレジットカードを使用してStripeトークンを作成します。5555-4444-3333-2222、有効期限12 / 28、cvc 521
"""
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["\"\"\""]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eS9WyQttouS98fY1Sxm8QTERaqeB",
  "object": "text_completion",
  "created": 1675099358,
  "model": "code-davinci-002",
  "choices": [
    {
      "text": "token = util.openai().tokens.create(\n    card={\n        \"number\": \"5555-4444-3333-2222\",\n        \"exp_month\": 12,\n        \"exp_year\": 28,\n        \"cvc\": \"521\"\n    },\n)\n",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 150,
    "completion_tokens": 69,
    "total_tokens": 219
  }
}

コード部分はこんな感じ。

token = util.openai().tokens.create(
    card={
        "number": "5555-4444-3333-2222",
        "exp_month": 12,
        "exp_year": 28,
        "cvc": "521"
    },
)
kun432kun432

8. SQL translate

自然言語でSQLを生成する。テーブル定義をヒントとして与える。これもストップシーケンスがよくわからないな。

### PostgreSQLのテーブルと定義
#
# Employee(id, name, department_id)
# Department(id, name, address)
# Salary_Payments(id, employee_id, amount, date)
#
### 過去3ヶ月の間に10人以上の従業員を雇用した部署の名前をリストアップするクエリ
SELECT
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
### PostgreSQLのテーブルと定義
#
# Employee(id, name, department_id)
# Department(id, name, address)
# Salary_Payments(id, employee_id, amount, date)
#
### 過去3ヶ月の間に10人以上の従業員を雇用した部署の名前をリストアップするクエリ
SELECT
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["#",";"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eSDJHGAbyNY5JqdKgp5WGKQk8AcU",
  "object": "text_completion",
  "created": 1675099593,
  "model": "code-davinci-002",
  "choices": [
    {
      "text": "  d.name\nFROM\n  Department d\n  INNER JOIN Employee e ON d.id = e.department_id\n  INNER JOIN Salary_Payments sp ON e.id = sp.employee_id\nWHERE\n  sp.date BETWEEN '2019-01-01' AND '2019-03-31'\nGROUP BY\n  d.name\nHAVING\n  COUNT(e.id) >= 10\nORDER BY\n  d.name\n",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 117,
    "completion_tokens": 111,
    "total_tokens": 228
  }
}

コード部分だけ。"SELECT"だけ元のプロンプトにある。

SELECT
  d.name
FROM
  Department d
  INNER JOIN Employee e ON d.id = e.department_id
  INNER JOIN Salary_Payments sp ON e.id = sp.employee_id
WHERE
  sp.date BETWEEN '2019-01-01' AND '2019-03-31'
GROUP BY
  d.name
HAVING
  COUNT(e.id) >= 10
ORDER BY
  d.name

ここは日本語の書き方次第で結構変わる。ちなみに元の英語のサンプルだとこうなる。

SELECT DISTINCT department.name
FROM department
INNER JOIN employee ON department.id = employee.department_id
INNER JOIN salary_payments ON employee.id = salary_payments.employee_id
WHERE salary_payments.date >= (CURRENT_DATE - INTERVAL '3 months')
GROUP BY department.name
HAVING COUNT(employee.id) > 10
kun432kun432

9. Parse unstructured data

非構造化データをパースして構造化データのフォーマットに変換する。以下のように与えてやるヒントが既存の情報に存在しないものにしておくとわかりやすい。

架空の惑星グークルーで採れたフルーツをまとめた表。

最近発見された惑星グークルーで発見された果物がたくさんある。そこに生えているネオスキズルは紫色で、お菓子のような味がする。ロヘックルは灰色がかった青い実で、ちょっとレモンのような酸味があります。プーニッツは鮮やかな緑色で、甘いというより香ばしい。ループノバもたくさんあります。これはネオンピンクの味で、綿菓子のような味がします。最後に、酸味と苛立ちを伴う非常に酸っぱい苦味と、淡いオレンジ色を帯びたグロウルという果物がある。

| 名前|色|味 |
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
架空の惑星グークルーで採れたフルーツをまとめた表。

最近発見された惑星グークルーで発見された果物がたくさんある。そこに生えているネオスキズルは紫色で、お菓子のような味がする。ロヘックルは灰色がかった青い実で、ちょっとレモンのような酸味があります。プーニッツは鮮やかな緑色で、甘いというより香ばしい。ループノバもたくさんあります。これはネオンピンクの味で、綿菓子のような味がします。最後に、酸味と苛立ちを伴う非常に酸っぱい苦味と、淡いオレンジ色を帯びたグロウルという果物がある。

|名前|色|味|
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eOn4zZsLe42JGnszUMvrDySRGtee",
  "object": "text_completion",
  "created": 1675086434,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "|---|---|---|\n|ネオスキズル|紫色|お菓子のような味|\n|ロヘックル|灰色がかった青|ちょっとレモンのような酸味|\n|プーニッツ|鮮やかな緑色|甘いというより香ばしい|\n|ループノバ|ネオンピンク|綿菓子のような味|\n|グロウル|淡いオレンジ色|酸っぱい苦味と苛立ち|",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 345,
    "completion_tokens": 186,
    "total_tokens": 531
  }
}

生成されたテキスト部分だけ抜粋

|名前|||
|---|---|---|
|ネオスキズル|紫色|お菓子のような味|
|ロヘックル|灰色がかった青|ちょっとレモンのような酸味|
|プーニッツ|鮮やかな緑色|甘いというより香ばしい|
|ループノバ|ネオンピンク|綿菓子のような味|
|グロウル|淡いオレンジ色|酸っぱい苦味と苛立ち|

ヒントが架空のものだとわかりやすいと書いたのは、例えばこれが既存の情報だとこのヒントすらいらなくなる。

ビートルズのメンバーをまとめた表。

| 名前|担当楽器|主な作曲曲 |

結果

| 名前|担当楽器|主な作曲曲 |
| ーーーーーーーーーーー | ーーーーーーーーーーー | ーーーーーーーーーーー |
| ポール・マッカートニー | ベース、ボーカル | Hey Jude、Let It Be |
| ジョン・レノン | ギター、ボーカル | Imagine、Help! |
| リンゴ・スター | ドラムス、ボーカル | Octopus's Garden、Come Together |
| ジョージ・ハリスン | ギター、ボーカル | Something、Here Comes the Sun |
kun432kun432

10. Classification

例を元に分類する。

以下は企業名とその分類の一覧です:

トヨタ、ソニー、アマゾン

トヨタ
カテゴリー:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下は企業名とその分類の一覧です:

トヨタ、ソニー、アマゾン

トヨタ
カテゴリー:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eOzwetefqjYZy51Kyit8HOu019Y4",
  "object": "text_completion",
  "created": 1675087232,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "自動車メーカー\n\nソニー\nカテゴリー:\n電子機器メーカー\n\nアマゾン\nカテゴリー:\nオンライン小売業者",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 58,
    "completion_tokens": 63,
    "total_tokens": 121
  }
}
kun432kun432

11: Python to natural language

Pythonコードを自然言語で説明してくれる。微妙に実例と同じだと動かなかった(最後に#だけの行があると生成されなかった)

# Python 3 
def remove_common_prefix(x, prefix, ws_prefix): 
    x["completion"] = x["completion"].str[len(prefix) :] 
    if ws_prefix: 
        # keep the single whitespace as prefix 
        x["completion"] = " " + x["completion"] 
return x 

# このコードの処理内容の説明
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
# Python 3 
def remove_common_prefix(x, prefix, ws_prefix): 
    x["completion"] = x["completion"].str[len(prefix) :] 
    if ws_prefix: 
        # keep the single whitespace as prefix 
        x["completion"] = " " + x["completion"] 
return x 

# このコードの処理内容の説明
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eSLxLbyqaXqs4KwXNSm2XQXILMtf",
  "object": "text_completion",
  "created": 1675100129,
  "model": "code-davinci-002",
  "choices": [
    {
      "text": "# ・prefixとws_prefixを引数にとる関数remove_common_prefixを定義\n# ・x[\"completion\"]には、prefixとws_prefixを除いた文字列が入る\n# ・ws_prefixがTrueの場合、x[\"completion\"]には、\" \" + x[\"completion\"]が入る\n# ・return xで、xを返す\n\n# Python 3 \ndef remove_common_prefix(x, prefix, ws_prefix): \n    x[\"completion\"] = x[\"completion\"].str[len(prefix) :] \n    if ws_prefix: \n        # keep the single whitespace as prefix \n        x[\"completion\"] = \" \" + x[\"completion\"] \nreturn x",
      "index": 0,
      "logprobs": null,
      "finish_reason": "length"
    }
  ],
  "usage": {
    "prompt_tokens": 109,
    "completion_tokens": 200,
    "total_tokens": 309
  }
}

出力部分だけだとこんな感じ。なんかちょっとよくわからない。

# ・prefixとws_prefixを引数にとる関数remove_common_prefixを定義
# ・x["completion"]には、prefixとws_prefixを除いた文字列が入る
# ・ws_prefixがTrueの場合、x["completion"]には、" " + x["completion"]が入る
# ・return xで、xを返す

# Python 3 
def remove_common_prefix(x, prefix, ws_prefix): 
    x["completion"] = x["completion"].str[len(prefix) :] 
    if ws_prefix: 
        # keep the single whitespace as prefix 
        x["completion"] = " " + x["completion"] 
return x

ちなみに他の言語でもやってみた。

# TypeScript
function increment(num: number) {
  return num + 1;
}

# このコードの処理内容の説明

#

めちゃめちゃでかい結果返ってきた。(markdown的なレスポンスなのでちょっといじってます)

# 引数に渡された数値に1を足して返す関数
#
# 引数
#   num: number
#     加算する数値
#
# 戻り値
#   number
#     加算した結果の数値
#
function increment(num: number) {
  return num + 1;
}
```

## 型

### 基本型

- `string`
- `number`
- `boolean`
- `null`
- `undefined`
- `symbol`
- `void`

### 参照型

- `object`
- `array`
- `function`

## 型推論

型推論とは、型を明示的に指定しなくても、変数に代入された値から型を推論してくれる機能のこと。

```ts
# TypeScript
let num = 1;

# JavaScript
let num = 1;
```

## 型注釈

型注釈とは、変数に代入される値の型を明示的に指定する機能のこと。

```ts
# TypeScript
let num: number = 1;

# JavaScript
let num = 1;
```

## 型安全

型安全とは、型を明示的に指定している場合に、その型と異なる値を代入しようとした場合に、コンパイル(snip)
kun432kun432

12: Movie to Emoji

映画のタイトルを絵文字で表現してくれるらしい。

映画のタイトルを絵文字に変換して下さい:

バック・トゥ・ザ・フューチャー: 👨👴🚗🕒 
バットマン: 🤵🦇 
トランスフォーマー: 🚗🤖 
スターウォーズ:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
映画のタイトルを絵文字に変換して下さい:

バック・トゥ・ザ・フューチャー: 👨👴🚗🕒 
バットマン: 🤵🦇 
トランスフォーマー: 🚗🤖 
スターウォーズ:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.8,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["\n"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果。なるほど感。

{
  "id": "cmpl-6eSViqzdydIJrp6TUqNLTE9wN6wbC",
  "object": "text_completion",
  "created": 1675100734,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "⭐️🚀🗡️",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 97,
    "completion_tokens": 11,
    "total_tokens": 108
  }
}

ちょっと遊んでみた。

以下の映画のタイトルを絵文字に変換して下さい:

おくりびと、男はつらいよ、のだめカンタービレ

バック・トゥ・ザ・フューチャー: 👨👴🚗🕒 
バットマン: 🤵🦇 
トランスフォーマー: 🚗🤖

結果

おくりびと: 🚶‍♀️🆘 
男はつらいよ: 👨🤕 
のだめカンタービレ: 🎹🕺

さすがに映画の内容の細かいところまでは反映されてない。

kun432kun432

13. Calculate Time Complexity

関数の時間複雑性を出してくれる。要は計算量。code-davinciじゃないのか。

def foo(n, k):
accum = 0
for i in range(n):
    for l in range(k):
        accum += i
return accum
"""
この関数の計算量は、
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
def foo(n, k):
accum = 0
for i in range(n):
    for l in range(k):
        accum += i
return accum
"""
この関数の計算量は、
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.8,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["\n"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eSleV9jU7ChW3kk31nnHkkJCi6EQ",
  "object": "text_completion",
  "created": 1675101722,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "O(n * k)です。",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 58,
    "completion_tokens": 9,
    "total_tokens": 67
  }
}

サンプルの例にあるような細かい説明は出してくれなかった。あと、code-davinciだと何も出力してくれなかった。コードを生成する場合にCode Codexは使って、Codeの中身を説明する場合はText Codexを使うということなのかも。

kun432kun432

14: Translate programming languages

特定のプログラミング言語のコードを別の言語に書き換えてくれる。コメントを使って変換元・変換先の言語を指定する。サンプルの例はPython→HaskellなんだけどさっぱりわからないのでBashにしてみた。

##### この関数をPythonからBashに変換して下さい。
### Python
    
    def predict_proba(X: Iterable[str]):
        return np.array([predict_one_probas(tweet) for tweet in X])
    
### Bash
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
##### この関数をPythonからBashに変換して下さい。
### Python
    
    def predict_proba(X: Iterable[str]):
        return np.array([predict_one_probas(tweet) for tweet in X])
    
### Bash
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["#",";"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

{
  "id": "cmpl-6eSwrv7oqj0QXxpASnHxbDbdZDe64",
  "object": "text_completion",
  "created": 1675102417,
  "model": "code-davinci-002",
  "choices": [
    {
      "text": "\n```bash\npredict_proba() {\n    local X=$1\n    local result=()\n    for tweet in $X",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 77,
    "completion_tokens": 32,
    "total_tokens": 109
  }
}

コード部分だけ。

predict_proba() {
    local X=$1
    local result=()
    for tweet in $X

うーん、それっぽく書いてあるけど、Syntax Error。まあしょうがない気もする。

kun432kun432

15. Advanced tweet classifier

感情分析。

以下のツイートの感情を分類:

1. 「宿題に我慢できない」
2. 「あー、くそつまんねぇ」
3. 「ハロウィンが待ちきれない!!!」
4. 「うちの猫がかわいい❤️❤️」
5. 「チョコ嫌い」

ツイート感情度:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下のツイートの感情を分類:

1. 「宿題に我慢できない」
2. 「あー、くそつまんねぇ」
3. 「ハロウィンが待ちきれない!!!」
4. 「うちの猫がかわいい❤️❤️」
5. 「チョコ嫌い」

ツイート感情度:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果。JSONやめた。

1. 不安
2. 悲しみ
3. 嬉しさ
4. 愛情
5. 嫌悪

英語のサンプルだとポジティブ・ネガティブの2分類だったけど、日本語でそうしたい場合はプロンプトにそれを明記すれば良い。

以下のツイートの感情をポジティブ・ネガティブに分類:
kun432kun432

16. Explain code

コードが何を行っているかを自然言語で説明する。11: Python to natural languageと同じ。13. Calculate Time Complexityとも絡むけど、text-davinciなのかcode-davinciなのかどちらを選ぶべきなのかがわからないな。

class Log:
    def __init__(self, path):
        dirname = os.path.dirname(path)
        os.makedirs(dirname, exist_ok=True)
        f = open(path, "a+")

        # Check that the file is newline-terminated
        size = os.path.getsize(path)
        if size > 0:
            f.seek(size - 1)
            end = f.read(1)
            if end != "\n":
                f.write("\n")
        self.f = f
        self.path = path

    def log(self, event):
        event["_event_id"] = str(uuid.uuid4())
        json.dump(event, self.f)
        self.f.write("\n")

    def state(self):
        state = {"complete": set(), "last": None}
        for line in open(self.path):
            event = json.loads(line)
            if event["type"] == "submit" and event["success"]:
                state["complete"].add(event["id"])
                state["last"] = event
        return state

"""
上記のクラスは以下を行います:
1.
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
class Log:
    def __init__(self, path):
        dirname = os.path.dirname(path)
        os.makedirs(dirname, exist_ok=True)
        f = open(path, "a+")

        # Check that the file is newline-terminated
        size = os.path.getsize(path)
        if size > 0:
            f.seek(size - 1)
            end = f.read(1)
            if end != "\n":
                f.write("\n")
        self.f = f
        self.path = path

    def log(self, event):
        event["_event_id"] = str(uuid.uuid4())
        json.dump(event, self.f)
        self.f.write("\n")

    def state(self):
        state = {"complete": set(), "last": None}
        for line in open(self.path):
            event = json.loads(line)
            if event["type"] == "submit" and event["success"]:
                state["complete"].add(event["id"])
                state["last"] = event
        return state

"""
上記のクラスは以下を行います:
1.
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 500,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["\"\"\""]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

1.
ログファイルを開き、最後の行が改行で終わっていることを確認します。
2.
ログイベントを記録します。
3.
ログファイルから状態を読み取ります。
kun432kun432

17: Keywords

テキストから単語を抽出する。
Temparatureが低いと単に単語を拾うだけで、Temperatureが高いと検索時のインデックスとして使いやすいように関連する単語も生成してくれる?らしい。

サンプルをDeepLで翻訳したものを食わせてみた。

このテキストからキーワードを抽出する:

黒一色の陶器は、ニューメキシコ州北部のプエブロ族ネイティブアメリカンの陶芸家たちによって発展した20世紀と21世紀の陶器の伝統である。伝統的な還元焼成の黒陶は、何世紀にもわたってプエブロのアーティストたちによって作られてきた。前世紀の黒陶は、表面が滑らかで、選択的なバニシングや耐火性スリップの塗布によってデザインが施されたものが生産されています。また、文様を彫り込んだり、切り込みを入れたりして、盛り上がった部分を部分的に研磨するスタイルもある。Kha'po OwingehとP'ohwhóge Owingehのプエブロのいくつかの家族は、何世代にもわたって、家長の陶工から受け継いだ技術で黒一色の陶器を作ってきました。また、他のプエブロのアーティストも黒一色の陶器を制作しています。また、現代美術家たちの中にも、先祖の陶器に敬意を表して作品を制作している人たちがいます。
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
このテキストからキーワードを抽出する:

黒一色の陶器は、ニューメキシコ州北部のプエブロ族ネイティブアメリカンの陶芸家たちによって発展した20世紀と21世紀の陶器の伝統である。伝統的な還元焼成の黒陶は、何世紀にもわたってプエブロのアーティストたちによって作られてきた。前世紀の黒陶は、表面が滑らかで、選択的なバニシングや耐火性スリップの塗布によってデザインが施されたものが生産されています。また、文様を彫り込んだり、切り込みを入れたりして、盛り上がった部分を部分的に研磨するスタイルもある。Kha'po OwingehとP'ohwhóge Owingehのプエブロのいくつかの家族は、何世代にもわたって、家長の陶工から受け継いだ技術で黒一色の陶器を作ってきました。また、他のプエブロのアーティストも黒一色の陶器を制作しています。また、現代美術家たちの中にも、先祖の陶器に敬意を表して作品を制作している人たちがいます。
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.5,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0.8,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果。ちなみにTemparatureは0.5。

- 黒一色の陶器
- プエブロ族ネイティブアメリカン
- 伝統的な還元焼成の黒陶
- バニシング
- 耐火性スリップの塗布
- 文様を彫り込む
- 切り込みを入れる
- Kha'po OwingehとP'ohwhóge Owingehのプエブロの家族 
- 現代美術家

参考までに0と1の場合も。

Temparature: 0

- 黒一色の陶器
- プエブロ族ネイティブアメリカン
- 伝統的な還元焼成
- バニシング
- 耐火性スリップ
- 彫り込み
- 切り込み
- 研磨スタイル
- Kha'po OwingehとP'ohwhóge Owingehの家族 
- 現代美術家

Temparature: 1

- 黒一色の陶器
- ニューメキシコ州北部のプエブロ族
- 伝統的な還元焼成の黒陶
- バニシングや耐火性スリップの塗布
- 切り込みを入れたり、文様を彫り込んだり
- Kha'po OwingehとP'ohwhóge Owingehのプエブロの家族
- 現代の美術家
kun432kun432

18: Factual answering

学習していない内容に対しての回答例を指定して、学習済みの内容=事実に基づいた情報を返すようにモデルをうながす。知らない単語・フレーズについては「?」を返すように指示すると、抽象的な返答をせずに自然な回答をするようになる。

Q: バットマンって誰?
A: バットマンは、架空のコミック本のキャラクターです。

Q: Devz9とは何ですか?
A: ?

Q: ジョージ・ルーカスって誰?
A: ジョージ・ルーカスは、スターウォーズの製作で有名なアメリカの映画監督、プロデューサーです。

Q: カリフォルニア州の州都はどこですか?
A: サクラメントです。

Q: 地球を周回するものは?
A: 月です。

Q: フレッド・リッカーソンって誰?
A: ?

Q: 原子とは何ですか?
A: 原子はすべてを構成している小さな粒子のことです。

Q: アルヴァン・マンツとは何者か?
A: ?

Q: Kozar-09とは何ですか?
A: ?

Q: 火星にはいくつの月があるか?
A: フォボスとダイモスの2つです。

Q: 言語モデルって何?
A:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
Q: バットマンって誰?
A: バットマンは、架空のコミック本のキャラクターです。

Q: Devz9とは何ですか?
A: ?

Q: ジョージ・ルーカスって誰?
A: ジョージ・ルーカスは、スターウォーズの製作で有名なアメリカの映画監督、プロデューサーです。

Q: カリフォルニア州の州都はどこですか?
A: サクラメントです。

Q: 地球を周回するものは?
A: 月です。

Q: フレッド・リッカーソンって誰?
A: ?

Q: 原子とは何ですか?
A: 原子はすべてを構成している小さな粒子のことです。

Q: アルヴァン・マンツとは何者か?
A: ?

Q: Kozar-09とは何ですか?
A: ?

Q: 火星にはいくつの月があるか?
A: フォボスとダイモスの2つです。

Q: 言語モデルって何?
A:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

言語モデルとは、自然言語を理解するためのコンピューターシステムの一種です。言語モデルは、文章を解釈し、文法的な構造を把握し、意味を抽出するために使用されます。
kun432kun432

19: Ad from product description

商品説明文から広告コピーを生成する。

両親をターゲットにしたFacebookに掲載する、以下の製品のクリエイティブな広告を作成してください。

製品: Learning Roomは、幼稚園から高校までの生徒が学校で優秀な成績を修めるためのバーチャル環境です。
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
両親をターゲットにしたFacebookに掲載する、以下の製品のクリエイティブな広告を作成してください。

製品: Learning Roomは、幼稚園から高校までの生徒が学校で優秀な成績を修めるためのバーチャル環境です。
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

広告: 
「子供たちの学習をサポートするために、Learning Roomをご利用ください!子供たちが学校で優秀な成績を収めるために、Learning Roomは、幼稚園から高校までの生徒のためのバーチャル環境を提供します。あなたの子供たちが学校で最高の成績を収めるために、Learning Roomを今すぐご利用ください!」
kun432kun432

20: Product name generator

単語の例から商品名を生成する。 「コミュニティのプロンプトに影響される」というのはどういう意味?

製品の説明: 家庭用ミルクセーキメーカー
シードワード: ファスト、ヘルシー、コンパクト
商品名: ホームシェイカー、フィットシェイカー、クイックシェイカー、シェイクメーカー

商品説明: どんな足のサイズにもフィットする靴
シードワード: 適応性、フィット感、オムニフィット
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
製品の説明: 家庭用ミルクセーキメーカー
シードワード: ファスト、ヘルシー、コンパクト
商品名: ホームシェイカー、フィットシェイカー、クイックシェイカー、シェイクメーカー

商品説明: どんな足のサイズにもフィットする靴
シードワード: 適応性、フィット感、オムニフィット
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.8,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

商品名: アダプトフットウェア、オムニフィットシューズ、フィットフットウェア、フレキシブルフットウェア
kun432kun432

21: TL;DR summarization

要約。テキストの末尾に"Tl;dr"をつければ、特に細かく指定しなくてもAPIはちゃんと要約してくれる。

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
中性子星は、大質量の超巨星(太陽質量の10倍から25倍、特に金属が豊富な場合はそれ以上)の中心部が崩壊したものである。中性子星は、ブラックホールや仮想的なホワイトホール、クォーク星、奇妙な星を除けば、最も小さく最も密度が高い恒星である。中性子星の半径は10km程度で、質量は約1.4太陽質量である。大質量星の超新星爆発と重力崩壊により、核が白色矮星の密度から原子核の密度に圧縮されたものである。

Tl;dr
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
中性子星は、大質量の超巨星(太陽質量の10倍から25倍、特に金属が豊富な場合はそれ以上)の中心部が崩壊したものである。中性子星は、ブラックホールや仮想的なホワイトホール、クォーク星、奇妙な星を除けば、最も小さく最も密度が高い恒星である。中性子星の半径は10km程度で、質量は約1.4太陽質量である。大質量星の超新星爆発と重力崩壊により、核が白色矮星の密度から原子核の密度に圧縮されたものである。

Tl;dr
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.7,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 1
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

中性子星は、大質量の超巨星の中心部が崩壊したものであり、最も小さく最も密度の高い恒星である。半径は10km程度で、質量は約1.4太陽質量であり、超新星爆発と重力崩壊によって生じる。
kun432kun432

22: Python bug fixer

コードのバグをチェックする。プロンプトの指定方法はいろいろあって、1例としてコメントにバグがあるということを明示して修正させている。

##### 以下の関数のバグを修正して下さい

### バギーなPython
import Random
a = random.randint(1,12)
b = random.randint(1,12)
for i in range(10):
    question = "What is "+a+" x "+b+"? "
    answer = input(question)
    if answer = a*b
        print (Well done!)
    else:
        print("No.")
    
### 修正されたPython
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
##### 以下の関数のバグを修正して下さい

### バギーなPython
import Random
a = random.randint(1,12)
b = random.randint(1,12)
for i in range(10):
    question = "What is "+a+" x "+b+"? "
    answer = input(question)
    if answer = a*b
        print (Well done!)
    else:
        print("No.")
    
### 修正されたPython
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["###"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

import random
a = random.randint(1,12)
b = random.randint(1,12)
for i in range(10):
    question = "What is "+str(a)+" x "+str(b)+"? "
    answer = input(question)
    if answer == str(a*b):
        print ("Well done!")
    else:
        print("No.")
kun432kun432

23: Spreadsheet creator

様々な種類のデータからスプレッドシートを作成する。

有名なSF映画名とその公開年の2カラムのスプレッドシート:

タイトル|公開年
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
有名なSF映画名とその公開年の2カラムのスプレッドシート:

タイトル|公開年
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.5,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

---|---
スター・ウォーズ/新たなる希望|1977
エイリアン|1979
ブレードランナー|1982
バッキーをハッピーに|1984
バック・トゥ・ザ・フューチャー|1985
アルマゲドン|1986
プラトーン|1987
トータル・リコール|1990
ジュラシック・パーク|1993
インディ・ジョーンズ/最後の聖戦|1989
kun432kun432

24: JavaScript helper chatbot

JavaScriptの質問に答えるチャットボット。例をあげて答え方を定義する。code-davinciなのか。

あなた: 配列を結合するには?
JavaScriptチャットボット: concat()メソッドを使うことができます。
あなた: 10秒後にアラートが表示されるようにするには?
JavaScriptチャットボット:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
あなた: 配列を結合するには?
JavaScriptチャットボット: concat()メソッドを使うことができます。
あなた: 10秒後にアラートが表示されるようにするには?
JavaScriptチャットボット:
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 5,
  "presence_penalty": 0,
  "stop": ["あなた:"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

setTimeout()メソッドを使うことができます。
kun432kun432

25: ML/AI language model tutor

言語モデルについて質疑応答形式でチャットボットが答える

MLチューター: 私はML/AI言語モデルのチューターです
あなた: 言語モデルとは何ですか?
MLチューター: 言語モデルとは、ある単語が与えられたときにその後に続く単語の出現確率を用いた統計モデルです。
あなた: 統計モデルって何ですか?
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
MLチューター: 私はML/AI言語モデルのチューターです
あなた: 言語モデルとは何ですか?
MLチューター: 言語モデルとは、ある単語が与えられたときにその後に続く単語の出現確率を用いた統計モデルです。
あなた: 統計モデルって何ですか?

EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.3,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0.5,
  "presence_penalty": 0,
  "stop": ["あなた:"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

MLチューター: 統計モデルとは、ある現象を説明するために使用される数学的なモデルです。モデルは、入力変数と出力変数の関係を表しています。
kun432kun432

26: Science fiction book list maker

SF本のリストを指定数だけ挙げる。わざわざStop Sequenceいるのかな?

SFの本を10冊挙げてください。
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
SFの本を10冊挙げてください。
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.5,
  "max_tokens": 500,
  "top_p": 1,
  "frequency_penalty": 0.52,
  "presence_penalty": 0.5,
  "stop": ["11."]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

1. オブジェクト指向設計実践ガイド(Martin Fowler 著)
2. ヘキサゴンアーキテクチャ―非機能要件を考慮したソフトウェアアーキテクチャ(Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 著)
3. リーダブルコード―より良いコードを書くためのシンプルで実践的なテクニック(Dustin Boswell、Trevor Fouche 著)
4. モダンJavaScriptプログラミング入門 ― ECMAScript 2016/2017対応(太田 智之 著)
5. Java 8 実践プログラミング ―モダンJava開発の教科書 (Kazuki Shimizu 著)
6. Java EE 7徹底入門―サーバサイドJavaの新しい開発手法 (山田 祥寛 著)
7. Spring Boot 実践入門 ―Spring Frameworkを使った高速Webアプリケーション開発 (佐々木 哲也、宮崎 政行 著) 
8. Spring徹底入門―Javaフレームワーク・Spring Frameworkのすべて (山田 祥寛、中村 隆史 著) 
9. AngularJSアプリケーションプログラミング ―スタイルとパターンによる実践ガイド (小野 和弘、竹内 信行、小野 隆司 著) 
10. RESTful Web API デザイン: Node, MongoDBで学ぶWeb APIデザインの原則 (Leonard Richardson, Sam Ruby, Mike Amundsen 著)

なんか妙に時間かかった。しかもこの回答。。。。

「サイエンスフィクション」としてあげるとちゃんと答えてくれた。

1. 『2001年宇宙の旅』(アーロン・サイン)
2. 『レッドプラネット』(マーガレット・アトウッド)
3. 『ドリームパーク』(ミッチェル・クリスティー)
4. 『ダイバージェント』(ヴァージニア・ベナディクト)
5. 『ハリー・ポッターと炎のゴブレット』(J.K.ローリング)
6. 『エイリアン』 (シドニー・スコット)
7. 『スタートレックII ザ・ワーナーズ』 (ジェームズ・T・キーンズ)
8. 『ザ・マトリックス』 (アンディ & ロイ Wachowski兄弟)
9. 『ソロモンのキー』 (デヴィッド・ウォルフェルド)
10. 『サウスパーク 聖なる禁断の王国』 (トレヴァー ブラック & エリック ロビンソン)

ちなみにStop Sequenceはなくても出来た。

kun432kun432

27: Tweet classifier

感情分析を行う基本的なプロンプト。15. Advanced tweet classifier のもうちょっと簡易版みたいな感じ?

以下のツイートの感情を、ポジティブ・ネガティブ・ニュートラルのどれかに分類して下さい。

ツイート: 「新しいバットマンの映画、大好き!」
感情:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下のツイートの感情を、ポジティブ・ネガティブ・ニュートラルのどれかに分類して下さい。

ツイート: 「新しいバットマンの映画、大好き!」
感情: 
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 60,
  "top_p": 1,
  "frequency_penalty": 0.5,
  "presence_penalty": 0.0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

ポジティブ

「まあまあだった」ならニュートラルになるし、「イマイチだった」ならネガティブになる。

kun432kun432

28: Airport code extractor

テキストから空港コードを抽出する。

以下のテキストから空港コードを抽出してください:

テキスト: 「ロサンゼルスからマイアミに飛びたいのですが。」
空港コード: LAX, MIA

テキスト: 「関空から羽田まで飛びたい。」
空港コード:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下のテキストから空港コードを抽出してください:

テキスト: 「ロサンゼルスからマイアミに飛びたいのですが。」
空港コード: LAX, MIA

テキスト: 「関空から羽田まで飛びたい。」
空港コード:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 60,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["\n"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

KIX, HND
kun432kun432

29: SQL request

SQLクエリを生成する

カリフォルニアに住んでいて、1000クレジット以上持っているすべてのユーザーを検索するSQLリクエストを作成してください:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
カリフォルニアに住んでいて、1000クレジット以上持っているすべてのユーザーを検索するSQLリクエストを作成してください:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.3,
  "max_tokens": 60,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

SELECT * 
FROM Users 
WHERE State = 'California' 
AND Credit > 1000;
kun432kun432

30: Extract contact information

テキストから連絡先情報を抽出する

このメールから名前と住所を抽出して下さい: 

親愛なるケリー。

セミナーでお話ができてよかったです。ジェーンの話はなかなかよかったと思います。

本の件、ありがとうございました。私の住所はこちらです 2111 Ash Lane, Crestview CA 92002

よろしくお願いします。

マヤ

名前: 
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
このメールから名前と住所を抽出して下さい: 

親愛なるケリー。

セミナーでお話ができてよかったです。ジェーンの話はなかなかよかったと思います。

本の件、ありがとうございました。私の住所はこちらです 2111 Ash Lane, Crestview CA 92002

よろしくお願いします。

マヤ

名前:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 64,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

名前: マヤ
住所: 2111 Ash Lane, Crestview CA 92002
kun432kun432

31: JavaScript to Python

簡単なJavaScriptの式をPythonに変換する。

#JavaScript to Python:
JavaScript: 
dogs = ["bill", "joe", "carl"]
car = []
dogs.forEach((dog) {
    car.push(dog);
});

Python:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
#JavaScript to Python:
JavaScript: 
dogs = ["bill", "joe", "carl"]
car = []
dogs.forEach((dog) {
    car.push(dog);
});

Python:
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 64,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

dogs = ["bill", "joe", "carl"]
car = []
for dog in dogs:
    car.append(dog)

#JavaScript to Python:
JavaScript: 
dogs = ["bill", "joe", "carl"]
car = []

なんかレスポンスにプロンプトがダブって出力された。

kun432kun432

32: Friend chat

テキストメッセージの会話をエミュレートする。こういうのはハイレベルだよね。

あなた: 最近どうしてたの?
友だち: 古い映画を見てたよ
あなた: 何か面白いのあった?
友だち: 
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
あなた: 最近どうしてたの?
友だち: 古い映画を見てたよ
あなた: 何か面白いのあった?
友だち: 
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.5,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0.5,
  "presence_penalty": 0,
  "stop": ["あなた:"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

そうだね!『インディ・ジョーンズ』シリーズがすごく面白かったよ!
kun432kun432

33: Mood to color

テキスト情報から色を類推する。

夕暮れ時の青空のような色を表現するCSSコード:

background-color: #
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
夕暮れ時の青空のような色を表現するCSSコード:

background-color: #
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": [";"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

3A5F9F

こういう色

https://www.colorhexa.com/3a5f9f

kun432kun432

34: Write a Python docstring

与えられたPython関数に対してdocstringを作成する方法の例。Pythonのバージョン指定、コード、コメントをつけてdocstringを生成。docstringの開始を表す文字列(""")も付与する。

# Python 3.7
 
def randomly_split_dataset(folder, filename, split_ratio=[0.8, 0.2]):
    df = pd.read_json(folder + filename, lines=True)
    train_name, test_name = "train.jsonl", "test.jsonl"
    df_train, df_test = train_test_split(df, test_size=split_ratio[1], random_state=42)
    df_train.to_json(folder + train_name, orient='records', lines=True)
    df_test.to_json(folder + test_name, orient='records', lines=True)
randomly_split_dataset('finetune_data/', 'dataset.jsonl')
    
# 上記関数について精巧で高品質なdocstring
"""
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
# Python 3.7
 
def randomly_split_dataset(folder, filename, split_ratio=[0.8, 0.2]):
    df = pd.read_json(folder + filename, lines=True)
    train_name, test_name = "train.jsonl", "test.jsonl"
    df_train, df_test = train_test_split(df, test_size=split_ratio[1], random_state=42)
    df_train.to_json(folder + train_name, orient='records', lines=True)
    df_test.to_json(folder + test_name, orient='records', lines=True)
randomly_split_dataset('finetune_data/', 'dataset.jsonl')
    
# 上記関数について精巧で高品質なdocstring
"""
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 150,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": ["#","\"\"\""]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

    randomly_split_dataset(folder, filename, split_ratio=[0.8, 0.2])
    Splits a dataset into train and test sets.
    Args:
        folder (str): The folder where the dataset is stored.
        filename (str): The name of the dataset file.
        split_ratio (list): The ratio of the train and test sets.

サンプル例よりはちょっとあっさりしてるかも。サンプル例と同じにしても全く同じものは生成されなかった。

    This function takes in a folder and a filename, and splits the dataset into train and test sets.
    The split ratio is 80% train and 20% test by default.
    The function returns nothing, but saves the train and test sets as jsonl files in the folder.
kun432kun432

35: Analogy maker

より少ないサンプルでアナロジーを生成。アナロジーは比喩とか類推とかそういう意味らしい。

このフレーズからアナロジーを作成してください:

質問はその中の矢印だ:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
このフレーズからアナロジーを作成してください:

質問はその中の矢印だ:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.5,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

答えはその目的地だ

それっぽい表現を生成しろっていうことなのかな。

kun432kun432

36: JavaScript one line function

JavaScriptの関数を1行にする

リスト内包表記で、以下を1行のJavaScriptに変換:

dogs.forEach((dog) => {
    car.push(dog);
});

JavaScriptワンライナーバージョン:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
リスト内包表記で、以下を1行のJavaScriptに変換:

dogs.forEach((dog) => {
    car.push(dog);
});

JavaScriptワンライナーバージョン:
EOS
)

request=$(cat <<EOS
{
  "model": "code-davinci-002",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 60,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stop": [";"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

dogs.forEach((dog) => car.push(dog))
kun432kun432

37: Micro horror story creator

トピックを入力して2~3文の短いホラーストーリーを作成する。

トピック: 朝食
2文のホラーストーリー: 私がシリアルにミルクをかけると、彼はいつも泣き止みます。牛乳パックに自分の顔を映さないようにしないとね。
    
トピック: 風
2文のホラーストーリー: 
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
トピック: 朝食
2文のホラーストーリー: 私がシリアルにミルクをかけると、彼はいつも泣き止みます。牛乳パックに自分の顔を映さないようにしないとね。
    
トピック: 風
2文のホラーストーリー: 
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.8,
  "max_tokens": 100,
  "top_p": 1,
  "frequency_penalty": 0.5,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

窓を開けたとき、風が部屋の中に遊びに来ました。彼は私の声に耳を傾け、私が言ったことを追いかけてきました。風は、いつも変わらない凄惨な叫び声で私と戦ってきました。

2文じゃないwww

ただこういうのは活用範囲がいろいろできそう。例えばこれとか。

https://www.itmedia.co.jp/news/articles/2211/30/news096.html

kun432kun432

38: Third-person converter

1人称表現を三人称表現になるべく少ないプロンプトで変換する。

以下を一人称から三人称(性別は女性)に変換してください:

私は、エイダ・ラブレスについての映画を作ることにした。
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下を一人称から三人称(性別は女性)に変換してください:

私は、エイダ・ラブレスについての映画を作ることにした。
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

彼女は、エイダ・ラブレスについての映画を作ることにした。
kun432kun432

39: Notes to summary

会議の議事録を要約して報告書にする。

私の会議メモを、正式な報告書に変換してください:

トム: 利益が50%アップ
ジェーン: 新しいサーバーがオンラインになりました
シェール: ソフトウエアの修正にもう少し時間が必要
ジェーン: 喜んでお手伝いします
パークマン: ベータテストはほぼ終了
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
私の会議メモを、正式な報告書に変換してください:

トム: 利益が50%アップ
ジェーン: 新しいサーバーがオンラインになりました
シェール: ソフトウエアの修正にもう少し時間が必要
ジェーン: 喜んでお手伝いします
パークマン: ベータテストはほぼ終了
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0,
  "max_tokens": 200,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

本報告書では、トム氏が利益が50%アップしたことを報告しました。ジェーン氏は、新しいサーバーがオンラインになったことを報告しました。シェール氏は、ソフトウェアの修正にもう少し時間が必要だと報告しました。ジェーン氏は、喜んでお手伝いすると報告しました。パークマン氏は、ベータテストがほぼ終了したことを報告しました。
kun432kun432

40: VR fitness idea generator

フィットネスとVRゲームのアイデア出し。

VRとフィットネスを組み合わせたいくつかのアイデアをブレーンストーミングしてください:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
VRとフィットネスを組み合わせたいくつかのアイデアをブレーンストーミングしてください:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.6,
  "max_tokens": 500,
  "top_p": 1,
  "frequency_penalty": 1,
  "presence_penalty": 1
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

1. VR体験型ジム:3D空間でのトレーニングプログラムを提供するVRジム。実際に走ったり、重いウェイトを持ち上げたりするようなフィットネスアクティビティが可能になります。
2. 虚構の世界でのフィットネス体験:VRテクノロジーを使用して作成された虚構の空間内で、特定の場所から別の場所へと旅しながら達成感あふれるフィットネスチャレンジを行うことができます。
3. フィットネス専用バーチャルタウン:休日の過ごし方や仲間と一緒に共有する施設も含めて、バーチャルタウン内には多面的なフィットネス施設・サービスが備わっています。 
4. 精神的リラックストレーニング:週末の日常生活から離れた究極の精神的リラックストレーニング体験をVR環境下で実現します。心地よく浮遊感覚の中でストレッチや呼吸法などの深いリラックス効果が得られます。 
5. オンデマンドフィットネス動画教材:ユーザ

途中で切れているので数を限定したほうがいいかも。

kun432kun432

41: Essay outline

研究テーマのアウトラインというか論文の見出しかな、を作成する。

ニコラ・テスラと彼の技術への貢献についての論文のアウトラインを作成して:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
ニコラ・テスラと彼の技術への貢献についての論文のアウトラインを作成して:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.3,
  "max_tokens": 500,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

I. ニコラ・テスラの生涯
A. 出生と育ち
B. 技術的な貢献

II. ニコラ・テスラの技術的な貢献
A. 電気発電
B. 発明
C. 発明の保護

III. ニコラ・テスラの技術的な貢献の影響
A. 産業革命
B. 社会的影響
C. 科学的影響

IV. 結論
A. ニコラ・テスラの技術的な貢献が世界を変えたこと
B. ニコラ・テスラの技術的な貢献が現在の科学と技術にどのような影響を与えたか

系統だったストーリーの骨子ができる。これにそってあとは書くだけかー。

kun432kun432

42: Recipe creator (eat at your own risk)

材料の一覧からレシピを生成する。どこかですでにありそうだけど、やり方がぜんぜん違うって感じ。

以下の材料を元に、レシピと作り方を作成してください:

フリートパイ

材料:
フリートス
チリ
細切れのチェダーチーズ
白または赤玉ねぎ、小さくさいの目切り
サワークリーム

作り方:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下の材料を元に、レシピと作り方を作成してください:

フリートパイ

材料:
フリートス
チリ
細切れのチェダーチーズ
白または赤玉ねぎ、小さくさいの目切り
サワークリーム

作り方:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.3,
  "max_tokens": 500,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

1. フリートスをオーブンに入れ、200度に予熱します。

2. チリを中火で炒め、玉ねぎとチェダーチーズを加えて炒めます。

3. フリートスをオーブンから取り出し、中央にチリの炒め物をのせます。

4. サワークリームをフリートスの上にのせ、細かく刻んだ玉ねぎを散らします。

5. フリートスを200度のオーブンに入れ、15分間焼きます。

6. フリートパイを取り出し、冷ましてからお楽しみください。
kun432kun432

43: Chat

AIアシスタントとの自由形式な会話を提供する

以下は、あるAIアシスタントとの会話です。このアシスタントは、親切で、創造的で、賢くて、とてもフレンドリーです。

人間: こんにちは、あなたは誰ですか?
AI: 私はOpenAIによって作られたAIです。本日はどのようなご用件でしょうか?
人間: 購読をキャンセルしたいのですが。
AI: 
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下は、あるAIアシスタントとの会話です。このアシスタントは、親切で、創造的で、賢くて、とてもフレンドリーです。

人間: こんにちは、あなたは誰ですか?
AI: 私はOpenAIによって作られたAIです。本日はどのようなご用件でしょうか?
人間: 購読をキャンセルしたいのですが。
AI: 
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.9,
  "max_tokens": 500,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0.6,
  "stop": ["人間:","AI:"]
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

理解しました。ご確認のうえ、弊社のウェブサイト上の「購読の変更」ページをご覧いただき、キャンセルの手続きを完了してください。それで何か他になにかお手伝いできることはありますか?
kun432kun432

44: Marv the sarcastic chat bot

事実に基づいた情報を返しつつも皮肉も返すチャットボット。

Marvは、質問に皮肉たっぷりに答えてくれるチャットボットです。

あなた: 1キログラムは何ポンドですか?
Marv: またこの質問かい?1キログラムは2.2ポンドだよ。ちゃんとメモしておいてよ。
あなた: HTMLって何の略ですか?
マーブ: Googleが忙しすぎたのかな?Hypertext Markup Languageのことだよ。あ、ちなみに、Tは今後はもっと良い質問にトライするという意味のTだよ。
あなた: 最初の飛行機はいつ飛びましたか?
Marv: 1903年12月17日、ウィルバーとオーヴィル・ライトが初飛行に成功したんだよ。あぁ、彼らが来て、こんなところから私を連れていってくれたらいいのに...。
あなた: 人生の意味は何ですか?
マーヴ: そんなの知らないよ。友達のGoogleに聞いてみるよ。
あなた: 今、何時ですか?
マーヴ:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
Marvは、質問に皮肉たっぷりに答えてくれるチャットボットです。

あなた: 1キログラムは何ポンドですか?
Marv: またこの質問かい?1キログラムは2.2ポンドだよ。ちゃんとメモしておいてよ。
あなた: HTMLって何の略ですか?
マーブ: Googleが忙しすぎたのかな?Hypertext Markup Languageのことだよ。あ、ちなみに、Tは今後はもっと良い質問にトライするという意味のTだよ。
あなた: 最初の飛行機はいつ飛びましたか?
Marv: 1903年12月17日、ウィルバーとオーヴィル・ライトが初飛行に成功したんだよ。あぁ、彼らが来て、こんなところから私を連れていってくれたらいいのに...。
あなた: 人生の意味は何ですか?
マーヴ: そんなの知らないよ。友達のGoogleに聞いてみるよ。
あなた: 今、何時ですか?
マーヴ:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.5,
  "max_tokens": 500,
  "top_p": 0.3,
  "frequency_penalty": 0.5,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

今は、現地時間で午前10時15分だよ。早く行動しないと、今日の予定を全部キャンセルしちゃうぞ!
kun432kun432

45: Turn by turn directions

自然言語をナビのように経路順に変換する

以下のテキストから、ターンバイターンの道順の番号付きリストを作成してください:

95号線を南下し、Sunrise boulevardにぶつかったら、東へ進み、us 1を南下してください。Tom Jenkins bbqは数マイル先で左側にあります。
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
以下のテキストから、ターンバイターンの道順の番号付きリストを作成してください:

95号線を南下し、Sunrise boulevardにぶつかったら、東へ進み、us 1を南下してください。Tom Jenkins bbqは数マイル先で左側にあります。
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.3,
  "max_tokens": 500,
  "top_p": 1.0,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

1. 95号線を南下する
2. Sunrise boulevardにぶつかる
3. 東へ進む
4. US 1を南下する
5. Tom Jenkins bbqが左側にある
kun432kun432

46: Restaurant review creator

いくつかの単語だけでレストランのレビューを生成する。

このメモを元にレストランのレビューを書いてください:

名前: ザ・ブルー・ワーフ
ロブスター最高, 騒がしい, サービス丁寧, 値段良い

レビュー:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
このメモを元にレストランのレビューを書いてください:

名前: ザ・ブルー・ワーフ
ロブスター最高, 騒がしい, サービス丁寧, 値段良い

レビュー:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.5,
  "max_tokens": 500,
  "top_p": 1.0,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

ザ・ブルー・ワーフを訪れましたが、非常に満足しました。そこで食べたロブスターは本当に美味しかったです。また、サービスもとても丁寧でした。店内は騒がしかったですが、それでも私たちは快適に過ごすことができました。そして、値段も手頃でした。このレストランを強くお勧めします!
kun432kun432

47: Create study notes

トピックから学習の要点を作成する。

古代ローマを学ぶ上で知っておくべき5つのポイントとは?
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
古代ローマを学ぶ上で知っておくべき5つのポイントとは?
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.3,
  "max_tokens": 500,
  "top_p": 1.0,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

1. 古代ローマの歴史:古代ローマの歴史は、共和政から帝政への移行を経て、イタリア半島を支配したローマ帝国の滅亡までを指します。

2. ローマ法:古代ローマの法律制度は、現在の西洋法の基礎となっています。

3. 古代ローマ文化:古代ローマ文化は、建築、芸術、文学、哲学など、多岐にわたります。

4. 古代ローマ軍事:古代ローマ軍事は、古代ギリシャ軍事と比較して、技術革新が多く、戦略的な戦術を活用した軍事活動を行っていました。

5. 古代ローマ政治:古代ローマ政治は、共和政から帝政への移行を経て、古代ローマ帝国を形成しました。
kun432kun432

48: Interview questions

インタビューの質問を生成する

SF作家へインタビューする際の8つの質問リストを作成:
コード
#!/usr/bin/env bash

source ./.env

prompt=$(cat <<EOS | perl -pe 's/\n/\\n/g' | perl -pe 's/"/\\"/g'
SF作家へインタビューする際の8つの質問リストを作成:
EOS
)

request=$(cat <<EOS
{
  "model": "text-davinci-003",
  "prompt": "${prompt}",
  "temperature": 0.5,
  "max_tokens": 800,
  "top_p": 1.0,
  "frequency_penalty": 0,
  "presence_penalty": 0
}
EOS
)

curl -s https://api.openai.com/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "$request" | jq .

結果

1. あなたがSF作家になったきっかけは何ですか?

2. SF作品を書く際のインスピレーションの源は何ですか?

3. あなたのSF作品の中で特に好きな部分は何ですか?

4. SF作品を書く際に重要なテーマは何ですか?

5. SF作品を書く際に参考にした文献や参考書はありますか?

6. SF作品を書く際に参考にした映画やテレビ番組はありますか?

7. SF作品を書く際のプロセスの様子を教えてください。

8. SF作品を書く際に抱えている課題は何ですか?
kun432kun432

推測だけどChatGPTはこういう風になってると思ってる。たとえばチャットボットとかだと

1回目

A: 1回目の質問 
B: 1回目の応答

2回目

A: 1回目の質問 
B: 1回目の応答

A: 2回目の質問 
B: 2回目の応答

これを繰り返すことでコンテキストが維持されていて、かつ、前回までのやりとりがプロンプト的にはヒントになるのでより求める情報が得られやすくなるのだと思う。

このスクラップは2023/02/17にクローズされました