# Alli Generative Answer API

全てのアカウントがAlliの回答自動生成機能を利用できるわけではありません。\
当社の回答自動生成機能にご興味がございましたら、弊社Customer Success担当までお問い合わせください。

## APIキーの取得 <a href="#getting-the-api-key" id="getting-the-api-key"></a>

#### &#x20;Requestヘッダーの`API-KEY` に、割り当てられた`APIキー` を入力してください。APIキーは[プロジェクト設定メニュー](https://app.alli.ai/settings)からご確認いただけます。

<figure><img src="https://511447395-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MCUOyJmcDC1YdUwbM6Y-1753492605%2Fuploads%2FZzraTaG2xvalSNzyky8O%2Fimage.png?alt=media&#x26;token=e8c42db9-37d5-4598-8d55-88e23191fd02" alt=""><figcaption></figcaption></figure>

### ユーザー情報の提供 <a href="#providing-agent-or-user-information" id="providing-agent-or-user-information"></a>

リクエスト ヘッダーにユーザー情報を追加して、どのユーザーがAPIを呼び出すかを指定できます。 \
ユーザー ID はリクエスト ヘッダーの **`OWN-USER-ID`** に指定できます。ユーザー ID は新しいものでも既存のものでもよく、新しいユーザー ID が指定された場合、Alli はその ID を持つ新しいユーザーを作成します。 同じ **`OWN-USER-ID`**&#x30D8;ッダーを持つ今後の API 呼び出しは、同じユーザーからのものであるとみなされます。 ユーザーのメールアドレスを同時に更新する場合は、リクエスト ヘッダー **`USER-EMAIL`**&#x306B;メールアドレスを指定できます。 以下に例を示します。

```
-H 'OWN-USER-ID: 5f1234567a409876c082487z' \
-H 'USER-EMAIL: user_1@email.com'
```

**`OWN-USER-ID`には非 ASCII 文字を使用できません。**&#x30E6;ーザー ID に非 ASCII 文字が含まれている場合は、ID を Base64 にエンコードし、base64:CONVERTED\_ID を使用できます。\
保存されたユーザー ID とメールアドレスの情報は、Alli ダッシュボード上の \[顧客] メニューで確認できます。

<figure><img src="https://511447395-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MCUOyJmcDC1YdUwbM6Y-1753492605%2Fuploads%2FrXaBcz0WlkAbau2nea6W%2Fimage.png?alt=media&#x26;token=9573df93-6879-4abe-b215-a24fdee263d6" alt=""><figcaption></figcaption></figure>

### エラーメッセージ <a href="#undefined" id="undefined"></a>

予想されるresponseがない場合は、エラーメッセージを確認してください。例えば、間違ったHTTPメソッドを使用した場合、以下のような形式のエラーメッセージが戻ります。

```
{“errors”: “Method Not Allowed PUT: /webapi/generative_answer”}
```

## Generative Answer

<mark style="color:green;">`POST`</mark> `https://backend-ja.alli.ai/webapi/generative_answer`&#x20;

Generative Answer API は、非構造化テキスト ドキュメント、Q＆A、さらには複雑な表からも回答を見つけ、生成します。

#### Headers

| Name                                      | Type   | Description                                                                                                           |
| ----------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------- |
| API-KEY<mark style="color:red;">\*</mark> | string | 割り当てられたAPIキーです。プロジェクト設定メニュー>一般タブから確認できます。                                                                             |
| OWN-USER-ID                               | string | ユーザーの ID を指定することで、この API 呼び出しを行うユーザーを特定できます。ここで指定するIDは、ダッシュボードの \[顧客リスト]>\[CUSTOMER\_ID] もしくは\[会話履歴]>\[対話情報]にて確認できます。 |

#### Request Body

