Cortex API
Cortex OpenAPI 契约的接口清单和生成式客户端示例。
本页汇总当前 Cortex API 暴露面。完整 schema 可在 Swagger/OpenAPI 渲染器中查看;这里的片段是 AI 生成的 Python、JavaScript 和 Java API 调用。
| 方法 | 路径 | 说明 |
|---|
GET | /v1/health/live | 无需认证的 liveness probe。 |
GET | /v1/health/ready | 需要 health:read 的依赖 readiness probe。 |
GET | /metrics | Prometheus scrape endpoint。 |
| 方法 | 路径 | 说明 |
|---|
POST | /v1/dev/auth/token | dev auth 启用时签发本地开发 bearer token。 |
import requestsbase_url = "http://127.0.0.1:8080"payload = { "subject": "cortex-quickstart", "tenant_id": "tenant_demo", "roles": ["tenant_admin"], "expires_in": 3600,}response = requests.post(f"{base_url}/v1/dev/auth/token", json=payload)response.raise_for_status()token = response.json()["access_token"]print(token)
const baseUrl = "http://127.0.0.1:8080";const response = await fetch(`${baseUrl}/v1/dev/auth/token`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ subject: "cortex-quickstart", tenant_id: "tenant_demo", roles: ["tenant_admin"], expires_in: 3600, }),});if (!response.ok) throw new Error(await response.text());const { access_token: token } = await response.json();console.log(token);
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 = """ { "subject": "cortex-quickstart", "tenant_id": "tenant_demo", "roles": ["tenant_admin"], "expires_in": 3600 } """; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/dev/auth/token")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}
| 方法 | 路径 | 说明 |
|---|
GET | /v1/jobs/{jobId} | 获取 job 状态和耗时指标。 |
GET | /v1/jobs/{jobId}/events | 列出 job events。 |
POST | /v1/jobs/{jobId}/cancel | 取消排队或运行中的 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())); }}
| 方法 | 路径 | 说明 |
|---|
GET | /v1/parse/engines | 列出可用解析引擎。 |
GET | /v1/parse/profiles | 列出 parser profiles。 |
POST | /v1/parse/sync | 同步解析内容。 |
POST | /v1/parse/jobs | 提交异步解析 job。 |
GET | /v1/parse/jobs/{jobId}/result | 获取已完成解析结果。 |
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 = { "sources": [ "https://docs.cognee.ai/core-concepts/overview" ], "engine_id": "auto"}response = requests.post( f"{BASE_URL}/v1/parse/sync", headers={**auth_headers(), "Content-Type": "application/json"}, json=payload,)response.raise_for_status()data = response.json()print(data['results'][0]['document']['markdown'][:800]);
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 = { "sources": [ "https://docs.cognee.ai/core-concepts/overview" ], "engine_id": "auto"};const response = await fetch(`${BASE_URL}/v1/parse/sync`, { 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.results[0].document.markdown.slice(0, 800));
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 = """ { \"sources\": [ \"https://docs.cognee.ai/core-concepts/overview\" ], \"engine_id\": \"auto\" } """; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/parse/sync")) .header("Authorization", "Bearer " + TOKEN) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}
| 方法 | 路径 | 说明 |
|---|
POST | /v1/storage/uploads | 创建预签名上传会话。 |
POST | /v1/storage/files | 通过 API 上传小文件。 |
POST | /v1/storage/uploads/{uploadId}/complete | 完成上传会话。 |
GET | /v1/storage/objects/{objectId} | 获取对象元数据。 |
GET | /v1/storage/objects/{objectId}/download-url | 创建短期下载 URL。 |
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}"}metadata = {"source": "storage-quickstart", "document_type": "guide"}access_policy = {"access_level": "tenant_shared"}with open("cortex-storage-quickstart.md", "w", encoding="utf-8") as f: f.write("# Cortex Storage\n\nThis file was uploaded through Cortex.")with open("cortex-storage-quickstart.md", "rb") as f: response = requests.post( f"{BASE_URL}/v1/storage/files", headers=auth_headers(), files={"file": ("cortex-storage-quickstart.md", f, "text/markdown")}, data={ "metadata_json": __import__("json").dumps(metadata), "access_policy_json": __import__("json").dumps(access_policy), "tags": "quickstart,docs", }, )response.raise_for_status()print(response.json())
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 form = new FormData();form.append( "file", new Blob(["# Cortex Storage\n\nThis file was uploaded through Cortex."], { type: "text/markdown", }), "cortex-storage-quickstart.md",);form.append("metadata_json", JSON.stringify({ source: "storage-quickstart", document_type: "guide" }));form.append("access_policy_json", JSON.stringify({ access_level: "tenant_shared" }));form.append("tags", "quickstart,docs");const response = await fetch(`${BASE_URL}/v1/storage/files`, { method: "POST", headers: authHeaders, body: form,});if (!response.ok) throw new Error(await response.text());console.log(await response.json());
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 boundary = "----CortexBoundary" + System.currentTimeMillis(); String body = "" + "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"file\"; filename=\"cortex-storage-quickstart.md\"\r\n" + "Content-Type: text/markdown\r\n\r\n" + "# Cortex Storage\n\nThis file was uploaded through Cortex.\r\n" + "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"metadata_json\"\r\n\r\n" + "{\"source\":\"storage-quickstart\",\"document_type\":\"guide\"}\r\n" + "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"access_policy_json\"\r\n\r\n" + "{\"access_level\":\"tenant_shared\"}\r\n" + "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"tags\"\r\n\r\n" + "quickstart,docs\r\n" + "--" + boundary + "--\r\n"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/storage/files")) .header("Authorization", "Bearer " + TOKEN) .header("Content-Type", "multipart/form-data; boundary=" + boundary) .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}
| 方法 | 路径 | 说明 |
|---|
POST | /v1/knowledge/datasets | 创建知识数据集。 |
GET | /v1/knowledge/datasets/{datasetId} | 获取数据集元数据和计数。 |
POST | /v1/knowledge/add/jobs | 提交 Cognee Add job。 |
POST | /v1/knowledge/cognify/jobs | 提交 Cognify job。 |
POST | /v1/knowledge/memify/jobs | 提交 Memify job。 |
POST | /v1/knowledge/search | 搜索数据集和知识图谱。 |
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())); }}
| 方法 | 路径 | 说明 |
|---|
GET | /v1/eval/engines | 列出评测引擎。 |
GET | /v1/eval/metrics | 列出标准化评测指标。 |
POST | /v1/eval/sync | 执行小规模同步评测。 |
POST | /v1/eval/jobs | 提交异步评测 job。 |
GET | /v1/eval/jobs/{jobId}/result | 获取已完成评测结果。 |
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 = { "name": "quickstart-rag-eval", "eval_type": "rag", "engine_id": "deepeval", "input": { "type": "inline_test_cases", "test_cases": [ { "user_input": "What does Cortex Parse do?", "actual_output": "Cortex Parse converts URLs and files into normalized Markdown.", "expected_output": "Parse should mention URLs, files, and Markdown.", "retrieval_contexts": [ "Cortex Parse accepts URLs and files and returns normalized Markdown with metadata." ], "metadata": { "case_id": "rag-001" } } ] }, "target": { "type": "existing_outputs" }, "metrics": [ { "metric_key": "rag.answer_relevance", "threshold": 0.65 }, { "metric_key": "rag.faithfulness", "threshold": 0.65 }, { "metric_key": "rag.contextual_relevance", "threshold": 0.6 } ], "output": { "persist_report_object": True, "include_sample_results": True }}response = requests.post( f"{BASE_URL}/v1/eval/sync", 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 = { "name": "quickstart-rag-eval", "eval_type": "rag", "engine_id": "deepeval", "input": { "type": "inline_test_cases", "test_cases": [ { "user_input": "What does Cortex Parse do?", "actual_output": "Cortex Parse converts URLs and files into normalized Markdown.", "expected_output": "Parse should mention URLs, files, and Markdown.", "retrieval_contexts": [ "Cortex Parse accepts URLs and files and returns normalized Markdown with metadata." ], "metadata": { "case_id": "rag-001" } } ] }, "target": { "type": "existing_outputs" }, "metrics": [ { "metric_key": "rag.answer_relevance", "threshold": 0.65 }, { "metric_key": "rag.faithfulness", "threshold": 0.65 }, { "metric_key": "rag.contextual_relevance", "threshold": 0.6 } ], "output": { "persist_report_object": true, "include_sample_results": true }};const response = await fetch(`${BASE_URL}/v1/eval/sync`, { 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 = """ { \"name\": \"quickstart-rag-eval\", \"eval_type\": \"rag\", \"engine_id\": \"deepeval\", \"input\": { \"type\": \"inline_test_cases\", \"test_cases\": [ { \"user_input\": \"What does Cortex Parse do?\", \"actual_output\": \"Cortex Parse converts URLs and files into normalized Markdown.\", \"expected_output\": \"Parse should mention URLs, files, and Markdown.\", \"retrieval_contexts\": [ \"Cortex Parse accepts URLs and files and returns normalized Markdown with metadata.\" ], \"metadata\": { \"case_id\": \"rag-001\" } } ] }, \"target\": { \"type\": \"existing_outputs\" }, \"metrics\": [ { \"metric_key\": \"rag.answer_relevance\", \"threshold\": 0.65 }, { \"metric_key\": \"rag.faithfulness\", \"threshold\": 0.65 }, { \"metric_key\": \"rag.contextual_relevance\", \"threshold\": 0.6 } ], \"output\": { \"persist_report_object\": true, \"include_sample_results\": true } } """; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/eval/sync")) .header("Authorization", "Bearer " + TOKEN) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}
| 方法 | 路径 | 说明 |
|---|
GET | /v1/synthesis/engines | 列出合成引擎。 |
POST | /v1/synthesis/sync | 执行小规模同步合成。 |
POST | /v1/synthesis/jobs | 提交异步合成 job。 |
GET | /v1/synthesis/jobs/{jobId}/result | 获取已完成合成结果。 |
POST | /v1/synthesis/jobs/{jobId}/result | Job 状态 webhook 目标。 |
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 = { "name": "quickstart-qa-preview", "synthesis_type": "qa_pairs", "engine_id": "deepeval", "source": { "type": "documents", "documents": [ "Cortex Parse turns URLs and storage objects into LLM-ready Markdown." ] }, "config": { "sample_count": 2, "max_contexts_per_case": 1, "include_expected_output": True }, "output": { "output_format": "json", "include_preview": True }}response = requests.post( f"{BASE_URL}/v1/synthesis/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 = { "name": "quickstart-qa-preview", "synthesis_type": "qa_pairs", "engine_id": "deepeval", "source": { "type": "documents", "documents": [ "Cortex Parse turns URLs and storage objects into LLM-ready Markdown." ] }, "config": { "sample_count": 2, "max_contexts_per_case": 1, "include_expected_output": true }, "output": { "output_format": "json", "include_preview": true }};const response = await fetch(`${BASE_URL}/v1/synthesis/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 = """ { \"name\": \"quickstart-qa-preview\", \"synthesis_type\": \"qa_pairs\", \"engine_id\": \"deepeval\", \"source\": { \"type\": \"documents\", \"documents\": [ \"Cortex Parse turns URLs and storage objects into LLM-ready Markdown.\" ] }, \"config\": { \"sample_count\": 2, \"max_contexts_per_case\": 1, \"include_expected_output\": true }, \"output\": { \"output_format\": \"json\", \"include_preview\": true } } """; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "/v1/synthesis/jobs")) .header("Authorization", "Bearer " + TOKEN) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); print(HTTP.send(request, HttpResponse.BodyHandlers.ofString())); }}