Add DeepSeek QQwrite brief workflow
This commit is contained in:
parent
ec1f706d39
commit
dd93e33b12
18
SKILL.md
18
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
|
extract keywords from the manuscript topic or draft, use QQnote-generated
|
||||||
Zotero child notes or paper tables as literature inputs, ask DeepSeek to screen
|
Zotero child notes or paper tables as literature inputs, ask DeepSeek to screen
|
||||||
those candidate notes into strongly related and weakly related papers under
|
those candidate notes into strongly related and weakly related papers under
|
||||||
QQsci's rules, then use those papers to improve positioning, introduction
|
QQsci's rules, ask DeepSeek to draft a structured QQwrite brief from the
|
||||||
logic, comparison, novelty framing, and citations.
|
screened papers, then have QQsci check the brief before passing it to QQwrite.
|
||||||
|
|
||||||
## Core stance
|
## 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/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/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/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/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/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 |
|
| [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
|
- `weakly related`: same direction, adjacent material family, same
|
||||||
characterization logic, similar device architecture, or useful writing
|
characterization logic, similar device architecture, or useful writing
|
||||||
pattern.
|
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.
|
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.
|
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
|
`references/word-citation-comments.md` and add native Word comments that
|
||||||
contain DOI strings only.
|
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.
|
paper only because the title seems similar.
|
||||||
|
|
||||||
## Comparative pre-review workflow
|
## Comparative pre-review workflow
|
||||||
|
|
|
||||||
|
|
@ -127,8 +127,9 @@ QQsci and then QQwrite:
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
If the output will feed QQwrite, QQsci should convert the screened papers into a
|
If the output will feed QQwrite, ask DeepSeek to generate the `qqwrite_brief`
|
||||||
`qqwrite_brief`-style section plan rather than passing raw notes directly.
|
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
|
## Strong vs weak relation rules
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -32,7 +32,10 @@ Recommended handoff:
|
||||||
|
|
||||||
1. QQsci extracts claims, evidence, related papers, target-journal positioning,
|
1. QQsci extracts claims, evidence, related papers, target-journal positioning,
|
||||||
and package risks.
|
and package risks.
|
||||||
2. QQwrite uses the selected template and QQsci's structured outputs to draft or
|
2. DeepSeek generates a `qqwrite_brief` draft from screened papers and author
|
||||||
format the manuscript.
|
evidence.
|
||||||
3. QQsci audits the resulting package again against figures, SI, and strong
|
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.
|
related papers.
|
||||||
|
|
|
||||||
|
|
@ -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:
|
def main() -> int:
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("--draft", required=True, help="UTF-8 text or markdown draft path")
|
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["target_journal"] = args.target_journal
|
||||||
profile["extra_notes"] = args.extra_notes
|
profile["extra_notes"] = args.extra_notes
|
||||||
profile["screening_prompt"] = build_prompt(profile)
|
profile["screening_prompt"] = build_prompt(profile)
|
||||||
|
profile["brief_prompt"] = build_brief_prompt(profile)
|
||||||
|
|
||||||
data = json.dumps(profile, ensure_ascii=False, indent=2)
|
data = json.dumps(profile, ensure_ascii=False, indent=2)
|
||||||
if args.json_out:
|
if args.json_out:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue