📘

Assistants.create() got an unexpected keyword argument 'file_ids'の対処方法

2024/07/13に公開

前提

  • python:3.10.x
  • openai:1.35.13

事象

以下のDocsを参考にAssitant API を実行しようとした。

https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/code-interpreter?tabs=python

assistant.py
import time
import json
from openai import AzureOpenAI

client = AzureOpenAI(
    api_key= "<key>",
    api_version="2024-02-15-preview",
    azure_endpoint = "<endpoint>"
)


# ファイルの登録
file = client.files.create(
  file=open("<"ファイルパス>", "rb"),
  purpose='assistants'
)
INSTRUCTIONS = """
あなたはデータ分析のスペシャリストです。
csvファイルを元に、各データのカラムを確認し、データの特徴を把握してください。

## 規約
- 日本語で回答してください。
"""

assistant_1 = client.beta.assistants.create(
    instructions=INSTRUCTIONS, # 指示 (アシスタントの定義や目的など)
    tools=[{"type": "code_interpreter"}], # アシスタントが使用できるツールのリスト (ここでは Code interpreter のみ)
    model="<model>", # モデルのデプロイ名
    file_ids=[file.id]
)

# スレッドの作成
thread_1 = client.beta.threads.create()


# スレッドの実行
run_1_1 = client.beta.threads.runs.create(
  thread_id=thread_1.id,
  assistant_id=assistant_1.id
)
# アシスタントが回答のメッセージを返すまで待つ関数
def wait_for_assistant_response(thread_id, run_id):
    while True:
        time.sleep(5)
        # 実行ステータスの取得
        run = client.beta.threads.runs.retrieve(
            thread_id=thread_id,
            run_id=run_id
        )
        status = run.status
        if status in ["completed", "cancelled", "expired", "failed"]:
            print(status)
            break


# スレッドのメッセージを確認する関数
def print_thread_messages(thread_id):
    msgs = client.beta.threads.messages.list(thread_id=thread_id)
    for m in msgs:
        assert m.content[0].type == "text"
        print({"role": m.role, "message": m.content[0].text.value})

# アシスタントが回答のメッセージを返すまで待つ
wait_for_assistant_response(thread_1.id, run_1_1.id)
# スレッドのメッセージを確認
print_thread_messages(thread_1.id)

結果として、以下のエラーが出現。

Assistants.create() got an unexpected keyword argument 'file_ids'

対応策

OpenAIのバージョンを1.20.0にダウングレードする

pip uninstall openai
pip install openai==1.20.0

再度実行すると、エラーが出ずに実行できた。

completed
{'role': 'assistant', 'message': 'このデータセットには、以下のカラムが含まれています。\n\n- PassengerId: 乗客ID\n- Survived: 生存したかどうか (0 = No, 1 = Yes)\n- Pclass: チケットのク ラス (1 = 1st, 2 = 2nd, 3 = 3rd)\n- Name: 乗客の名前\n- Sex: 性別\n- Age: 年齢\n- SibSp: 同乗している兄弟/配偶者の数\n- Parch: 同乗している親/子供の数\n- Ticket: チケット番号\n- Fare: 乗船料金\n- Cabin: 客室番号\n- Embarked: 乗船港 (C = Cherbourg, Q = Queenstown, S = Southampton)'}
ヘッドウォータース

Discussion