From dd93e33b1232c11151fa4c87e00ee4cc27ac6a88 Mon Sep 17 00:00:00 2001 From: qyh15 Date: Wed, 27 May 2026 22:44:17 +0800 Subject: [PATCH] Add DeepSeek QQwrite brief workflow --- SKILL.md | 18 ++-- references/literature-routing.md | 5 +- references/qqwrite-brief.md | 122 ++++++++++++++++++++++++++ references/writing-templates.md | 9 +- scripts/material_literature_router.py | 41 +++++++++ 5 files changed, 184 insertions(+), 11 deletions(-) create mode 100644 references/qqwrite-brief.md diff --git a/SKILL.md b/SKILL.md index e1c05b8..038459f 100644 --- a/SKILL.md +++ b/SKILL.md @@ -16,8 +16,8 @@ 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, 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. +QQsci's rules, ask DeepSeek to draft a structured QQwrite brief from the +screened papers, then have QQsci check the brief before passing it to QQwrite. ## Core stance @@ -46,6 +46,7 @@ logic, comparison, novelty framing, and citations. | [references/comparative-review-audit.md](references/comparative-review-audit.md) | User wants a Nature-response-like pre-review based on comparison with strongly related papers, including missing experiments, format, figures, spelling, and terminology consistency | | [references/submission-package-audit.md](references/submission-package-audit.md) | User provides or mentions a submission package with manuscript, Supporting Information, highlights, cover letter, figures, SI figures, TOC, graphical abstract, or related Word/PPT files | | [references/literature-routing.md](references/literature-routing.md) | User wants Zotero/Obsidian/DeepSeek note search, strong/weak related-paper screening, keyword extraction, or literature-grounded rewriting | +| [references/qqwrite-brief.md](references/qqwrite-brief.md) | DeepSeek screening results need to be converted into a QQwrite writing brief or checked before QQwrite consumes them | | [references/word-citation-comments.md](references/word-citation-comments.md) | User wants citation insertion guidance in Word, reference placement, DOI-only comments, or annotated `.docx` citation suggestions | | [references/zotero-obsidian-subskill.md](references/zotero-obsidian-subskill.md) | User asks QQsci to obtain or refresh literature-note inputs through QQnote, including Zotero child-note summaries or paper comparison tables | | [references/configuration.md](references/configuration.md) | You need DeepSeek, Zotero, Obsidian, QQnote inheritance, config precedence, secret handling, or wrapper-script usage | @@ -133,14 +134,19 @@ DeepSeek/AwesomeGPT Zotero notes generated by QQnote or equivalent sources. - `weakly related`: same direction, adjacent material family, same characterization logic, similar device architecture, or useful writing pattern. -5. Use strongly related papers for novelty, gap, introduction, benchmark, and +5. Ask DeepSeek to generate a `qqwrite_brief` from the screened papers when the + next step is QQwrite drafting or template-driven `.docx` generation. Open + `references/qqwrite-brief.md` for the schema and checks. +6. QQsci checks the brief for required fields, DOI preservation, obvious + overclaims, weak-paper misuse, and missing author evidence before handoff. +7. Use strongly related papers for novelty, gap, introduction, benchmark, and citation placement. -6. Use weakly related papers for broader field framing, mechanism language, +8. Use weakly related papers for broader field framing, mechanism language, section architecture, and cautious comparison. -7. For Word manuscript citation suggestions, open +9. For Word manuscript citation suggestions, open `references/word-citation-comments.md` and add native Word comments that contain DOI strings only. -8. Return a source map before or with the manuscript revision. Never cite a +10. Return a source map before or with the manuscript revision. Never cite a paper only because the title seems similar. ## Comparative pre-review workflow diff --git a/references/literature-routing.md b/references/literature-routing.md index a2730e3..07d2953 100644 --- a/references/literature-routing.md +++ b/references/literature-routing.md @@ -127,8 +127,9 @@ QQsci and then QQwrite: } ``` -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. +If the output will feed QQwrite, ask DeepSeek to generate the `qqwrite_brief` +draft from the screened papers, then let QQsci validate and clean the brief +before QQwrite consumes it. See `qqwrite-brief.md`. ## Strong vs weak relation rules diff --git a/references/qqwrite-brief.md b/references/qqwrite-brief.md new file mode 100644 index 0000000..bb2be32 --- /dev/null +++ b/references/qqwrite-brief.md @@ -0,0 +1,122 @@ +# QQwrite Brief + +Use this file when DeepSeek screening results need to become an input package +for QQwrite. + +## Ownership + +DeepSeek may generate the `qqwrite_brief` draft from: + +- the manuscript profile +- author evidence and figure notes +- QQnote/Zotero/Obsidian note candidates +- DeepSeek-screened strong/weak related papers +- target journal and template choice + +QQsci owns: + +- the brief schema +- the prompt that asks DeepSeek to generate the brief +- schema validation +- obvious overclaim and DOI-preservation checks +- handoff to QQwrite + +QQwrite consumes the brief. QQwrite should not re-screen literature or decide +which papers are strong/weak. + +## Required Schema + +Ask DeepSeek to return JSON whenever possible: + +```json +{ + "target_journal": "", + "article_type": "", + "recommended_word_template": "afm/article-template.docx", + "material_system": "", + "application": "", + "central_claim": "", + "novelty_gap": "", + "design_principle": "", + "key_author_evidence": [ + { + "evidence": "", + "source": "manuscript / figure / SI / author note", + "supports": "" + } + ], + "strong_related_papers": [ + { + "doi": "", + "title": "", + "usable_for": [], + "must_cite_near": [], + "reason": "" + } + ], + "weak_related_papers": [ + { + "doi": "", + "title": "", + "usable_for": [], + "reason": "" + } + ], + "section_plan": { + "Title": [], + "Abstract": [], + "Introduction": [], + "Results and Discussion": [], + "Conclusion": [], + "Experimental Section": [] + }, + "claim_reference_map": [ + { + "claim": "", + "author_evidence": "", + "supporting_dois": [], + "writing_location": "", + "status": "supported / needs author evidence / citation only / do not claim" + } + ], + "must_not_overclaim": [], + "missing_inputs": [], + "qqwrite_instructions": [] +} +``` + +## DeepSeek Prompt + +Give DeepSeek the screened-paper JSON and ask: + +```text +Using the screened strong/weak related papers and the author-provided manuscript +evidence, generate a QQwrite writing brief. + +Rules: +1. Do not invent experimental results, mechanisms, references, DOI values, or + figure numbers. +2. Strong papers may define novelty, direct comparison, benchmark, and citation + placement. +3. Weak papers may support field framing, mechanism language, or writing + structure, but must not be treated as direct benchmark papers. +4. Every major claim must include author evidence, supporting DOI, or a clear + status explaining that it still needs evidence. +5. Preserve DOI strings exactly as provided. +6. Return JSON only, following the QQwrite brief schema. +``` + +## QQsci Check Before Handoff + +Before passing the brief to QQwrite, check: + +- required top-level fields are present +- `central_claim` is backed by author evidence +- every DOI came from the screened output or user input +- weak papers are not used as direct benchmark unless justified +- `must_not_overclaim` and `missing_inputs` are not empty when evidence is + incomplete +- `recommended_word_template` points to a QQwrite-owned template + +If the brief fails checks, mark the issue in `missing_inputs` or ask DeepSeek to +repair only the failed fields. Do not let QQwrite consume a malformed brief. diff --git a/references/writing-templates.md b/references/writing-templates.md index 43b4c10..db0bf9b 100644 --- a/references/writing-templates.md +++ b/references/writing-templates.md @@ -32,7 +32,10 @@ Recommended handoff: 1. QQsci extracts claims, evidence, related papers, target-journal positioning, and package risks. -2. QQwrite uses the selected template and QQsci's structured outputs to draft or - format the manuscript. -3. QQsci audits the resulting package again against figures, SI, and strong +2. DeepSeek generates a `qqwrite_brief` draft from screened papers and author + evidence. +3. QQsci validates the brief and passes it to QQwrite. +4. QQwrite uses the selected template and checked brief to draft or format the + manuscript. +5. QQsci audits the resulting package again against figures, SI, and strong related papers. diff --git a/scripts/material_literature_router.py b/scripts/material_literature_router.py index 82cf96a..268a0aa 100644 --- a/scripts/material_literature_router.py +++ b/scripts/material_literature_router.py @@ -94,6 +94,46 @@ Output JSON keys: """ +def build_brief_prompt(profile: dict[str, object]) -> str: + return f"""After screening the literature notes, generate a QQwrite writing brief for this materials-science manuscript. + +Manuscript profile: +- Material/system terms: {', '.join(profile.get('exact_or_chemical_terms', [])) or 'xxx'} +- Material family: {', '.join(profile.get('material_family_hints', [])) or 'xxx'} +- Device/application: {', '.join(profile.get('device_application_hints', [])) or 'xxx'} +- Target journal or tier: {profile.get('target_journal') or 'xxx'} +- Extra author notes: {profile.get('extra_notes') or 'xxx'} + +Use the screened strongly_related_papers and weakly_related_papers as input. + +Rules: +1. Do not invent experimental results, mechanisms, references, DOI values, or figure numbers. +2. Strong papers may define novelty, direct comparison, benchmark, and citation placement. +3. Weak papers may support field framing, mechanism language, or writing structure, but must not be treated as direct benchmark papers. +4. Every major claim must include author evidence, supporting DOI, or a clear status explaining that it still needs evidence. +5. Preserve DOI strings exactly as provided. +6. Return JSON only. + +Output JSON keys: +- target_journal +- article_type +- recommended_word_template +- material_system +- application +- central_claim +- novelty_gap +- design_principle +- key_author_evidence +- strong_related_papers +- weak_related_papers +- section_plan +- claim_reference_map +- must_not_overclaim +- missing_inputs +- qqwrite_instructions +""" + + def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--draft", required=True, help="UTF-8 text or markdown draft path") @@ -108,6 +148,7 @@ def main() -> int: profile["target_journal"] = args.target_journal profile["extra_notes"] = args.extra_notes profile["screening_prompt"] = build_prompt(profile) + profile["brief_prompt"] = build_brief_prompt(profile) data = json.dumps(profile, ensure_ascii=False, indent=2) if args.json_out: