0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenAIクラスを読む②

Last updated at Posted at 2025-04-24

目次

  1. はじめに
  2. 内容
  3. Embeddeingsクラス
  4. Filesクラス
  5. おわりに

1. はじめに

この記事はOpenAIのAPIを触るにあたって、勉強した内容を共有する目的で書いています。
OpenAI公式のAPI Refernceを読む方が参考になります。
対象や環境などは前回の記事をご覧ください。

2. 内容

  1. Embeddingsクラス
    • 概要
    • createメソッド
  2. Filesクラス
    • 概要
    • createメソッド
    • retrieveメソッド

3. Embeddingsクラス

概要

Embeddingsクラスはテキストの類似度を比較するのに用いられます。
openaiモジュールの中にあるembeddings.pyの27~139行目に書いてあります。

createメソッド

Embeddingsクラスのcreateメソッドについて見ていきます。
同ファイル内の47~139行目に書かれています。
47~61行目を引用します。

embeddings.py
    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点です。

  • 引数にはinputmodelを設定する必要がある
  • 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 : 要素番号

まとめると以下のように書くことで、テキストをベクトル化することができます。

example_1.py
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行目を引用します。

files.py
    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点です。

  • 引数にはfilepurposeを設定する必要がある
  • 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メソッドの動作例を見てみましょう。

example_2.py
client = OpenAI()
file_name = "image.png"    #任意のふぁいるめい
response = client.files.create(
    file=open(file_name,"rb")
    purpose="vision"
)

retrieveメソッド

次にFilesクラスのretrieveメソッドについて見ていきます。
同ファイル内の133~164行目に書かれています。
133~143行目を引用します。

files.py
    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_ididに持つファイルを取得します。この過程を追っていくととても大変なので省略します。悪しからず。

5. おわりに

次回はAssistantsクラス、Threadsクラスを予定しています。
改善点がありましたらご教示くださると幸いです。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?