Prompt 工程技巧¶
一句话说明¶
Prompt 工程就是"会提问的艺术"——同样的 AI 模型,换一种提问方式,回答质量可以天差地别。掌握 Prompt 技巧,让 AI 从"随便回答"变成"精准回答",是生信工程师用好 AI 编程助手的核心技能。
1. 核心概念¶
什么是 Prompt 工程¶
- 定义:Prompt Engineering(提示词工程)是设计和优化给 AI 的输入文本(提示词/指令),让 AI 生成更准确、更有用的输出的技术。
- 白话比方:AI 就像一个超强的实习生,什么都懂一点但不知道你具体要什么。Prompt 工程就是学会"怎么给实习生布置任务"——你说得越清楚,他干得越好;你说得模糊,他就瞎猜。
为什么同样的 AI 不同提问效果差很多¶
| 原因 | 白话解释 |
|---|---|
| AI 没有读心术 | 它只能根据你字面写的内容来推理,你脑子里想的它猜不到 |
| 上下文决定方向 | 就像你去饭馆只说"来一碗面"和"来一碗不要辣的、多放醋的手擀面",结果完全不同 |
| 输出空间太大 | AI 面前有无数种"合理回答",你的 Prompt 就是帮它缩小范围、锁定目标 |
| 角色影响风格 | 告诉 AI "你是生信专家"和不说,回答的专业度差很多 |
2. 基础技巧(五大招)¶
技巧 1:明确指令(Clear & Specific)¶
核心原则:告诉 AI 你具体要什么,而不是给一个模糊的方向。
白话比方:像发外卖订单一样写 Prompt——不要说"给我来点吃的",要说"一份宫保鸡丁,微辣,米饭加量"。
| 坏例子 | 好例子 |
|---|---|
帮我写个 Python 脚本 |
用 Python3 写一个脚本,读取 metaphlan4 的物种丰度表(TSV 格式),过滤掉相对丰度 < 0.01% 的物种,输出过滤后的表格为 CSV 文件。要求有 argparse 参数解析和详细中文注释。 |
解释一下 PCoA |
用中文解释 PCoA(主坐标分析)的原理,假设我是一个只学过高中数学的生物系学生。请用一个日常生活的类比来帮助理解,然后给出在微生物多样性分析中的具体应用场景。 |
技巧 2:提供上下文(Context)¶
核心原则:告诉 AI 背景信息,让它理解你的具体场景。
白话比方:你去医院看病,不能只说"我不舒服",你得说"我肚子痛了三天,吃过什么东西,之前有什么病史"。
| 坏例子 | 好例子 |
|---|---|
我的 LEfSe 结果怎么看 |
我用 LEfSe 比较了 T2D 患者(n=50)和健康对照(n=50)的肠道菌群差异,LDA 阈值设为 2.0。结果发现了 15 个差异显著的分类单元。请帮我解读这个结果:哪些指标最重要?LDA score 代表什么?怎么判断结果的可靠性? |
技巧 3:指定输出格式(Format)¶
核心原则:明确告诉 AI 你想要什么格式的输出。
白话比方:考试时老师说"请用表格作答"和"随便答",学生写出来的东西完全不同。
# 格式指定示例
请按以下格式输出:
## 工具名称
- **用途**:一句话说明
- **输入**:需要什么文件
- **输出**:会产生什么结果
- **常用参数**:列出 3-5 个最常用参数及含义
- **示例命令**:给一个可以直接复制运行的命令
技巧 4:角色设定(System Prompt / Role Playing)¶
核心原则:给 AI 一个身份,它就会从那个身份的角度来回答。
白话比方:你让一个演员演医生,他说话就会像医生;你让他演老师,他就像老师。AI 也一样。
| 坏例子 | 好例子 |
|---|---|
什么是宏基因组 |
你是一位有 10 年经验的宏基因组研究员,同时也是一个擅长用白话教学的老师。请向一个刚入门的生物系学生解释什么是宏基因组分析,包括它和扩增子测序(16S)的区别。每个专业术语都请用括号加白话解释。 |
技巧 5:分步骤思考(Chain of Thought, CoT)¶
核心原则:让 AI "一步一步想",而不是直接给最终答案。
白话比方:就像解数学题要写解题过程一样——你让 AI 写出思考过程,它就不容易犯粗心错误。
两种用法:
1. Zero-shot CoT(最简单,加一句话就行)
请问 Kraken2 和 MetaPhlAn4 在物种注释上各自的优缺点是什么?
哪个更适合低丰度物种的检测?
请一步一步分析,先对比原理,再对比精度,最后给出建议。
2. Few-shot CoT(给示例引导推理过程)
问:Shannon 多样性指数为 2.5,Simpson 指数为 0.85,这个样本的多样性高还是低?
分析过程:
1. Shannon 指数一般范围 1.5-3.5,2.5 属于中等偏上
2. Simpson 指数范围 0-1,越接近 1 多样性越高,0.85 算较高
3. 两个指标一致指向多样性较高
结论:这个样本的微生物多样性处于中高水平。
问:Shannon 指数 1.2,Simpson 指数 0.45,这个样本多样性如何?
请按上面的分析过程回答。
3. 进阶技巧¶
3.1 Few-shot 示例(少样本学习)¶
定义:在 Prompt 里给 AI 几个"标准答案示例",让它模仿着来。
白话比方:就像教小孩写字,你先写几个给他看,他照着写就写得好。不给示例就是"零样本"(Zero-shot),给了就是"少样本"(Few-shot)。
生信场景示例——让 AI 帮你写标准化的工具说明:
请按以下格式描述生信工具:
示例 1:
工具:FastQC
类别:质控
功能:检查测序数据的质量,包括碱基质量分布、GC 含量、接头污染等
输入:FASTQ 文件
输出:HTML 质量报告
示例 2:
工具:Trimmomatic
类别:质控
功能:去除测序接头和低质量碱基,生成干净的 reads
输入:FASTQ 文件
输出:修剪后的 FASTQ 文件
现在请描述:
工具:MetaPhlAn4
3.2 自我反思 / 自我纠错(Reflexion)¶
定义:让 AI 自己检查自己的回答,找出可能的错误并修正。
白话比方:考试做完了再检查一遍——你让 AI "交卷前再检查一下",它真的会发现错误。
请帮我写一个 Python 函数,计算 Shannon 多样性指数。
写完后请自己检查:
1. 公式是否正确(Shannon index = -sum(pi * ln(pi)))
2. 边界情况:如果某个物种丰度为 0 怎么办?log(0) 会不会报错?
3. 输入验证:丰度总和是否为 1?如果不为 1 要不要自动归一化?
4. 给出修正后的最终版本
3.3 思维链(CoT)vs 思维树(ToT)¶
| 对比维度 | 思维链 CoT | 思维树 ToT |
|---|---|---|
| 英文全称 | Chain of Thought | Tree of Thoughts |
| 白话比方 | 解题写过程,一步接一步往下走 | 像下棋一样,每步考虑多种走法,选最好的那个走 |
| 思考方式 | 线性:A → B → C → 答案 | 树状:A 分出 B1/B2/B3,各自往下推,选最优路径 |
| 适用场景 | 大部分逻辑推理、代码编写 | 需要探索多种方案的复杂决策(如实验方案设计) |
| 实际使用频率 | 非常高,日常够用 | 较少,面试知道概念即可 |
ToT 的 Prompt 示例(了解即可):
我要设计一个宏基因组的分析流程。请用三位不同方向的专家来讨论:
- 专家 A:擅长质控和预处理
- 专家 B:擅长物种注释和功能分析
- 专家 C:擅长统计分析和可视化
每位专家先提出自己负责部分的方案,然后互相评审、讨论优缺点,最后综合成一个最优方案。
如果某位专家发现自己的方案有明显问题,就主动退出讨论。
3.4 结构化输出(JSON / Markdown)¶
核心思路:让 AI 的输出直接可以被程序解析或直接贴到文档里。
请将以下宏基因组分析流程的工具信息输出为 JSON 格式:
{
"pipeline_name": "宏基因组标准分析流程",
"steps": [
{
"step": 1,
"name": "质控",
"tools": ["FastQC", "Trimmomatic"],
"input": "raw FASTQ",
"output": "clean FASTQ"
}
]
}
请补充完整后续步骤(去宿主、物种注释、功能注释、多样性分析)。
4. 生信场景实战 Prompt 模板¶
场景 1:让 AI 写生信脚本¶
坏例子:
帮我写个脚本分析菌群数据
问题:不知道要什么语言、什么数据、什么分析、输出什么格式。AI 只能瞎猜。
好例子:
请用 Python3 写一个脚本,完成以下任务:
背景:我有 MetaPhlAn4 输出的物种丰度表(merged_abundance_table.txt),
格式是 TSV,行是物种名(类似 k__Bacteria|p__Firmicutes|...),列是样本名。
需求:
1. 读取该表格,只保留种水平(species level,即含 s__ 的行)
2. 过滤掉在所有样本中最大相对丰度 < 0.01% 的物种
3. 计算每个样本的 Shannon 多样性指数
4. 输出过滤后的丰度表(CSV)和 Shannon 指数表(CSV)
要求:
- 使用 pandas 处理数据
- 用 argparse 做参数解析(输入文件、输出目录、丰度阈值可调)
- 每个关键步骤加中文注释
- 包含异常处理(文件不存在、格式错误等)
场景 2:让 AI 解释代码¶
坏例子:
这段代码什么意思
[粘贴一大段代码]
问题:没说你的水平、想了解到什么深度、哪部分看不懂。
好例子:
我是生信初学者,Python 基础薄弱。请逐行解释下面这段代码的含义。
要求:
1. 每行代码后面加 # 注释,用中文白话解释
2. 遇到专业函数(如 pd.pivot_table),请解释它做了什么,
用一个日常生活的类比来帮助理解
3. 最后用一段话总结整段代码的整体逻辑(做了什么事、输入是什么、输出是什么)
代码:
```python
import pandas as pd
from scipy.spatial.distance import braycurtis
from skbio import DistanceMatrix
from skbio.stats.ordination import pcoa
df = pd.read_csv("species_abundance.tsv", sep="\t", index_col=0)
dm = DistanceMatrix.from_iterable(df.T.values, metric=braycurtis, keys=df.columns)
pc = pcoa(dm)
pc.samples[["PC1","PC2"]].to_csv("pcoa_results.csv")
### 场景 3:让 AI 帮你 debug
**坏例子**:
> 问题:没有代码、没有报错信息、没有环境信息。AI 完全无从下手。
**好例子**:
环境信息: - Python 3.9,conda 环境 bioinfo - pandas 1.5.3, scipy 1.10.1
报错代码(第 23 行出错):
from scipy.spatial.distance import braycurtis
import numpy as np
data = pd.read_csv("abundance.csv", index_col=0)
distances = []
for i in range(len(data.columns)):
for j in range(i+1, len(data.columns)):
d = braycurtis(data.iloc[:, i], data.iloc[:, j])
distances.append(d)
完整报错信息:
ValueError: Input vector should be 1-D. Got shape (150,1).
请: 1. 解释这个报错是什么意思(用白话) 2. 定位是哪一行、哪个变量导致的 3. 给出修复后的代码 4. 解释为什么会出现这个问题,以后怎么避免
### 场景 4:让 AI 解读分析结果
**坏例子**:
> 问题:不知道做的什么分析、比较了什么、样本量多大、有没有做多重校正。
**好例子**:
实验设计: - 分组:T2D 患者(n=50) vs 健康对照(n=50) - 数据:16S rRNA 测序,物种水平丰度表 - 参数:Kruskal-Wallis p < 0.05,LDA score > 2.0
Top 5 结果: | 分类单元 | LDA score | p-value | 富集组 | |----------|-----------|---------|--------| | Bacteroides vulgatus | 4.2 | 0.001 | T2D | | Faecalibacterium prausnitzii | 3.8 | 0.003 | 健康 | | Roseburia intestinalis | 3.5 | 0.008 | 健康 | | Prevotella copri | 3.1 | 0.012 | T2D | | Akkermansia muciniphila | 2.8 | 0.023 | 健康 |
请从以下角度解读: 1. 这些结果有没有生物学意义?(结合已有文献) 2. LDA score 的大小代表什么? 3. 这个分析有什么局限性? 4. 下一步应该做什么验证?
### 场景 5:让 AI 模拟面试
**坏例子**:
> 问题:不知道什么岗位、什么水平、要什么风格。
**好例子**:
你的角色:某基因组学公司的高级生信工程师面试官,风格严谨但友善 我的背景:2026 届应届生,硕士,做过宏基因组方向的毕业课题 (2型糖尿病肠道菌群分析 + 随机森林建模) 岗位:宏基因组方向生信工程师
规则: 1. 一次只问一个问题,等我回答后再问下一个 2. 我回答后,请先点评我的回答(指出好的地方和不足) 3. 如果我回答不上来,给出参考答案 4. 从基础到进阶,共问 8 个问题 5. 问题类型要覆盖:Linux 基础、流程工具、统计方法、项目经验 6. 最后给出总体评价和改进建议
请从第一个问题开始。
---
## 5. AI 编程助手的 Prompt 技巧(Claude Code / OpenCode 专用)
### 5.1 CLAUDE.md / AGENTS.md 的作用
在使用 Claude Code 或 OpenCode 这类 AI 编程助手时,项目根目录的 `CLAUDE.md`(或 `AGENTS.md`)文件就是你给 AI 的"项目说明书"。
**白话比方**:就像你给新来的实习生一份"入职手册"——里面写清楚了项目是干什么的、代码怎么组织的、有什么需要注意的。AI 每次开始工作前都会先看这份手册。
**一个好的 CLAUDE.md 应该包含**:
```markdown
# 项目说明
## 项目背景
- 这是一个宏基因组分析项目
- 研究 2 型糖尿病患者的肠道菌群
## 项目结构
- scripts/ - 分析脚本
- data/ - 输入数据(不要修改)
- results/ - 输出结果
## 技术栈
- Python 3.9, R 4.3
- conda 环境:bioinfo(生信分析)、t2d_ml(机器学习)
## 编码规范
- 所有脚本加详细中文注释
- 使用 argparse 做参数解析
- 输出文件统一放 results/ 目录
## 用户偏好
- 我英语和编程基础薄弱,请用中文解释
- 专业名词请加白话解释
5.2 怎么写好 Rules 文件¶
Rules 文件是给 AI 编程助手设定的"工作守则"。它和 CLAUDE.md 的区别是: - CLAUDE.md:项目级别的上下文信息("这个项目是什么") - Rules:行为规范和偏好("你应该怎么做")
# 工作规则
## 代码风格
- Python 代码遵循 PEP 8
- 变量名使用英文,但注释用中文
- 每个函数写 docstring
## 沟通风格
- 所有解释用中文
- 每个专业名词加括号白话解释
- 用类比帮助理解复杂概念
## 安全规则
- 不要删除 data/ 目录下的原始文件
- 修改脚本前先备份
- 不要安装未经确认的包
## 自主运行
- 收到长任务时直接执行完毕再汇报,不要中途确认
- 遇到小问题自己判断解决,只有重大决策才问我
5.3 @文件引用技巧¶
在 AI 编程助手中,可以用 @文件名 来引用项目中的文件,让 AI 直接看到文件内容:
请查看 @scripts/diversity_analysis.py 这个脚本,
帮我添加 Bray-Curtis 距离矩阵的计算功能。
输入输出格式参考 @scripts/alpha_diversity.py 的风格。
技巧总结:
| 技巧 | 说明 |
|---|---|
| 引用代码文件 | @scripts/xxx.py 让 AI 直接读取文件内容 |
| 引用数据文件 | @data/sample_metadata.tsv 让 AI 了解数据格式 |
| 引用配置文件 | @config.yaml 让 AI 了解项目配置 |
| 引用结果文件 | @results/lefse_output.txt 让 AI 帮你解读结果 |
6. 常见误区¶
误区 1:一次塞太多任务¶
错误做法:
帮我写质控脚本,然后做物种注释,再做多样性分析,最后画图,
还要写一个报告总结所有结果。
问题:任务太多太杂,AI 容易顾此失彼,每个部分都做不好。
正确做法:把大任务拆成小步骤,一步一步来。
误区 2:不给错误信息就让 AI debug¶
错误做法:我的脚本跑不了,帮我修
正确做法:把完整报错信息、相关代码段、环境信息都贴上。
误区 3:盲目信任 AI 的输出¶
问题:AI 可能会"一本正经地胡说八道"(幻觉问题/Hallucination)。
正确做法: - 涉及生物学结论的,一定要查文献验证 - 涉及代码的,一定要实际运行测试 - 涉及统计方法的,确认公式和前提假设是否正确
误区 4:忽略 Prompt 的迭代¶
问题:第一次 Prompt 效果不好就换模型或放弃。
正确做法: - AI 回答不好时,先优化你的 Prompt,加更多细节、换个角度 - 用"追问"来逐步细化:"你说的 XX 能展开讲讲吗?""能给个具体代码示例吗?"
误区 5:用 AI 完全替代自己思考¶
问题:完全复制 AI 的代码和结论,自己不理解原理。
正确做法:AI 是教练/助手,不是替身。核心逻辑要自己理解,面试时别人问你"为什么这样做"你得能答上来。
误区 6:给 AI 过度设限¶
问题:对于 2025+ 的推理模型(如 Claude Opus/Sonnet, GPT-o 系列),仍然使用"请一步一步思考"这种强制 CoT。这些模型内置了推理能力,过度引导反而可能干扰它的最优推理路径。
正确做法:对于推理模型,直接清晰描述任务即可;对于基础模型(如 GPT-3.5),才需要显式 CoT 引导。
7. 面试怎么答¶
Q1:什么是 Prompt 工程?为什么重要?¶
参考答案:
Prompt 工程是设计和优化给大语言模型(LLM)的输入提示的技术。它之所以重要,是因为同一个模型对不同的提示会产生截然不同的输出质量。在生信工作中,好的 Prompt 能让 AI 写出更准确的分析脚本、更清晰的代码解释。核心原则包括:明确具体的指令、提供充分的上下文、指定输出格式、使用角色设定、引导分步思考。
Q2:请解释 Zero-shot、Few-shot 和 Chain-of-Thought 这三种 Prompting 技术。¶
参考答案:
- Zero-shot(零样本):不给任何示例,直接让模型完成任务。适合简单的、模型已经擅长的任务。
- Few-shot(少样本):在 Prompt 中给出几个输入-输出的示例,让模型"照猫画虎"。适合需要特定格式或风格的任务。
- Chain-of-Thought(CoT)(思维链):让模型展示推理过程,而不是直接给最终答案。经典做法是在 Prompt 末尾加"请一步一步思考"。适合需要逻辑推理的复杂任务。
举个生信的例子:让 AI 判断一组统计结果是否显著——Zero-shot 直接问可能答错,Few-shot 给几个例子后答对率提高,CoT 让它写出推理过程后准确率最高。
Q3:你在实际项目中是怎么使用 Prompt 工程的?¶
参考答案:
在我的宏基因组项目中,我使用 AI 编程助手来辅助脚本编写和结果解读。我会在项目根目录维护一个 CLAUDE.md 文件,写清楚项目结构、技术栈和编码规范,这样 AI 每次都能快速理解上下文。
具体使用中,我主要用到三个技巧: 1. 角色设定:让 AI 扮演"生信工程师 + 老师",输出既专业又容易理解 2. 结构化 Prompt:写清楚背景、需求、输出格式、约束条件,避免模糊指令 3. 迭代优化:第一版输出不满意时,针对性地补充约束条件或示例
但我也清楚 AI 有幻觉问题,所以生成的代码一定会实际运行测试,涉及生物学结论的也会查文献交叉验证。
Q4:CoT(思维链)和 ToT(思维树)有什么区别?¶
参考答案:
CoT 是线性推理——像解方程一步接一步往下推导;ToT 是树状探索——每一步生成多个候选方案,评估后选最优的继续往下走,不好的方案可以回溯。
CoT 适合大部分日常推理任务(写代码、做数据分析);ToT 适合需要探索多种可能性的复杂决策(比如设计实验方案、选择分析策略)。
实际工作中 CoT 用得最多。ToT 更多是学术研究中的概念,但它的核心思想——"多方案对比、择优选择"——在设计分析流程时是很有用的思维方式。
Q5:如何避免 AI 产生"幻觉"(Hallucination)?¶
参考答案:
幻觉是指 AI 生成看起来合理但实际错误的内容。避免的方法包括: 1. 提供上下文约束:给 AI 真实数据和背景信息,减少它"瞎编"的空间 2. 要求引用来源:让 AI 在回答中标注依据,比如"请引用具体的工具文档或论文" 3. 交叉验证:AI 生成的代码要实际运行,生物学结论要查文献 4. 自我反思 Prompt:让 AI 检查自己的回答,比如"请检查你的回答中是否有事实错误" 5. 限制范围:与其让 AI 回答宽泛的问题,不如问具体的、可验证的问题
在生信工作中,最实用的防幻觉手段就是:代码一定要跑通、统计结论一定要查公式、生物学发现一定要查文献。
Q6:在 AI 编程助手(如 Claude Code)中,你是怎么组织项目上下文的?¶
参考答案:
我通常用三层上下文管理: 1. CLAUDE.md 文件:放在项目根目录,写清楚项目背景、目录结构、技术栈、编码规范 2. Rules 规则:设定 AI 的行为偏好,比如"用中文注释""不删除原始数据""小问题自主解决" 3. 即时 Prompt:每次具体任务时再补充当前上下文,比如用 @文件名 引用相关代码
这种分层方式让 AI 既有全局视角(项目是什么),又有行为规范(该怎么做),还有即时上下文(当前在做什么)。效果比每次都从头解释好很多。
Q7:Prompt 工程和传统的软件接口设计有什么相似之处?¶
参考答案:
两者都在解决"怎么把需求传达给执行者"的问题: - 接口设计:通过定义函数签名、参数类型、返回值来约束程序行为 - Prompt 工程:通过自然语言的指令、格式要求、角色设定来约束 AI 行为
好的 API 设计讲究输入输出清晰、错误处理完善、文档充分;好的 Prompt 也讲究指令明确、上下文充分、预期输出格式清楚。
随着 AI Agent 的发展,2025 年业界开始用"Context Engineering"(上下文工程)这个更广的概念来描述——不仅是写 Prompt,还包括管理系统提示、对话历史、工具定义、检索信息等所有输入给 AI 的上下文。
8. 延伸阅读¶
| 资源 | 说明 | 链接 |
|---|---|---|
| Prompt Engineering Guide | 最全面的 Prompt 工程教程,持续更新 | promptingguide.ai |
| Anthropic Prompt Engineering 文档 | Claude 官方的 Prompt 最佳实践 | docs.anthropic.com |
| OpenAI Prompt Engineering Guide | GPT 系列的官方 Prompt 指南 | platform.openai.com/docs |
| Coursera: Prompt Engineering for Developers | 吴恩达(Andrew Ng)的免费课程 | coursera.org |
| 论文: Chain-of-Thought Prompting | CoT 原始论文 (Wei et al., 2022) | arxiv.org/abs/2201.11903 |
| 论文: Tree of Thoughts | ToT 原始论文 (Yao et al., 2023) | arxiv.org/abs/2305.10601 |
| Context Engineering Guide | 从 Prompt 到上下文工程的全面指南 | promptingguide.ai/guides/context-engineering-guide |
附:Prompt 速查公式¶
遇到不知道怎么写 Prompt 的时候,套这个公式:
[角色设定] + [背景上下文] + [具体任务] + [输出格式] + [约束条件]
万能模板:
你是 [角色],擅长 [能力]。
背景:[当前项目/任务的上下文信息]
任务:请帮我 [具体要做的事情]
要求:
1. [输出格式]
2. [语言/风格要求]
3. [特殊约束]
示例(如果有的话):
[给一个标准输入输出示例]