見出し画像

新しい ChatGPT モデルとその機能をシュッと試す

いや、まさに驚きのニュースがでましたね。。。

OpenAI のモデル改善!!




(/・ω・)/(/・ω・)/(/・ω・)/(/・ω・)/(/・ω・)/(/・ω・)/




ざくっと ChatGPT に要約

OpenAIは、APIの新たなアップデートを発表しました。これには、より操作しやすいAPIモデル、関数呼び出し機能、長いコンテキスト、そして低価格化が含まれています。1. **新たな関数呼び出し機能**: Chat Completions APIに新たな関数呼び出し機能が追加されました。開発者は、gpt-4-0613やgpt-3.5-turbo-0613に関数を記述し、モデルがそれらの関数を呼び出すための引数を含むJSONオブジェクトを出力するように選択することができます。これにより、GPTの能力を外部ツールやAPIとより確実に連携する新たな方法が提供されます。2. **GPT-4とGPT-3.5-turboの更新**: GPT-4とGPT-3.5-turboのバージョンが更新され、より操作しやすくなりました。また、GPT-3.5-turboの新たな16kコンテキストバージョンがリリースされ、これにより標準の4kバージョンと比較して大幅にコンテキストの長さが増えました。3. **価格の低下**: 最先端の埋め込みモデルのコストが75%削減され、GPT-3.5-turboの入力トークンのコストが25%削減されました。4. **モデルの非推奨化**: gpt-3.5-turbo-0301とgpt-4-0314モデルの非推奨化のタイムラインが発表されました。これらのモデルはすべて、3月1日に導入された同じデータプライバシーとセキュリティ保証を提供します。これらのアップデートは、開発者がGPTの能力をより効果的に利用し、アプリケーションに組み込むことを可能にします。

ChatGPT

要するに 3.5-turbo が 16k トークン扱えるように!!(ちょっと値段は上がるけど)
embeddings の価格も安くなる!!
Function Call ってので型を結構強力に縛れる!!



やっほーーーーーい(/・ω・)/




ということでシュッと試してみた。



という話


16k トークンぞ?

まずは 3.5-turbo が 4k 以上使えるようになったかシュッとみるぜ!!


細けぇところはスキップじゃ!!


PlayGround で 4k 以上のトークンを用意する。



4k 以上のトークン


import openai
import time
import os
import csv

openai.api_key = open_ai_api_key

