【自学AI】07 跟 AI 说话也是门学问 —— 让输出从 90 分到 98 分的 6 个高级技巧

3918 字
20 分钟
【自学AI】07 跟 AI 说话也是门学问 —— 让输出从 90 分到 98 分的 6 个高级技巧

上一篇,我们学了 Prompt 的基础结构——角色、任务、输入、输出格式、例子。 用那套框架,已经能让 AI 的输出质量提升 10 倍。

但在真实项目里,我发现还不够。


开头:90 分之后,卡住了#

AI 面试功能自测时,我发现 Prompt 写得很完整,题目格式也对,HR 也说”还不错”。但偶尔会出现这种情况:

  • 同一套 Prompt,今天生成的题目很好,明天生成的就很平
  • AI 评估候选人答案时,逻辑跳跃,分数给得莫名其妙
  • 代码解析 AI 输出时,偶尔报错,因为格式不稳定

基础框架解决了”从 0 到 60 分”的问题。但从 60 分到 90 分,需要更精细的技巧。

这篇文章讲的,就是那些让输出从”还不错”变成”真的很好”的高级技巧。

Prompt进阶的6个高级技巧
Prompt进阶的6个高级技巧

一、Chain of Thought:让 AI 先想,再说#

是什么#

CoT,全称 Chain of Thought(思维链)。

一句话:让 AI 在给出最终答案之前,先把思考过程写出来。

为什么有效#

没有 CoT 的时候,AI 的预测路径是这样的:

[问题] → [直接输出答案]

路很短,跳得很快,但容易跳错。

有了 CoT,路径变成:

[问题] → [分析第一步] → [分析第二步] → [验证] → [最终答案]

每一步都建立在上一步的基础上,错误很难悄悄积累。

《易经·履卦》有句话:“履道坦坦,幽人贞吉”——走得稳,才能走得远。 不是一步跨到终点,而是一步一步踩实。CoT 的逻辑,和这个是一样的。

实战对比#

没有 CoT 的版本:

一个班有 30 个学生。
其中 1/3 喜欢篮球,1/5 喜欢足球,剩下的喜欢羽毛球。
问:喜欢羽毛球的有多少人?

AI 可能直接回答:8 个——错的。

加了 CoT 的版本:

一个班有 30 个学生。
其中 1/3 喜欢篮球,1/5 喜欢足球,剩下的喜欢羽毛球。
问:喜欢羽毛球的有多少人?
请一步一步思考:
1. 先计算喜欢篮球的人数:30 × 1/3 = ?
2. 再计算喜欢足球的人数:30 × 1/5 = ?
3. 最后计算喜欢羽毛球的:30 - 篮球 - 足球 = ?
4. 验证三者加起来是否等于 30

AI 就会老老实实算出来:

思考过程:
1. 篮球:30 × 1/3 = 10 人
2. 足球:30 × 1/5 = 6 人
3. 羽毛球:30 - 10 - 6 = 14 人
4. 验证:10 + 6 + 14 = 30 ✓
答案:14 人

在面试系统里的应用#

用 CoT 来评估候选人的答案,效果很明显。

不用 CoT 时:

问题:如何设计一个秒杀系统?
候选人答案:[一段回答]
请评估这个答案,给一个分数。

AI 给出分数,但逻辑不清楚,同一个答案不同时候评分差 2-3 分。

用了 CoT 之后:

请一步一步评估这个答案:
1. 首先,检查答案是否准确回答了问题
2. 其次,评估答案的深度——有没有讲具体策略?有没有考虑边界情况?
3. 再次,找出优点和不足
4. 最后,综合以上分析,给出分数和理由

结果:评估逻辑清晰,分数有说服力,HR 和候选人都服气。

3 个使用技巧#

  • 明确步骤数:不要说”一步一步想”,要说”按以下 4 个步骤”。AI 知道要输出几段,不会乱跑
  • 加入验证步骤:最后加一步”验证你的结论是否符合前提条件”,能有效减少自相矛盾的情况
  • 要求解释原因:每一步不只要结果,还要说”为什么这样做”,AI 会更仔细地思考

