news 2026/10/23 23:49:04

AIHOT 使用规则页:一份“人读 + 机器读“的条款模板如何编写、渲染与分发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AIHOT 使用规则页:一份“人读 + 机器读“的条款模板如何编写、渲染与分发
  • 后端
  • 前端
  • 人工智能
  • AI 应用
  • AI 写作

【免费下载链接】AIHOT

一个自己找热点、自己写日报的网站框架。把信源和精选标准换成你的,它就是你的行业热点站。

项目地址:https://gitcode.com/gh_mirrors/ai/AIHOT
点击查看免费下载

AIHOT 是一个"自己找热点、自己写日报"的开源网站框架,其中 使用规则模板 定义了读者、脚本和 Agent 使用本站网页、RSS、公开 API 与 MCP 时应当遵守的约定。本篇围绕这份模板展开:逐条拆解它的元信息表格与五个条款章节,并基于仓库源码还原它从 Markdown 文件到网页、再到llms.txt和 HTTP 响应头的完整分发链路——读完你可以直接按流程改写成自己站点的上线版本,并理解"使用规则"在 AI 聚合站中不止是给浏览器看的一页文字。

1. 模板的定位:上线前的法律与使用条款草稿

site/pages/terms.md 开头就声明了它的身份:

这是开源框架自带的模板。上线前请按你的实际情况改写(运营主体、允许和不允许的用途、联系方式),必要时请专业人士审阅。

这意味着仓库里的条款不是某个具体运营方的正式文件,而是一套带占位符的结构化草稿。文档第一张表格列出了四个必填项,模板中全部写作"请填写":

项值
版本请填写
生效日期请填写
运营主体请填写
联系方式请填写

这张表格不只是给人看的。它会被页面代码解析成结构化元数据并渲染进页脚,这一点在 自定义指南 第 7 节("页面文案:site/pages/、site/public/、site/changelog.json")中得到印证:pages/terms.md、pages/privacy.md被明确标注为"现在是模板,上线前按你的实际情况改写,必要时请专业人士看一下"。

模板还提供了一段"页首说明"引用块,作为站点对自身内容性质的总声明:

本站聚合公开信源,用模型生成中文摘要与精选,原文版权归各来源所有。网页、RSS、公开 API 与 MCP 均可匿名使用。

这句话同时点出了两类读者(人和机器接口)与两条底线(版权归原文来源、接口匿名只读),后文五个条款章节就是对它的展开。

2. 五个条款章节:模板的实质内容逐条解读

2.1 内容与版权

模板第 1 节的核心表述:

本站展示的标题、摘要和推荐理由由模型根据公开来源生成,可能有误,重要信息请以原文为准。原文版权归各来源所有;站内只在来源允许时展示全文,其余只展示摘要和原文链接。

这里有两层事实,都能在仓库中找到对应实现:

  • "模型生成、可能有误"对应 AIHOT 的整条处理管线:抓取信源后由模型做筛选、写中文标题、摘要和"推荐理由"(该称呼在 site/site.ts 的ITEM_COPY.reasonLabel中定义),因此免责声明必须写入规则页。
  • "只在来源允许时展示全文"对应信源级的开关:SOURCE_DEFAULTS.siteFulltext默认是false(见 site/site.ts),即"站内展示全文;false 时只显示摘要和原文链接"。后台新建信源时沿用该默认值,改写规则时务必与自己的信源配置保持一致,否则条款与事实不符。

2.2 来源方的更正与下架

模板第 2 节约定:来源方希望更正、下架或调整展示方式时,"请通过反馈页联系我们,我们会尽快处理"。

这一节把"反馈页"(/feedback)变成了正式的版权沟通入口,与关于页底部的ABOUT.copyright文案形成闭环——那段文案同样写明"原文版权归各来源所有,来源方可以联系我们",并把"联系我们"链接指向反馈页(见 site/site.ts 中ABOUT.copyright的定义)。改写时建议把"尽快"替换为可兑现的处理时限表述。

2.3 使用本站的数据(许可边界)

模板第 3 节是全文最需要运营者自己填写的一节:

