Cortex 文档已覆盖 Parse、Storage、Knowledge、Evaluation 与 Synthesis。查看 最新变更

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/metricsPrometheus scrape endpoint。

开发认证

方法路径说明
POST/v1/dev/auth/tokendev 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()));  }}

Jobs

方法路径说明
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()));  }}

Parse

方法路径说明
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()));  }}

Storage

方法路径说明
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()));  }}

Knowledge

方法路径说明
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()));  }}

Evaluation

方法路径说明
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()));  }}

Synthesis

方法路径说明
GET/v1/synthesis/engines列出合成引擎。
POST/v1/synthesis/sync执行小规模同步合成。
POST/v1/synthesis/jobs提交异步合成 job。
GET/v1/synthesis/jobs/{jobId}/result获取已完成合成结果。
POST/v1/synthesis/jobs/{jobId}/resultJob 状态 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()));  }}

本页目录