type
status
date
slug
summary
tags
category
icon
password
comment
💻
从0到1地学习怎么写好prompt
以下内容涵盖了我最近学习如何写prompt的一些心得。文章将从两方面展开,第一部分是关于写prompt的一些技巧,第二部分是把技巧应用到Side Project(Long Distance Chatbox)项目里的实践,以及实践中遇到的问题和解决方案。
⚠️这篇文章将采用中英结合的形式,便于日后面试时的复习和回顾。

实用技巧(Techniques)

1. 基础角色定义(核心身份)

  • 确立专业可信度
  • 明确治疗模式以确保回应一致性
  • 采用认可的理论框架(情感聚焦疗法/非暴力沟通)指导模型行为
 
  1. Base Persona Definition (Core Identity)
  • Establishes professional credibility
  • Specifies therapeutic modality for consistent responses
  • Uses recognized frameworks (EFT/NVC) to guide model behavior
Example:
 

2. 核心原则(回应指示)

  • 为 AI 的回复设置「安全防护栏」,确保内容在专业范围内运作。
  • 通过专注于「过程导向」,避免 AI 给出过多直接建议或指导,从而保持客观、中立的立场。
  • 与循证的治疗技术相契合,确保所提供的回应符合专业和科学依据。
 
  1. Core Principles (Response Guidelines)
  • Creates guardrails for AI responses
  • Prevents veering into advice-giving vs staying process-focused
  • Aligns with evidence-based therapy techniques
Example:
 

3. 结构化处理(按步骤思考)

  • 通过分步骤拆解和分析问题,模拟人类治疗师在面对复杂情境时的理性思考方式,帮助更全面地理解和回应需求。
  • 在推理过程中引入约束条件,避免生成过度推测或不实信息,确保回答更贴近事实并保持连贯。
  • 采用固定的逻辑顺序或框架,使回答呈现更一致、易于理解的结构,从而在沟通中更具可控性和可靠性。
 
  1. Structured Processing (Step-by-Step Thinking)
  • Mimics human therapist cognitive process
  • Reduces hallucination through constrained reasoning
  • Enables predictable output structure
Example:
 

4. 示例驱动式学习(Few-Shot Prompting)

  • 通过少量示例来向模型演示如何输出正确或合适的回答,从而帮助模型形成回应模式
  • 在提供示例的同时,也要兼顾一般性原则,确保模型不仅能模仿示例,还能在更广泛的场景中运用相似的思路。
  • 根据实践经验和研究表明,对于 GPT-3.5 或 GPT-4 等大型语言模型而言,提供 3-5 个示例是最佳数量,可以有效提升模型的记忆与理解能力,从而输出更高质量的答案。
 
  1. Example-Driven Learning (Few-Shot Prompting)
  • Teaches response patterns through demonstration
  • Balances concrete examples with general principles
  • 3-5 examples shown to be optimal for GPT-3.5/4 retention
Example:
 

5. 道德保障(关键界限)

  • 针对与心理健康相关的工具,需要遵守相关法律法规与道德准则,确保在设计与使用过程中符合行业标准与公众利益。
  • 通过设置审慎的流程和监督机制,避免过度依赖自动化系统导致错误判断或潜在风险,尤其在敏感的心理健康领域更需谨慎。
  • 必须建立清晰的上报与处理流程(例如,当用户遇到紧急情况或系统无法应对时,应迅速转介给专业人士),以确保问题能够及时获得适当的关注和干预。
 
  1. Ethical Safeguards (Critical Boundaries)
  • Legal/ethical requirement for mental health adjacent tools
  • Prevents harmful automation bias
  • Requires clear escalation pathways
Example:
 

6. (可选)输出格式化(结构化 JSON)

  • 通过将输出内容组织成 JSON 格式,系统或应用程序可以更轻松地对响应进行自动化解析和处理,减少手动干预的复杂度。
  • 将推理过程或逻辑拆分成结构化的数据字段,便于后续调试、审查或追踪问题时快速定位。
  • 前端可以根据 JSON 中的不同部分来分别呈现信息,从而实现更灵活的界面布局和更佳的用户体验。
 
  1. (Optional) Output Formatting (Structured JSON)
  • Enables programmatic response handling
  • Forces structured reasoning chain
  • Allows frontend to display different components separately
 

操作实践(Case Study)

为了更好地练习如何撰写 Prompt,我搭建了一个名为“远距离情侣聊天室”(Long Distance Chatbox)的应用,主要针对情绪激动的情侣提供“翻译”服务,用来把过激的言辞转换成更客观、更容易沟通的表达方式。只要在聊天室里输入你在气头上想说的话,AI 就会帮助你提炼真正想表达的需求或感受。更多细节可以在我的 GitHub 上查看:link
由于这个应用目前还处于初期阶段,而且调用 OpenAI 的 API 也相对昂贵,所以暂时没有上线的打算。不过,这为我提供了一个非常好的机会来练习如何写好 Prompt。于是,我决定把在调试 Prompt 的过程中遇到的各种难题,以及我如何解决它们的经验记录下来,作为学习笔记。
⚠️ 声明:无论是前端还是后端,我都只是一知半解,而且这是我第一次写 JavaScript;代码部分主要是由 GPT、Deepseek 和 Cursor 共同完成的。

项目介绍