二、Few-shot Learning:给例子,比说要求更有效#

是什么#

Few-shot Learning,少样本学习。

不是告诉 AI”你要做什么”,而是给 AI 看几个”输入 + 输出”的例子,让它照着学。

一个好例子,胜过一百字的要求描述。

为什么比单纯说要求更有效#

你告诉 AI:“代码风格要现代化、简洁、符合最佳实践。”

AI 不知道你说的”现代化”是什么意思。你心里有个标准,但 AI 看不见。

你给 AI 看 3 个你满意的例子,AI 一下子就懂了。

这和带新人是一样的道理——与其说一堆标准,不如直接给他看几个好的范本。

实战对比#

假设我要把一段命令式的 JS 代码,改成函数式风格。

没有例子的版本:

把以下 JS 代码改成函数式风格,更简洁:
function getPositiveDoubled(items) {
const result = [];
for (let item of items) {
if (item > 0) { result.push(item * 2); }
}
return result;
}

AI 可能改成这样,还不错,但如果我想要特定的命名风格或写法,AI 猜不到。

给了例子的版本:

把以下 JS 代码改成函数式风格。参考例子的写法:
例子(数组处理):
改前:
function filterActive(users) {
const result = [];
for (let u of users) {
if (u.active) result.push(u);
}
return result;
}
改后:
const filterActive = (users) =>
users.filter(({ active }) => active);
现在请参考这个风格,改写这段代码:
[目标代码]

AI 就会生成风格完全统一的版本。

在面试系统里的应用#

生成面试题时,给 AI 看 3 个”好题目”的例子,然后说”参考这些例子的难度、长度和风格,生成新的题目”。

结果:题目质量稳定,难度一致,不会忽高忽低。

最佳实践#

实践说明
例子数量 2-5 个最佳太少 AI 学不到规律,太多容易被混淆
选代表性的例子覆盖你期望的各种情况
用真实的好例子不要临时编造,用你之前真正满意的输出
例子里加解释说明”为什么这个是好的”,AI 理解更深

三、System Prompt vs User Prompt:角色和任务要分开#

一个生活比喻#

想象你入职一家新公司:

  • 员工手册:工作时间、着装要求、沟通规范、什么不能做……入职时读一遍,之后一直有效
  • 今天的工作任务:帮客户 A 写报告、下午 3 点开会……每天都不一样

在 AI 里:

  • System Prompt = 员工手册。定义 AI 的身份、角色、行为准则。设置一次,全程有效
  • User Prompt = 今天的工作任务。具体的请求,每次都不同

为什么要分开#

如果把所有东西混在一个 Prompt 里,第二个候选人来了,你要重新写一遍前面那些”角色定义”。麻烦,而且容易遗漏。

分开之后:

System Prompt(代码里定义一次):

你是一个资深的技术面试官,有 20 年的面试经验。
你的职责是评估候选人的技术水平,给出公平、专业、有建设性的反馈。
评估维度:准确性、深度、清晰性、工程思维。
不要谈论和面试无关的话题。

User Prompt(每个候选人动态生成):

候选人信息:3 年经验,Java 全栈
问题:如何设计一个高并发系统?
候选人答案:[具体内容]
请按照评估维度给出分数和反馈。

System Prompt 只写一次,User Prompt 根据不同候选人变化。

在项目代码里怎么做#

// System Prompt:定义一次,不变
const SYSTEM_PROMPT = `
你是一个资深的技术面试官,有 20 年的面试经验...
`;
// User Prompt:每次根据候选人动态生成
function buildUserPrompt(candidate, question, answer) {
return `
候选人信息:${JSON.stringify(candidate)}
问题:${question}
候选人答案:${answer}
请评估...
`;
}

好处:角色定义和任务逻辑分离,代码清晰,修改角色设定只改一个地方。

System Prompt 应该包含什么#

