メインコンテンツへスキップ
私たちは、市場に出回っているいくつかのQ&A APIの接続がそれほど簡単ではないことを知っています。たとえば、OpenAIのChat Completions APIにはmessagesフィールドがあり、連続した対話を完了するには、すべてのコンテキスト履歴を渡す必要があり、同時にトークンの制限を超える問題を処理する必要があります。 AceDataCloudが提供するAI Q&A APIは、上記の状況に対して最適化されており、Q&Aの効果を変えずに連続対話の実装をカプセル化しています。接続時にmessagesの渡し方を気にする必要はなく、トークンの制限を超える問題も心配する必要はありません(API内部で自動的に処理されます)。また、対話のクエリ、修正などの機能も提供されており、全体の接続が大幅に簡素化されています。 この文書では、AI Q&A APIの接続説明を紹介します。

申請プロセス

APIを使用するには、まずAI Q&A APIの該当ページでサービスを申請する必要があります。ページに入ったら、「Acquire」ボタンをクリックします。以下の図のように: まだログインまたは登録していない場合は、自動的にログインページにリダイレクトされ、登録とログインを促されます。ログインまたは登録後、現在のページに自動的に戻ります。 初回申請時には無料のクレジットが付与され、このAPIを無料で使用できます。

基本使用

まず、基本的な使用方法を理解します。つまり、質問を入力し、回答を得るためには、単純にquestionフィールドを渡し、対応するモデルを指定するだけです。 たとえば、「What’s your name?」と尋ねる場合、次に画面上に対応する内容を入力できます。以下の図のように: ここでは、リクエストヘッダーを設定しています。含まれるのは:
  • accept:受け取りたいレスポンス結果の形式。ここではapplication/json、つまりJSON形式を記入します。
  • authorization:APIを呼び出すためのキー。申請後、直接ドロップダウンから選択できます。
また、リクエストボディを設定しています。含まれるのは:
  • model:モデルの選択。たとえば、主流のGPT 3.5、GPT 4など。
  • question:尋ねたい質問。任意のプレーンテキストで構いません。
選択後、右側にも対応するコードが生成されているのがわかります。以下の図のように:

「Try」ボタンをクリックするとテストが行えます。上の図のように、以下の結果が得られました:
{
  "answer": "I am an AI language model developed by OpenAI and I don't have a personal name. However, you can call me GPT or simply Chatbot. How can I assist you today?"
}
ここで返された結果にはanswerフィールドがあり、これはその質問の回答です。任意の質問を入力すれば、任意の回答が得られます。 もし多段階の対話のサポートが不要であれば、このAPIは接続を大いに便利にします。 また、対応する接続コードを生成したい場合は、生成されたものを直接コピーできます。たとえば、CURLのコードは以下の通りです:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "question": "What's your name?"
}'
Pythonの接続コードは以下の通りです:
import requests

url = "https://api.acedata.cloud/aichat/conversations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "gpt-3.5",
    "question": "What's your name?"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)

多段階対話

多段階対話機能を接続したい場合は、追加のパラメータstatefulを渡す必要があります。その値はtrueであり、以降の各リクエストにはこのパラメータを含める必要があります。statefulパラメータを渡すと、APIは追加でidパラメータを返し、現在の対話のIDを表します。以降は、このIDをパラメータとして渡すだけで簡単に多段階対話を実現できます。 以下に具体的な操作を示します。 最初のリクエストでは、statefulパラメータをtrueに設定し、modelquestionパラメータを正常に渡します。以下の図のように: 対応するコードは以下の通りです:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "question": "What's your name?",
  "stateful": true
}'
以下のような回答が得られます:
{
  "answer": "I am an AI language model created by OpenAI and I don't have a personal name. You can simply call me OpenAI or ChatGPT. How can I assist you today?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
2回目のリクエストでは、最初のリクエストから返されたidフィールドをパラメータとして渡し、statefulパラメータは引き続きtrueに設定し、「What I asked you just now?」と尋ねます。以下の図のように: 対応するコードは以下の通りです:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "stateful": true,
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916",
  "question": "What I asked you just now?"
}'
結果は以下の通りです:
{
  "answer": "You asked me what my name is. As an AI language model, I do not possess a personal identity, so I don't have a specific name. However, you can refer to me as OpenAI or ChatGPT, the names used for this AI model. Is there anything else I can help you with?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
文脈に基づいて対応する質問に答えることができることがわかります。

ストリーミングレスポンス

このインターフェースはストリーミングレスポンスもサポートしており、ウェブ接続に非常に便利で、ウェブページで逐次表示効果を実現できます。 ストリーミングでレスポンスを返したい場合は、リクエストヘッダー内のacceptパラメータをapplication/x-ndjsonに変更します。 変更は以下の図のように行いますが、呼び出しコードにはストリーミングレスポンスをサポートするための対応する変更が必要です。 acceptapplication/x-ndjsonに変更すると、APIは対応するJSONデータを行ごとに返します。コードレベルで逐行の結果を得るために、相応の変更を行う必要があります。 Pythonのサンプル呼び出しコード:
import requests

url = "https://api.acedata.cloud/aichat/conversations"

headers = {
    "accept": "application/x-ndjson",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "gpt-3.5",
    "stateful": True,
    "id": "7cdb293b-2267-4979-a1ec-48d9ad149916",
    "question": "こんにちは"
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    print(line.decode())
出力結果は以下の通りです:
{"answer": "こんにちは", "delta_answer": "こんにちは", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "こんにちは!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "こんにちは!どう", "delta_answer": "どう", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "こんにちは!どうやって", "delta_answer": "やって", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "こんにちは!どうやってお手伝い", "delta_answer": "お手伝い", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "こんにちは!どうやってお手伝いできますか", "delta_answer": "できますか", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "こんにちは!どうやってお手伝いできますか?", "delta_answer": "?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
ここで、レスポンスの answer は最新の回答内容であり、delta_answer は新たに追加された回答内容です。結果に基づいて、システムに接続することができます。 JavaScript もサポートされています。例えば、Node.js のストリーミング呼び出しコードは以下の通りです:
const axios = require("axios");

const url = "https://api.acedata.cloud/aichat/conversations";
const headers = {
  "Content-Type": "application/json",
  Accept: "application/x-ndjson",
  Authorization: "Bearer {token}",
};
const body = {
  question: "こんにちは",
  model: "gpt-3.5",
  stateful: true,
};

axios
  .post(url, body, { headers: headers, responseType: "stream" })
  .then((response) => {
    console.log(response.status);
    response.data.on("data", (chunk) => {
      console.log(chunk.toString());
    });
  })
  .catch((error) => {
    console.error(error);
  });
Java のサンプルコード:
String url = "https://api.acedata.cloud/aichat/conversations";
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"question\": \"こんにちは\", \"stateful\": true, \"model\": \"gpt-3.5\"}");
Request request = new Request.Builder()
        .url(url)
        .post(body)
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept", "application/x-ndjson")
        .addHeader("Authorization", "Bearer {token}")
        .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(response.body().byteStream(), "UTF-8"))) {
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                System.out.println(responseLine);
            }
        }
    }
});
他の言語も別途書き換えることができますが、原理は同じです。

