🙌

【AI_18日目】大規模言語モデル1冊目

2024/11/07に公開

こんにちは投資ロウトです。

背景

AI開発ができるために大規模言語モデルについて理解を深めていきます。

ChatGPT

・Chat Completion API・・・入力のテキストを与えて応答のテキストを得る
※メッセージは配列で履歴を送ることも可能とのこと。
※ブラウザ上で使えるChatGPTと違い、会話履歴を踏まえて応答する機能は持っていないとのこと。

APIの返却値ではトークン数のカウントも可能とのこと。

{
 略
 "usage": {
  "prompt_tokens": 入力のトークン数,
  "completion_tokens": 出力のトークン数,
  "total_tokens": 合計のトークン数
 }
}

トークン数をカウントしたい場合は、OpenAIがWeb上で提供しているTokenizerを使うと確認できるとのことでした。

https://platform.openai.com/tokenizer

またPython上でトークン数をカウントしたい場合は、Pythonパッケージのtiktokenでカウントすることも可能とのことでした。

https://github.com/openai/tiktoken

またstream情報を取得するには、「stream=True」を設定するだけでストリーミングで応答を得ることも可能とのことでした。

Function calling

2023/6/13に追加された機能で、LLMに利用可能な関数を伝えておくと、LLMに関数を使いたいという判断をさせる機能とのことでした。

resopnse = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=messages,
    functions=functions,
)

上記を実行すると

APIRemovedInV1: 

You tried to access openai.ChatCompletion, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.

You can run `openai migrate` to automatically upgrade your codebase to use the 1.0.0 interface. 

Alternatively, you can pin your installation to the old version, e.g. `pip install openai==0.28`

A detailed migration guide is available here:

というエラーが表示されてしまう。バージョンが変わって実行できなくなったということで、以下のように修正する

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=messages,
    functions=functions
)

出力すると、確かにcontentがNoneとなり、function_callには実行したい関数名と渡したい引数が書かれていました。

message=ChatCompletionMessage(content=None, refusal=None, role='assistant', audio=None, function_call=FunctionCall(arguments='{"location":"Tokyo"}', name='get_current_weather'),

しかしLLMにはPythonなどの関数を実行する能力はないため、こちらがこの関数を実行してあげる必要があるとのことでした。

またfunction_callに伴い、function_callのパラメータをnoneにすると、LLMは関数を呼び出すような実行はせずに、autoにすると入力に応じて関数の呼び出しをしてくれるようになるとのことでした。

と短いですが、章が変わるので一旦学習を区切りたいと思います。ご精読ありがとうございました。焦らず自分のペースでコツコツと進めていきたいと思います。

Discussion