,你的意思是要关掉 PRIMARY 这个剪贴板,还是说选中的内容进入了 CLIPBOARD 这个剪贴板?
+
+{% capture notice-url-frag %}
+许多文档类站点在点击标题,或者标题旁边的标记(一般称为 anchor)的时候,都会在浏览器显示的 URL 后添加类似 `#some-thing` 的内容,这被称为「片段标识符」(Fragment Identifier)。**推荐在分享的 URL 中添加片段标识符,这样点击链接的人就能立刻跳到你希望他阅读的地方。**
+
+此外,Firefox、Chrome 等浏览器也都支持复制指向当前选中的文本的链接的功能,会在 URL 后添加类似 `#:~:text=xxxx` 的内容,支持的浏览器可以直接跳转到你选中的内容。
+{% endcapture %}
+
+{{ notice-url-frag | markdownify }}
+
+**有用的回答需要让讨论向前推进。** 一种常见的问题是只讨论个人经历,却不说明它和当前问题有什么关系,比如「这不是挺方便吗」「别搞了」「我用了很多年,你参考不了」。相比之下,这样的回答是有效的:
+
+- 解决方法是……
+- 先看一下 XXX 的输出(来区分原因)
+- 你的 XXX 软件版本是?(补充信息)
+- 官方文档:……
+- 可以试一下 XXX 来验证是否正确
+- 如果 XXX 不可以的话,那么就试一下 YYY 替代方案
+- 我不知道,但是可以去 XXX 问一下
+
+### 检查自己的误区 {#check-your-assumptions}
+
+回答者的经验既是优势,也可能是误区:**把经验和推测当作事实**,以及**默认提问者能像自己一样处理后果**。
+
+第一种误区:
+
+> A: Linux 肯定不支持你这个软件啊!
+>
+> Q: 啊?wine 呢?
+>
+> A: 别想了,肯定不支持。
+>
+> Q: 我以为 wine 能跑呢。
+>
+> A: 我有几年没试过了,不过我不抱希望。
+
+这里的问题在于没有**区分「事实」、「经验」和「推测」**。一种更好的回答:
+
+> A: 这个软件没有官方 Linux 支持,wine 上面前几年我没跑成功。即使目前可以跑,我也不建议拿它来正式做工作,有可能会有数据问题。
+
+如果没有把握,退出讨论也是一种选择:承认自己不知道,通常比给出绝对结论更可靠。即使对答案没有把握,解释相关概念、指出需要确认的信息或者推荐合适的资料,都可能帮助提问者继续调查。
+
+第二种误区常出现在讨论风险的时候。对提问者来说,重要的不是回答者有多少年资历,而是哪些问题可能发生、如何发现,以及发生之后需要怎么处理:
+
+> 避免:我用了很多年,这些问题我都能处理,你参考不了。
+>
+> 建议:我能接受使用测试版,是因为我能解决依赖冲突,也知道如何进入救援环境回退。如果你还不熟悉这些操作,可以先考虑:升级后一旦无法进入桌面或者用不了工作软件,你能否处理?
+
+提问者有时候会想做一些危险的事情,此时同样需要说清楚风险在哪里、怎样安全地验证(如果可以),以及回退的方案:
+
+> 避免:不支持。如果和同事做出来的东西不一样,出了问题别来找我们。
+>
+> 建议:即使能够通过兼容层启动,有些地方也可能存在兼容问题。如果需要正式交付,不建议在未经验证的情况下把它作为唯一环境。你可以保留原系统,先测试常用情况的导出结果是否正确,之后再决定哪些工作可以迁移。
+
+### 不要直接复制粘贴大语言模型的回答 {#no-copy-paste-llm-answer}
+
+大语言模型是非常方便的工具,很多时候也是回答问题的高手。不过这不等于在其他人提问时,回答者可以直接复制粘贴大语言模型的回答给对方,考虑以下几点原因:
+
+- 如果只是把提问者的问题复制、粘贴给大语言模型,然后再把模型的回答复制、粘贴给对方,那么对方为什么不亲自去问大语言模型呢?
+- 大语言模型的回答很多时候比较冗长,并且风格很可能显得生硬(比如说被一些大语言模型滥用,经常被吐槽的「不是……而是……」),反而不便于阅读和理解。
+- 回答者不做核验的话,辨别模型是否产生幻觉(提供错误回答)的责任就不合理地转移到了其他人身上。
+
+如果回答者核对确认了大语言模型的回答,并且明确标注来源,那么引用关键的一小部分一般来说是可以接受的,例如这样:
+
+> 我把你的问题问了 LLM,它说可能的原因是:XXXXXXXXX。我测试了对应的命令,看起来是可以使用的。
+
+## 附录:如何正确向大语言模型提问 {#llm}
+
+对人类有效的提问策略,大多对大语言模型(LLM)也有效,因此建议先阅读本文的正文部分,再阅读这一节。
### 提供足够的上下文信息 {#provide-context}
-和向人类提问类似,提供足够的上下文信息可以更好帮助大语言模型理解问题,给出更好的回答。以刚才的例子为例。
+大语言模型只能看到你给出的信息,因此上下文是否充分,很大程度上决定了回答的质量。
-原始例子:
+#### 对话式大语言模型 {#chatbot-context}
+
+向对话式大语言模型提问时,和向人类提问类似,也需要提供足够的上下文,帮助它理解问题。下面沿用前文在命令行中下载文件的例子。
+
+
+查看原始提问与大语言模型的完整回答
````text
Human: 怎么在命令行里面下载一个 url?
@@ -466,6 +606,8 @@ sudo apt install wget
如果你告诉我你是用 Windows / Linux / macOS,我可以给你更具体的命令。
````
+
+
改进后的例子:
````text
@@ -484,17 +626,65 @@ Invoke-WebRequest -Uri "https://example.com/file.zip" -OutFile "file.zip"
- 环境是 Windows PowerShell
- 希望 LLM 直接输出命令
-得到的结果就更加简洁,也更加符合用户需求,毕竟很多 Windows 用户的电脑里可能根本没有 wget 或 curl。
+得到的结果就更加简洁,也更加符合用户需求。
+
+#### Agent {#agent-context}
+
+从 2025 年开始,以编程 Agent 为代表的 Agent 软件开始广泛应用(包括但不限于 Claude Code、Codex 等)。Agent 与传统的对话式大语言模型不同,它可以利用工具调用在你的电脑上读取和修改文件、执行命令、搜索信息等。当 Agent 在出现问题的环境中运行时,很多时候它能够自行获取到需要的上下文信息,但是它无法直接获取的信息,仍需要你补充(例如修改的目标、无法直接获取的环境信息等等)。
### 提问语言 {#ask-language}
-在大语言模型的训练语料中往往英文占比更高,因此用英文提问可能效果更好。国产的大语言模型可能可以缓解这个问题。
+在大语言模型发展的早期,使用英文提问相比中文可能会有更好的效果。不过,当前主流模型的中文能力已经足以处理大多数日常技术问题。因此目前的建议是:
+
+- 优先使用能够准确、流畅表达问题的语言。对本文读者来说一般是中文。
+- 错误信息、命令、专有名词等应保留原文,不要自行翻译。
+
+根据模型分词器(Tokenizer)的不同,在表达相同的含义时,不同模型处理中文与英文的效率也不同。如果有降低使用成本的需求,需要自行测试。
### 避免超长的对话 {#avoid-long-dialog}
-大语言模型的工作模式很简单:每次用户发送消息时,LLM 都会从头分析内容,直到用户本次信息结束才开始生成。这带来了两个问题:
+大语言模型在对话时,先前的消息通常仍会作为上下文提供给模型。目前模型服务商不少都配置了**缓存**,在对话追加内容时,前面的内容如果命中了缓存,就能大幅减小计算量,节约成本(具体机制取决于使用的产品);如果没有命中的话,先前的消息就需要重新计算。不过仍然需要注意:
-- 对于超长的对话,每一次继续对话都会浪费不少的钱。假设当前的对话前,LLM 分析了一个很长的网页,花费了一块钱,那么基于这段对话作为背景,**每次**发送一条消息,都会再花至少一块钱。
-- 相比于短文本,LLM 对长文本更容易产生「**幻觉**」,即输出与实际情况不相符的内容。
+- 大语言模型的上下文长度是有限制的。当内容量接近上下文长度上限时,服务可能停止接受新消息、丢弃较早的内容,或压缩已有内容后继续对话,具体取决于实现。如果重要的内容在这个过程中丢失,模型的表现可能会受到很大的影响。
+- 相比于短文本,LLM 对长文本更容易产生「**幻觉**」,即输出与实际情况不相符的内容。特别是在上下文中出现无关、过时、或者相互矛盾的信息时,这种现象会更加严重。
如果发现 LLM 工作异常,可以重启会话。重新开始后,更应该调整提问的策略。
+
+### 核验回答 {#verify-answer}
+
+由于幻觉问题的存在,大语言模型可能会以自信的语气给出详细但错误的回答。如果不了解对应的领域,而贸然使用 LLM 的回答,就可能轻则浪费时间,重则带来严重的麻烦。对新手来说,我们有一些建议:
+
+- 根据环境的不同,LLM 可能无法访问互联网、了解最新信息。在提问前需要先确认。
+- 在提问时,明确要求 LLM 提供可以用于核验回答的来源信息。
+- 对代码类问题,可以根据 LLM 的建议制作 [MRE](#mre),来验证结论的可靠性。
+- 对于可能导致数据丢失、设备损坏甚至人身伤害的操作,务必不要将 LLM 的回答作为唯一参考。
+
+### 隐私问题 {#llm-privacy}
+
+使用大语言模型,特别是 Agent 的时候,如果正在处理非公开的信息,那么就需要尤其注意隐私问题。不同的大语言模型服务商有不同的隐私策略,在一些情况下可能会留存用户提供的信息用于训练新的模型,或者改进产品。你大概不会把自己的秘密告诉陌生人,但是在向大语言模型提问的时候,可能会不知不觉泄露相关的信息。因此,在提问的时候需要注意:
+
+- 使用大语言模型前,确认服务商的隐私策略、服务条款等内容。
+- 谨慎使用「中转站」类大模型服务,此类服务商可能会存储对话数据并出售给其他人。
+- 不要直接向模型提供密码、Cookie、私钥等敏感数据。
+- 可能包含个人信息的日志,以及未公开的代码等在提问时需要小心处理。
+- 在网页端删除对话不代表对应的信息就从服务商的服务器上立刻删除了。
+
+如果对隐私问题极度敏感,那么可能必须要本地自建大模型服务,使用完全本地运行的工具处理信息。相关内容超出了本文的范畴。
+
+### 小心执行大语言模型生成的命令 {#llm-command-security}
+
+大语言模型很多时候能给出可以运行的命令,并且看起来能够解决问题。但是这些命令不一定是安全的,也不一定是最佳的选择。例如在[上文](#chatbot-context)的例子里面,LLM 提供了跳过证书检查的命令:
+
+````text
+如果是需要跳过 SSL 检查的网站,可以加上 `-k`:
+
+```bash
+curl -k -O https://example.com/filename.zip
+```
+````
+
+但是这是不恰当的——用户的提问中并不包含 SSL 检查失败的场景,并且 LLM 也完全没有说明对应的风险(恶意的中间人可以将下载下来的文件替换为自己的)。尽管这条命令确实能跑,而且「大部分时候」都能用,但是能用不代表是正确的选择。
+
+在一些更恶劣的情况下,执行 LLM 的命令会导致数据丢失。例如在[这个知乎问题中](https://www.zhihu.com/question/1974854700256944776),LLM 生成的命令就意外删除了 800G 的数据。
+
+因此,在执行 LLM 的命令之前,需要理解命令实际的功能。对 Agent 来说,不同 Agent 软件的隔离、命令批准等机制不同,即使命令没有出现批准提示,也不代表对应的命令绝对安全。在使用 Agent 前,需要确认 Agent 下 LLM 能够访问的数据范围,并在使用时检查其实际的修改操作,做到心中有数。