启典 API 调用指南

2 min read

概述 #

启典后端提供基于 FastAPI 的 HTTP 接口,可用于把”保管期限判定””年度判定””扫描件提取””智能问答”等能力集成进其他业务系统(如档案管理系统、Excel 插件)。本指南合并了接口手册与调用说明,覆盖全部 7 个接口。

适用版本:V1.1(2026-06-18,新增年度判定接口)| 本地部署基础地址:http://localhost:8000

快速开始 #

启动 API 服务 #

cd Claw
python api_server.py

启动后访问 http://localhost:8000/docs 查看 Swagger 在线文档,/redoc 查看 ReDoc 文档。

鉴权 #

所有接口需在请求头携带 API Key:

X-Api-Key: ytshuju-api-2026

关闭鉴权:把 config.py 中的 API_SECRET_KEY 设为空字符串 "" 并重启服务。

接口总览 #

路径 方法 功能 是否上传文件
/health GET 健康检查
/ask POST 档案知识智能问答
/retention POST 单条保管期限判定
/retention/batch POST 批量保管期限判定 是(Excel)
/year POST 单条年度判定
/year/batch POST 批量年度判定 是(Excel)
/extract POST 双层 PDF 元数据提取 是(PDF)

接口详细说明 #

GET /health #

GET http://localhost:8000/health

返回示例:{"status":"ok","mode":"local","model":"qwen3:32b"}

POST /ask #

{
  "question": "合同原件应该保管多少年?",
  "use_kb": true
}

返回含 answersources(知识库检索原文片段)字段。

POST /retention(单条保管期限) #

{
  "title": "关于2024年工作会议的通知",
  "use_llm_fallback": true
}

返回含 period(永久/30年/10年/待定)、method(rule/llm/unknown)、confidence

POST /retention/batch(批量保管期限) #

multipart/form-data,键名 file,上传含”题名”列的 Excel,返回追加”保管期限””判定依据””判定方法”三列的 Excel。

curl -X POST "http://localhost:8000/retention/batch" \
  -H "X-Api-Key: ytshuju-api-2026" \
  -F "file=@titles.xlsx;type=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

POST /year(单条年度判定) #

{
  "title": "关于召开第三届代表大会的通知",
  "signing_date": "20241120",
  "closing_year": "2024"
}

返回 yearmethod(签发日期/闭幕年/办结年/归档年度/未知需人工)等字段。判定优先级:闭幕年 > 办结年 > 签发日期 > 归档年度 > 未知需人工。

POST /year/batch(批量年度判定) #

multipart/form-data,键名 file,上传含”题名”和可选”签发日期”列的 Excel,返回追加”所属年度””年度判定说明””年度判定方法”三列。可选表单字段 archiving_year 统一传入整批归档年度。

POST /extract(双层 PDF 提取) #

multipart/form-data,键名 file,上传 PDF,返回 title / author / date / doc_num / confidence。仅支持双层 PDF,不支持纯扫描件、JPG、PNG。

调用示例(Python) #

import requests
BASE = "http://localhost:8000"
HEADERS = {"X-Api-Key": "ytshuju-api-2026"}

# 年度判定(单条)
resp = requests.post(f"{BASE}/year",
    json={"title": "关于召开第三届代表大会的通知", "signing_date": "20241120", "closing_year": "2024"},
    headers=HEADERS)
print(resp.json())  # {'title': '...', 'year': '2024', 'method': '闭幕年', ...}

# 批量年度判定
with open("records.xlsx", "rb") as f:
    resp = requests.post(f"{BASE}/year/batch", files={"file": f},
                         data={"archiving_year": "2024"}, headers=HEADERS)
with open("year_result.xlsx", "wb") as out:
    out.write(resp.content)

错误码说明 #

HTTP 状态码 含义 处理建议
200 成功
400 请求格式错误 / 文件格式不支持 检查参数或文件格式
401 API Key 无效 检查 X-Api-Key 请求头
500 服务器内部错误 查看服务端日志(如 Ollama 未启动)

注意事项 #

  • PDF 要求/extract 仅支持双层 PDF(含文字层)。
  • 编码:所有 JSON 请求使用 UTF-8。
  • 超时:涉及 LLM 的接口建议客户端超时 ≥ 60 秒。
  • 并发:批量接口建议每批 ≤ 500 条。
  • 知识库更新:文档更新后需重启 FastAPI 服务才能生效。
更新 2026年7月30日

您的感觉是什么

  • Happy
  • 常规
  • Sad