请写明你允许的用途(例如个人阅读、组织内部使用),以及需要事先取得你同意的用途(例如商业产品、公开转载、批量再分发)。

匿名可访问 ≠ 允许任意用途。AIHOT 框架为此在 site/site.ts 的POLICY.terms中预留了配套字段:

  • notes: { rss, api }:Agent 接入页(/agent)上 RSS、API 两栏各自的规则提醒;
  • license: { llms, agent }:讲清"哪些用途要先取得授权"的话,分别接在llms.txt的版权说明后面、以及给 Agent 的使用说明"使用规则"一节开头。

也就是说,这一节的文字不是只出现在网页上——你会把它写进机器接口面向 LLM 的说明里。改写时请同时考虑这两处场景的语气。

2.4 接口与频率(轮询纪律)

模板第 4 节:

RSS、公开 API 和 MCP 为匿名只读接口。请按响应中的缓存时间轮询,遇到 429 请遵守 Retry-After,不要并发重试。

这句规则的每个词都有对应的工程实现:

  • 匿名只读:公开接口无需 API Key,CORS 只放行GET, HEAD, OPTIONS(PUBLIC_API_CORS,定义于 http-policy.ts);
  • 按缓存时间轮询:公开 JSON 响应带ETag/Cache-Control,客户端应保存ETag下次带If-None-Match,内容未变时返回 304 空正文;llms.txt 生成器 把同样的轮询纪律写进了给 LLM 的接入说明(items 与 hot-topics 最快每 60 秒一次、RSS 每 30 分钟一次);
  • 429 与 Retry-After:限流响应以application/problem+json返回,并在 respond.ts 中显式写入Retry-After头。框架默认由部署的反向代理负责限流,具体阈值通过 site/site.ts 的ACCESS.ratePerMinute配置("同一 IP 每分钟大约能请求多少次……null 表示不限流,说明里不提")——如果你的站会写进规则页,记得让它与真实限流配置一致。

2.5 免责

模板第 5 节只有一句标准表述:"本站按'现状'提供,不保证内容完整、准确和持续可用。"改写时可按需补充服务中断、数据中断等场景,但不要写成无限期可用性承诺——框架本身是"出刊型"站点(日报/周报/月报按 site/site.ts 的EDITION_TIMES定时发布),"持续可用"的措辞容易与产品形态矛盾。

3. 渲染链路:从 Markdown 文件到 /terms 页面

理解这条链路,才知道改写模板后哪些内容"写哪里生效"。

3.1 路由与模板的绑定

网页端 terms.tsx 以 Vite 的?raw导入把模板原文引入:

import copy from "@aihot/site/pages/terms.md?raw"; // … const TERMS = prepareCopy(copy);

?raw意味着模板是构建时按文本打包的——你不需要重启服务或改任何代码,重新构建后(Docker 部署即docker compose up --build)新文案直接生效。

3.2 prepareCopy:元数据表格的解析

site-copy.ts 中的prepareCopy对模板做两件事:

  1. 调用parseCopyFile(md, firstSection)(实现于 markdown.ts),以第一条##标题为界,把 H1 之后的内容解析为正文,前面的键值表格解析为doc.meta;
  2. 剥离开头带"页脚"前缀的备注行(stripPageNotes),再把正文渲染为 HTML。

所以第 1 节那张"版本 / 生效日期"表格在页面上有第二次出现:路由把doc.meta拼进页脚注记——

note={`${POLICY.terms.name} ${TERMS.doc.meta["版本"] ?? ""} · ${TERMS.doc.meta["生效日期"] ?? ""}`}

配套的 隐私说明页 用完全相同的机制读取 privacy.md。结论是:表格里的"请填写"如果忘记改,会原样显示在使用规则页和隐私说明页的页脚,这是改写时最容易漏掉的一处。

3.3 页面元数据与页脚链接

同一路由还定义了页面的 SEO 元数据,全部来自 site/site.ts 的POLICY.terms:

