证据限制的商业化评估:确定性检索,六阶段LLM工作流程
中文 · Live application · Documentation · Case study
An evidence-constrained workflow for assessing research commercialization: collect sources, analyse technical maturity, patents and market signals, then deliver a cited report with an auditable scorecard.
Built with Python, CrewAI, FastAPI and a build-free JavaScript client. The production system deliberately limits autonomy: retrieval is deterministic, and six LLM stages reason over validated evidence. Supplementary Tool Calling is experimental and remains disconnected from production.
Market scorecards disclose unverified estimate comparability. This makes the historical cap's limitation visible; it does not fix or validate the underlying market-scoring policy. New validated results also show pre/post cap scores and the actual deduction; historical missing receipts cannot be reconstructed. The 20-source inspection still establishes no fully comparable real pair; the scoring policy is not yet validated.
A report supports research triage; it is not technical, legal, regulatory, investment or freedom-to-operate due diligence. Valid citation IDs do not establish that a source entails a claim.
Topic / PDF + optional Decision Context
│
Deterministic retrieval → validation → frozen source registry
│
┌─────────┼─────────┐
Academic Patent Market
└─────────┼─────────┘
Writer
│
Reviewer
│
Scorer → deterministic weighted total
│
Shared run artifacts + terminal truth
│
FastAPI / browser / CLI / recovery
The three evidence specialists run in parallel. Writer, Reviewer and Scorer follow in sequence. A stage is not a promise of exactly one model request. See the code map and contribution rules before changing orchestration.
| Boundary | Implemented behaviour |
|---|---|
| Evidence | Source-native clients plus web search; URL/DOI checks, provenance tiers, deduplication and registered source IDs |
| Output | Pydantic contracts, guardrails, deterministic scoring and bounded Reviewer corrections |
| Quality | Non-blocking precision-first claim/citation screens; unavailable checks are distinct from passes |
| Runtime | Subprocess isolation, content-addressed checkpoints, immutable recovery children and write-once terminal records |
| Cost | Shared run/PDF admission, persistent daily operator-funded quota and complete/lower-bound/unavailable usage states |
| Observability | Optional redacted OpenTelemetry/OpenInference traces to Phoenix or another OTLP collector |
| Delivery | FastAPI, vanilla HTML/CSS/ES modules, Docker and Railway; one application replica |
The frozen baseline contains 10 topics × 3 live repetitions:
| Check | Observed |
|---|---|
| End-to-end completion | 30/30 |
| TRL calibration | 26/30 |
| Weighted formula correctness | 30/30 |
| Complete report structure | 30/30 |
| Unsupported numeric lines | 0 across 30 reports |
These are different checks, not a combined accuracy score. Expected TRL ranges were adjusted after early observations, so this is not independent held-out validation. The uncited-numeric proxy does not measure all hallucinations. Seven of ten topics met their TRL range in all three runs.
Other completed evidence includes:
DEFER and answered MAYBE to reuse;
neither checked external sources. This does not establish product adoption.Protocols, source artifacts and limitations are linked in the current evidence ledger.
The bounded execution kernel, adapters, accounting, source-locked review and unseen-test harnesses exist. Production remains phase-1 zero-call shadow mode: gap signals may be recorded, but they do not add sources or paid searches.
The latest Adaptive Role-Gap v8 passed its AC development gates but failed three of six gates on AD unseen evaluation: routing 5/8, closure-role value 2/7, and only +1 coverable case over the anchor. V8 is sealed, AC/AD are consumed, and production integration is not authorized by these results.
The version-by-version ledger keeps v1–v8 failures distinct from transport and mechanical successes. A later method needs a new protocol and fresh cohorts, not tuning on the failed unseen set.
A separate saved-evidence follow-up prototype exercises bounded lookup/read tools and content-bound evidence receipts. Its scripted demo remains offline; a separately preregistered Qwen canary uses only two synthetic controls and a six-request/USD 0.10 allowance. It neither adds sources nor exposes a paid endpoint; reader benefit and production integration remain unestablished.
Its first native Qwen canary accounted three requests but failed the read-to-answer closure gate; the second case was not run. Native transport success is not a completed feature.
A separate offline stage policy reserves read/finalization opportunities by narrowing advertised and executable actions. It keeps the same limits and frozen runner; no new live success or production follow-up is claimed. Its separate stage-aware transport preserves final-only intent at the HTTP/journal seam; this is offline contract work, not a new native-model observation or production integration. A separate canary protocol prepares new synthetic cases; its default identity check makes no provider call. Its subsequent live batch delivered saved text after native lookup/read, but failed final JSON-envelope parsing. Three requests were accounted and the second case was not run; this is progress in evidence delivery, not successful closure or production use. A new final-only JSON candidate uses fresh synthetic controls and preserves strict local validation; it does not rewrite the failed batch or enable a production follow-up endpoint. Its JQ validation returned valid JSON after a zero-hit lookup, but failed the required read gate; the second case was unrun. The observed blocker was saved-source discovery; final JSON compatibility after a successful saved-text read was not tested in JQ. Neither observation permits claiming closure or retrying the frozen batch.
The next offline catalog candidate exposes bounded saved titles/IDs before one read, without changing literal lookup or issuing citations from metadata. A separate catalog-native wire contract adapts its 32-ID declaration without changing frozen transports. It is tested with intercepted HTTP, not a live model. A separate CQ synthetic canary now has its own frozen inputs and bounded runner; it is not production routing. Scripted controls do not establish Qwen selection quality or reader benefit. The separate single CQ live batch then passed both invented controls in four requests: actual read plus cited final JSON, and actual missing-text read plus abstention. This is bounded native closure evidence, not general semantic accuracy or production enablement.
Use Python 3.11 or 3.12 for the CI-tested environment and uv. Dependency installation needs network access; the default test suite does not call providers.
git clone https://github.com/shuxiachai/academic-commercialization-agent.git
cd academic-commercialization-agent
uv sync
Copy .env.example to .env. For Qwen, set these values and
replace the placeholders locally; do not commit or share keys:
LLM_PROVIDER=qwen
DASHSCOPE_API_KEY=your-key
QWEN_MODEL=qwen3.5-plus
QWEN_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1
TAVILY_API_KEY=your-search-key
Choose the endpoint matching your operator account/region. This project's
browser BYOK default uses the China-region endpoint. With multiple LLM keys
present, set LLM_PROVIDER explicitly; otherwise auto-selection is
DeepSeek → Qwen → Anthropic → OpenAI. Tavily takes precedence over Serper
when both search keys are present. Remove unused placeholder keys.
uv run uvicorn api.main:app --reload
# Browser: http://localhost:8000
# Alternative CLI (starts real provider work):
uv run academic_agent --topic "solid-state batteries for electric vehicles"
Real analysis incurs provider usage. Duration is provider-bound: observed Qwen completions include 306 and 885 seconds, not a promised three-minute SLA. See the operating guide for HTTP endpoints, output files, Docker, access codes, BYOK, tracing and recovery.
Run URLs carry 128 bits of randomness and act as read capabilities: anyone with the full URL can read that run until retention removes it. Code-owned mutation additionally requires its owner/admin code; ownerless BYOK runs have no second server-side identity. Do not publish private run URLs.
Before public deployment, configure access control, paid-operation limits, retention and persistent storage. PDF extraction is a paid operation too. Use one application replica / one Uvicorn worker: in-memory ownership and file-backed quotas are not a distributed queue. See deployment controls and checkpoint recovery.
The pre-c
暂无开放 Issues,或尚未同步最近议题。