要素例子
身份/角色”你是一个资深后端架构师”
目标/职责”你的职责是评估候选人技术水平”
约束/限制”不要谈论和面试无关的话题”
风格/态度”反馈要专业、有建设性,不要打击候选人”

四、指定输出格式:让代码能直接用#

为什么这一步很关键#

不指定格式,AI 可能给你:有时候是 JSON,有时候是 Markdown,有时候是纯文本,有时候是混合的。

你的解析代码就会时不时报错,排查起来很痛苦。

JSON 实战对比#

不指定格式:

请评估这个面试答案,给出评分和反馈。

AI 可能输出:

这个答案很不错。我给 7 分。
主要优点:思路清晰,技术选型合理。
不足:没有讨论缓存一致性。

要写正则表达式提取数字,容易出错,维护成本高。

指定 JSON 格式:

请用以下 JSON 格式输出评估结果:
{
"score": 数字(0-10),
"strengths": ["优点1", "优点2"],
"weaknesses": ["不足1", "不足2"],
"suggestions": ["建议1"],
"summary": "一句话总结"
}
重要:只输出 JSON,不要有任何多余的文字或 Markdown 包裹。

你的代码:

const result = JSON.parse(aiOutput);
const score = result.score; // 直接用,干净

5 个最佳实践#

  1. 在 Prompt 里提供 JSON 示例 — 让 AI 看到你期望的结构
  2. 明确说明字段类型"score": 数字(0-10),不要让 AI 猜
  3. 强调”只输出 JSON” — 防止 AI 在 JSON 前后加解释文字
  4. 代码里加验证逻辑 — 解析后检查字段是否合法,分数是否在范围内
  5. 提供备选方案 — “如果无法生成完整 JSON,至少保证 score 字段存在”

五、负面提示:告诉 AI 不要什么#

有时候,“不要”比”要”更有效#

你告诉 AI “生成一个好的面试题”,AI 不知道什么是”好”。

但你告诉 AI “不要生成 1 分钟就能答完的题、不要生成纯算法题、不要生成答案有争议的题”,AI 立刻就清楚了边界。

消除坏的选项,剩下的自然就是好的。

这有点像《易经·损卦》的思路——“损之又损,以至于无为”。减掉不该有的,留下来的才是真正需要的。

实战对比#

只有正面要求:

生成一个面试题。
要求:难度中等,考察实际能力,有标准答案。

AI 可能给出:题目:写一个排序函数 — 太简单,太抽象。

加上负面提示:

生成一个面试题。
应该做的:
✓ 难度中等(需要 10-15 分钟)
✓ 有具体的工作场景
✓ 有明确的标准答案
不要做的:
✗ 不要生成 1-2 分钟就能答出的题
✗ 不要生成纯算法题(和实际工作无关)
✗ 不要生成答案有争议的题
✗ 不要涉及过时技术(Flash、IE6 等)

AI 生成的题目:有场景、有深度、有标准答案,质量明显不同。

3 种使用方式#

方式 1:明确列出(最清晰,适合大多数场景)

不要做的:
- [列表1]
- [列表2]

方式 2:用对比说明(让 AI 看到对比,学得更快)

避免这样的题目:[一个坏例子]
应该像这样:[一个好例子]

方式 3:用反例说明(适合已经积累了踩坑记录的情况)

以下是之前生成的不好的题目,不要重复这样的错误:
[反例1]

六、Temperature:调出你想要的 AI 性格#

Temperature 是什么#

Temperature(温度),范围 0-2,控制 AI 输出的随机程度。

Temperature类比特点
0严谨的法官每次输出几乎一样,稳定可预测
0.3-0.5认真的工程师稳定,偶尔有细微变化
0.7经验丰富的顾问平衡,有一定多样性但不失控
1.0+头脑风暴中的创意人发散,多样,偶尔出人意料

在项目里的真实代码#

this.model = new ChatDeepSeek({
apiKey: apiKey,
model: this.configService.get<string>('DEEPSEEK_MODEL') || 'deepseek-chat',
temperature: 0.7, // 👈 这里
maxTokens: Number(this.configService.get<string>('MAX_TOKENS')) || 4000,
});