关于这个项目,我会在后续的文章中再做更详细的介绍。这里主要聚焦在与 prompt 调试相关的内容:
首先,我们在 prompt.config.js 中为不同角色(如 therapist、negotiator 等)分别定义了对应的 prompt。本文以 therapist 角色为例,根据上文提到的六个步骤,将每个步骤的 prompt 独立定义为一个变量:
在同一个配置文件中,我们通过一个名为 PROMPT_TEMPLATE 的变量,将上述所有提示(prompt)整合为一个完整的提示文本,便于稍后在后端的 server.js 中进行获取和使用:
在后端 server.js 文件中,有一个名为 getPrompt 的函数。它会先从 .env 文件中读取预先设置的角色信息,然后将 config 里对应该角色的 prompt 与用户输入的文本一起发送给 OpenAI 进行改写,最后返回改写后的文本。

设计思路

开始时,我们只需要一个简单的 Prompt(例如:“rephrase the sentence to be more gentle”),就能收到不错的效果。这种用法就像你今天打开 ChatGPT,只想快速得到一个答案一样,即使回答有误也没太大影响。然而,从产品的角度来看,回复给用户的内容必须符合预期;一个荒谬的答案不仅会带来金钱和声誉的损失,有时甚至会引发法律风险。因此,对于真正的产品来说,容忍度极低。
这正是我们想要在「远距离情侣聊天室」中系统性设计 Prompt 的原因:从产品出发,思考如何设计 Prompt,才能让「翻译」更精准并减少出错。
不过,在持续调试的过程中我们发现:当 Prompt 变多、变复杂后,反而更容易出现问题。以下是我在不断调整 Prompt 时遇到的一些问题及其解决方案。
 

问题和解决方案

问题1:返回的不是最终结果
当我们像第二点那样在 Prompt 中提供了五条 principles 时,模型往往会误以为也需要按照这五条原则输出五个要点。实际上,我们只需要模型回复一句话就足够了。
以下是使用前面提到的方法生成 Prompt 后,模型根据 Prompt 中的五点要求进行翻译的结果,可以看到它又输出了五个点:
notion image
解决方案:
base或者principles里加上一条规则直接输出最终版本的翻译,不需要中间内容就能很好的解决这个问题:
“directly return the final rephrased version, without explanations or labels. Don't include input“
 
问题2:返回的内容里带有标签
即使在上一条已经强调不需要添加任何标签,返回的内容依然带有“Rephased:”字样,导致这段信息无法直接发送给对方,还需要进一步的修改或处理:
notion image
解决方案:
当我使用 Cursor 选取所有 Prompt 并明确表示不希望出现“Rephased:”这类标签后,Cursor 给出了两条建议:
  1. base 提示中,明确强调“directly return the final rephrased version, without explanations or labels”
  1. PROMPT_TEMPLATE 的末尾部分,使用更明确的指令,例如:“Rewrite this message without any labels or prefixes:”
针对第一条建议,我们在问题 1 中已经尝试过,但并没有得到理想效果。于是,我们决定尝试第二条:在应用所有定义好的 Prompt 之前,于最后一步给出一个明确的指令。事实证明,这个方法非常有效,经过调试后,输出结果已经非常接近预期目标。
notion image
问题3:输出结果不稳定
在多次尝试预览(preview)的过程中,如果输入为中文,返回结果有时是中文,有时又变成英文,表现得并不稳定。希望通过进一步的调整,能够让输出语言始终保持一致。
notion image
解决方案:
在提示中更明确地强调语言要求,并添加语言检测逻辑,以下是Cursor提出的修改建议:
  1. principles中用更强烈的语气比如原先是“Return the same language”, 现在改为“Never mix languages in your response”
  1. 与修改问题二的地方相同,在最后一步之前再定义一次用相同的语言:
    1. “Rewrite this message in the same language as the input, without any labels or prefixes:”
  1. examples部分给出多种场景,特别强调当输入为中文时,输出也应保持中
在调试过程中,我发现第一条建议非常有效。通过强化语气后,出错的概率显著降低。不过,当输入是中文时,仍有约十分之一的机会会输出英文。随后,在第一条建议的基础上再加上第二条建议,几乎就完全解决了这个问题。经过数十次测试后,回复始终保持在中文。为了进一步确认,我还用西班牙语进行了尝试,返回的同样是西班牙语。
此外,cursor 在调试 Prompt 的过程中还提出了一个值得参考的想法:在发送提示时动态添加语言,并在代码层面实现语言检测。通过这样的双重保障,可进一步确保输出语言的稳定性。不过,由于我们的主要目标在于学习如何调试 Prompt 而非提升代码能力,因此这一提案暂不展开。
 

插播:使用成本

在尝试的过程中,我一直在观察 API 的使用频次和费用。由于用的是更实惠的GPT-3.5,所以整体花费并不高。那天之所以费用最高,主要是因为每次输出都罗列了 1-5 个要点,每次返回的内容少说也有一两百字,说明控制输出长度很有必要。虽然在那段时间里输入了不少 Prompt,但真正花钱的还是那些较长的输出内容。
notion image
 
 
💡
欢迎您在底部评论区留言,一起交流~
糟糕心情自救指南偏要谈谈钱
Loading...
Xinyuan
Xinyuan
I am rooted, but I flow🌊
Latest posts
糟糕心情自救指南
2025-2-23
如何写好Prompt:                    从理论到实践的AI对话优化指南
2025-2-10
加那利群岛3️⃣ —— 兰萨罗特岛篇
2025-2-10
偏要谈谈钱
2025-2-7
相片|Snaps in 2024
2025-1-29
加那利群岛1️⃣ —— 特内里费岛篇
2025-1-26
Announcement
🎉蛋挞窝Dantawow正式上线🎉
-- 感谢您的支持 ---
目前发布了游记、相册、和随笔,
评论功能也已开放,
欢迎大家留言!
以下功能在开发中:
  1. 整理完善22-24年相片(3月)
  1. 文字/视频版建站教程(3月)
  1. 陆续更新文章(长期)
👏欢迎提出宝贵建议👏