モデルのプリセット

OpenAI に関連する API には、全体のモデルにプリセットを設定する system_prompt の概念があります。例えば、モデルの名前などです。この AI 質問応答 API でもこのパラメータが公開されており、preset と呼ばれています。これを利用してモデルにプリセットを追加できます。例を使って体験してみましょう: ここで、preset フィールドを追加し、内容を あなたはプロのアーティストです とします。
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "stateful": true,
  "question": "何を手伝ってくれますか?",
  "preset": "あなたはプロのアーティストです"
}'
実行結果は以下の通りです:
{
    "answer": "プロのアーティストとして、あなたの具体的なニーズに応じてさまざまなサービスや支援を提供できます。以下は、私があなたを手伝ういくつかの方法です:\n\n1. カスタムアートワーク:特定のビジョンやアイデアがある場合、カスタムアートワークを作成できます。これには、絵画、ドローイング、デジタルアート、またはお好みの他のメディアが含まれます。\n\n2. 依頼作品:特定のテーマやコンセプトがある場合、あなたの好みに合わせた依頼アート作品を作成できます。これは、個人的な楽しみのためや、特別な誰かへのユニークなギフトとしても可能です。\n\n3. アートコンサルテーション:アートの選択、インテリアデザイン、またはあなたのスペースでアートを展示する方法についてのガイダンスが必要な場合、あなたの美的感覚を高め、一貫した外観を作成するための専門的なアドバイスを提供できます。"
}
ここで、私たちは GPT に彼がロボットであることを伝え、彼が私たちのために何ができるかを尋ねると、彼はロボットの役割を果たして質問に答えることができました。

画像認識

この AI は、添付ファイルを追加して画像認識を行うこともサポートしています。references を通じて対応する画像リンクを渡すだけです。例えば、ここにリンゴの画像があります。 その画像のリンクは https://cdn.acedata.cloud/ht05g0.png で、これを references パラメータとして渡すだけです。同時に、モデルは視覚認識をサポートするモデルを選択する必要があります。現在サポートされているのは gpt-4-vision ですので、入力は以下の通りです:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-4-vision",
  "question": "画像にはいくつのリンゴがありますか?",
  "references": ["https://cdn.acedata.cloud/ht05g0.png"]
}'
実行結果は以下の通りです:
{
  "answer": "画像には5つのリンゴがあります。"
}
ここで、私たちは対応する画像の回答結果を成功裏に得ることができました。

インターネット質問応答

この API は、インターネットモデルもサポートしています。GPT-3.5、GPT-4 の両方がサポートされており、API の背後には自動的にインターネットを検索し、要約するプロセスがあります。モデルを gpt-3.5-browsing に設定して体験してみましょう。
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5-browsing",
  "question": "ニューヨークの今日の天気は?"
}'
運行結果は以下の通りです:
{
  "answer": "ニューヨークの今日の天気は次の通りです:\n- 現在の気温:16°C (60°F)\n- 最高気温:16°C (60°F)\n- 最低気温:10°C (50°F)\n- 湿度:47%\n- UV指数:6/11\n- 日の出:午前5:42\n- 日の入り:午後8:02\n\n曇り時々小雨の可能性があり、雨の確率は50%です。\n詳細については、[The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84)をご覧ください。\n\n他に知りたいことはありますか?"
}
ここでは、モデルが自動的にThe Weather Channelのウェブサイトを検索し、その情報を取得して、リアルタイムの結果を返しました。
モデルの回答品質に対する要求が高い場合は、モデルを gpt-4-browsing に変更すると、回答の効果が向上します。