| Name                                            | Type         | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| ----------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| query<mark style="color:red;">\*</mark>         | string       | 質問文の文字列になります。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| model                                           | string       | 回答を生成するときに、選択した LLM を利用します。 デフォルトのモデルは GPT 3.5 Turbo です。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| answer\_format                                  | string       | <p>応答の形式を特定して、統合をより簡単にするために応答の形式を確認してください。</p><p>サポートされているのは、<code>DRAFTJS</code> と <code>MARKDOWN</code> です。</p><p>デフォルトの形式は、<code>DRAFTJS</code>です。</p>                                                                                                                                                                                                                                                                                                                                                                                  |
| isStateful                                      | Boolean      | 後続質問の機能を使用するには、以前の会話履歴が必要です。 会話履歴は threadId で管理されます。 isStateful optionをTrueに設定し、threadIdと入力すると、以前の会話履歴に基づいてクエリが再作成されます。 (Default = False)                                                                                                                                                                                                                                                                                                                                                                                                  |
| ThreadId                                        | string(UUID) | <p>threadId は Stateful=True のときに使用されます。</p><p>最初の会話を開始するときは空白で、次のクエリからは出力のthreadIdを使用します。 最初の会話からthreadIdを設定したい場合は、UUID形式で作成する必要があります。</p><p>例 UUID - 36e7bb2b-1063-47ec- (Default = None)</p>                                                                                                                                                                                                                                                                                                                                             |
| promptGroupId<mark style="color:red;">\*</mark> | string       | <p>回答生成に使用するプロジェクトのグループプロンプトを選択します。この設定は、デフォルトで準備されたグループプロンプトから変更を行い利用している場合などに有効です。</p><p>IDはプロジェクト設定>プロンプト管理>回答生成タブの選択します。使用するグループプロンプトを選択した際に表示されるURLからIDが確認できます。<br>例 ：<https://app.alli.ai/projects/UHJvamVjdDo2NDljYTRjZDMzMGY2MDZkYWRjOPOjNjE=/settings/prompt-management/generative-answer/groups/><strong><code>TExNUHJvbXB0R3JvdXA6NjUzNzc3MzA5GHUyMGE2ZjlhM2Q5OTIw</code></strong></p>                                                                                                                                          |
| mode                                            | string       | <p>データをsyncかstreamのどちらで出力するか設定します。(Default = sync)</p><p>streamモードの場合、syncと同じ出力形式のjson文字列がstreamとして出力されます。</p>                                                                                                                                                                                                                                                                                                                                                                                                                             |
| clues                                           | boolean      | 回答を生成するために使用されたclueを出力に含めるかどうか設定できます。(Default = False)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| clueTxet                                        | boolean      | <p>clueTextはclues=Trueの時に利用できるオプションです。</p><p>clueに用いたドキュメントのテキスト情報を含めるかどうか設定できます。(Default = False)</p><p></p>                                                                                                                                                                                                                                                                                                                                                                                                                              |
| hashtags                                        | json         | <p>ハッシュタグを使用してドキュメントとFAQの検索範囲を指定できます。 特定のハッシュタグを含めたり除外したり、選択したハッシュタグのオプションを指定したりできます。<br>例：<br>{ "<code>qnaInclude</code>" : \["hash name", "hash name2"], "<code>qnaIncludeOption</code>" : "and"/"or", "<code>qnaExclude</code>" : \["hash name", "hash name2"], "<code>qnaExcludeOption</code>" : "and"/"or", "<code>docsInclude</code>" : \["hash name", "hash name2"], "<code>docsIncludeOption</code>" : "and"/"or", "<code>docsExclude</code>" : \["hash name", "hash name2"], "<code>docsExcludeOption</code>" : "and"/"or", }</p> |
| searchFrom                                      | json         | <p>Generative Answer がデータを検索するソース データの範囲を指定します。現在使用可能な値は、web、qna、document、およびリスト形式でのデータ入力です。<br><br>例：<br>\["web", "qna"]</p>                                                                                                                                                                                                                                                                                                                                                                                                              |

{% tabs %}
{% tab title="200: OK " %}
結果は以下の JSON 形式で取得されます。

```
{
            "answer": "ANSWER",
            "intent": "INTENT",
            "threadId": "threadId",
            "fuQuestion": "fuQuestion",
            "clues":  {
            　　　"clueId": "CLUE_ID_1",
            　　　"source": "SOURCE",
            　　　"title": "TITLE_1",
            　　　"pageNo": "PageNo_1",
            　　　"kbId": "kbId_1",
            　　　"faqId": "faqId_1"
        }
}
```

{% endtab %}
{% endtabs %}

<details>

<summary>利用可能な LLMモデル</summary>

