背景与痛点:论文写作到底卡在哪
写论文这件事,说到底是把“脑内风暴”翻译成“学术语言”。但真动笔时,90% 的时间都花在下面三件事:
- 思路像毛线团:研究问题、贡献、方法、实验结果搅在一起,不知道先写哪一段。
- 结构似拼图:Introduction 写三页,Related Work 只写三行,自己都觉得比例失调。
- 语言不“顶刊”:明明有创新点,写出来却像实验报告,审稿人一眼秒拒。
传统解决方案——模板+同义词替换——只能缓解“语言”这一环,对“思路”和“结构”基本无能为力。ChatGPT 的出现让“生成”代替“拼凑”成为可能,但裸提示(raw prompt)往往输出“正确的废话”。要让模型真正“写论文”,需要一套面向科研场景的提示词工程。
技术选型:三种提示设计路线对比
| 路线 | 优点 | 缺点 | 适用阶段 |
|---|---|---|---|
| 零样本+通用指令 | 上手快,无需例子 | 容易跑题、口语化 | 头脑风暴 |
| 少样本+静态模板 | 输出格式稳 | 领域稍变就失效 | 初稿填充 |
| 动态链式提示(本文方案) | 分步可控、易注入知识 | 需写脚本维护 | 全周期 |
“动态链式”把一次长生成拆成多轮短生成,每轮只让模型干一件事:选题→大纲→段落→润色。好处是每步都能插“领域知识”和“约束”,且 token 长度可控,方便后续迭代。
核心实现:一条提示词长什么样
高效提示词 = 角色 + 任务 + 上下文 + 格式 + 约束。用“Introduction 段落生成”举例:
角色:你是一位在<领域>有二十年经验的顶刊审稿人。 任务:帮作者写一段 Introduction,突出研究空白。 上下文:已知现有方法 A 精度高但慢,方法 B 快但粗糙。 格式:①研究背景 2 句;②问题陈述 1 句;③方法贡献 3 句;④实验亮点 1 句。 约束:总字数≤180 词;使用主动语态;引用格式采用 IEEE;禁止出现“novel”“first ever”等自夸词。把上面五块拼成 JSON,方便代码自动加载:
{ "role": "顶刊审稿人", "task": "写 Introduction 段落", "context": "方法 A 高精度低效率,方法 B 低精度高效率", "format": { "background": 2, "problem": 1, "contribution": 3, "highlight": 1 }, "constraint": { "max_words": 180, "voice": "active", "citation": "IEEE", "ban_words": ["novel", "first ever"] } }链式流程如下:
- 选题提示 → 输出 3 个可选研究问题
- 选题评估提示 → 让模型按“创新性+可行性”打分,选 Top1
- 大纲提示 → 生成层级标题与每段 1 句主旨
- 段落提示 → 逐段展开,每段一次调用
- 一致性提示 → 把全文喂回模型,检查术语、时态、引用编号
每步都把上轮输出塞进context,形成“滚动式”精炼,既避免超长 prompt,又能保持上下文一致。
代码示例:自动化链式调用
下面给出最小可运行 demo,依赖 openai>=1.0。核心思路:把每步提示模板化 → 调用 → 解析 → 写入 Markdown。
import openai, json, os openai.api_key = os.getenv("OPENAI_API_KEY") ROLE = "You are a veteran researcher in {field}." STEP1_PROMPT = ( ROLE + "\nList 3 research questions about {topic} that are novel and feasible. " "Output in JSON array format: [{\"question\": \"\", \"reason\": \"\"}, ...]" ) def call(messages): resp = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages, temperature=0.3, max_tokens=600 ) return resp.choices[0].message.content def step1_topic(field, topic): prompt = STEP1_PROMPT.format(field=field, topic=topic) content = call([{"role": "user", "content": prompt}]) return json.loads(content) # 解析出选题数组 # 示例运行 if __name__ == "__main__": questions = step1_topic("computer vision", "3D reconstruction") print("Generated questions:", questions)把 5 个步骤依次封装成step1~step5,用 Python 的asyncio可并发跑多段,10 分钟就能产出一篇“骨架”完整的小论文。想换领域?只需改field和topic两个变量。
性能考量:token 花在哪
- 长度:gpt-3.5-turbo 4k 上下文,链式每轮最好≤1k,留足历史回放余量。
- 精度:段落级生成 0.3 temperature 足够;头脑风暴可提到 0.7。
- 成本:按 1k token $0.002 算,一篇 3000 词论文全程调用约 20 次,合计 $0.08,比咖啡便宜。
- 缓存:把“角色+格式”部分做本地模板缓存,只传动态
context,可省 30% 流量。
避坑指南:我们踩过的坑
- 把“禁止自夸”写成“不要出现形容词”,结果模型输出干巴巴,改写成具体禁用词列表后质量回升。
- 一次性塞给模型 5 篇参考文献原文,导致 truncation,后半段引用全丢;改成分段摘要后解决。
- 用中文提示却要求英文输出,模型偶尔中英夹杂;在提示里加“Answer in fluent academic American English”后一致性>95%。
- 忘记给每段加“citation placeholder”,后期手工插引用返工;后来让模型在段落末尾统一输出
[@citation]占位符,排版脚本一次性替换,效率翻倍。
结语:把模板交给你,把创造力留给自己
提示词不是魔法,它只是把“审稿人思维”固化成可复用的脚本。本文的链式模板已经在 GitHub 开源(文末附链接),你可以直接拿去跑第一版。建议你从最小场景——写一段 Related Work——开始改提示、加约束、调顺序,亲手迭代一次,比看十篇教程都管用。
如果你希望零环境配置就把“语音+文字”双通道的 AI 写作助手跑通,不妨顺路体验下从0打造个人豆包实时通话AI动手实验。我亲测把麦克风和浏览器打开,5 分钟就能跟“豆包”语音头脑风暴,它实时出大纲,我直接喊“润色第一段”,网页立刻返回排版好的段落,省得复制粘贴。整套实验把 ASR→LLM→TTS 链路拆成可拖拽模块,改几行参数就能把你刚学会的论文提示词塞进去,让 AI 边说边写,效率翻倍。小白也能跟文档走完,不妨一试。