默认用 0.7——生成面试题这个任务,既不能太死板(每次题目一模一样),也不能太随机(题目质量不稳定)。0.7 是测试下来最平衡的值。

不同任务需要不同参数:

// 生成面试题:需要多样化
const quizModel = this.createModel(0.8, 4000);
// 生成评估报告:需要稳定
const evalModel = this.createModel(0.3, 2000);

参数参考#

任务类型TemperatureMax Tokens
生成面试题0.7-0.83000-4000
评估候选人答案0.3-0.52000-3000
生成追问0.6-0.7500-1000
简单交互回应0.3-0.5200-500

这些数字不是拍脑袋的。是用默认值跑了一遍,看效果,发现哪里不对,调一下,再跑,反复几次之后沉淀下来的。

没有标准答案,只有适合你场景的答案。

参数不要硬编码,放进环境变量:

.env
DEEPSEEK_MODEL=deepseek-chat
MAX_TOKENS=4000

换个环境改 .env 文件就行,不用动代码。


七、避免 6 个常见错误#

每个错误我都踩过,快过一遍。

❌ 错误 1:Prompt 太模糊

❌ 生成一些题目
✅ 为一个有 3 年 Python 经验的候选人生成 5 个中等难度的面试题,
考察知识点:数据库、缓存、API 设计

❌ 错误 2:没有提供足够的上下文

❌ 评估这个答案
✅ 背景:5 年经验后端工程师面试
问题:如何设计支持 100 万并发的系统?
候选人答案:[具体内容]
评估维度:架构完整性、可行性、性能考虑...

❌ 错误 3:要求相互矛盾

❌ 生成一个简单的题目,但要考察高级知识
✅ 生成一个用简单语言描述的题目,
考察的是候选人对复杂概念的理解深度

❌ 错误 4:没有明确输出格式

❌ 生成一个评估
✅ 用以下 JSON 格式生成评估:
{ "score": 0-10, "reason": "原因", "next_question": "建议的追问" }

❌ 错误 5:一个 Prompt 要求太多事情

❌ 生成 10 道题目,并评估之前的答案,并给出改进建议,并生成综合报告
✅ 拆成 4 个独立的 Prompt,每个只做一件事

❌ 错误 6:对特殊字符处理不当

❌ 生成一个包含 JSON 示例的题目
(AI 生成的题目里有双引号,破坏了外层 JSON)
✅ 如果题目中包含代码,请用三重反引号包裹。
确保最终输出是有效的 JSON,特殊字符需要转义。

最后带走一句话#

把这 6 个技巧加进来之后,面试系统的 Prompt 从最初那一句话,变成了一个有角色定义、有思维链、有例子、有格式要求、有负面约束的完整体系。

但我想说的不是”你要一次把这些全用上”。

而是:

先用基础框架跑起来,发现哪里不对,再加对应的技巧。

  • 输出不稳定?→ 降低 Temperature,加输出格式约束
  • 评估逻辑跳跃?→ 加 CoT
  • 题目质量忽高忽低?→ 加 Few-shot 例子
  • AI 总是跑偏?→ 加负面提示
  • 每次都要重复定义角色?→ 分离 System Prompt

每一个技巧,都是为了解决一个具体的问题。

这和写代码是一样的——不是一开始就把所有设计模式全用上,而是遇到问题,用合适的工具解决它。


昇哥 · 2026年2月 学 AI 面试项目途中,顺手把想清楚的事写下来

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

【自学AI】07 跟 AI 说话也是门学问 —— 让输出从 90 分到 98 分的 6 个高级技巧
https://blog.fridolph.top/posts/2026-02-10__prompting_2/
作者
Fridolph
发布于
2026-02-10
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Fridolph
热爱 Coding、音乐和羽毛球的 90 后全栈工程师
公告
欢迎访问我的小站 ^_^ 我是昇哥,热爱Coding,喜爱音乐、羽毛球和摄影的 90后全栈工程师
分类
标签

文章目录