Knowledge Quickstart 快速上手
创建数据集,摄入内联文本,构建图谱感知知识,并执行搜索。
这个快速上手从内联文本构建一个很小的知识库,不依赖外网和 Storage 对象。下面的 API 片段是 AI 生成的 Python、JavaScript 和 Java 客户端示例。
1. 创建数据集
import osimport requestsBASE_URL = os.getenv("CORTEX_URL", "http://127.0.0.1:8080")TOKEN = os.getenv("CORTEX_TOKEN", "replace_with_token")def auth_headers(): return {"Authorization": f"Bearer {TOKEN}"}payload = { "dataset_key": "quickstart_knowledge_demo", "display_name": "Quickstart Knowledge Demo", "description": "Small Cortex Knowledge dataset", "tags": [ "quickstart", "knowledge" ], "retention_class": "temporary", "access_policy": { "access_level": "tenant_shared" }}response = requests.post( f"{BASE_URL}/v1/knowledge/datasets", headers={**auth_headers(), "Content-Type": "application/json"}, json=payload,)response.raise_for_status()data = response.json()print(data)const BASE_URL = process.env.CORTEX_URL ?? "http://127.0.0.1:8080";const TOKEN = process.env.CORTEX_TOKEN ?? "replace_with_token";const authHeaders = { Authorization: `Bearer ${TOKEN}`,};const payload = { "dataset_key": "quickstart_knowledge_demo", "display_name": "Quickstart Knowledge Demo", "description": "Small Cortex Knowledge dataset", "tags": [ "quickstart", "knowledge" ], "retention_class": "temporary", "access_policy": { "access_level": "tenant_shared" }};const response = await fetch(`${BASE_URL}/v1/knowledge/datasets`, { method: "POST", headers: { ...authHeaders, "Content-Type": "application/json" }, body: JSON.stringify(payload),});if (!response.ok) throw new Error(await response.text());const data = await response.json();console.log(data);import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;public class CortexExample { static final String BASE_URL = System.getenv().getOrDefault("CORTEX_URL", "http://127.0.0.1:8080"); static final String TOKEN = System.getenv().getOrDefault("CORTEX_TOKEN", "replace_with_token"); static final HttpClient HTTP = HttpClient.newHttpClient(); static void print(HttpResponse<String> response) { System.out.println(response.statusCode()); System.out.println(response.body()); } public static void main(String[] args) throws Exception { String json = """ { \"dataset_key\": \"quickstart_knowledge_demo\", \"display_name\": \"Quickstart Knowledge Demo\", \"description\": \"Small Cortex Knowledge dataset\", \"tags\": [ \"quickstart\", \"knowledge\" ], \"retention_class\": \"temporary\", \"access_policy\": { \"access_level\": \"tenant_shared\" } } """; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/knowledge/datasets")) .header("Authorization", "Bearer " + TOKEN) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}2. 摄入内联文本
import osimport requestsBASE_URL = os.getenv("CORTEX_URL", "http://127.0.0.1:8080")TOKEN = os.getenv("CORTEX_TOKEN", "replace_with_token")def auth_headers(): return {"Authorization": f"Bearer {TOKEN}"}payload = { "dataset_key": "quickstart_knowledge_demo", "inputs": [ { "input_type": "text", "text": "# Cortex APIs\nCortex provides Parse, Storage, Knowledge, Evaluation, and Synthesis APIs.", "label": "Cortex API note", "node_set": [ "quickstart", "docs" ], "metadata": { "source": "manual", "document_type": "note" } } ], "options": { "normalize_text": True, "structured_ingest": True, "incremental": True, "persist_source_copy": False }}response = requests.post( f"{BASE_URL}/v1/knowledge/add/jobs", headers={**auth_headers(), "Content-Type": "application/json"}, json=payload,)response.raise_for_status()data = response.json()print(data)const BASE_URL = process.env.CORTEX_URL ?? "http://127.0.0.1:8080";const TOKEN = process.env.CORTEX_TOKEN ?? "replace_with_token";const authHeaders = { Authorization: `Bearer ${TOKEN}`,};const payload = { "dataset_key": "quickstart_knowledge_demo", "inputs": [ { "input_type": "text", "text": "# Cortex APIs\nCortex provides Parse, Storage, Knowledge, Evaluation, and Synthesis APIs.", "label": "Cortex API note", "node_set": [ "quickstart", "docs" ], "metadata": { "source": "manual", "document_type": "note" } } ], "options": { "normalize_text": true, "structured_ingest": true, "incremental": true, "persist_source_copy": false }};const response = await fetch(`${BASE_URL}/v1/knowledge/add/jobs`, { method: "POST", headers: { ...authHeaders, "Content-Type": "application/json" }, body: JSON.stringify(payload),});if (!response.ok) throw new Error(await response.text());const data = await response.json();console.log(data);import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;public class CortexExample { static final String BASE_URL = System.getenv().getOrDefault("CORTEX_URL", "http://127.0.0.1:8080"); static final String TOKEN = System.getenv().getOrDefault("CORTEX_TOKEN", "replace_with_token"); static final HttpClient HTTP = HttpClient.newHttpClient(); static void print(HttpResponse<String> response) { System.out.println(response.statusCode()); System.out.println(response.body()); } public static void main(String[] args) throws Exception { String json = """ { \"dataset_key\": \"quickstart_knowledge_demo\", \"inputs\": [ { \"input_type\": \"text\", \"text\": \"# Cortex APIs\\nCortex provides Parse, Storage, Knowledge, Evaluation, and Synthesis APIs.\", \"label\": \"Cortex API note\", \"node_set\": [ \"quickstart\", \"docs\" ], \"metadata\": { \"source\": \"manual\", \"document_type\": \"note\" } } ], \"options\": { \"normalize_text\": true, \"structured_ingest\": true, \"incremental\": true, \"persist_source_copy\": false } } """; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/knowledge/add/jobs")) .header("Authorization", "Bearer " + TOKEN) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}轮询 job 直到成功:
import osimport requestsBASE_URL = os.getenv("CORTEX_URL", "http://127.0.0.1:8080")TOKEN = os.getenv("CORTEX_TOKEN", "replace_with_token")def auth_headers(): return {"Authorization": f"Bearer {TOKEN}"}response = requests.get(f"{BASE_URL}/v1/jobs/job_xxx", headers=auth_headers())response.raise_for_status()data = response.json()print(data)const BASE_URL = process.env.CORTEX_URL ?? "http://127.0.0.1:8080";const TOKEN = process.env.CORTEX_TOKEN ?? "replace_with_token";const authHeaders = { Authorization: `Bearer ${TOKEN}`,};const response = await fetch(`${BASE_URL}/v1/jobs/job_xxx`, { headers: authHeaders,});if (!response.ok) throw new Error(await response.text());const data = await response.json();console.log(data);import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;public class CortexExample { static final String BASE_URL = System.getenv().getOrDefault("CORTEX_URL", "http://127.0.0.1:8080"); static final String TOKEN = System.getenv().getOrDefault("CORTEX_TOKEN", "replace_with_token"); static final HttpClient HTTP = HttpClient.newHttpClient(); static void print(HttpResponse<String> response) { System.out.println(response.statusCode()); System.out.println(response.body()); } public static void main(String[] args) throws Exception { HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/jobs/job_xxx")) .header("Authorization", "Bearer " + TOKEN) .GET() .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}3. Cognify 数据集
import osimport requestsBASE_URL = os.getenv("CORTEX_URL", "http://127.0.0.1:8080")TOKEN = os.getenv("CORTEX_TOKEN", "replace_with_token")def auth_headers(): return {"Authorization": f"Bearer {TOKEN}"}payload = { "dataset_key": "quickstart_knowledge_demo", "incremental_loading": True, "graph_prompt_profile": "simple", "chunking": { "enabled": True, "strategy": "semantic", "target_tokens": 384, "overlap_tokens": 48, "max_chunks": 64 }}response = requests.post( f"{BASE_URL}/v1/knowledge/cognify/jobs", headers={**auth_headers(), "Content-Type": "application/json"}, json=payload,)response.raise_for_status()data = response.json()print(data)const BASE_URL = process.env.CORTEX_URL ?? "http://127.0.0.1:8080";const TOKEN = process.env.CORTEX_TOKEN ?? "replace_with_token";const authHeaders = { Authorization: `Bearer ${TOKEN}`,};const payload = { "dataset_key": "quickstart_knowledge_demo", "incremental_loading": true, "graph_prompt_profile": "simple", "chunking": { "enabled": true, "strategy": "semantic", "target_tokens": 384, "overlap_tokens": 48, "max_chunks": 64 }};const response = await fetch(`${BASE_URL}/v1/knowledge/cognify/jobs`, { method: "POST", headers: { ...authHeaders, "Content-Type": "application/json" }, body: JSON.stringify(payload),});if (!response.ok) throw new Error(await response.text());const data = await response.json();console.log(data);import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;public class CortexExample { static final String BASE_URL = System.getenv().getOrDefault("CORTEX_URL", "http://127.0.0.1:8080"); static final String TOKEN = System.getenv().getOrDefault("CORTEX_TOKEN", "replace_with_token"); static final HttpClient HTTP = HttpClient.newHttpClient(); static void print(HttpResponse<String> response) { System.out.println(response.statusCode()); System.out.println(response.body()); } public static void main(String[] args) throws Exception { String json = """ { \"dataset_key\": \"quickstart_knowledge_demo\", \"incremental_loading\": true, \"graph_prompt_profile\": \"simple\", \"chunking\": { \"enabled\": true, \"strategy\": \"semantic\", \"target_tokens\": 384, \"overlap_tokens\": 48, \"max_chunks\": 64 } } """; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/knowledge/cognify/jobs")) .header("Authorization", "Bearer " + TOKEN) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}4. 搜索
import osimport requestsBASE_URL = os.getenv("CORTEX_URL", "http://127.0.0.1:8080")TOKEN = os.getenv("CORTEX_TOKEN", "replace_with_token")def auth_headers(): return {"Authorization": f"Bearer {TOKEN}"}payload = { "query_text": "What APIs does Cortex expose?", "dataset_keys": [ "quickstart_knowledge_demo" ], "search_type": "GRAPH_COMPLETION", "top_k": 5, "only_context": False, "include_provenance": True, "include_graph_paths": True, "timeout_seconds": 30}response = requests.post( f"{BASE_URL}/v1/knowledge/search", headers={**auth_headers(), "Content-Type": "application/json"}, json=payload,)response.raise_for_status()data = response.json()print(data)const BASE_URL = process.env.CORTEX_URL ?? "http://127.0.0.1:8080";const TOKEN = process.env.CORTEX_TOKEN ?? "replace_with_token";const authHeaders = { Authorization: `Bearer ${TOKEN}`,};const payload = { "query_text": "What APIs does Cortex expose?", "dataset_keys": [ "quickstart_knowledge_demo" ], "search_type": "GRAPH_COMPLETION", "top_k": 5, "only_context": false, "include_provenance": true, "include_graph_paths": true, "timeout_seconds": 30};const response = await fetch(`${BASE_URL}/v1/knowledge/search`, { method: "POST", headers: { ...authHeaders, "Content-Type": "application/json" }, body: JSON.stringify(payload),});if (!response.ok) throw new Error(await response.text());const data = await response.json();console.log(data);import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;public class CortexExample { static final String BASE_URL = System.getenv().getOrDefault("CORTEX_URL", "http://127.0.0.1:8080"); static final String TOKEN = System.getenv().getOrDefault("CORTEX_TOKEN", "replace_with_token"); static final HttpClient HTTP = HttpClient.newHttpClient(); static void print(HttpResponse<String> response) { System.out.println(response.statusCode()); System.out.println(response.body()); } public static void main(String[] args) throws Exception { String json = """ { \"query_text\": \"What APIs does Cortex expose?\", \"dataset_keys\": [ \"quickstart_knowledge_demo\" ], \"search_type\": \"GRAPH_COMPLETION\", \"top_k\": 5, \"only_context\": false, \"include_provenance\": true, \"include_graph_paths\": true, \"timeout_seconds\": 30 } """; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/knowledge/search")) .header("Authorization", "Bearer " + TOKEN) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}