2025/12/18

GPT‑5.2(Responses API)利用の流れ

GPT‑5.2(Responses API)利用の流れ
## 利用手順
- OpenAI アカウントを作成
- APIキー を取得
- リクエストヘッダーに設定
  - Authorization: Bearer YOUR_API_KEY
  - Content-Type: application/json

## エンドポイント
```
POST https://api.openai.com/v1/responses
```

## 公式ドキュメントURL
- [OpenAI API Docs – Responses](https://platform.openai.com/docs/api-reference/responses)

## Pythonコード例
### requests を使った直接呼び出し
```
import requests

API_KEY = "YOUR_API_KEY"
url = "https://api.openai.com/v1/responses"
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# ユーザー質問
user_question = "この製品はISO規格に適合していますか?"

# RAGで取得した外部情報(例: 構造データ+PDF抜粋)
retrieved_context = """
構造データ:
{
  "製品名": "ABCセンサー",
  "測定範囲": "0-100℃",
  "精度": "±0.5℃"
}

規格PDF抜粋:
ISO 12345:2023 セクション 4.2
温度センサーは測定範囲0-100℃、精度±1.0℃以内であること。
"""

# API呼び出し
data = {
    "model": "gpt-5.2",
    "input": f"質問: {user_question}\n\n追加情報:\n{retrieved_context}"
}

response = requests.post(url, headers=headers, json=data)
print(response.json()["output"][0]["content"][0]["text"])
```
「"""」は三連引用符。複数行にわたる文字列を定義する。

### 公式Python SDKを使った呼び出し
```
from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY")

# ユーザー質問
user_question = "この製品はISO規格に適合していますか?"

# RAGで取得した外部情報(例: 構造データ+PDF抜粋)
retrieved_context = """
構造データ:
{
  "製品名": "ABCセンサー",
  "測定範囲": "0-100℃",
  "精度": "±0.5℃"
}

規格PDF抜粋:
ISO 12345:2023 セクション 4.2
温度センサーは測定範囲0-100℃、精度±1.0℃以内であること。
"""

# API呼び出し
resp = client.responses.create(
    model="gpt-5.2",
    input=f"質問: {user_question}\n\n追加情報:\n{retrieved_context}"
)

print(resp.output[0].content[0].text)
```

### API呼出し時のinputの指定パターン
#### 文字列形式
```
resp = client.responses.create(
    model="gpt-5.2",
    input=f"質問: {user_question}\n\n追加情報:\n{retrieved_context}"
)
```
「f」は変数展開の指定

#### 構造化形式
```
resp = client.responses.create(
    model="gpt-5.2",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": f"質問: {user_question}"},
                {"type": "input_text", "text": f"追加情報:\n{retrieved_context}"}
            ]
        }
    ]
)
```
#### roleの種類
1. role: "system"
  - 用途: モデルの振る舞いや出力ルールを事前に定義する
  - 関係性:
    - スキーマで「構造」を保証するだけでは不十分
    - 「このプロパティはこういう意味で、この範囲の値を返す」といった 意味付けや利用方法を指示する場所が system

2. role: "user"
  - 用途: 実際の質問や指示を与える
  - 関係性: プロパティの意味付けはここではなく、質問内容を渡す場所

3. role: "assistant"
  - 用途: 過去の応答を含めて会話の流れを維持する
  - 関係性: プロパティの意味付けとは直接関係しない

例:
```
"response_format": {
  "type": "json_schema",
  "json_schema": {
    "name": "iso_check_schema",
    "schema": {
      "type": "object",
      "properties": {
        "compliance": { "type": "boolean" },
        "standard": { "type": "string" },
        "explanation": { "type": "string" }
      },
      "required": ["compliance", "standard"]
    }
  }
}

"input": [
  {
    "role": "system",
    "content": [
      {
        "type": "text",
        "text": "あなたは品質管理の専門家です。必ず以下のスキーマに従って返答してください。\n- compliance: 製品が指定されたISO規格に適合している場合はtrue、そうでなければfalse。\n- standard: 対象となるISO規格番号を文字列で返す。\n- explanation: 適合/非適合の理由を簡潔に説明する。"
      }
    ]
  },
  {
    "role": "user",
    "content": [
      {
        "type": "input_text",
        "text": "この製品はISO 9001に適合していますか?"
      }
    ]
  }
]
```
#### system 指示の有効範囲
- リクエスト単位で有効
  → そのリクエストの中で指定した role: "system" の内容は、そのリクエスト全体に効きます。
- 次のリクエストには引き継がれない
  → 別の呼び出しをするときには、再度 system を含めて渡さないとルールは維持されません。
- 継続利用したい場合
  → 会話履歴を再現する形で、毎回 system を含めて送る必要があります。
  → 例えば「必ずJSON Schemaに従って返答する」「confidenceは0.0〜1.0で返す」といったルールは、毎回 system に書いて渡すのが正しい使い方です。

#### typeの種類
- input_text
  - 通常のテキスト入力
  - 例: ユーザーの質問や補足情報
- input_image
  - 画像入力
  - 例: 画像ファイルを渡して「この図を説明して」と指示する
- input_audio
  - 音声入力
  - 例: 音声ファイルを渡して「文字起こしして」と指示する

### file_searchの使い方
file_searchはResponses API に組み込まれたビルトインツール。Vector Store 内のファイルを検索し、回答生成に利用する仕組み。

1. Vector Store を作成

	```
	vs = client.vector_stores.create(name="my_store")
	```
    
2. ファイルをアップロードして Vector Store に追加
	```
	client.vector_stores.files.upload(
    	vector_store_id=vs.id,
   		file=open("manual.md", "rb")
	)
	```
    
3. Responses API 呼び出し時に tools と vector_store_ids を指定
```
resp = client.responses.create(
   	model="gpt-5.2",
   	input="この製品はISO 9001に適合していますか?",
   	tools=[{"type": "file_search"}],
   	vector_store_ids=[vs.id]
)
```

## GPT‑5.2 Responses API パラメータ一覧
1. 出力制御系
  - temperature
    - 出力のランダム性を制御(0〜2)
    - 低いほど安定・事実寄り、高いほど創造的
  - top_p
    - 確率分布の累積で候補範囲を制限(0〜1)
    - 低いほど一貫性が高く、高いほど多様性が増す
  - max_output_tokens
    - 出力の最大トークン数を指定
    - 長文生成や要約の長さを調整可能

2. 応答形式系
  - input
    - ユーザーからの質問や指示(必須)
  - modalities
    - 出力形式を指定(例: "text", "json", "audio")
    - JSON構造や音声出力を求める場合に利用
  - response_format
    - 出力の形式をさらに細かく指定
    - 例: "json_schema" を指定して構造化データを返す

3. 応答数・多様性系
  - n
    - 応答の候補数を指定(例: 2なら2通りの回答を返す)
  - presence_penalty
    - 新しいトピックや単語を使う傾向を強める(-2〜2)
    - 高い値 → 繰り返しを避け、新しい語彙を導入
  - frequency_penalty
    - 同じ単語の繰り返しを抑制(-2〜2)
    - 高い値 → 冗長な繰り返しを減らす

4. ストリーミング系
  - stream
    - 出力を逐次受け取るかどうか(True/False)
    - チャットUIなどで「少しずつ表示」したい場合に利用

5. システム制御系
  - model
    - 使用するモデルを指定(例: "gpt-5.2", "gpt-5.2-pro", "gpt-5.2-mini")
  - metadata
    - リクエストに付随するメタ情報(ログやトラッキング用)

## モデルバリエーション比較

|モデル名|特徴|用途例|
|----|----|----|
|gpt-5.2-mini| 軽量・低コスト   | チャットボット、リアルタイム応答|
|gpt-5.2| 標準精度・速度   | 一般的なテキスト生成、要約|
|gpt-5.2-pro| 長文脈・高精度   | 複雑な推論、研究支援、コード生成|

## GPT‑5.2 Responses API 価格(2025年12月時点)
|モデル名|入力 (1M tokens)|キャッシュ入力 (1M tokens)|出力 (1M tokens)|特徴|
|----|---:|---:|---:|----|
|GPT‑5.2|$1.75|$0.175|$14.00|標準モデル。複雑な推論やコーディングに強い|
|GPT‑5.2 Pro|$21.00| – |$168.00|最も精度が高い。専門的タスク向け|
|GPT‑5 Mini|$0.25|$0.025|$2.00|軽量・高速。コスト効率重視|

# RAGについて
## RAGは設計パターン
RAG(Retrieval‑Augmented Generation)は、LLMに渡す前処理の仕組み。「検索(Retriever)で外部情報を取得し、それをLLM(Generator)に渡して回答を生成する」という仕組みのこと。

## 実装パターン
実装の仕方は以下2パターン、或いはハイブリッド方式。

1. 利用者側で追加情報を与える方式
  - 特徴
   - ユーザーが自分で検索・抽出した情報を input に含めて渡す
   - GPT‑5.2(Responses API)は「質問+追加情報」を受け取り回答するだけ
  - メリット
   - シンプルで制御しやすい
   - どの情報を根拠にするか利用者が明示できる
  - デメリット
   - ユーザーが毎回情報を準備する必要がある
   - 自動化には不向き

2. システム側で追加情報を付加する方式
  - 特徴
   - ユーザーは質問だけを投げる
   - システムが裏側で Retriever を動かし、関連情報を検索して input に自動で付加
  - メリット
   - ユーザーは「質問するだけ」で済む
   - 一貫した検索・根拠付けが可能
  - デメリット
   - 検索精度がシステム依存になる
   - どの情報が根拠に使われたかユーザーが見えにくい

3. 補足
  - GPT‑5.2(Responses API)は 与えられた input のテキストだけを処理します。
  - 「RAGで検索して付加して」と指示しても、API単体では外部データベースやPDFを勝手に検索する機能はありません。
  - RAGは 設計パターンなので、Retriever(検索部分)は利用者やシステム側で実装し、その結果を input に含める必要があります。

## CopilotのWeb検索統合 vs RAG設計パターン
| 項目         | CopilotのWeb検索統合                     | RAG設計パターン                          |
|--------------|------------------------------------------|------------------------------------------|
| 検索の実装   | Copilot内部で自動呼び出し                | 利用者/システムが外部で実装             |
| ユーザー操作 | 検索を意識せずに利用可能                 | 検索結果を明示的に input に含める必要あり |
| 出典提示     | CopilotがURLを提示                       | 開発者が出典を含める設計にする            |
| 設計思想     | 機能統合型(検索+生成が一体)           | パターン分離型(RetrieverとGeneratorを分離) |

0 件のコメント:

コメントを投稿

人気の投稿