目次
- はじめに
- 内容
- Embeddeingsクラス
- Filesクラス
- おわりに
1. はじめに
この記事はOpenAIのAPIを触るにあたって、勉強した内容を共有する目的で書いています。
OpenAI公式のAPI Refernceを読む方が参考になります。
対象や環境などは前回の記事をご覧ください。
2. 内容
- Embeddingsクラス
- 概要
- createメソッド
- Filesクラス
- 概要
- createメソッド
- retrieveメソッド
3. Embeddingsクラス
概要
Embeddingsクラスはテキストの類似度を比較するのに用いられます。
openaiモジュールの中にあるembeddings.py
の27~139行目に書いてあります。
createメソッド
Embeddingsクラスのcreateメソッドについて見ていきます。
同ファイル内の47~139行目に書かれています。
47~61行目を引用します。
def create(
self,
*,
input: Union[str, List[str], Iterable[int], Iterable[Iterable[int]]],
model: Union[str, EmbeddingModel],
dimensions: int | NotGiven = NOT_GIVEN,
encoding_format: Literal["float", "base64"] | NotGiven = NOT_GIVEN,
user: str | NotGiven = NOT_GIVEN,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> CreateEmbeddingResponse:
ここから分かるのは以下の3点です。
- 引数には
input
とmodel
を設定する必要がある -
model
には"text-embedding-ada-002", "text-embedding-3-small", "text-embedding-3-large"
のいずれかを設定する必要がある -
CreateEmbeddingResponse
クラスを返す
次にCreateEmbeddingResponseクラスを見てみます。
create_embedding_response.py
の20~31行目に書かれています。
このクラスの中身を筆者の分かる範囲でまとめると以下のようになります。
-
data
:Embedding
クラスのリスト -
model
: 回答につかったモデル名 -
usage
: 回答で消費したトークン量
最後にEmbeddingクラスを見ます。
embedding.py
の11~23行目に書かれています
このクラスの中身を同様にまとめると以下のようになります。
-
embedding
: ベクトル -
index
: 要素番号
まとめると以下のように書くことで、テキストをベクトル化することができます。
client = OpenAI()
text = "Hello World!" #任意の文章.
response = client.embeddings.create(
model="text-embedding-3-large"
input=text
)
4. Filesクラス
概要
FilesクラスはAPIを使ってChatGPTにファイルを送信する際に用いられます。
openaiモジュールの中にあるfiles.pyの40~349行目に書かれています。
createメソッド
Filesクラスのcreateメソッドについて見ていきます。
同ファイル内の60~131行目に書かれています。
60~71行目を引用します。
def create(
self,
*,
file: FileTypes,
purpose: FilePurpose,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> FileObject:
ここから分かるのは以下の3点です。
- 引数には
file
とpurpose
を設定する必要がある -
purpose
には"assistants", "batch", "fine-tune", "vision", "user_data", "evals"
のいずれかを指定する必要がある -
FileObject
クラスを返す
また、OpenAI公式のAPI Refernceによると引数のfile
にはファイルの名前ではなく、open("file", "rb")
としてバイナリで入れる必要があります。
つまり、open
関数の第2引数がrb
であれば問題ないということです。
次にFileObjectクラスを見てみます。
file_object.py
の11~51行目に書かれています。
このクラスの中身を筆者の分かる範囲でまとめると以下のようになります。
-
id
: 送信したファイルの識別するもの -
bytes
: ファイルの容量 -
created_at
: Unixでのタイムスタンプ -
filename
: ファイルの名前 -
purpose
: ファイルを送信した目的 -
status
: ファイルの提出状況 -
expires_at
: ファイルの有効期限
最後に以上を踏まえてcreateメソッドの動作例を見てみましょう。
client = OpenAI()
file_name = "image.png" #任意のふぁいるめい
response = client.files.create(
file=open(file_name,"rb")
purpose="vision"
)
retrieveメソッド
次にFilesクラスのretrieveメソッドについて見ていきます。
同ファイル内の133~164行目に書かれています。
133~143行目を引用します。
def retrieve(
self,
file_id: str,
*,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> FileObject:
ここから分かるのは以下の3点です。
- 引数には
file_id
を設定する必要がある -
FileObject
クラスを返す
retrieveという英単語の意味からも推察される通り、引数に指定したfile_id
をid
に持つファイルを取得します。この過程を追っていくととても大変なので省略します。悪しからず。
5. おわりに
次回はAssistants
クラス、Threads
クラスを予定しています。
改善点がありましたらご教示くださると幸いです。