为何要使用编号的账本ID(研究依据)
专为那些需要修改引用规则或账本机制的人准备的设计说明。SKILL.md中的表述绝非随意为之。
结构性技巧
当模型从记忆中重构URL时,就容易出现错误引用。如果模型仅需输出检索时获得的那个小整数,那就无需进行任何重构——错误的ID是可以被识别的(因为它并不存在于账本中),而错误的URL则是不可能出现的(模型本身不会输入URL,只有render函数会处理)。这正是Perplexity乘积所依赖的原理,也是为何URL由账本而非正文来管理的根本原因。
由此可得:在检索时进行注册,随后按固定规则生成输出。 任何允许模型在“来源”板块直接输入URL的工作流,都能重新获得这一保障。
写作时即引用,而非事后添加
ALCE(arXiv:2305.14627)对大语言模型生成的答案的归属性进行了评估,发现通过在写作过程中从编号的检索片段中直接生成引用,其归属标注效果远优于事后再插入引用。事后添加引用会让模型去寻找一个与它已写好的句子看似匹配的来源——而这恰恰会导致引用内容去支持页面上并未提及的内容。
因此:应在撰写每句话时立即进行内联引用。绝不可在段落或文档末尾集中列出大量引用。
直接引文才能为论断提供依据
WebGPT(arXiv:2112.09332)会在浏览时收集原文中的完整引文,并以此为基础生成答案。该技能的实用准则是:当某个观点包含数据、日期、名称或数量等信息时,应直接引用来源原文中的表述,而非从层层总结后的内容中转述。每一次总结都会增加数据出现偏差的风险。
格式规范
这些规范源自Perplexity泄露的系统提示语(jujumilk3/leaked-system-prompts),值得借鉴,因为用户正是通过学习这些格式来理解内容的:
- 标记符应直接紧跟在句末标点之后,且之间不加空格:
water.[1] - 每个引用编号需单独放在括号内:
[1][2],而非[1, 2] - 每句话中的引用编号最多不超过3个——超过此限制后,引用将无法准确指示该观点出自哪一来源
- 绝不可引用实际未参考过的来源
- 对于那些无需引用的查询类型(如翻译、创意写作、 casual聊天),是通过指令进行豁免处理,而非通过独立的分类器判断
由于Perplexity的界面会显示来源卡片,因此禁止在答案中直接出现原始URL。而Hermes在聊天或文本输出中都没有类似的界面层,所以该技能会明确列出编号与对应URL的列表。
相关的树内实现方式
在 PR #44833 中,tools/web_tools.py 基于这一思路开发出了一个进程内版本(即构建一个“网址 -> 结果数量”的注册表,并在工具输出结果时附带引用指引)。该路径能够确保临时生成的网页答案在被获取后始终有据可查。而该技能则属于可移植部分:它适用于任何数据检索方式(浏览器、curl、命令行工具、本地 PDF 文件),并且会将相关记录持久化到磁盘上,从而让多轮对话、多文件处理以及多子智能体协作时的标识符保持稳定。这两者可以共存——对于所有写入文件的记录而言,磁盘上的记录就是其真实来源。