```
OPENAI GPT3.5 TURBO "turbo"
OPENAI GPT4 "gpt4"
OPENAI GPT4 TURBO "gpt4_turbo"
AZURE GPT3.5 TURBO "azure_turbo"
AZURE GPT3.5 TURBO JA "azure_turbo_ja"
AZURE GPT4 "azure_gpt4"
AZURE GPT4 TURBO "azure_gpt4_turbo"
AZURE GPT-4o "azure_gpt4_o"
AZURE GPT-4o mini "azure_gpt4_o_mini"
OPENAI GPT-4o "gpt4_o"
OPENAI GPT-4o mini "gpt4_o_mini"
OPENAI GPT-4.1 "gpt41"
OPENAI GPT-4.1 mini "gpt41_mini"
OPENAI GPT-4.1 NANO "gpt41_nano"
OPENAI GPT-4.5 Preview "gpt45"
OPENAI O3 "openai_o3"
OPENAI O4 MINI "openai_o4_mini"
OPENAI O1 "openai_o1"
OPENAI O1 MINI "openai_o1_mini"
OPENAI O3 MINI "openai_o3_mini"
AZURE OPENAI GPT-4.1 "azure_gpt41"
AZURE OPENAI GPT-4.1 MINI "azure_gpt41_mini"
AZURE OPENAI GPT-4.1 NANO "azure_gpt41_nano"
AZURE OPENAI O3 "azure_openai_o3"
AZURE OPENAI O4 MINI "azure_openai_o4_mini"
ANTHROPIC CLAUDE 3 OPUS "anthropic_claude_3_opus"
ANTHROPIC CLAUDE 3.5 SONNET "anthropic_claude_3_sonnet"
ANTHROPIC CLAUDE 3.5 HAIKU "anthropic_claude_3_haiku"
ANTHROPIC CLAUDE 3.7 SONNET "anthropic_claude_3_7_sonnet"
BEDROCK CLAUDE 3.5 SONNET JA "bedrock_claude_3_sonnet_ja"
GEMINI 1.5 FLASH "gemini_15_flash"
GEMINI 2.0 FLASH "gemini_20_flash"
GEMINI 2.0 FLASH LITE "gemini_20_flash_lite"
GEMINI 2.5 PRO "gemini_20_pro"
GEMINI 1.5 PRO "gemini_15_pro"
```

</details>

<details>

<summary>Output項目</summary>

answer: 生成回答 API の実行の結果として生成された回答

intent: 生成回答のインテント (SEARCH または END\_OF\_CONVERSATION)

clues(list): 回答を生成するために使用された手がかりのリスト (PARAMETER の clues が True の場合のみ)。

clueId: Alli によって管理される手がかりの一意の ID。

source: 手がかりのタイプ (DOCUMENT または FAQ)。

title: Alli に保存されているドキュメントまたは FAQ のタイトル。

pageNo: (type が document の場合のみ) ドキュメントのページ番号。

kbId: (type が document の場合のみ) Alli によって管理されるドキュメントの一意の ID。

faqId: (type が FAQ の場合のみ) Alli によって管理される FAQ の一意の ID。

text: (type が document で clueText が true の場合のみ) 手がかりとして使用されるドキュメントのテキスト。

threadId : 入力として threadId が指定された場合 (PARAMETERの is\_stateful が True の場合のみ)、値がそのまま返されます。それ以外の場合は、新しいスレッド ID が作成されて返されます。\
なお、threadidについてはRequestのHeadersで"OWN-USER-ID"が指定されている、\
かつ、PARAMETERの is\_statefulが True の場合のみ作成がされますので注意してください。

fuQuestion : 同じ threadId 内でクエリと応答結果を使用して新しいクエリが作成された場合 (PARAMETER の is\_stateful が True の場合のみ)、値が返されます。

直前に同じ threadId 内で「日本の○○代総理大臣は誰ですか?」という質問が行われ、その後に「彼の年齢は?」という質問が行われた場合、「日本の○○代総理大臣の年齢は?」のような fu\_question が作成され、その質問がクエリで使用されます。

</details>

### Request Example <a href="#request-example" id="request-example"></a>

