Back to case study
Document review sandbox

AI Document Review Agent v2.0

Full-stack document review: MinerU parses the PDF, a LangChain v1.1 + DeepSeek pipeline flags grammar issues and over-definitive language, streams each onto the PDF at its bounding box, with custom rules and human-in-the-loop review.

A real, working tool — not a replay. Paste Chinese text: the Definitive Language (绝对化表述) detector runs client-side instantly, and the "Deep review with DeepSeek" button calls a live server-side route for grammar/spelling + deeper review.

LangChainFastAPIReactDeepSeekMinerUSSE
AI Document Review Agent v2.0

Why this local version exists

The 绝对化表述 layer runs entirely client-side (no key, instant). The deep-review button hits a server-side route running DeepSeek live — the API key stays on the server, input is length-capped, and requests are rate-limited per IP.

Live · runs in your browser

Definitive-language detector — try it live

Type or paste Chinese text. This runs the project's real Definitive Language (绝对化表述) rule logic in your browser — no server, no canned data — and flags over-committal wording with a softer rewrite. Grammar & spelling detection stays on the LLM backend and isn't faked here.

Your text

Highlighted

甲方保证一定为乙方提供最优质的服务,并承诺在任何情况下都完全满足乙方的所有要求。本协议一经签署绝对不可变更,乙方必须无条件接受上述全部条款。

Detected · 绝对化表述

9 issues · risk 高
保证char 2

Using "保证" in a formal promise context is over-committal language and may create obligations beyond what was intended.

Soften to: 尽力 / 力争

一定char 4

Using "一定" in a formal promise context is over-committal language and may create obligations beyond what was intended.

Soften to: 通常 / 原则上

任何char 22

Using "任何" in a formal promise context is over-committal language and may create obligations beyond what was intended.

Soften to: 相关 / 多数

完全char 28

Using "完全" in a formal promise context is over-committal language and may create obligations beyond what was intended.

Soften to: 基本上 / 尽可能

所有char 35

Using "所有" in a formal promise context is over-committal language and may create obligations beyond what was intended.

Soften to: 相关 / 多数

绝对char 47

Using "绝对" in a formal promise context is over-committal language and may create obligations beyond what was intended.

Soften to: (建议删去)/ 尽量

必须char 56

Using "必须" in a formal promise context is over-committal language and may create obligations beyond what was intended.

Soften to: 应 / 宜

无条件char 58

Using "无条件" in a formal promise context is over-committal language and may create obligations beyond what was intended.

Soften to: 在约定条件下

全部char 65

Using "全部" in a formal promise context is over-committal language and may create obligations beyond what was intended.

Soften to: 大部分 / 相关

The 绝对化表述 layer above runs entirely client-side, instantly. For grammar, spelling and deeper review, run the real DeepSeek pass below — the same LLM the production system uses.

Deep review with DeepSeek (live API)

Calls a server-side route that runs DeepSeek with a JSON-structured review prompt — the API key stays on the server, input is length-capped, and requests are rate-limited. This is the real LLM pass, not a replay.

What to try

Type/paste Chinese text and watch the 绝对化表述 detector flag terms live, with a softer rewrite.

Click "Run DeepSeek review" to call the real LLM for grammar/spelling + definitive-language issues.

Edit the text and re-run — both layers respond to whatever you actually type.

What this demo proves

You use LangChain v1.1 correctly — provider-based model init, PydanticOutputParser, framework-level HITL.

You can ship full-stack: FastAPI + React/FluentUI + SQLite + SSE, front to back.

You ground every issue to a real PDF location with a robust 3-level bounding-box fallback.

Stack

FastAPI + React/FluentUI · LangChain v1.1 + DeepSeek · MinerU · SQLite

Issue types

Grammar & Spelling (低) + Definitive Language (高) + custom rules

Best signal

Real full-stack LangChain v1.1 system with HITL + bbox grounding