0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIのAPIをCurlで叩いてみる

0
Last updated at Posted at 2026-02-05

ChatGPTなどのAIを使ったサービスなどを作りたいなら、APIを利用するのが簡単だ。

ここでは、APIキーを取得してとりまAPIをCurlで叩いてみる。

ChatGPT(OpenAI)APIキー発行・確認・再発行ページ

ここでできること

  • APIキーの一覧
  • A新規キーの発行
  • A古いキーの削除

※OpenAIはセキュリティ上、既存キーの全文は再表示されないので、必要なら新しいキーを発行する形になる。

OpenAI(ChatGPT)API の公式リファレンス

https://platform.openai.com/docs/api-reference
(platform.openai.com in Bing)

Curlをなげてみる

上のページで取得したAPIキーを使ってCurlからAPIをたたいてみる。これができれば、各種言語からfetchなどのリクエストを投げて加工するのも簡単です。

curlコード

sh
$ API_KEY="<あなたのAPIキー>"

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{ 
    "model": "gpt-4o-mini", 
    "messages": [ 
      { "role": "user", "content": "こんにちは" } 
    ] 
  }'

レスポンス例

sh 
{
  "id": "chatcmpl-D8J2QQyhUu3Ke2cAE74djKEqGTMGI",
  "object": "chat.completion",
  "created": 1770872178,
  "model": "gpt-4o-mini-2024-07-18",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "こんにちは!どうかされましたか?",
        "refusal": null,
        "annotations": []
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 8,
    "completion_tokens": 8,
    "total_tokens": 16,
    "prompt_tokens_details": {
      "cached_tokens": 0,
      "audio_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "audio_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  },
  "service_tier": "default",
  "system_fingerprint": "fp_842ff35899"
}

セキュリティの注意点

APIキー(sk-proj-...)は絶対に公開してはいけないので例えば安協変数を使う高校はこんな感じ

bash
#!/bin/bash

API_KEY="$OPENAI_API_KEY"

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{ 
    "model": "gpt-4o-mini", 
    "messages": [ 
      { "role": "user", "content": "こんにちは" } 
    ] 
  }'

そして、実行前にターミナルで:

bash
export OPENAI_API_KEY=<あなたのキー>

Gemini(Google AI Studio)APIキー発行・確認・再発行ページ

ここでできること

  • Gemini APIキーの確認
  • 新規キーの発行
  • プロジェクト管理

こちらも同様に、既存キーの全文は再表示されないため、必要なら新規発行。

Gemini(Google AI)API の公式リファレンス

Curlをなげてみる

上のページで取得したAPIキーを使ってCurlからAPIをたたいてみる。これができれば、各種言語からfetchなどのリクエストを投げて加工するのも簡単です。

curlコード

sh
$ curl -X POST \
  -H "Content-Type: application/json" \
  -d '{\
    "contents": [\
      {\
        "role": "user",\
        "parts": [\
          { "text": "こんにちは" }\
        ]\
      }\
    ]\
  }' \
  "https://generativelanguage.googleapis.com/v1/models/\
gemini-2.5-flash-lite:generateContent?key=<GeminiのあなたのAPIキー>"

レスポンス例

sh 
{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "こんにちは!どうされましたか?何かお手伝いできることはありますか?"
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 2,
    "candidatesTokenCount": 16,
    "totalTokenCount": 18,
    "promptTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 2
      }
    ]
  },
  "modelVersion": "gemini-2.5-flash-lite",
  "responseId": "mjaFaaDqMbSX0-kPlMaUuQU"
}

Curlを連続で投げて話がつながるようにするには?

ChatGPT API も Gemini API も、サーバー側で会話状態を保持しない
= stateless。だから、こちらで会話履歴を管理する必要がある。

DBでも何でもよいが、履歴を保持してCurlするたびに渡す必要がある。

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <GeminiのあなたのAPIキー>" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      { "role": "user", "content": "こんにちは" },
      { "role": "assistant", "content": "こんにちは!今日はどうしますか?" },
      { "role": "user", "content": "元気ですか?" }
    ]
  }'

でも、毎回全履歴を渡してたら重くなりすぎるので、例えばChatGPTでもGeminiでもすべてを毎回やり取りはしていないようだ。たとえば、直近 3〜5ターンだけ送る、重要な文脈だけ残す、古い履歴は捨てるといった方法をとる様かなと思う。まぁ、例えば日付なども前処理が必要で、APIに渡す前に少し手間がかかるのはお約束?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?