YOUR API KEYをプロジェクトのAPIキーに変更しなければなりません。[APIキーの取得](#getting-the-api-key)の項目をご参照ください。

```
curl -X POST -d '{ 
  "query": "can I disclose the composite ratings?",
  "model": "gpt4",
  "isStateful": "True",
  "threadId": "UUID",
  "mode": "sync" ,
  "hashtags":{"docsInclude" : ["test"], "docsIncludeOption" : "or"}
}' \
-H 'API-KEY: REST_API_KEY' \
-H 'Content-Type: application/json' \
-H 'OWN-USER-ID: xxxxx.xxx@allganize.ai' \
https://backend-ja.alli.ai/webapi/generative_answer
```

### Response Example <a href="#response-example" id="response-example"></a>

```
{
    "answer": "{\"blocks\": [{\"key\": \"k0\", \"text\": \"看護休暇については、以下の情報があります。\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k1\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k2\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k3\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k4\", \"text\": \"1. 小学校就学の始期に達するまでの子がいる労働者は、病気または怪我をした子の看護のために、年次有給休暇とは別に看護休暇を取得することができます。ただし、日々雇い入れられる者は除かれます [2]。\", \"inlineStyleRanges\": [], \"entityRanges\": [{\"key\": 0, \"offset\": 94, \"length\": 3}], \"type\": \"unstyled\"}, {\"key\": \"k5\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k6\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k7\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k8\", \"text\": \"2. 看護休暇の日数は、労働者1人当たり1年間で5日を限度とします。この場合の1年間とは、4月1日から翌年の3月31日までの期間を指します [2]。\", \"inlineStyleRanges\": [], \"entityRanges\": [{\"key\": 0, \"offset\": 70, \"length\": 3}], \"type\": \"unstyled\"}, {\"key\": \"k9\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k10\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k11\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k12\", \"text\": \"3. 看護休暇中の賃金は無給とされます [2]。\", \"inlineStyleRanges\": [], \"entityRanges\": [{\"key\": 0, \"offset\": 20, \"length\": 3}], \"type\": \"unstyled\"}, {\"key\": \"k13\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k14\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k15\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k16\", \"text\": \"4. 看護休暇を取得するためには、所定の申請用紙に必要事項を記載の上、総務部長に届け出る必要があります [2]。\", \"inlineStyleRanges\": [], \"entityRanges\": [{\"key\": 0, \"offset\": 52, \"length\": 3}], \"type\": \"unstyled\"}, {\"key\": \"k17\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k18\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k19\", \"text\": \"\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}, {\"key\": \"k20\", \"text\": \"以上が看護休暇に関する情報です。\", \"inlineStyleRanges\": [], \"entityRanges\": [], \"type\": \"unstyled\"}], 
    　　　　　　　\"entityMap\": {\"0\": {\"type\": \"LINK\", \"mutability\": \"MUTABLE\", \"data\": {\"isFromKnowledgeBase\": true, \"source\": \"DOCUMENT\", \"url\": \"https://app.alli.ai/projects/UHJvamVjdDo2NTRiNTc0NjdlMzc0ZTJhY2JmMzgzYjQ=/knowledgeBases/S25vd2xlZGdlQmFzZTo2NTRjZDMxYjU1N2VkODU2M2Y4MzEyYWU=/preview?page=4\", \"knowledgeBasePreview\": {\"pageNo\": 4, \"totalPageCount\": 10, \"knowledgeBase\": {\"id\": \"S25vd2xlZGdlQmFzZTo2NTRjZDMxYjU1N2VkODU2M2Y4MzEyYWU=\", \"title\": \"就業規則.pdf\"}, \"clueId\": \"Q29nbml0aXZlQ2x1ZTo2Njk1Y2I2ZGE0NmY3M2MwYThmZWM0OWFfMQ==\", \"answerHighlightId\": \"Q29nbml0aXZlQ2x1ZTo2Njk1Y2I2ZGE0NmY3M2MwYThmZWM0OWFfMQ==\"}}}}}",
    "intent": "SEARCH",
    "threadId": "7d80f4a1-1e8f-41ea-aba0-261df161db35",
    "fuQuestion": null,
    "clues": [
        {
            "clueId": "Q29nbml0aXZlQ2x1ZTo2Njk1Y2I2ZGE0NmY3M2MwYThmZWM0OWFfMA==",
            "source": "FAQ",
            "title": "病気の際の休暇について",
            "pageNo": null,
            "kbId": null,
            "faqId": "RkFROjY1ZTZlZjJjZDc3OTRiMzQ2MDUyZGM4Mg=="
        },
        {
            "clueId": "Q29nbml0aXZlQ2x1ZTo2Njk1Y2I2ZGE0NmY3M2MwYThmZWM0OWFfMQ==",
            "source": "DOCUMENT",
            "title": "xxxxx.pdf",
            "pageNo": 4,
            "kbId": "S25vd2xlZGdlQmFzZTo2NTRjZDMxYjU1N2VkODU2M2Y4MzEyYWU=",
            "faqId": null
        },
        {
            "clueId": "Q29nbml0aXZlQ2x1ZTo2Njk1Y2I2ZGE0NmY3M2MwYThmZWM0OWFfMg==",
            "source": "DOCUMENT",
            "title": "yyyyy.pdf",
            "pageNo": 8,
            "kbId": "S25vd2xlZGdlQmFzZTo2Njc5NGFkNGQ0ZjA2MzZlOWRlMDRiYTU=",
            "faqId": null
        }
    ]
}
```

Cluesにdocumentを指定した場合、プレビュー用のURLは、レスポンスボディ"answer"内の"url"に値として返ります。
