id: 2b78d49b599145fb95ce8b8b6b2b83d7
parent_id: 
item_type: 1
item_id: 84411f4f7fb74928942bb838348da549
item_updated_time: 1764345469385
title_diff: "[{\"diffs\":[[1,\"吴恩达& OpenAI《面向开发者的ChatGPT提示工程》课程精华笔记\"]],\"start1\":0,\"start2\":0,\"length1\":0,\"length2\":36}]"
body_diff: "[{\"diffs\":[[1,\"<html>\\\r\\\n<head>\\\r\\\n  <title>吴恩达&amp; OpenAI《面向开发者的ChatGPT提示工程》课程精华笔记</title>\\\r\\\n  <basefont face=\\\"微软雅黑\\\" size=\\\"2\\\" />\\\r\\\n  <meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=utf-8\\\" />\\\r\\\n  <meta name=\\\"exporter-version\\\" content=\\\"YXBJ Windows/608924 (zh-CN, DDL); Windows/10.0.0 (Win64); EDAMVersion=V2;\\\"/>\\\r\\\n  <meta name=\\\"content-class\\\" content=\\\"yinxiang.superNote\\\"/>\\\r\\\n  <style>\\\r\\\n\\tbody, td {\\\r\\\n\\t  font-family: 微软雅黑;\\\r\\\n\\t  font-size: 12pt;\\\r\\\n\\t}\\\r\\\n  </style>\\\r\\\n</head>\\\r\\\n<body>\\\r\\\n<a name=\\\"3616\\\"></a>\\\r\\\n<h1>吴恩达&amp; OpenAI《面向开发者的ChatGPT提示工程》课程精华笔记</h1>\\\r\\\n\\\r\\\n<div><span><div><br/></div><div style=\\\"--en-callout:true;\\\"><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">🐘：DeepLearning.ai 近日推出了一门面向开发者的ChatGPT提示工程</span><span style=\\\"color: #00BF66;\\\"><b><i>ChatGPT Prompt Engineering for Developers</i></b></span><span style=\\\"color: var(--weui-FG-HALF);\\\">，该课程由国际知名的AI领域权威学者</span><span style=\\\"color: #00BF66;\\\"><b><i>吴恩达教授</i></b></span><span style=\\\"color: var(--weui-FG-HALF);\\\">联合OpenAI一起制作，全网火爆，课程共9个课时，1.5个小时的时长。</span></span></div><div><span style=\\\"font-size: 15px;\\\">课程中介绍了很多<span style=\\\"color: #00BF66;\\\"><b>提示功能通用技巧</b></span>，不妨用<span style=\\\"color: #00BF66;\\\"><b>印象AI</b></span>来试试吧！</span></div><div><span style=\\\"font-size: 15px;\\\">本文内容由象亲马铁提供。</span></div></div><div><br/></div><h2><span style=\\\"color: #00BF66;\\\">01 课程介绍</span></h2><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">LLM（Large Language Model）开发大致可分为两种类型：基础LLM（Base LLM）和指令调谐LLM（Instruction Tuned LLM）。</span></span></div><ol><li><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">基础LLM：基于大量文本训练数据，来预测下一个最有可能出现的单词，缺点是不可控，容易输出有问题的文本。</span></span></div></li><li><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">指令调谐LLM：对基础LLM进行人工微调，能更好地遵循指令，来输出有用的内容。</span></span></div></li></ol><div><br/></div><h2><span style=\\\"color: #00BF66;\\\">02 提示工程技巧</span></h2><h3><span style=\\\"font-size: 18px;\\\"><span style=\\\"color: #00BF66;\\\"><span style=\\\"font-weight: bold;\\\">原则一：编写明确和具体的指令</span></span></span></h3><h3><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\"><span style=\\\"font-weight: bold;\\\"><u>技巧1：使用分隔符</u></span></span></span></h3><div style=\\\"--en-callout:true;\\\"><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">使用分隔明确指示需要处理的部分，分隔符可以是任何符号，比如`, &quot;&quot;, &lt; &gt;等，让模型清楚地知道哪些是需要处理的，哪些是提示。避免提示注入。</span></span></div></div><div style=\\\"--en-blockquote:true;box-sizing: border-box; padding-left: 19px; padding-top: 6px; padding-bottom: 6px; border-left: 3px solid #b4c0cc; background-position: initial initial; background-repeat: initial initial; margin-top: 6px\\\"><div>提示注入（Prompt Injection）指需要处理的内容中可能会与我们的指令相矛盾的描述，导致模型遵循用户的指令而不是我们的指令。</div></div><img src=\\\":/18ee2ba3c0cd4c94ac9e5a2a1f8ed29b\\\" type=\\\"image/png\\\" data-filename=\\\"hashafd0f5aca21c97bce1a79fa987708523filename640.pngsize12084afd0f5aca21c97bce1a79fa987708523.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><h3><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\"><span style=\\\"font-weight: bold;\\\"><u>技巧2：要求结构化输出为HTML或JSON等格式</u></span></span></span></h3><div style=\\\"--en-callout:true;\\\"><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">为了简化输出过程并让输出内容更容易被解析，可以要求模型以HTML或JSON等结构化格式输出，方便后续读入和处理</span></span></div></div><img src=\\\":/91e0d498e4734d6fb1c223b8dd56fe0e\\\" type=\\\"image/png\\\" data-filename=\\\"hash8a0cb7225abe6f04139c116268089775filename640.pngsize44838a0cb7225abe6f04139c116268089775.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><h3><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\"><b><span style=\\\"font-weight: bold;\\\"><u>技巧3：让模型自己验证是否满足条件</u></span></b></span></span></h3><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">如果任务有一些条件并不一定被满足，我们可以要求模型先检查这些假设，如果不满足，则指出并停止任务。这样可以避免产生错误的结果。</span></span></div><img src=\\\":/2edb43d894704ef282c4f66981e6afea\\\" type=\\\"image/png\\\" data-filename=\\\"hashf123067c9c2ee4e17e7472793bb948b5filename640.pngsize16009f123067c9c2ee4e17e7472793bb948b5.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><img src=\\\":/a01a449e268541b6add422f333c58460\\\" type=\\\"image/png\\\" data-filename=\\\"hashe1b15114c193e61ef064b73d09afb389filename640.pngsize16335e1b15114c193e61ef064b73d09afb389.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><h2><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\"><b><span style=\\\"font-weight: bold;\\\"><u>技巧4：少量样本提示</u></span></b></span></span></h2><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">在让模型执行实际任务前，给模型提供已经成功执行的示例做参考。</span></span></div><img src=\\\":/ad92316fec494c829e2e27946f9c1674\\\" type=\\\"image/png\\\" data-filename=\\\"hash339cdba1ef8314a22fefa98af64ed501filename640.pngsize7958339cdba1ef8314a22fefa98af64ed501.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><h2><span style=\\\"font-size: 18px;\\\"><span style=\\\"color: #00BF66;\\\"><b><span style=\\\"font-weight: bold;\\\">原则二：</span>给模型足够的时间思考</b></span></span></h2><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">对于复杂繁琐或者描述少的任务，模型需要花更长的时间和算力才能产出结果</span></span></div><h3><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\"><b><span style=\\\"font-weight: bold;\\\"><u>技巧1：指定完成任务的步骤</u></span></b></span></span></h3><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">将任务拆分成一个个执行步骤，比如本讲中的例子，首先给模型提供了一个包含Jack and Jill故事，并指示模型按照四个明确的步骤完成任务</span></span></div><ol><li><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">用一句话总结文本</span></span></div></li><li><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">将总结翻译为法语</span></span></div></li><li><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">列出法语总结中的每个名称</span></span></div></li><li><div><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\">输出一个包含</span>”<span style=\\\"color: var(--weui-FG-HALF);\\\">french_summary&quot;和&quot;num_names&quot;两个key的JSON对象</span></span></div></li></ol><img src=\\\":/f621af04fa474d2bac806e04c9cc0cb5\\\" type=\\\"image/png\\\" data-filename=\\\"hashda8a4cf2785e4d636b7cc2a43ab8fddcfilename640.pngsize16733da8a4cf2785e4d636b7cc2a43ab8fddc.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><img src=\\\":/5505621b7eb34b78a8fee30952c7a263\\\" type=\\\"image/png\\\" data-filename=\\\"hashe338b18043d318ee2c01b4ff96064283filename640.pngsize10468e338b18043d318ee2c01b4ff96064283.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><h3><span style=\\\"font-size: 15px;\\\"><span style=\\\"color: var(--weui-FG-HALF);\\\"><b><span style=\\\"font-weight: bold;\\\"><u>技巧2：让模型在得出结论前先提供自己的解决方案并验证</u></span></b></span></span></h3><div>改变任务的执行顺序，会产出完全不同的结果。<span style=\\\"font-size: 14px;\\\"><span style=\\\"font-family: Roboto, Oxygen, Ubuntu, Cantarell, PingFangSC-regular, PingFangTC-regular, Open Sans, Helvetica Neue, sans-serif;\\\"><span style=\\\"color: rgb(84, 84, 84);\\\">本讲中给出了一个为学生作业判分的例子：有一道数学题，和一个学生的解决方案，让模型判断学生解决方案正确与否。不给出执行步骤，模型得出了与学生意见一致的解决方案，并认为该方案正确，但实际上，该学生的解决方案是错误的。但给出执行步骤后，模型即可判断出学生的方案是不正确的。</span></span></span></div><div>调整后的步骤为：</div><ol><li><div><span style=\\\"font-size: 14px;\\\"><span style=\\\"font-family: Roboto, Oxygen, Ubuntu, Cantarell, PingFangSC-regular, PingFangTC-regular, Open Sans, Helvetica Neue, sans-serif;\\\"><span style=\\\"color: rgb(84, 84, 84);\\\">将问题的具体内容输入模型</span></span></span></div></li><li><div><span style=\\\"font-size: 14px;\\\"><span style=\\\"font-family: Roboto, Oxygen, Ubuntu, Cantarell, PingFangSC-regular, PingFangTC-regular, Open Sans, Helvetica Neue, sans-serif;\\\"><span style=\\\"color: rgb(84, 84, 84);\\\">告诉模型的最终任务是判断学生的解决方案正确与否</span></span></span></div></li><li><div><span style=\\\"font-size: 14px;\\\"><span style=\\\"font-family: Roboto, Oxygen, Ubuntu, Cantarell, PingFangSC-regular, PingFangTC-regular, Open Sans, Helvetica Neue, sans-serif;\\\"><span style=\\\"color: rgb(84, 84, 84);\\\">让模型先自己解决问题，通过将自己的解决方案与学生的解决方案进行比较的方式评估学生的解决方案正确与否</span></span></span></div></li><li><div><span style=\\\"font-size: 14px;\\\"><span style=\\\"font-family: Roboto, Oxygen, Ubuntu, Cantarell, PingFangSC-regular, PingFangTC-regular, Open Sans, Helvetica Neue, sans-serif;\\\"><span style=\\\"color: rgb(84, 84, 84);\\\">告诉模型在自己解决问题前，不先判断学生的解决方案</span></span></span></div></li></ol><img src=\\\":/415508d203d042eeabca5fe9d28044b8\\\" type=\\\"image/png\\\" data-filename=\\\"hash2c7949f6c6ab9d812196d21c7435f4c2filename640.pngsize139602c7949f6c6ab9d812196d21c7435f4c2.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><img src=\\\":/551f02db8c0940e99c250c891a63b14f\\\" type=\\\"image/png\\\" data-filename=\\\"hash22b45181eb090c043cda8813142f6152filename640.pngsize1356622b45181eb090c043cda8813142f6152.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><img src=\\\":/b78f9b01afdf4ef6845382565288b457\\\" type=\\\"image/png\\\" data-filename=\\\"hashcaa13aef5b60c650834c3f40432c4046filename640.pngsize13446caa13aef5b60c650834c3f40432c4046.png\\\" height=\\\"autopx\\\" style=\\\"--en-uploadstate:uploaded;\\\"/><h2><span style=\\\"color: #00BF66;\\\">03 模型的限制</span></h2><div>虽然模型在训练过程中面对海量信息，但模型不具备分析知识的能力。模型有时候会编造听起来有逻辑但实际并不正确的答案，这种编造的答案称为“幻觉”。</div><p>有两种技巧可以减少产生这种幻觉： </p><ol><li><p>要求模型基于提供的文本找到相关引用并回答问题</p></li><li><p>将答案追溯到源文件</p></li></ol><p><br/></p><h2><span style=\\\"color: #00BF66;\\\">04 Prompt的迭代</span></h2><div>Prompt编写的迭代过程：</div><ol><li><p>编写明确且具体的Prompt</p></li><li><p>运行并获取结果</p></li><li><p>分析结果并找出输出结果不符合预期的原因</p></li><li><p>优化并调整Prompt</p></li><li><p>重复这个流程直到迭代出最优的Prompt</p></li></ol></span>\\\n</div></body></html>\\u0000\"]],\"start1\":0,\"start2\":0,\"length1\":0,\"length2\":9403}]"
metadata_diff: {"new":{"id":"84411f4f7fb74928942bb838348da549","parent_id":"061de1401cfc4cfaadf6e74e015970e9","latitude":"0.00000000","longitude":"0.00000000","altitude":"0.0000","author":"","source_url":"","is_todo":0,"todo_due":0,"todo_completed":0,"source":"joplin-desktop","source_application":"net.cozic.joplin-desktop","application_data":"","order":1764345854959,"markup_language":2,"is_shared":0,"share_id":"","conflict_original_id":"","master_key_id":"","user_data":"","deleted_time":0},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2025-11-28T16:20:22.658Z
created_time: 2025-11-28T16:20:22.658Z
type_: 13