> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# AIチャットAPI接続説明

> AI Dialogue 集成指南 - XHuoAPI

私たちは、市場に出回っているいくつかのQ\&A APIの接続がそれほど簡単ではないことを知っています。たとえば、OpenAIのChat Completions APIには`messages`フィールドがあり、連続した対話を完了するには、すべてのコンテキスト履歴を渡す必要があり、同時にトークンの制限を超える問題を処理する必要があります。

XHuoAPIが提供するAI Q\&A APIは、上記の状況に対して最適化されており、Q\&Aの効果を変えずに連続対話の実装をカプセル化しています。接続時に`messages`の渡し方を気にする必要はなく、トークンの制限を超える問題も心配する必要はありません（API内部で自動的に処理されます）。また、対話のクエリ、修正などの機能も提供されており、全体の接続が大幅に簡素化されています。

この文書では、AI Q\&A APIの接続説明を紹介します。

## 申請プロセス

APIを使用するには、まず[AI Q\&A API](https://api.xhuoapi.ai/documents/59fb1199-6694-4afb-a222-3554d7f7d05a)の該当ページでサービスを申請する必要があります。ページに入ったら、「Acquire」ボタンをクリックします。以下の図のように：

![](https://cdn.xhuoapi.ai/q6ytrc.png)

まだログインまたは登録していない場合は、自動的にログインページにリダイレクトされ、登録とログインを促されます。ログインまたは登録後、現在のページに自動的に戻ります。

初回申請時には無料のクレジットが付与され、このAPIを無料で使用できます。

## 基本使用

まず、基本的な使用方法を理解します。つまり、質問を入力し、回答を得るためには、単純に`question`フィールドを渡し、対応するモデルを指定するだけです。

たとえば、「What's your name？」と尋ねる場合、次に画面上に対応する内容を入力できます。以下の図のように：

![](https://cdn.xhuoapi.ai/xqxda4.png)

ここでは、リクエストヘッダーを設定しています。含まれるのは：

* `accept`：受け取りたいレスポンス結果の形式。ここでは`application/json`、つまりJSON形式を記入します。
* `authorization`：APIを呼び出すためのキー。申請後、直接ドロップダウンから選択できます。

また、リクエストボディを設定しています。含まれるのは：

* `model`：モデルの選択。たとえば、主流のGPT 3.5、GPT 4など。
* `question`：尋ねたい質問。任意のプレーンテキストで構いません。

選択後、右側にも対応するコードが生成されているのがわかります。以下の図のように：

<p>
  <img src="https://cdn.xhuoapi.ai/dvkps6.png" width="500" className="m-auto" />
</p>

「Try」ボタンをクリックするとテストが行えます。上の図のように、以下の結果が得られました：

```json theme={null}
{
  "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のコードは以下の通りです：

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/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の接続コードは以下の通りです：

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/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`に設定し、`model`と`question`パラメータを正常に渡します。以下の図のように：

![](https://cdn.xhuoapi.ai/fn4bi9.png)

対応するコードは以下の通りです：

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/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
}'
```

以下のような回答が得られます：

```json theme={null}
{
  "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?」と尋ねます。以下の図のように：

![](https://cdn.xhuoapi.ai/46a6kd.png)

対応するコードは以下の通りです：

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/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?"
}'
```

結果は以下の通りです：

```json theme={null}
{
  "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`に変更します。

変更は以下の図のように行いますが、呼び出しコードにはストリーミングレスポンスをサポートするための対応する変更が必要です。

![](https://cdn.xhuoapi.ai/axt1aa.png)

`accept`を`application/x-ndjson`に変更すると、APIは対応するJSONデータを行ごとに返します。コードレベルで逐行の結果を得るために、相応の変更を行う必要があります。

Pythonのサンプル呼び出しコード：

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/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())
```

出力結果は以下の通りです：

```json theme={null}
{"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 のストリーミング呼び出しコードは以下の通りです：

```javascript theme={null}
const axios = require("axios");

const url = "https://api.xhuoapi.ai/v1/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 のサンプルコード：

```java theme={null}
String url = "https://api.xhuoapi.ai/v1/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` フィールドを追加し、内容を `あなたはプロのアーティストです` とします。

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "stateful": true,
  "question": "何を手伝ってくれますか？",
  "preset": "あなたはプロのアーティストです"
}'
```

実行結果は以下の通りです：

```python theme={null}
{
    "answer": "プロのアーティストとして、あなたの具体的なニーズに応じてさまざまなサービスや支援を提供できます。以下は、私があなたを手伝ういくつかの方法です：\n\n1. カスタムアートワーク：特定のビジョンやアイデアがある場合、カスタムアートワークを作成できます。これには、絵画、ドローイング、デジタルアート、またはお好みの他のメディアが含まれます。\n\n2. 依頼作品：特定のテーマやコンセプトがある場合、あなたの好みに合わせた依頼アート作品を作成できます。これは、個人的な楽しみのためや、特別な誰かへのユニークなギフトとしても可能です。\n\n3. アートコンサルテーション：アートの選択、インテリアデザイン、またはあなたのスペースでアートを展示する方法についてのガイダンスが必要な場合、あなたの美的感覚を高め、一貫した外観を作成するための専門的なアドバイスを提供できます。"
}
```

ここで、私たちは GPT に彼がロボットであることを伝え、彼が私たちのために何ができるかを尋ねると、彼はロボットの役割を果たして質問に答えることができました。

## 画像認識

この AI は、添付ファイルを追加して画像認識を行うこともサポートしています。`references` を通じて対応する画像リンクを渡すだけです。例えば、ここにリンゴの画像があります。

その画像のリンクは [https://cdn.xhuoapi.ai/ht05g0.png](https://cdn.xhuoapi.ai/ht05g0.png) で、これを `references` パラメータとして渡すだけです。同時に、モデルは視覚認識をサポートするモデルを選択する必要があります。現在サポートされているのは `gpt-4-vision` ですので、入力は以下の通りです：

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-4-vision",
  "question": "画像にはいくつのリンゴがありますか？",
  "references": ["https://cdn.xhuoapi.ai/ht05g0.png"]
}'
```

実行結果は以下の通りです：

```json theme={null}
{
  "answer": "画像には5つのリンゴがあります。"
}
```

ここで、私たちは対応する画像の回答結果を成功裏に得ることができました。

## インターネット質問応答

この API は、インターネットモデルもサポートしています。GPT-3.5、GPT-4 の両方がサポートされており、API の背後には自動的にインターネットを検索し、要約するプロセスがあります。モデルを `gpt-3.5-browsing` に設定して体験してみましょう。

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5-browsing",
  "question": "ニューヨークの今日の天気は？"
}'
```

運行結果は以下の通りです：

```json theme={null}
{
  "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` に変更すると、回答の効果が向上します。
