消费方数据获取
消费方通过 API key 调用检索接口。授权范围由 data product 和 entitlement 控制,canonical data 仍属于数据中心。消费方不直接访问数据库、对象存储、索引或向量库。
当前验证环境使用 http://20.169.21.11。所有请求必须携带:
Authorization: Bearer whale_consumer_xxx
本页目录
| 章节 | 内容 |
|---|---|
| 接入流程 | 从拿到 API key 到完成首个查询 |
| 检索模式 | keyword、vector、hybrid 的适用场景 |
| 请求过滤 | 平台、数据集、时间、内容类型、语言等 |
| 文档详情 | 当前版本、完整正文、历史版本、快照、片段和事实 |
| 统计维度 | 平台、数据集、内容类型、时间窗口和处理状态 |
| 错误处理 | 常见错误语义 |
接入流程
生产接入建议先用小时间窗口和明确平台验证结果,再扩大查询范围。
检索模式
外部消费方优先使用统一入口 POST /v1/contents/search,通过 mode 选择检索模式。旧的 /v1/search/keyword、/v1/search/vector、/v1/search/hybrid 保留为兼容和专项调试接口。
| API | 适合场景 | 说明 |
|---|---|---|
POST /v1/contents/search | 推荐外部入口 | mode 可选 keyword、vector、hybrid |
POST /v1/search/keyword | 精确词、品牌、人名、URL、话题 | 结果可解释,适合确定性召回 |
POST /v1/search/vector | 语义相似、跨语言、表达不一致 | 可只传 query,由服务端生成 query embedding |
POST /v1/search/hybrid | 默认推荐 | 融合词面召回、向量召回、质量分和时效分 |
mode 省略时,没有 query_vector 默认走 keyword;传了 query_vector 默认走 hybrid。
统一入口默认返回文档级结果,同一页同一个 document_id 只出现一次。body 是最佳命中分块摘要,不是完整正文;需要分块明细时传 include_chunks=true。
请求过滤
常用过滤维度:
| 过滤维度 | 示例 | 说明 |
|---|---|---|
dataset_id | social_media_raw | 数据产品或数据域 |
source_platform | youtube, weibo, xianyu | 来源平台 |
content_type | video, article, product | 内容类型 |
published_from/to | 2026-08-01T00:00:00Z | 平台发布时间窗口 |
language | zh, en | 内容语言 |
region | CN, US | 平台或内容区域 |
facts | price <= 100, company=Example | 结构化事实筛选 |
示例请求:
{
"mode": "hybrid",
"query": "AI 视频生成",
"dataset_ids": ["social_media_raw"],
"source_platforms": ["youtube", "bilibili", "xiaohongshu"],
"published_from": "2026-08-01T00:00:00Z",
"published_to": "2026-09-01T00:00:00Z",
"languages": ["zh", "en"],
"top_k": 20
}
文档详情
统一入口检索结果是文档级。需要完整文档时,先从检索结果取 document_id,再调用:
POST /v1/documents/batch-get:批量读取文档元数据、当前版本、可选完整正文、最新快照、片段和事实GET /v1/documents/{document_id}:文档元数据和当前版本GET /v1/documents/{document_id}/content:当前版本完整正文GET /v1/documents/{document_id}/content?version_id=ver_xxx:指定版本完整正文GET /v1/documents/{document_id}/versions:正文版本历史GET /v1/documents/{document_id}/snapshots:指标、作者状态和平台状态快照历史GET /v1/documents/{document_id}/parts:字幕、OCR、规格、章节等多内容片段GET /v1/documents/{document_id}/facts:价格、公司、地点、技能等结构化事实
正文、标题、URL、字幕、规格等内容变化会生成新版本;点赞、评论、播放、粉丝数、价格、库存等随时间变化的数据应从 snapshots 读取趋势。parts 面向可读片段,facts 面向可筛选和可聚合的结构化字段。
外部响应不会返回 Blob/R2 的 raw、text、manifest 或 part object key;完整正文和片段内容必须通过授权 API 获取。
列表页建议先用 batch-get 读取轻量信息和最新快照,详情页或导出场景再开启 include_content=true。
版本、片段和快照
| 数据 | 什么时候读取 | 示例 |
|---|---|---|
| 当前版本 | 只关心最新标题、正文、URL | 最新文章正文、最新视频描述 |
| 历史版本 | 需要知道正文是否变更 | 标题修改、商品描述修改 |
parts | 一个内容有多个可读片段 | YouTube 字幕、音频转录、小红书 OCR、商品规格 |
facts | 需要结构化筛选和聚合 | 价格、公司、地点、薪资、技能 |
snapshots | 需要随时间变化的状态 | 播放量、点赞、价格、库存、作者粉丝 |
统计维度
对外统计通常按以下维度理解:
| 维度 | 说明 |
|---|---|
| 时间 | published_at 看业务发布时间,snapshot_at 看指标趋势,created_at 看系统入库时间 |
| 平台 | source_platform 表示来源平台 |
| 数据集 | dataset_id 表示数据产品或数据域 |
| 内容类型 | content_type 表示视频、文章、帖子、商品、职位等 |
| 指标 | 统一指标字段加平台扩展指标 |
| 处理状态 | 是否已可检索、已向量化、已分析 |
权限控制
consumer 不拥有数据,只拥有访问权。授权可以限制:
- dataset
- source platform
- language
- region
- published time range
- allowed fields
每日配额按 UTC 自然日、消费方和检索操作统计,并在进入检索后端前原子占用。已被平台接受但下游失败的请求仍计入请求用量;因达到配额而返回 429 的请求不计入。
实时限制由 entitlement 的 requests_per_second、burst 和 max_concurrency 控制。触发时返回 429 rate_limit_exceeded 和 Retry-After: 1,请求不会进入下游,也不计入 usage。当前该限制在单 Gateway 内执行;多 Gateway 部署需要在统一 API Gateway 层同步全局策略。
返回字段
默认返回文档、分块、标题、正文摘要和评分。服务会按每条结果实际命中的 entitlement 再次脱敏;未授权 body 时不会返回正文和高亮。请求中的 fields 只能缩小返回范围,不能扩大授权。文档详情接口同样受 entitlement 控制。
错误处理
| 错误 | 含义 | 处理建议 |
|---|---|---|
401 unauthorized | API key 缺失或无效 | 检查鉴权头 |
403 entitlement_denied | API key 无权访问该 dataset、平台或字段 | 缩小查询范围或申请授权 |
400 invalid_query | 请求字段格式错误或未知 mode | 按 API Reference 修正参数 |
429 quota_exceeded | 触发配额或限流 | 降低并发,等待 Retry-After 指定的秒数后重试 |
429 rate_limit_exceeded | 触发实时 RPS、突发或并发限制 | 等待 Retry-After 后重试并降低并发 |
503 search_backend_unavailable | OpenSearch、Milvus、embedding 或 rerank 不可用 | 使用指数退避重试 |