更新: 2026-08 | 本文描述当前服务接口;V12 与
docs/API_CONTRACT.md均保留为设计/历史参考。
- 本地演示基础 URL:
http://127.0.0.1:8001(Docker 容器内部仍监听8000) - API 前缀:
/api/v1/ - Content-Type:
application/json
{
"data": {},
"meta": {
"request_id": "req_01",
"trace_id": "trace_01",
"schema_version": "1.0",
"generated_at": "2026-07-15T10:00:00+08:00",
"data_as_of": "2026-06-30",
"dataset_version": "official-2026-07-12",
"rule_set_version": "finance-rules-1.0.0",
"graph_version": "equity-2026Q2"
},
"warnings": []
}{
"data": {
"status": "partial",
"finance": {},
"equity": null,
"events": {}
},
"meta": {},
"warnings": [
{
"code": "EQUITY_TIMEOUT",
"module": "equity",
"message": "股权模块超过本轮时限,已返回其余结果。",
"recoverable": true
}
]
}{
"type": "https://truthnet/errors/module-timeout",
"title": "Module execution timed out",
"status": 503,
"detail": "Equity analysis exceeded its deadline.",
"instance": "/api/v1/companies/600518.SH/risk",
"error_code": "EQUITY_TIMEOUT",
"trace_id": "trace_01",
"recoverable": true
}{
"code": 0,
"data": {},
"message": "ok",
"trace_id": "uuid"
}旧格式保留兼容。新开发请使用 V12 envelope。
| 参数 | 用途 |
|---|---|
as_of |
指定数据快照日期 |
statement_scope |
parent_company(固定母公司报表口径 408006000;auto/consolidated 已停用) |
include |
指定摘要接口包含的可选区域 |
periods |
财务历史期数 |
months |
事件回溯月数 |
depth |
股权穿透深度,1–10 |
include_related |
是否包含关联方 |
| 能力 | 方法 | 端点 | 优先级 | 状态 |
|---|---|---|---|---|
| 存活检查 | GET | /healthz |
P0 | ✅ 已实现 |
| 就绪检查 | GET | /readyz |
P0 | ✅ 已实现 |
| 公司搜索 | GET | /api/v1/companies?query=康美&limit=10 |
P0 | ✅ 已实现(真实数据,2026-08-06 对齐审计) |
| 企业画像摘要 | GET | /api/v1/companies/{code} |
P0 | ✅ 已实现(真实数据) |
| 财务分析 | GET | /api/v1/companies/{code}/finance |
P0 | ✅ 已实现(真实数据) |
| 股权穿透 | GET | /api/v1/companies/{code}/equity |
P0 | ✅ 已实现(Neo4j/NetworkX) |
| 舆情事件 | GET | /api/v1/companies/{code}/events |
P0 | ✅ 已实现(真实数据) |
| 综合风险 | GET | /api/v1/companies/{code}/risk |
P0 | ✅ 已实现(真实数据) |
| 行业对标 | GET | /api/v1/companies/{code}/benchmarks |
P0 | ✅ 已实现( |
| 会话列表 | GET | /api/v1/sessions |
P0 | ✅ 已实现 |
| 创建会话 | POST | /api/v1/sessions |
P0 | ✅ 已实现 |
| 非流式问答 | POST | /api/v1/chat |
P0 | ✅ 已实现( |
| 流式问答 | WS | /api/v1/chat/ws |
P0 | ✅ 已实现( |
| 创建比较 | POST | /api/v1/comparisons |
P1 | ✅ 已实现( |
| 创建报告 | POST | /api/v1/reports |
P1 | ✅ 已实现(Phase D #8:202 + 幂等键 + report_jobs) |
| 报告状态 | GET | /api/v1/reports/{report_id} |
P1 | ✅ 已实现(Phase D #8:状态/进度/错误/可下载标志) |
| 报告下载 | GET | /api/v1/reports/{report_id}/file |
P1 | ✅ 已实现(Phase D #8:仅 succeeded,PDF) |
进程存活探针,不依赖外部服务。
lite profile: 始终 ready。full profile: 检查 MySQL/Neo4j/ChromaDB/LLM 状态。
GET /api/v1/companies?query=康美&limit=10当前为 mock 实现(5 家公司硬编码数据)。
请求: { "question": "...", "session_id": "...", "context": {...} }
响应(V12 envelope data 字段):
answer: string — Markdown 主回答evidence: list — 证据项(ChatEvidenceV1:source/field/value + canonical 字段)claims: list — 结论声明(ClaimV1:claim_id/text/claim_type/severity/confidence/rule_id/rule_version/evidence_ids/verification_status/limitations)※ 2026-08-04 追加module_status: dict[string, ModuleStatusV1] — 各模块状态 typed 对象{state, error_code, recoverable, duration_ms}(state ∈ pending/running/success/partial/failed/skipped/cancelled)※ 2026-08-04 追加,8/4 类型化risk_level: string — 风险等级 red/orange/yellow/green/unknown(优先 final_response,不从 risk_score 换算)※ 2026-08-04 追加graph/timeline/risk_score/warnings/missing_modules/trace_id/follow_ups
V12 event envelope 格式,支持 turn.accepted / module.started / answer.delta / artifact.upsert / turn.completed / turn.failed / turn.cancelled / stream.resume_ack / heartbeat。
Phase D 增强(#5/#6/#10):
turn.cancel→turn.cancelled(协作式取消:当前节点结束、下一节点不启动、≤2s 确认、幂等)stream.resume→stream.resume_ack(断线补发:原 event_id/sequence/turn_id 原样回放;gap → STREAM_GAP)answer.delta为真流式(generate_answer 实时分段,拼接 == 最终答案)turn.completed增补pattern_matches(模式三要素)与equity_chains(股权链路)
POST /api/v1/reports
{
"company_code": "600518.SH",
"session_id": "ses_xxx", // 可选
"idempotency_key": "report-001", // 可选:同一键重试不重复建任务
"as_of": "2026-03-31" // 可选
}响应 202:{data: {report_id, status:"queued", progress:0, ...}, meta, warnings}。
返回 {report_id, status, progress, created_at, started_at, completed_at, error_code, error_message, download_available, file_sha256, company_code, session_id}。
仅 succeeded 可下载;返回 application/pdf;路径穿越防护;文件不存在返回明确错误。
GET /api/v1/companies/{code}/equity 与 POST /api/v1/chat 的 equity_chains 字段:
每条链含 chain_id/path_names/depth/final_control_pct/evidence_ids/risk_label/risk_level/risk_reasons/merge_explanation/source_system/as_of。
GET /api/v1/companies/{code}/equity(Phase C 真实图谱契约):
- 深度定义:
hop_count = len(edge_ids) = len(node_ids) - 1;depth字段一律为 hop_count(边数),不混用实体数量。严格 >3 层 = hop_count ≥ 4(3 跳链 = 4 个实体,4 跳链 = 5 个实体)。 - as_of 参数:支持
YYYYMMDD/YYYY-MM-DD/YYYYQn(如 2026Q2 → 20260630),适配器边界统一规范化为八位期次;无法解析返回 422(不静默返回空图)。 - 时点快照语义:与导入侧
is_latest快照级标记一致——按目标公司(endNode)取report_period <= as_of的最新报告期整体快照(同一目标公司的全部股东边一起切换,已退出前十大的旧股东被排除);as_of晚于全图最新快照期时结果与不传as_of完全一致。 - 响应新增字段:
字段 类型 说明 requested_depthint 请求穿透深度(hop_count 口径) max_observed_hopsint 实际观测最大跳数(len(edge_ids) 口径) truncatedbool 路径超过 200 条被截断(深链优先取前 200;截断时 partial=true+PATH_LIMIT_REACHEDwarning)coverage_notestr 诚实覆盖说明(按公司维度):该公司未发现 4 跳及以上持股链路时输出"在当前图版本及已覆盖的十大股东数据中,未发现可验证的4跳及以上股权链路…",不推断现实中不存在更深关系。注意:全局统计存在 10 条四跳持股路径(如中央汇金→南京高科→南京银行→江苏国信→江苏新能),与单公司查询为 0 不矛盾 - 路径排序:
ORDER BY length(path) DESC深链优先,查询 201 条取前 200 条。 - 链路类型:
equity_chains[*].path_type为ownership(默认,持股关系)或control(存在明确控制证据)。回答/Claim/PDF 按此措辞——ownership 链路称"股权链穿透/最终持股/持股比例集中",不得一律称"控制链/最终控制"。 - 快照缓存运维约束:历史时点快照聚合结果在进程内缓存 300 秒(TTL)。同一
graph_version下重建图后,最多返回 300 秒旧快照。运维要求三选一:① 图导入期间不对外提供股权查询;② 导入完成后重启后端;③ 接受最多 300 秒最终一致性。不建议增加更复杂缓存机制。
/risk 的 pattern_matches、/chat 的 pattern_matches、WS turn.completed:
每条含 phase / alternative_explanation / regulatory_hint(监管提示固定存在)。
| 旧路径 | V12 路径 | 状态 |
|---|---|---|
GET /health |
GET /healthz |
deprecated, 保留兼容 |
POST /api/v1/chat (旧格式) |
POST /api/v1/chat (V12 envelope) |
旧格式保留兼容 |
WS /api/v1/chat/ws (旧格式) |
WS /api/v1/chat/ws (V12 envelope) |
旧格式保留兼容 |
- ✅ 稳定: 不计划修改
- 🔶 MVP: 核心字段稳定,可能追加新字段
- 🔸 草案: 仍在设计中
- 新字段只能追加,不删除已有字段
- 破坏性修改必须在
docs/INTERFACE_CHANGELOG.md中记录 - 破坏性修改需要项目负责人审阅
- 只有前端、评测脚本和测试都无旧路径依赖后,才删除兼容路由