ExtractionEngine v1.1

配置驱动的通用 RAG 抽取平台。上游业务通过 task_name 调用,
所有 prompt / queries / schema 都存在 PG chong_extraction_task_v1 配置表 — 加新场景不用改代码、不用重新部署。

1. 快速开始

调用现有任务(推荐方式)

curl -X POST https://extraction-engine.chopinsight.cn/api/v1/run-task \
  -H 'Content-Type: application/json' \
  -d '{
    "task_name": "prospectus_asset_list",
    "reit_code": "180601.SZ"
  }'

返回:

{
  "data": {
    "assets": [
      {"asset_name": "青岛万象城", "city": "青岛", "project_company": "..."},
      {"asset_name": "苏州昆山万象汇", "city": "昆山", "project_company": "..."}
    ]
  },
  "evidence_count": 29,
  "task_name": "prospectus_asset_list",
  "task_version": 1
}

创建一个新任务

curl -X PUT https://extraction-engine.chopinsight.cn/api/v1/tasks \
  -H 'Content-Type: application/json' \
  -d '{
    "task_name": "fin_report_revenue_breakdown",
    "source": "fin_report",
    "queries": [
      "营业收入分类构成",
      "{asset_name} 收入明细"
    ],
    "user_task": "穷举 REIT {reit_code} 在 {rp_period} 报告期的收入结构",
    "schema_json": "{\"breakdown\":[{\"item\":\"...\",\"amount\":\"...\"}]}",
    "max_tokens": 4096,
    "description": "财报收入细分抽取"
  }'

调用时通过 extra_context 注入 {var} 模板变量:

curl -X POST .../api/v1/run-task -d '{
  "task_name": "fin_report_revenue_breakdown",
  "reit_code": "180601.SZ",
  "rp_period": "2025Q3",
  "extra_context": {"asset_name": "青岛万象城"}
}'

2. Playground — 直接在网页上跑

三种模式:跑现有任务(run-task)、即席抽取(不读配置)、原始检索(看召回 chunk)。

▶ 跑任务
▶ 即席抽取
▶ 看召回

结果

(点"运行"看结果)

3. 当前任务列表

task_namesourcetop_kmax_tokens v状态描述
加载中…

4. API 参考

3.1 抽取(业务首选)

Endpoint说明
POST/api/v1/run-task 配置驱动抽取(业务推荐入口)。读 task_name 对应配置,渲染模板,跑 hybrid + LLM。
POST/api/v1/extract 即席 schema 抽取(不读配置)— 用于调试 / 一次性探索。生产业务请用 run-task
POST/api/v1/extract/asset-list 兼容快捷方式,内部走 run_task("prospectus_asset_list")
POST/api/v1/extract/asset-classification 兼容快捷方式,内部走 run_task("prospectus_asset_classification")

3.2 任务配置管理

Endpoint说明
GET/api/v1/tasks 列出所有任务(摘要)。query: ?only_enabled=true
GET/api/v1/tasks/{name} 查看完整配置(含 queries / schema_json / user_task)。
PUT/api/v1/tasks 创建或更新任务。同名任务 version 自动 +1,缓存即时失效。
DELETE/api/v1/tasks/{name} 删除任务。

3.3 检索(底层)

Endpoint说明
POST/api/v1/search 单 query hybrid search(向量 + 关键词 + RRF 融合)。
POST/api/v1/multi-search 多 query 并行检索 + 去重 — 覆盖度优先。
POST/api/v1/decompose 复杂 query → 子 query 列表(启发式 + LLM 拆解)。

3.4 系统

Endpoint说明
GET/health 同时检测 PG + LLM(embed ping)。任一不可用返回 503。
GET/docs FastAPI 自动生成的 OpenAPI / Swagger UI。

5. 任务配置表 schema

chong_extraction_task_v1

字段类型说明
task_namevarchar(64)主键,全局唯一
sourcevarchar(32)prospectus / fin_report / valuation_report
queriesjsonb多 query 字符串数组,支持 {var} 模板
user_tasktext给 LLM 的任务描述,支持 {var} 模板
schema_jsontext输出 JSON schema 字符串,支持 {var} 模板
top_k_per_queryint每 query 召回数(默认 8)
total_limitint去重后 chunk 上限(默认 25)
max_tokensintLLM 输出上限(资产多/字段多调大)
retriesintJSON 解析失败重试次数(默认 2)
use_llm_rerankbool是否启用 LLM 重排(慢但准)
versionint改一次 +1,可溯源
enabledboolfalse 时 run-task 拒接

6. 模板变量 {var}

queries / user_task / schema_json 三个字段都支持 {var} 占位符。
调用 run-task 时通过 extra_context 注入:

// 配置(PUT /tasks)
{
  "queries": ["{asset_name} 项目类型 业态 用途",
              "{asset_name} 经营情况"],
  "user_task": "判断【{asset_name}】的业态 (c0={c0})。提示:{c3_hint}",
  ...
}

// 调用(POST /run-task)
{
  "task_name": "prospectus_asset_classification",
  "reit_code": "180601.SZ",
  "extra_context": {
    "asset_name": "青岛万象城",
    "c0": "商业不动产",
    "c3_hint": "零售→集中式商业/超市社区商业"
  }
}

未提供的 {var} 保留原样(不抛错),让部分模板字段可以为空。

7. Python 客户端示例

import httpx

BASE = "https://extraction-engine.chopinsight.cn"

async def extract_asset_list(reit_code: str = None, file_id: int = None):
    payload = {"task_name": "prospectus_asset_list"}
    if reit_code: payload["reit_code"] = reit_code
    if file_id: payload["file_id"] = file_id
    async with httpx.AsyncClient(timeout=120) as c:
        r = await c.post(f"{BASE}/api/v1/run-task", json=payload)
        r.raise_for_status()
        return r.json()

# usage
result = await extract_asset_list(reit_code="180601.SZ")
for a in result["data"]["assets"]:
    print(a["asset_name"], a["city"])

8. 错误码

HTTP语义
400缺少 file_id/audit_id/reit_code 三选一过滤;source 非法
404task_name 不存在
503/health 不通过(PG 或 LLM 任一故障)
200正常。data=null + error="no chunks recalled" 表示召回为空(不是 EE 故障)

9. 数据源

sourcePG 表典型场景
prospectuschong_prospectus_vector_v1招募书 — 资产清单 / 业态分类 / 估值参数
fin_reportchong_fin_report_vector_v1季报/中报/年报 — 收入构成 / 出租率 / 运营数据
valuation_reportchong_valuation_report_vector_v1评估报告 — 折现率 / 账面价值 / 现金流预测

EE 部署在 Box 的 pg stack(端口 8205),通过 Caddy 路由 extraction-engine.chopinsight.cnpg_extraction-engine:8205