export function meta() { return pageMeta({ title: POLICY.terms.name, description: POLICY.terms.description, path: "/terms", image: "/og/pages/terms.png" }); }
  • POLICY.terms.name(默认"使用规则")用于导航、页脚、页面标题;
  • POLICY.terms.description(默认"本站网页、RSS、公开 API 与 MCP 的使用规则。")是搜索结果与分享卡片里的描述;
  • 页脚链接固定包含"隐私说明"(/privacy)与"Agent 接入页"(/agent),站点模块还可以追加termsLinks。

/terms页面还声明了 300 秒的边缘缓存(edgeTtl(300),见 api.server.ts),因此改写条款重新发布后,边缘节点最多五分钟内仍可能返回旧版——灰度验证时注意这一点。

4. 分发到机器:llms.txt 与 HTTP 响应头

"使用规则"在 AI 聚合站里最重要的读者是 LLM 与 Agent,仓库为它准备了两个分发通道。

4.1 llms.txt:给 LLM 的站点说明书

llms.ts 生成根路径的llms.txt时:

  • 在"页面"清单中列出使用规则页:page(POLICY.terms.name, "/terms", POLICY.terms.covers),其中covers字段(选填)就是"llms.txt 里对这一页的一句说明";
  • 在"使用说明"一节写入版权与授权边界:
"- 内容为第三方原文的聚合摘要与编辑策展,原文版权归各来源所有。" + (POLICY.terms.license?.llms ?? ""),

若配置了SITE.contactEmail,还会追加一行"需要授权的对外使用请联系 …"。改写模板第 3 节时,POLICY.terms.license.llms就是这段文字进入机器通道的出口。

给 Agent 的回答走同一套约定:agent.ts 在每条答复的规则段中拼接POLICY.terms.license?.agent并附上/terms地址。

4.2 响应头:随每个公开接口送达的 terms-of-service

更"硬核"的通道在 API 进程。respond.ts 的applyPublicHeaders是所有公开机器端点的统一出口:

if (POLICY.terms.headers) { for (const [k, v] of Object.entries(POLICY.terms.headers)) reply.header(k, v); links.push(`<${siteUrl("/terms")}>; rel="terms-of-service"`); }
  • 你在POLICY.terms.headers里声明的键值对(如X-Usage、X-Terms)会被原样附加到公开接口响应上;
  • 只要声明了这些头,响应还会自动多出一个Link头,rel="terms-of-service"指向你的/terms页——这是 RFC 8288 关系类型 意义上的"随响应送达的使用条款",浏览器脚本(CORS 下Access-Control-Expose-Headers已包含这些自定义头,见 http-policy.ts 的PUBLIC_API_CORS)和抓包者都能读到;
  • MCP 端点同理,mcp.ts 的CORS_EXPOSE会把POLICY.terms.headers的键名一并加入暴露列表。

默认模板下headers为null,即不发送任何规则头、也不发送terms-of-serviceLink——这是一个可选增强,部署文档 将其列入"site.ts多了几项,都可以不填"的选填清单(POLICY.terms.license、POLICY.terms.headers等)。

4.3 Agent 接入页上的规则提示

/agent页面把规则写进两种接入方式的说明文字(见 panels.tsx):

  • RSS 一栏:"能匿名订阅不等于所有用途都获许可{POLICY.terms.notes?.rss},见使用规则。"
  • API 一栏:"能匿名调用不等于所有用途都获许可{POLICY.terms.notes?.api},见使用规则。"

这里的notes.rss/notes.api就是给接入者看的补充句。若你的站对转载、商用有额外限制,建议同时填写POLICY.terms.notes与POLICY.terms.license两组字段,让网页、llms.txt、Agent 三个通道的表述一致。

5. 改写与验证:把模板变成你的规则页

