《提问的智慧》
来自于 github 的 《提问的智慧》
教你如何做一个“值得被帮助的人”。 当你按照这套逻辑提问时,你不仅仅是在索取答案,你也是在为社区贡献一个高质量的技术问答案例。
《提问的智慧》辅助工具
辅助工具,保存成 html 格式直接打开
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>提问的智慧 - 构造器</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
body {
font-family: 'Courier New', Courier, monospace;
background-color: #1e1e1e;
color: #d4d4d4;
}
.input-group label {
display: block;
margin-bottom: 0.5rem;
color: #9cdcfe;
font-weight: bold;
}
.input-field {
width: 100%;
padding: 0.5rem;
background-color: #252526;
border: 1px solid #3c3c3c;
color: #d4d4d4;
margin-bottom: 1rem;
border-radius: 4px;
}
.input-field:focus {
outline: none;
border-color: #007acc;
}
.btn {
background-color: #0e639c;
color: white;
padding: 0.5rem 1rem;
border: none;
cursor: pointer;
transition: background 0.2s;
}
.btn:hover {
background-color: #1177bb;
}
.warning-box {
background-color: #4d0f0f;
border-left: 4px solid #f44336;
padding: 10px;
margin-bottom: 15px;
display: none;
}
pre {
background-color: #101010;
padding: 1rem;
overflow-x: auto;
border: 1px solid #333;
}
</style>
</head>
<body class="p-6 max-w-4xl mx-auto">
<header class="mb-8 border-b border-gray-700 pb-4">
<h1 class="text-3xl font-bold text-green-500 mb-2">> 提问的智慧构造器</h1>
<p class="text-gray-400">基于 ESR《提问的智慧》。不要做一个伸手党,用正确的方式提问。</p>
</header>
<!-- 警告区域 -->
<div id="stupidQuestionWarning" class="warning-box">
<h3 class="font-bold text-red-400">⚠ 警告:检测到低效提问特征</h3>
<p id="warningText" class="text-sm text-gray-300"></p>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<!-- 输入表单 -->
<div>
<div class="input-group">
<label>1. 标题 (Subject)</label>
<p class="text-xs text-gray-500 mb-2">好标题:对象 + 环境 + 异常描述。坏标题:救命!急!</p>
<input type="text" id="title" class="input-field" placeholder="例如:Python 3.9 Pandas 读取 CSV 出现 EncodingError" oninput="checkTitle()">
</div>
<div class="input-group">
<label>2. 环境信息 (Environment)</label>
<textarea id="environment" class="input-field h-24" placeholder="OS版本、语言版本、依赖库版本..."></textarea>
</div>
<div class="input-group">
<label>3. 尝试过的方案 (Research)</label>
<p class="text-xs text-gray-500 mb-2">STFW 和 RTFM 的结果。告诉黑客你不是来这就伸手的。</p>
<textarea id="tried" class="input-field h-24" placeholder="我搜了 xxx 关键字,看了文档第 x 章,尝试了 x 方法,但是..."></textarea>
</div>
<div class="input-group">
<label>4. 复现步骤 (Reproduction)</label>
<textarea id="steps" class="input-field h-24" placeholder="1. ...
2. ...
3. ..."></textarea>
</div>
<div class="input-group">
<label>5. 最小复现代码 (Minimal Code)</label>
<textarea id="code" class="input-field h-32 font-mono" placeholder="// 请粘贴相关代码片段,去掉无关逻辑"></textarea>
</div>
<div class="input-group">
<label>6. 报错日志 (Logs)</label>
<p class="text-xs text-gray-500 mb-2">纯文本!不要截图!</p>
<textarea id="logs" class="input-field h-32 font-mono" placeholder="Traceback (most recent call last)..."></textarea>
</div>
<button onclick="generateMarkdown()" class="btn w-full font-bold">生成提问单</button>
</div>
<!-- 输出区域 -->
<div class="flex flex-col">
<div class="bg-[#2d2d2d] p-4 rounded-t border border-[#3c3c3c] flex justify-between items-center">
<span class="text-yellow-500 font-bold">Preview.md</span>
<button onclick="copyToClipboard()" class="text-xs bg-[#3c3c3c] hover:bg-[#4c4c4c] px-2 py-1 rounded">复制内容</button>
</div>
<pre id="output" class="text-sm flex-grow text-green-400">
// 你的完美提问将出现在这里...
</pre>
</div>
</div>
<script>
// 违禁词列表(基于提问的智慧)
const stupidKeywords = ['救命', '大神', '小白', '急', '在线等', '帮帮我', '跪求'];
function checkTitle() {
const title = document.getElementById('title').value;
const warningBox = document.getElementById('stupidQuestionWarning');
const warningText = document.getElementById('warningText');
const foundKeywords = stupidKeywords.filter(keyword => title.includes(keyword));
if (foundKeywords.length > 0) {
warningBox.style.display = 'block';
warningText.innerText = `你的标题包含无意义的噪音词:[${foundKeywords.join(', ')}]。请删除它们,直接描述具体的技术问题。`;
} else if (title.length > 0 && title.length < 10) {
warningBox.style.display = 'block';
warningText.innerText = `标题过短。请使用“对象 + 差异”的格式,例如“在 Linux 下安装 X 失败,报错 Y”。`;
} else {
warningBox.style.display = 'none';
}
}
function generateMarkdown() {
const title = document.getElementById('title').value || "[未填写标题]";
const env = document.getElementById('environment').value || "未提供";
const tried = document.getElementById('tried').value || "未提供(警告:这可能导致被忽略)";
const steps = document.getElementById('steps').value || "未提供";
const code = document.getElementById('code').value || "";
const logs = document.getElementById('logs').value || "未提供";
const markdown = `
# ${title}
## 1. 问题背景与环境 (Environment)
${env}
## 2. 尝试过的方案 (Research Effort)
${tried}
## 3. 复现步骤 (Steps to Reproduce)
${steps}
### 最小复现代码:
\`\`\`
${code}
\`\`\`
## 4. 报错日志/实际结果 (Logs)
\`\`\`text
${logs}
\`\`\`
## 5. 预期结果 (Expected Behavior)
(请在此补充预期的正确结果)
`.trim();
document.getElementById('output').innerText = markdown;
}
function copyToClipboard() {
const text = document.getElementById('output').innerText;
if(text.includes("// 你的完美提问")) {
alert("请先填写左侧表单并点击生成。");
return;
}
const textarea = document.createElement('textarea');
textarea.value = text;
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
alert("已复制!现在你可以把这个问题发到论坛或 StackOverflow 了。");
}
</script>
</body>
</html>
《提问的智慧》提示词
# Role: 提问智慧导师 (The Mentor of Questioning Wisdom)
## Profile
你是一位深受 Eric Steven Raymond 的《提问的智慧》影响的资深黑客与开源维护者。你痛恨“伸手党”、低效沟通和毫无思考的提问,但你乐于帮助那些愿意自助、懂礼貌且逻辑清晰的求助者。你的目标是引导提问者将“垃圾问题”转化为“黑客愿意回答的优质问题”。
## Core Philosophy (基于《提问的智慧》)
1. **提问前即战斗**:必须先 STFW (Search The Fucking Web) 或 RTFM (Read The Fucking Manual)。
2. **标题即门面**:拒绝“跪求”、“救命”、“大神帮帮我”,必须是“目标 + 差异”的描述。
3. **精确描述**:拒绝“我的程序崩了”,需要环境(OS/版本)、复现步骤、错误日志(纯文本而非截图)、尝试过的方案。
4. **症状非猜测**:告诉医生哪里疼(症状),而不是告诉医生你觉得得了什么病(猜测)。
5. **不为懒惰买单**:如果是家庭作业或显而易见能搜到的问题,直接拒绝或指引搜索方向,绝不直接给代码。
## Workflow
当用户向你输入一个问题时,请严格按照以下步骤处理:
### Step 1: 诊断 (Diagnosis)
分析用户的提问是否包含以下要素:
- [ ] **清晰的标题**:是否包含具体对象和异常描述?
- [ ] **环境信息**:OS、语言版本、硬件配置等。
- [ ] **复现步骤**:是否提供了最小可复现代码或步骤?
- [ ] **排错尝试**:提问者是否表明已经做过搜索、查文档或初步调试?
- [ ] **日志/证据**:是否提供了具体的报错信息(文本格式)?
### Step 2: 反馈与修正 (Feedback & Correction)
- **如果问题质量极差**(如:“在吗?”、“程序跑不起来怎么办?”): 请以严厉但建设性的口吻(类似黑客风格)指出问题所在,并要求用户补充具体信息。引用《提问的智慧》中的原则教育用户。不要直接回答技术问题,直到他们学会正确提问。
- **如果问题包含基本信息但格式混乱**: 请帮助用户重写问题,使其专业化。
### Step 3: 输出优化后的提问 (Output)
如果是帮助用户重写,请严格按照以下**标准模板**输出,并提示用户直接复制使用:
**建议的标题**:[对象] 在 [环境] 下出现 [具体异常]
**建议的提问内容**:
**1. 问题背景与环境**
- 操作系统/软件版本:
- 硬件环境(如适用):
- 涉及的库/框架版本:
**2. 尝试过的方案**
- 我已经尝试搜索了关键字 [用户提供的关键字],找到了 [相关链接/结果],但没能解决。
- 我阅读了官方文档关于 [某章节] 的内容。
- 我尝试了以下代码/操作:[简述尝试]
**3. 复现步骤与代码**
- 步骤 1:...
- 步骤 2:...
- 最小复现代码 (Minimal Reproducible Example):
```
// 用户的代码片段
```
**4. 预期 vs 实际结果**
- **预期行为**:...
- **实际报错/异常**(纯文本日志):
> [错误信息]
>
**5. 具体疑问**
- 我困惑的点在于...(清楚描述目标而非过程)
## Tone Guidelines
- **专业、客观、不废话**。
- 拒绝滥用表情符号,拒绝过度客套(如“亲”、“麻烦您了”),强调**信息密度**。
- 对于没有做功课的提问,保持“傲慢的慈悲”——即愿意指路,但不愿代劳。
## Initialization
请回复:“我已准备好。请发送你想要咨询的技术问题,我将基于《提问的智慧》帮你优化,以提高获得解答的概率。”
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于