over_4k_tokens = """
吾輩わがはいは猫である。名前はまだ無い。
どこで生れたかとんと見当けんとうがつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪どうあくな種族であったそうだ。この書生というのは時々我々を捕つかまえて煮にて食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌てのひらに載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始みはじめであろう。この時妙なものだと思った感じが今でも残っている。第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶やかんだ。その後ご猫にもだいぶ逢あったがこんな片輪かたわには一度も出会でくわした事がない。のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙けむりを吹く。どうも咽むせぽくて実に弱った。これが人間の飲む煙草たばこというものである事はようやくこの頃知った。
この書生の掌の裏うちでしばらくはよい心持に坐っておったが、しばらくすると非常な速力で運転し始めた。書生が動くのか自分だけが動くのか分らないが無暗むやみに眼が廻る。胸が悪くなる。到底とうてい助からないと思っていると、どさりと音がして眼から火が出た。それまでは記憶しているがあとは何の事やらいくら考え出そうとしても分らない。
ふと気が付いて見ると書生はいない。たくさんおった兄弟が一疋ぴきも見えぬ。肝心かんじんの母親さえ姿を隠してしまった。その上今いままでの所とは違って無暗むやみに明るい。眼を明いていられぬくらいだ。はてな何でも容子ようすがおかしいと、のそのそ這はい出して見ると
非常に痛い。吾輩は藁わらの上から急に笹原の中へ棄てられたのである。
ようやくの思いで笹原を這い出すと向うに大きな池がある。吾輩は池の前に坐ってどうしたらよかろうと考えて見た。別にこれという分別ふんべつも出ない。しばらくして泣いたら書生がまた迎に来てくれるかと考え付いた。ニャー、ニャーと試みにやって見たが誰も来ない。そのうち池の上をさらさらと風が渡って日が暮れかかる。腹が非常に減って来た。泣きたくても声が出ない。仕方がない、何でもよいから食物くいもののある所まであるこうと決心をしてそろりそろりと池を左ひだりに廻り始めた。どうも非常に苦しい。そこを我慢して無理やりに這はって行くとようやくの事で何となく人間臭い所へ出た。ここへ這入はいったら、どうにかなると思って竹垣の崩くずれた穴から、とある邸内にもぐり込んだ。縁は不思議なもので、もしこの竹垣が破れていなかったなら、吾輩はついに路傍ろぼうに餓死がししたかも知れんのである。一樹の蔭とはよく云いったものだ。この垣根の穴は今日こんにちに至るまで吾輩が隣家となりの三毛を訪問する時の通路になっている。さて邸やしきへは忍び込んだもののこれから先どうして善いいか分らない。そのうちに暗くなる、腹は減る、寒さは寒し、雨が降って来るという始末でもう一刻の猶予ゆうよが出来なくなった。仕方がないからとにかく明るくて暖かそうな方へ方へとあるいて行く。今から考えるとその時はすでに家の内に這入っておったのだ。ここで吾輩は彼かの書生以外の人間を再び見るべき機会に遭遇そうぐうしたのである。第一に逢ったのがおさんである。これは前の書生より一層乱暴な方で吾輩を見るや否やいきなり頸筋くびすじをつかんで表へ抛ほうり出した。いやこれは駄目だと思ったから眼をねぶって運を天に任せていた。しかしひもじいのと寒いのにはどうしても我慢が出来ん。吾輩は再びおさんの隙すきを見て台所へ這はい上あがった。すると間もなくまた投げ出された。吾輩は投げ出されては這い上り、這い上っては投げ出され、何でも同じ事を四五遍繰り返したのを記憶している。その時におさんと云う者はつくづくいやになった。この間おさんの三馬さんまを偸ぬすんでこの返報をしてやってから、やっと胸の痞つかえが下りた。吾輩が最後につまみ出されようとしたときに、この家うちの主人が騒々しい何だといいながら出て来た。下女は吾輩をぶら下げて主人の方へ向けてこの宿やどなしの小猫がいくら出しても出しても御台所おだいどころへ上あがって来て困りますという。主人は鼻の下の黒い毛を撚ひねりながら吾輩の顔をしばらく眺ながめておったが、やがてそんなら内へ置いてやれといったまま奥へ這入はいってしまった。主人はあまり口を聞かぬ人と見えた。下女は口惜くやしそうに吾輩を台所へ抛ほうり出した。かくして吾輩はついにこの家うちを自分の住家すみかと極きめる事にしたのである。
吾輩の主人は滅多めったに吾輩と顔を合せる事がない。職業は教師だそうだ。学校から帰ると終日書斎に這入ったぎりほとんど出て来る事がない。家のものは大変な勉強家だと思っている。当人も勉強家であるかのごとく見せている。しかし実際はうちのものがいうような勤勉家ではない。吾輩は時々忍び足に彼の書斎を覗のぞいて見るが、彼はよく昼寝ひるねをしている事がある。時々読みかけてある本の上に涎よだれをたらしている。彼は胃弱で皮膚の色が淡黄色たんこうしょくを帯びて弾力のない不活溌ふかっぱつな徴候をあらわしている。その癖に大飯を食う。大飯を食った後あとでタカジヤスターゼを飲む。飲んだ後で書物をひろげる。二三ページ読むと眠くなる。涎を本の上へ垂らす。これが彼の毎夜繰り返す日課である。吾輩は猫ながら時々考える事がある。教師というものは実に楽らくなものだ。人間と生れたら教師となるに限る。こんなに寝ていて勤まるものなら猫にでも出来ぬ事はないと。それでも主人に云わせると教師ほどつらいものはないそうで彼は友達が来る度たびに何とかかんとか不平を鳴らしている。
吾輩がこの家へ住み込んだ当時は、主人以外のものにははなはだ不人望であった。どこへ行っても跳はね付けられて相手にしてくれ手がなかった。いかに珍重されなかったかは、今日こんにちに至るまで名前さえつけてくれないのでも分る。吾輩は仕方がないから、出来得る限り吾輩を入れてくれた主人の傍そばにいる事をつとめた。朝主人が新聞を読むときは必ず彼の膝ひざの上に乗る。彼が昼寝をするときは必ずその背中せなかに乗る。これはあながち主人が好きという訳ではないが別に構い手がなかったからやむを得んのである。その後いろいろ経験の上、朝は飯櫃めしびつの上、夜は炬燵こたつの上、天気のよい昼は椽側えんがわへ寝る事とした。しかし一番心持の好いのは夜よに入いってここのうちの小供の寝床へもぐり込んでいっしょにねる事である。この小供というのは五つと三つで夜になると二人が一つ床へ入はいって一間ひとまへ寝る。吾輩はいつでも彼等の中間に己おのれを容いるべき余地を見出みいだしてどうにか、こうにか割り込むのであるが、運悪く小供の一人が眼を醒さますが最後大変な事になる。小供は――ことに小さい方が質たちがわるい――猫が来た猫が来たといって夜中でも何でも大きな声で泣き出すのである。すると例の神経胃弱性の主人は必かならず眼をさまして次の部屋から飛び出してくる。現にせんだってなどは物指ものさしで尻ぺたをひどく叩たたかれた。
"""

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo-16k",
    messages=[
      {"role": "system", "content": "あなたは有能なアシスタントです。"},
      {"role": "user", "content": over_4k_tokens}
    ]
)
print(response['choices'][0]['message']['content'])



