コンテンツにスキップ

OpenAI会話形式(Python)

本ページの概要

公式ドキュメント

OpenAI Chat

対話を含むメッセージのリストを渡すと、モデルはレスポンスを返します。関連ガイドは OpenAI 公式サイトの Chat Completions を参照してください。

💡 Pythonリクエスト例:基本テキスト対話 ✅

Section titled “💡 Pythonリクエスト例:基本テキスト対話 ✅”
  • Python スクリプト(たとえば xxxx.py)と同じディレクトリに、.env という名前のファイルを作成します(ファイル名は .env で、先頭にドットがあり、それ以外の接頭辞はありません)。
  • その .env ファイルに以下の内容を入力し、APIキーとベースURLを設定してください: # .env ファイルの内容 OPENAI_API_KEY=“sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” OPENAI_BASE_URL=“https://sg.4All API.com/v1”

今後、次のような他の設定変数も追加できます:

Section titled “今後、次のような他の設定変数も追加できます:”
### 2. `xxxx.py` ファイルを作成し、以下の Python コードを記述する。
- Python スクリプト(たとえば `xxxx.py`)と同じディレクトリに、`.env` という名前のファイルを作成します(ファイル名は `.env` で、先頭にドットがあり、それ以外の接頭辞はありません)。
```python
import os
from dotenv import load_dotenv, find_dotenv # find_dotenv をインポートして場所を特定する
import openai
from openai import OpenAI
import httpx
# 0. .env ファイル内の環境変数を読み込む(デバッグ強化)
print("--- .env ファイル読み込みデバッグ開始 ---")
# 現在の作業ディレクトリまたはスクリプトのあるディレクトリから .env ファイルを探す
# find_dotenv(usecwd=True) は現在の作業ディレクトリを優先して探す
# find_dotenv()(引数なし)はスクリプトの位置から上位へ向かって探す
dotenv_path_found = find_dotenv(usecwd=True) # 現在の作業ディレクトリを確認
if not dotenv_path_found:
dotenv_path_found = find_dotenv() # CWD にない場合は標準方式で検索(スクリプトのディレクトリから上へ)
if dotenv_path_found:
print(f"DEBUG: .env ファイルのパスが見つかりました: {dotenv_path_found}")
# verbose=True にすると読み込み過程の詳細が表示される
# override=True は .env ファイル内の変数で既存の同名環境変数を上書きすることを意味する
loaded_successfully = load_dotenv(dotenv_path=dotenv_path_found, verbose=True, override=True)
if loaded_successfully:
print("DEBUG: .env ファイルから変数の読み込みに成功しました。")
else:
# loaded_successfully が False の場合、ファイルが空または解析不能の可能性があります。
# ただし、通常はファイルが見つかっていて空でなければ、python-dotenv は内容に問題があっても True を返すことがあります。
# 実際の判断は、その後の os.getenv で値を取得できるかどうかです。
print("DEBUG: .env ファイルは見つかりましたが、load_dotenv() の実行が完了しました(verbose 出力と後続の変数値を確認してください)。")
else:
print("DEBUG: .env ファイルを見つけられませんでした。")
print("DEBUG: '.env' という名前のファイルが、スクリプトのあるディレクトリまたはプロジェクトのルートに存在することを確認してください。")
print("--- .env ファイル読み込みデバッグ終了 ---")
print("--- 環境変数取得デバッグ開始 ---")
# 1. 環境変数から APIキーとベースURLを読み込む
api_key = os.getenv("OPENAI_API_KEY")
base_url_from_env = os.getenv("OPENAI_BASE_URL")
# 取得した元の値をデバッグ用に表示する
print(f"DEBUG: os.getenv(\"OPENAI_API_KEY\") が返した値: {'文字列(具体的な内容は非表示)' if api_key else 'None'}")
if api_key:
print(f"DEBUG: API Key の先頭5文字: {api_key[:5]}") # 確認のため一部を表示
print(f"DEBUG: os.getenv(\"OPENAI_BASE_URL\") が返した値: {base_url_from_env if base_url_from_env else 'None'}")
print("--- 環境変数取得デバッグ終了 ---")
if not api_key:
print("--------------------------------------------------------------------")
print("エラー:.env ファイルまたは環境変数から OPENAI_API_KEY を取得できませんでした。")
print("以下の点をよく確認してください:")
print("1. プロジェクトのルートまたはスクリプトのあるディレクトリに、'.env' という名前のファイルが存在するか。")
print(" (DEBUG 情報の '找到 .env 文件路径:' に正しいパスが表示されていますか?)")
print("2. '.env' ファイルに OPENAI_API_KEY='your_actual_key' が正しく定義されているか。")
print(" (キー名のスペルが正しく、余分な空白がなく、APIキーの値が完全であることを確認してください)。")
print("3. .env ファイルの内容が次の例と一致しているか確認してください:")
print(" OPENAI_API_KEY=\"sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"")
print(" OPENAI_BASE_URL=\"https://sg.4All API.com/v1\"")
print("上記の 'DEBUG:' で始まる詳細出力を確認し、原因の特定に役立ててください。")
print("--------------------------------------------------------------------")
exit() # 必要な API Key が見つからないため終了する
else:
print(f"読み込まれた API Key(部分表示): '{api_key[:5]}...{api_key[-4:]}'")
# ベースURLは環境変数から読み込めます。未設定の場合は default_base_url = "https://sg.4All API.com/v1" を使用します
default_base_url = "OPENAI_BASE_URL" # よく使う URL をデフォルト値として設定
base_url = base_url_from_env if base_url_from_env else default_base_url
print(f"使用する Base URL: {base_url}")
if base_url == default_base_url and not base_url_from_env :
print(f"(ヒント: OPENAI_BASE_URL が .env ファイルまたは環境変数で指定されていないため、現在はコード内のデフォルト値 '{default_base_url}' を使用しています。)")
# ...(以降の OpenAI クライアント初期化、API 呼び出し、エラーハンドリングのコードは変更なし)...
# 2. API クライアントを設定する
client = OpenAI(
api_key=api_key,
base_url=base_url,
timeout=httpx.Timeout(300.0, connect=60.0),
max_retries=1,
)
# 3. API リクエスト用のメッセージ本文を準備する
messages = [
{"role": "user", "content": "你好,你好,你能做什么?请用中文回答。"}
]
# 4. リクエストを送信してレスポンスを処理する
try:
print("OpenAI API の呼び出しを試みています...")
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
max_tokens=4500,
temperature=0.8,
)
if response.choices:
assistant_reply = response.choices[0].message.content
print("モデルの応答:", assistant_reply)
else:
print("API から有効な応答を取得できませんでした。")
except openai.AuthenticationError as e:
print(f"OpenAI API の認証に失敗しました: {e}")
print("これは通常、APIキーが無効であるか、権限がないことを意味します。.env ファイル内の OPENAI_API_KEY が 4All API から取得した正しいキーか、再度確認してください。")
print(f"現在使用しようとしている API Key(.env または環境変数から、部分表示): '{api_key[:5]}...{api_key[-4:]}'、Base URL は: {base_url}")
except openai.APIConnectionError as e:
print(f"OpenAI API に接続できません: {e}")
except openai.RateLimitError as e:
print(f"OpenAI API のレート制限に達しました: {e}")
except openai.APIStatusError as e:
print(f"OpenAI API がエラー状態コードを返しました: {e.status_code}")
print(f"レスポンス詳細: {e.response}")
except Exception as e:
print(f"API 呼び出し中に不明なエラーが発生しました: {e}")
print(f"エラーの種類: {type(e).__name__}")

以下を実施してください。

  • .env ファイルを注意深く確認してください: ファイル名:必ず .env であること。 場所:Python スクリプトと同じフォルダにあること。 内容:キー名( OPENAI_API_KEYOPENAI_BASE_URL )が正しいこと、APIキーとURLの値が完全に正しく、余計な文字や欠落がないことを再確認してください。形式は次のようになります: Code snippet OPENAI_API_KEY= “sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” OPENAI_BASE_URL= “https://sg.4All API.com/v1”
  • 上記の完全な Python スクリプトを実行してください。
  • スクリプト冒頭の DEBUG: 出力を確認してください。 .env ファイルは見つかりましたか( DEBUG: .env ファイルのパスが見つかりました: ... )? load_dotenv は正常に読み込みを報告しましたか( DEBUG: .env ファイルから変数の読み込みに成功しました。 )? os.getenv("OPENAI_API_KEY") は何を返しましたか( DEBUG: os.getenv("OPENAI_API_KEY") が返した値: ... )?

DEBUG 出力に基づいて判断してください:

  • もし DEBUG 情報に .env ファイルを見つけられなかったこと、または os.getenv("OPENAI_API_KEY")None を返したことが表示されるなら、問題は .env ファイルの検索または読み込みの過程にあります。ファイル名、配置場所、および load_dotenv に関する DEBUG 出力を重点的に確認してください。
  • もし DEBUG 情報で .env ファイルが見つかって読み込まれ、さらに os.getenv("OPENAI_API_KEY") でも一見キーらしい文字列が取得できているのに、その後 AuthenticationError(認証失敗)が発生する場合、問題は環境変数の読み込み機構ではありません。.env ファイル内の OPENAI_API_KEY の値自体が、https://sg.4All API.com/v1 というサービスに対して無効であるか、権限がないことが原因です。その場合は、4All API の提供元に連絡して、キーの有効性を確認してください。