跳转至

extract-demo

extract-demo 是一个把文章或新闻交给 LLM 做结构化提取的小服务,典型用例包括态度(stance)识别和情感评分。

https://github.com/CNSeniorious000/extract-demo

服务通常包含两个端点:/classify(给出整体立场与情绪)和 /extract(根据预定义 schema 抽取实体或论点)。每次模型返回会先做 JSON block 抽取并交给 Pydantic 校验,必要时回退或返回诊断信息,尽量避免 hallucination。

防止模型跑偏

我把 prompt 和输出 schema 明确绑定(Jinja 模板 + Pydantic),并在服务端做 token 限制与重试,这能显著降低返回格式或内容的异常。

相关:

  • promplate:用于模板化 prompt 的库。
  • llm-web-reader:抓取与清洗网页内容的工具,常和本服务配合使用。

这是把非结构化文本变成可直接消费结构化数据的一个原型,适合做 RAG 的前处理或快速验证。

深入洞见

extract-demo 的实现清晰地遵循“模板(Jinja)→ LLM → JSON 抽取 → Pydantic 校验”的稳健管线:src/templates/classify.j2 强制模型返回符合 schema 的 JSON,后端使用 find_json_blocks 提取 JSON 块并用 Pydantic 的 model_validate_json 验证输出。这样的设计显著降低了 hallucination 造成格式错乱的风险,并把错误恢复和诊断(返回错误信息)作为标准流程的一部分。

参考源码:src/templates/classify.j2(输出模板) · src/api.py(parse & validate via Pydantic)