结合 docs/customize.md 的流程,改写清单如下:

  1. 改写 site/pages/terms.md:填实元信息表格(版本、生效日期、运营主体、联系方式);逐节补充第 2 节(来源方处理流程与时限)、第 3 节(允许的用途 / 需授权的用途)、第 4 节(与你反向代理限流一致的描述);
  2. 同步 site/site.ts:按需填POLICY.terms.covers(llms.txt 说明)、notes(Agent 接入页提醒)、license(llms.txt 与 Agent 使用说明中的授权话术)、headers(公开接口响应头),以及SITE.contactEmail(填写后 llms.txt 会给出授权联系邮箱);
  3. 一致性检查:第 1 节"只在来源允许时展示全文"要与信源的siteFulltext配置相符;第 4 节的限流描述要与ACCESS.ratePerMinute或反向代理实际配置相符;
  4. 构建与验证:
npm run typecheck DATABASE_URL=postgres://…/myhot_test npm test # 库名必须以 _test 或 _ci 结尾 docker compose up --build # 重新构建后条款页生效 node scripts/smoke.ts --base http://localhost:3000 # 站点跑起来以后

然后打开/terms确认页脚显示的是你的版本与生效日期而非"请填写",访问任意公开接口确认(若配置了headers)响应中带有Link: <…/terms>; rel="terms-of-service"。

6. 边界说明:模板与事实的区分

  • 本文所述渲染链路、响应头行为、轮询约定均由当前仓库源码确认,适用前提是你基于本仓库结构部署;
  • 模板本身是法律文本草稿,"尽快处理""按现状提供"等表述的法律效力取决于你的司法管辖区,仓库文档也明确要求"必要时请专业人士审阅";
  • POLICY.terms.headers与interfaceVersion等字段标注了"已经有人接入后就不要再改"之类的约束(见 site/site.ts 注释),公开接口版本号"只升不降",改写规则时不要顺手变更这些稳定性承诺。

使用规则页在 AIHOT 中的角色,是把"匿名可读"与"授权边界"同时讲清楚的一页:对人,它解释版权、更正与免责;对机器,它通过llms.txt、Agent 使用说明与 HTTPterms-of-service头,把同样的边界送进每一个脚本和 LLM 的上下文。

  • 后端
  • 前端
  • 人工智能
  • AI 应用
  • AI 写作

【免费下载链接】AIHOT

一个自己找热点、自己写日报的网站框架。把信源和精选标准换成你的,它就是你的行业热点站。

项目地址:https://gitcode.com/gh_mirrors/ai/AIHOT
点击查看免费下载

相关推荐

上一篇:codebase-memory-mcp 评测方法论:可复现地量化答案质量、延迟稳定性与 Agent 节省量
下一篇:NodeGui QStackedWidgetSignals 信号接口详解:currentChanged 与 Qt 信号桥接机制

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 23:48:51

数据结构作业银行排队系统:链式队列与事件驱动模拟实现

简介&#xff1a;一套以“银行排队系统”为场景的数据结构期末作业完整方案&#xff0c;面向需掌握队列应用与多队列优先级处理的学生&#xff0c;也适合作为课程设计参考。资源围绕队列先进先出&#xff08;FIFO&#xff09;特性&#xff0c;实现了VIP用户优先于普通用户的多队…

作者头像 李华
网站建设 2026/10/20 7:41:56

Unity射击游戏开发:从对象池到碰撞检测的完整实现路径

简介&#xff1a;这是一份基于 Unity 3D 实现的太空飞机射击游戏期末作业项目&#xff0c;面向正在学习 Unity 或需要完成同类课程设计的学生。工程覆盖了游戏开发的主要环节&#xff1a;太空场景搭建、飞机移动控制、子弹射击与对象池、碰撞检测、分数与游戏状态管理&#xff…

作者头像 李华
网站建设 2026/10/14 12:31:12

CCNA中版PDF实验指南:从模拟器选型到VLAN/OSPF/ACL排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 7:15:04

AI Agent 面试题 133:如何设计Agent的异步任务处理架构?

&#x1f525; AI Agent 面试题 133&#xff1a;如何设计Agent的异步任务处理架构&#xff1f;摘要&#xff1a;本文深入解析了「如何设计Agent的异步任务处理架构&#xff1f;」这一 AI Agent 领域的核心面试题。文章从 混合架构模式 的基本概念出发&#xff0c;系统性地剖析了…

作者头像 李华