
题库系统接入几何生成 API,真正要解决的不是“调用一次接口”,而是让题目稳定经过生成、审核、渲染和回写,并且任何失败都能定位到具体题目和具体阶段。
推荐把接入拆成五个独立模块:
题目适配器 → 生成任务服务 → 审核工作台 → 渲染服务 → 题库资产回写
这样的结构既适合新题实时生成,也适合历史题库的批量补图。
一、先确定 API 在题库中的职责边界
大角几何的 AI 文本生成几何 API 负责把题目文本、LaTeX 或自然语言作图指令转换为静态图及画板数据;生成图片 API 负责把画板数据渲染为 PNG 或 JPG;批量生成 API 负责批量提交、队列调度、状态查询、失败重试和结果汇总。
客户题库仍然负责:
- 题目、章节、知识点和用户体系;
- 原题与生成结果的业务关联;
- 画板数据的长期保存和版本管理;
- 图片的访问控制、转存、CDN 和终端分发;
- 教研审核和发布决策。
边界明确后,接口升级或存储策略变化都不会破坏题库的核心数据模型。
二、推荐的系统架构

不要让 CMS 页面直接持有 API Key 或同步等待 AI 任务完成。凭证应只放在服务端,生成任务应异步执行,前端通过题库自己的任务状态查看进度。
三、题目适配器要输出什么?
题库原始字段通常不能直接等同于 API 输入。适配器应生成一份稳定的内部请求对象,例如:
{
"questionId": "GEO-2026-000123",
"sourceVersion": 4,
"inputType": "text",
"drawingDescription": "画三角形 ABC,AB = AC……不要显示待证结论。",
"output": {
"format": "png",
"width": 1200,
"height": 900,
"background": "white"
},
"idempotencyKey": "GEO-2026-000123-v4-prompt-v2"
}
其中 idempotencyKey 是题库自己的幂等标识,用来防止导入任务重复执行。若当前 API 提供官方幂等参数,可映射使用;若没有,也应在本地任务表中拦截重复请求。
四、任务表如何设计?
建议不要把外部 taskId 直接写进题目主表,而是建立独立任务记录:
| 字段 | 用途 |
|---|---|
| local_job_id | 题库内部任务 ID |
| question_id / source_version | 绑定原题及版本 |
| provider_task_id | API 返回的任务 ID |
| stage / status | 当前阶段和状态 |
| attempt | 重试次数 |
| request_snapshot | 可复现的请求快照 |
| board_data_ref | 画板数据保存位置 |
| render_refs | 一个或多个渲染资源 |
| error_code / error_message | 失败诊断 |
| review_status | 审核结论 |
推荐的状态流转是:
prepared → submitted → generating → pending_review
→ approved → rendering → persisted → published
↘ retryable_failed / manual_required / rejected
业务代码只允许定义好的状态迁移,避免轮询器、审核台和回写任务同时修改同一条记录。
五、如何提交、查询和重试?
接入时以开放平台当前接口文档中的请求字段和批量限制为准。实现逻辑可以保持稳定:
def process(job):
if already_submitted(job.idempotency_key):
return existing_job(job.idempotency_key)
result = submit_to_geometry_api(job.request_snapshot)
save_provider_task_id(job.local_job_id, result.task_id)
def poll(job):
result = query_geometry_task(job.provider_task_id)
if result.is_running:
schedule_next_poll(job)
elif result.is_success:
save_board_data_and_preview(job, result)
move_to_review(job)
else:
classify_error_and_route(job, result)
重试要满足三个条件:错误确实可重试、没有超过本地上限、同一任务不会被两个消费者重复执行。超时、限流和临时服务错误可以采用退避重试;题干矛盾、图片无法识别或数学结果不合格,应修改输入或转人工。

六、审核台应展示哪些信息?
审核人员至少要同时看到:
- 原始题目和原题图;
- 本次使用的作图描述;
- 生成预览和可编辑画板数据;
- 必须出现与禁止出现的信息;
- 历史版本、错误原因和重试记录;
- 通过、修改后通过、驳回和重新生成操作。
如果只展示 PNG,教研发现点名或辅助线问题后,只能重新生成或去别的软件重画。保存画板数据并接入编辑能力,才能在原结果上完成小幅修正。

七、回写题库时不要覆盖旧版本
题目内容改变后,旧图可能已经不再匹配。因此,图片和画板数据应绑定到 question_id + source_version,审核通过后再把新资源设为当前版本。
推荐保留:
asset_id
question_id
source_version
board_data_version
prompt_template_version
review_record_id
render_format / size / style
storage_key / checksum
created_at
图片 URL 是否直接使用、是否转存到自有对象存储,应由题库自己的权限和分发策略决定。返回的图片 URL 不代表大角负责客户终端的鉴权关系。
八、上线前如何验收?
不要只验证 200 状态码。至少覆盖以下测试:
- 同一题重复提交不会产生无法控制的重复资产;
- 任务超时、限流和临时失败能正确恢复;
- 一个批次部分失败时,成功项仍能继续审核;
- 题目更新后,旧图不会误绑定到新版本;
- API Key 不会出现在浏览器、日志和错误页面;
- 画板数据与图片能按题目 ID 完整追溯;
- 人工驳回的结果不会被自动发布任务绕过。
常见问题
应该接单题 API 还是批量 API?
新题录入后即时生成,可使用单题异步链路;历史题库补图、章节级生产和周期性导入更适合批量 API。两种模式最好共用同一套任务表、审核台和资产回写逻辑。
API Key 可以放在前端吗?
不可以。应用级凭证应由后端保管,浏览器只调用题库自己的业务接口。
大角会替题库保存所有业务数据吗?
不会。大角负责几何生成、渲染和结果输出,不维护客户的题目、终端用户与文件之间的业务关系。画板数据应由客户自行保存和管理。
结语
题库系统接入几何生成 API 的关键,是把外部生成任务纳入自身的内容生命周期。只要任务幂等、状态机、审核台、版本绑定和资产回写五个环节清晰,单题试用才能平稳扩展为批量生产。
相关入口:
312



被折叠的 条评论
为什么被折叠?



