From ec1f706d39ff5a4c949e81f111db4f97721ee714 Mon Sep 17 00:00:00 2001 From: qyh15 Date: Wed, 27 May 2026 21:57:43 +0800 Subject: [PATCH] Require DeepSeek for literature screening --- SKILL.md | 13 +++--- references/configuration.md | 8 +++- references/literature-routing.md | 62 +++++++++++++++++++++++++++ scripts/material_literature_router.py | 16 +++++-- 4 files changed, 88 insertions(+), 11 deletions(-) diff --git a/SKILL.md b/SKILL.md index b6ec486..e1c05b8 100644 --- a/SKILL.md +++ b/SKILL.md @@ -14,9 +14,10 @@ structure, properties, mechanism, device/application performance, and limits. It can also route through the user's Zotero/Obsidian literature-note workflow: extract keywords from the manuscript topic or draft, use QQnote-generated -Zotero child notes or paper tables as literature inputs, separate strongly -related and weakly related papers inside QQsci, then use those papers to improve -positioning, introduction logic, comparison, novelty framing, and citations. +Zotero child notes or paper tables as literature inputs, ask DeepSeek to screen +those candidate notes into strongly related and weakly related papers under +QQsci's rules, then use those papers to improve positioning, introduction +logic, comparison, novelty framing, and citations. ## Core stance @@ -123,8 +124,10 @@ DeepSeek/AwesomeGPT Zotero notes generated by QQnote or equivalent sources. 2. If the target journal is absent, ask the author for it. If they want advice, open `references/journal-positioning.md` and recommend several tiers. 3. Open `references/literature-routing.md` and perform QQsci's own relevance - screening against the existing notes or QQnote-generated comparison tables. -4. Screen notes into: + routing against the existing notes or QQnote-generated comparison tables. + The large-scale strong/weak paper screening pass must be run by DeepSeek when + DeepSeek is configured. +4. Ask DeepSeek to screen notes into: - `strongly related`: same material, same material family plus same device, same mechanism, same target journal/neighbor journal, or direct benchmark. - `weakly related`: same direction, adjacent material family, same diff --git a/references/configuration.md b/references/configuration.md index 77c2f65..a0eb938 100644 --- a/references/configuration.md +++ b/references/configuration.md @@ -80,7 +80,8 @@ for QQsci's manuscript reasoning. QQsci owns: - manuscript keyword extraction -- strong/weak related-paper screening +- DeepSeek screening prompts, rules, and review of strong/weak related-paper + results - target-journal positioning - comparative review against strong papers - submission-package audit @@ -93,4 +94,7 @@ QQnote owns: - generating paper comparison tables from Zotero items - optional QQnote note-state maintenance when explicitly requested -QQnote output is an input to QQsci, not the decision engine. +DeepSeek owns the large-scale screening pass over QQnote/Zotero/Obsidian note +candidates when QQsci needs strong/weak related papers. QQnote output is the +candidate corpus; QQsci owns the criteria, prompt, sanity check, and downstream +writing brief. diff --git a/references/literature-routing.md b/references/literature-routing.md index 5579031..a2730e3 100644 --- a/references/literature-routing.md +++ b/references/literature-routing.md @@ -44,6 +44,15 @@ Return a query pack: ## DeepSeek screening brief +Strong/weak related-paper screening must be executed with DeepSeek when a +usable DeepSeek configuration is available. QQsci prepares the rules and inputs; +DeepSeek reads the QQnote/Zotero/Obsidian note candidates and returns the +screened set. + +Do not ask Codex to silently classify a large note library from memory. Codex may +do a small sanity check after DeepSeek returns results, but DeepSeek is the +screening engine for the note set. + Give DeepSeek a compact, structured task: ```text @@ -68,6 +77,59 @@ Screen the notes and return: 4. Do not include papers only because of a broad keyword match. ``` +## DeepSeek output contract + +Require DeepSeek to return structured Markdown or JSON that can be handed to +QQsci and then QQwrite: + +```json +{ + "keyword_pack": { + "must_match": [], + "should_match": [], + "context": [], + "exclude": [] + }, + "strongly_related_papers": [ + { + "title": "", + "year": "", + "journal": "", + "doi": "", + "zotero_key": "", + "relation_type": "", + "usable_for": [], + "why_strong": "", + "notes_evidence": "" + } + ], + "weakly_related_papers": [ + { + "title": "", + "year": "", + "journal": "", + "doi": "", + "zotero_key": "", + "relation_type": "", + "usable_for": [], + "why_weak": "", + "notes_evidence": "" + } + ], + "rejected_near_matches": [ + { + "title": "", + "doi": "", + "reason": "" + } + ], + "missing_or_uncertain_metadata": [] +} +``` + +If the output will feed QQwrite, QQsci should convert the screened papers into a +`qqwrite_brief`-style section plan rather than passing raw notes directly. + ## Strong vs weak relation rules Strongly related: diff --git a/scripts/material_literature_router.py b/scripts/material_literature_router.py index 92ccffd..82cf96a 100644 --- a/scripts/material_literature_router.py +++ b/scripts/material_literature_router.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 """Create a manuscript keyword pack and DeepSeek screening prompt. -This helper is intentionally local-config only. It does not call DeepSeek or -Zotero by itself; it prepares a reproducible prompt that the skill can use with -the user's configured note-search route. +This helper is intentionally local-config only. It prepares a reproducible +DeepSeek prompt for the required screening pass over QQnote/Zotero/Obsidian +literature notes. It does not call DeepSeek or Zotero by itself. """ from __future__ import annotations @@ -81,8 +81,16 @@ Manuscript profile: Return: 1. Strongly related papers: same material, same material family plus same device, same mechanism, direct benchmark, or same target-journal positioning. 2. Weakly related papers: same direction, adjacent material family, same characterization logic, similar device architecture, or useful writing pattern. -3. For each paper: title, year, journal, Zotero key if present, relation type, useful claim/evidence, and why it matters for the manuscript. +3. For each paper: title, year, journal, DOI, Zotero key if present, relation type, usable_for, useful claim/evidence, and why it matters for the manuscript. 4. Reject title-only broad keyword matches. +5. Return rejected near matches and missing/uncertain metadata separately. + +Output JSON keys: +- keyword_pack +- strongly_related_papers +- weakly_related_papers +- rejected_near_matches +- missing_or_uncertain_metadata """