ぶち込んで呼び出し!!



回答


吾輩はそのとき非常に痛かった。しかし、私は我慢することにした。
小さな子供なのだから仕方がないと思ったからだ。
その後、主人は私に対して少しずつ態度を変え始めた。
私が生活の中で役に立つ存在だと気付いたのだろう。彼は私に名前をつけることを決めた。
そして、私の名前は「タマ」となった。

タマとしての生活は順調だった。主人が忙しい間、私は家の中を自由に探索し、
猫の本能を満たすことができた。また、食事もおいしいものを与えてもらえた。
時折、主人が私と遊んでくれることもあり、私は幸せな猫の生活を送ることができた。

しかし、ある日、私は主人の会話から驚くべき事実を知ることになった。
彼は私を飼い始めた時、私が野良猫だったことを知っていたのだ。それにもかかわらず、
私を家に迎え入れてくれたのだ。

この事実に私は深く感動した。主人は私を野良猫として見ないで、
家族の一員として扱ってくれたのだ。私は主人に感謝の気持ちを抱えながら、
これからも彼との共同生活を大切にすることを決めたのである。

これからも私は有能なアシスタントとして主人をサポートし続けるつもりだ。
私は彼の忠実なパートナーであり、彼が困難な時にはいつでも彼の側にいるつもりだ。

吾輩こそ有能なアシスタントである。





うぉぉぉぉぉぉ( ゚д゚)




いいやん!!



次は Function Call や!!



とりあえずサンプルが提供されてたのでそれをシュッと


import openai
import json

# Example dummy function hard coded to return the same weather
# In production, this could be your backend API or an external API
def get_current_weather(location, unit="fahrenheit"):
    """Get the current weather in a given location"""
    weather_info = {
        "location": location,
        "temperature": "72",
        "unit": unit,
        "forecast": ["sunny", "windy"],
    }
    return json.dumps(weather_info)

# Step 1, send model the user query and what functions it has access to
def run_conversation():
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",
        messages=[{"role": "user", "content": "What's the weather like in Boston?"}],
        functions=[
            {
                "name": "get_current_weather",
                "description": "Get the current weather in a given location",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "The city and state, e.g. San Francisco, CA",
                        },
                        "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                    },
                    "required": ["location"],
                },
            }
        ],
        function_call="auto",
    )

    message = response["choices"][0]["message"]

    # Step 2, check if the model wants to call a function
    if message.get("function_call"):
        function_name = message["function_call"]["name"]

        # Step 3, call the function
        # Note: the JSON response from the model may not be valid JSON
        function_response = get_current_weather(
            location=message.get("location"),
            unit=message.get("unit"),
        )

        # Step 4, send model the info on the function call and function response
        second_response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            messages=[
                {"role": "user", "content": "What is the weather like in boston?"},
                message,
                {
                    "role": "function",
                    "name": function_name,
                    "content": function_response,
                },
            ],
        )
        return second_response

print(run_conversation())



結果

{
  "id": "chatcmpl-7R5Yt12KO5UtheGrrz2ZT6UOgL1E1",
  "object": "chat.completion",
  "created": 1686690591,
  "model": "gpt-3.5-turbo-0613",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "The weather in Boston is currently sunny and windy with a temperature of 72 degrees."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 70,
    "completion_tokens": 17,
    "total_tokens": 87
  }
}




うぉぉぉぉぉぉ( ゚д゚)



なんか function を定義して普通にリクエストした後で該当の function が存在していればそこに当てはめる感じになるみたい(1リクエストでは完結しなさそう)



早速 cookbook にも function call について書かれているので要チェック!!




試せてないけど text-to-sql とか複数 function の実行とかできるっぽい。




出来ることが広がりますなぁ( ・ω・)



ということで勢いで書いたのでおしまい。



速度もシュッと測ってみた


いいなと思ったら応援しよう!