|
1 | 1 | --- |
2 | | -title: 外部知識API |
| 2 | +title: 外部ナレッジAPI |
| 3 | +description: Difyと統合するために外部ナレッジサービスが実装する必要があるAPI仕様 |
3 | 4 | --- |
4 | 5 |
|
5 | 6 | <Note> ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/knowledge/external-knowledge-api)を参照してください。</Note> |
6 | 7 |
|
7 | | -## エンドポイント |
| 8 | +このページでは、Difyが外部ナレッジサービスからコンテンツを取得するために実装する必要があるAPIコントラクトを定義します。APIの準備ができたら、[外部ナレッジベースへの接続](/ja/use-dify/knowledge/connect-external-knowledge-base)を参照してDifyに登録してください。 |
8 | 9 |
|
9 | | -``` |
10 | | -POST <your-endpoint>/retrieval |
11 | | -``` |
| 10 | +## 認証 |
12 | 11 |
|
13 | | -## ヘッダー |
| 12 | +Difyは、設定したAPIキーをBearerトークンとしてすべてのリクエストで送信します: |
14 | 13 |
|
15 | | -このAPIは、Difyとは独立して開発者が維持管理するナレッジベースに接続するために使用されます。詳細については、[外部ナレッジベースへの接続](/ja/use-dify/knowledge/connect-external-knowledge-base)を参照してください。`Authorization` HTTPヘッダーで `API-Key` を使用して権限を検証できます。認証ロジックは、以下のように検索APIで定義します: |
16 | | - |
17 | | -``` |
| 14 | +```text |
18 | 15 | Authorization: Bearer {API_KEY} |
19 | 16 | ``` |
20 | 17 |
|
21 | | -## リクエストボディ要素 |
22 | | - |
23 | | -リクエストは以下のJSON形式のデータを受け入れます。 |
24 | | - |
25 | | -| プロパティ | 必須 | 型 | 説明 | 例値 | |
26 | | -|------------|------|-----|------|------| |
27 | | -| knowledge_id | TRUE | string | ナレッジベースの一意ID | AAA-BBB-CCC | |
28 | | -| query | TRUE | string | ユーザーのクエリ | Difyとは何ですか? | |
29 | | -| retrieval_setting | TRUE | object | 知識の検索パラメータ | 以下参照 | |
30 | | -| metadata_condition | TRUE | object | 元の配列のフィルタリング | 以下参照 | |
31 | | - |
32 | | -`retrieval_setting` プロパティは以下のキーを含むオブジェクトです: |
| 18 | +認証ロジックは開発者側で定義します。Difyはキーを渡すだけで、検証は行いません。 |
33 | 19 |
|
34 | | -| プロパティ | 必須 | 型 | 説明 | 例値 | |
35 | | -|------------|------|-----|------|------| |
36 | | -| top_k | TRUE | int | 検索結果の最大数 | 5 | |
37 | | -| score_threshold | TRUE | float | クエリに対する結果の関連性スコアの閾値、範囲:0〜1 | 0.5 | |
| 20 | +## リクエスト |
38 | 21 |
|
39 | | -`metadata_condition` プロパティは以下のキーを含むオブジェクトです: |
40 | | - |
41 | | -| 属性 | 必須かどうか | 型 | 説明 | 例 | |
42 | | -|------|----------|------|------|--------| |
43 | | -| logical_operator | いいえ | 文字列 | 論理演算子、値は `and` または `or`、デフォルトは `and` | and | |
44 | | -| conditions | はい | 配列(オブジェクト) | 条件リスト | 以下参照 | |
45 | | - |
46 | | -`conditions` 配列の各オブジェクトには以下のキーが含まれます: |
47 | | - |
48 | | -| 属性 | 必須かどうか | 型 | 説明 | 例 | |
49 | | -|------|----------|------|------|--------| |
50 | | -| name | はい | 配列(文字列) | フィルタリングするmetadataの名前 | `["category", "tag"]` | |
51 | | -| comparison_operator | はい | 文字列 | 比較演算子 | `contains` | |
52 | | -| value | いいえ | 文字列 | 比較値、演算子が `empty`、`not empty`、`null`、`not null` の場合は省略可能 | `"AI"` | |
53 | | - |
54 | | -サポートされている `comparison_operator` 演算子: |
55 | | - |
56 | | -- `contains`:特定の値を含む |
57 | | -- `not contains`:特定の値を含まない |
58 | | -- `start with`:特定の値で始まる |
59 | | -- `end with`:特定の値で終わる |
60 | | -- `is`:特定の値と等しい |
61 | | -- `is not`:特定の値と等しくない |
62 | | -- `empty`:空である |
63 | | -- `not empty`:空ではない |
64 | | -- `=`:等しい |
65 | | -- `≠`:等しくない |
66 | | -- `>`:より大きい |
67 | | -- `<`:より小さい |
68 | | -- `≥`:以上 |
69 | | -- `≤`:以下 |
70 | | -- `before`:特定の日付より前 |
71 | | -- `after`:特定の日付より後 |
| 22 | +```text |
| 23 | +POST {your-endpoint}/retrieval |
| 24 | +Content-Type: application/json |
| 25 | +Authorization: Bearer {API_KEY} |
| 26 | +``` |
72 | 27 |
|
73 | | -## リクエスト構文 |
| 28 | +Difyは設定したエンドポイントURLに`/retrieval`を追加します。`https://your-service.com`を登録した場合、Difyは`https://your-service.com/retrieval`にリクエストを送信します。 |
| 29 | + |
| 30 | +### ボディ |
| 31 | + |
| 32 | +| プロパティ | 必須 | 型 | 説明 | |
| 33 | +|:---------|:---------|:-----|:------------| |
| 34 | +| `knowledge_id` | はい | string | 外部システムにおけるナレッジソースの識別子。これは接続時に**外部ナレッジID**フィールドに入力した値です。クエリを正しいナレッジソースにルーティングするために使用します。 | |
| 35 | +| `query` | はい | string | ユーザーの検索クエリ。 | |
| 36 | +| `retrieval_setting` | はい | object | 検索パラメータ。[下記](#retrieval_setting)を参照。 | |
| 37 | +| `metadata_condition` | いいえ | object | メタデータフィルタリング条件。[下記](#metadata_condition)を参照。 | |
| 38 | + |
| 39 | +#### `retrieval_setting` |
| 40 | + |
| 41 | +| プロパティ | 必須 | 型 | 説明 | |
| 42 | +|:---------|:---------|:-----|:------------| |
| 43 | +| `top_k` | はい | int | 返す結果の最大数。 | |
| 44 | +| `score_threshold` | はい | float | 最小類似度スコア(0-1)。Difyでスコアしきい値が無効になっている場合、この値は`0.0`になります。 | |
| 45 | + |
| 46 | +#### `metadata_condition` |
| 47 | + |
| 48 | +<Info> |
| 49 | +Difyはメタデータ条件をAPIに渡しますが、現在ユーザーが設定するためのUIは提供していません。このパラメータはプログラムによる使用のみ可能です。 |
| 50 | +</Info> |
| 51 | + |
| 52 | +| プロパティ | 必須 | 型 | 説明 | |
| 53 | +|:---------|:---------|:-----|:------------| |
| 54 | +| `logical_operator` | いいえ | string | `and`または`or`。デフォルト:`and`。 | |
| 55 | +| `conditions` | はい | array[object] | フィルタ条件のリスト。 | |
| 56 | + |
| 57 | +`conditions`内の各オブジェクト: |
| 58 | + |
| 59 | +| プロパティ | 必須 | 型 | 説明 | |
| 60 | +|:---------|:---------|:-----|:------------| |
| 61 | +| `name` | はい | string | フィルタリングするメタデータフィールド名。 | |
| 62 | +| `comparison_operator` | はい | string | 比較演算子。下記のサポートされている値を参照。 | |
| 63 | +| `value` | いいえ | string, number, または array[string] | 比較値。`empty`、`not empty`、`null`、または`not null`を使用する場合は省略。 | |
| 64 | + |
| 65 | +<Accordion title="サポートされている比較演算子"> |
| 66 | + |
| 67 | +| 演算子 | 説明 | |
| 68 | +|:---------|:------------| |
| 69 | +| `contains` | 値を含む | |
| 70 | +| `not contains` | 値を含まない | |
| 71 | +| `start with` | 値で始まる | |
| 72 | +| `end with` | 値で終わる | |
| 73 | +| `is` | 値と等しい | |
| 74 | +| `is not` | 値と等しくない | |
| 75 | +| `in` | リスト内のいずれかの値に一致 | |
| 76 | +| `not in` | リスト内のいずれの値にも一致しない | |
| 77 | +| `empty` | 空である | |
| 78 | +| `not empty` | 空ではない | |
| 79 | +| `=` | 等しい(数値) | |
| 80 | +| `≠` | 等しくない(数値) | |
| 81 | +| `>` | より大きい | |
| 82 | +| `<` | より小さい | |
| 83 | +| `≥` | 以上 | |
| 84 | +| `≤` | 以下 | |
| 85 | +| `before` | 日付より前 | |
| 86 | +| `after` | 日付より後 | |
| 87 | + |
| 88 | +</Accordion> |
| 89 | + |
| 90 | +### リクエスト例 |
74 | 91 |
|
75 | 92 | ```json |
76 | | -POST <your-endpoint>/retrieval HTTP/1.1 |
77 | | --- ヘッダー |
78 | | -Content-Type: application/json |
79 | | -Authorization: Bearer your-api-key |
80 | | --- データ |
81 | 93 | { |
82 | 94 | "knowledge_id": "your-knowledge-id", |
83 | | - "query": "your question", |
84 | | - "retrieval_setting":{ |
85 | | - "top_k": 2, |
| 95 | + "query": "What is Dify?", |
| 96 | + "retrieval_setting": { |
| 97 | + "top_k": 3, |
86 | 98 | "score_threshold": 0.5 |
87 | 99 | } |
88 | 100 | } |
89 | 101 | ``` |
90 | 102 |
|
91 | | -## レスポンス要素 |
| 103 | +## レスポンス |
92 | 104 |
|
93 | | -アクションが成功した場合、サービスはHTTP 200レスポンスを返します。 |
| 105 | +`records`配列を含むJSONボディとともにHTTP 200を返します。クエリに一致する結果がない場合は、空の配列を返します:`{"records": []}`。 |
94 | 106 |
|
95 | | -サービスは以下のデータをJSON形式で返します。 |
| 107 | +### `records` |
96 | 108 |
|
97 | | -| プロパティ | 必須 | 型 | 説明 | 例値 | |
98 | | -|------------|------|-----|------|------| |
99 | | -| records | TRUE | List[Object] | ナレッジベースのクエリ結果のレコードリスト | 以下参照 | |
| 109 | +| プロパティ | 型 | 説明 | |
| 110 | +|:---------|:-----|:------------| |
| 111 | +| `content` | string | 取得したテキストチャンク。DifyはこれをLLMに渡すコンテキストとして使用します。 | |
| 112 | +| `score` | float | 類似度スコア(0–1)。スコアしきい値フィルタリングと結果のランキングに使用されます。 | |
| 113 | +| `title` | string | ソースドキュメントのタイトル。 | |
| 114 | +| `metadata` | object | Difyによって保持される任意のキーと値のペア。 | |
100 | 115 |
|
101 | | -`records` プロパティは以下のキーを含むリストオブジェクトです: |
| 116 | +Difyはフィールドが欠落しているレコードを拒否しませんが、`content`または`score`を省略すると、不完全またはランク付けされていない結果が生成されます。 |
102 | 117 |
|
103 | | -| プロパティ | 必須 | 型 | 説明 | 例値 | |
104 | | -|------------|------|-----|------|------| |
105 | | -| content | TRUE | string | ナレッジベースのデータソースからのテキストチャンクを含む | Dify:GenAIアプリケーションのイノベーションエンジン | |
106 | | -| score | TRUE | float | クエリに対する結果の関連性スコア、範囲:0〜1 | 0.5 | |
107 | | -| title | TRUE | string | ドキュメントタイトル | Dify紹介 | |
108 | | -| metadata | FALSE | json | データソース内のドキュメントのメタデータ属性とその値を含む | 例参照 | |
| 118 | +<Warning> |
| 119 | +レコードに`metadata`を含める場合、それは`null`ではなくオブジェクト(`{}`)である必要があります。`null`のメタデータ値はDifyの検索パイプラインでエラーを引き起こします。 |
| 120 | +</Warning> |
109 | 121 |
|
110 | | -## レスポンス構文 |
| 122 | +### レスポンス例 |
111 | 123 |
|
112 | 124 | ```json |
113 | | -HTTP/1.1 200 |
114 | | -Content-type: application/json |
115 | 125 | { |
116 | | - "records": [{ |
117 | | - "metadata": { |
118 | | - "path": "s3://dify/knowledge.txt", |
119 | | - "description": "dify知識ドキュメント" |
120 | | - }, |
121 | | - "score": 0.98, |
122 | | - "title": "knowledge.txt", |
123 | | - "content": "これは外部知識のドキュメントです。" |
124 | | - }, |
125 | | - { |
126 | | - "metadata": { |
127 | | - "path": "s3://dify/introduce.txt", |
128 | | - "description": "dify紹介" |
129 | | - }, |
130 | | - "score": 0.66, |
131 | | - "title": "introduce.txt", |
132 | | - "content": "GenAIアプリケーションのイノベーションエンジン" |
| 126 | + "records": [ |
| 127 | + { |
| 128 | + "content": "This is the document for external knowledge.", |
| 129 | + "score": 0.98, |
| 130 | + "title": "knowledge.txt", |
| 131 | + "metadata": { |
| 132 | + "path": "s3://dify/knowledge.txt", |
| 133 | + "description": "dify knowledge document" |
133 | 134 | } |
| 135 | + }, |
| 136 | + { |
| 137 | + "content": "The Innovation Engine for GenAI Applications", |
| 138 | + "score": 0.66, |
| 139 | + "title": "introduce.txt", |
| 140 | + "metadata": {} |
| 141 | + } |
134 | 142 | ] |
135 | 143 | } |
136 | 144 | ``` |
137 | 145 |
|
138 | | -## エラー |
| 146 | +## エラーハンドリング |
139 | 147 |
|
140 | | -アクションが失敗した場合、サービスは以下のエラー情報をJSON形式で返します: |
| 148 | +Difyはレスポンスの HTTP ステータスコードをチェックします。200以外のステータスはユーザーに表示されるエラーを発生させます。 |
141 | 149 |
|
142 | | -| プロパティ | 必須 | 型 | 説明 | 例値 | |
143 | | -|------------|------|-----|------|------| |
144 | | -| error_code | TRUE | int | エラーコード | 1001 | |
145 | | -| error_msg | TRUE | string | API例外の説明 | 無効な認証ヘッダー形式です。`Bearer <api-key>` 形式が期待されます。 | |
| 150 | +オプションでJSON形式の構造化エラー情報を返すことができます: |
146 | 151 |
|
147 | | -`error_code` プロパティには以下の種類があります: |
| 152 | +| プロパティ | 型 | 説明 | |
| 153 | +|:---------|:-----|:------------| |
| 154 | +| `error_code` | int | 開発者が定義するアプリケーションレベルのエラーコード。 | |
| 155 | +| `error_msg` | string | 人間が読めるエラーの説明。 | |
148 | 156 |
|
149 | | -| コード | 説明 | |
150 | | -|--------|------| |
| 157 | +以下は推奨されるエラーコードです。これらは慣例であり、Difyによって強制されるものではありません: |
| 158 | + |
| 159 | +| コード | 推奨される使用方法 | |
| 160 | +|:-----|:----------------| |
151 | 161 | | 1001 | 無効な認証ヘッダー形式 | |
152 | 162 | | 1002 | 認証失敗 | |
153 | | -| 2001 | 知識が存在しません | |
154 | | - |
155 | | -## 開発例 |
156 | | - |
157 | | -以下の動画では、LlamaCloudを例として外部ナレッジベースプラグインの開発方法を学ぶことができます: |
| 163 | +| 2001 | ナレッジベースが見つからない | |
158 | 164 |
|
159 | | -<iframe |
160 | | - src="https://www.youtube.com/embed/FaOzKZRS-2E" |
161 | | - width="100%" |
162 | | - height="315" |
163 | | - allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" |
164 | | - allowFullScreen |
165 | | -/> |
| 165 | +### エラーレスポンス例 |
166 | 166 |
|
167 | | -詳細については、プラグインの[GitHubリポジトリ](https://github.com/langgenius/dify-official-plugins/tree/main/extensions/llamacloud)を参照してください。 |
168 | | - |
169 | | -### HTTPステータスコード |
170 | | - |
171 | | -**AccessDeniedException** |
172 | | -アクセス権限がないため、リクエストが拒否されました。権限を確認して再試行してください。 |
173 | | -HTTPステータスコード:403 |
174 | | - |
175 | | -**InternalServerException** |
176 | | -内部サーバーエラーが発生しました。リクエストを再試行してください。 |
177 | | -HTTPステータスコード:500 |
| 167 | +```json |
| 168 | +{ |
| 169 | + "error_code": 1002, |
| 170 | + "error_msg": "Authorization failed. Please check your API key." |
| 171 | +} |
| 172 | +``` |
0 commit comments