标签 爬虫 下的文章

最近发现网站访问量异常。脚标的“当前浏览次数”数字异常。看了一下后台数据貌似是被刷流量了?搜索了一下ip才发现是被ai爬虫爬的。吐槽一下阿里云的ECS,CPU到70%就直接卡死了。面对ai爬虫,2C2G的小机感觉压力好大。想起来之前读的ruanyifeng的 科技爱好者周刊(第 343 期):如何阻止 AI 爬虫 ,里面提到了两种防止ai爬虫的方案:

  • Cloudflare
  • Anubis

其中Anubis的逻辑大概是:

页面会在用户的浏览器上,执行一段 JS 程序,进行大量的数学计算。直到计算答案正确,才可以访问目标网站。

这个过程有时很耗时,可能需要1~2分钟。
......
那么,Anubis 到底让爬虫计算什么?

具体来说,就是下面这行代码,计算一个哈希值。

const hash = await sha256(${challenge}${nonce});

可以看到,它就是用 SHA256 算法,计算一个字符串的哈希值。

这个字符串由两部分组成,第一部分challenge,由用户的一些公开信息连接而成,包括用户的 IP 地址、浏览器 user-agent 字段、当前日期、Anubis 的公钥等。

第二部分nonce,表示迭代次数,第一次计算就是1,第二次计算就是2,以此类推。

Anubis 的默认设定是,计算出来的哈希值的前五位必须都为0,否则 nonce 自动加1,再次进行计算,直到满足要求为止。

有时,可能需要计算几百万次,才能得到合格的哈希值。熟悉比特币的同学,应该一眼看出来了,这就是比特币的算法。比特币是非常耗费算力的,所以 Anubis 也能很有效地消耗爬虫的 CPU。

但是这对一个个人网站实在太无厘头了!文章最开始提到了使用robots.txt来拒绝爬虫,但貌似AI的爬虫都不遵守robots.txt的内容… 经过我的搜索了解,我找到了llms.txt ,你可以理解为这是面对ai的robots.txt ,它可以大幅度减少ai爬虫对资源的无意义消耗。这里是本站点的 LLMs.txt

下面我讲简单介绍一下llms.txt,以及如何使用它。


llms.txt 的作用

llms.txt 似乎是一种新兴的网站标准,旨在为大型语言模型(LLMs)提供一个简洁的总结,帮助它们快速获取网站的核心信息。它通常是一个 Markdown 文件,放在网站根目录(如 /llms.txt),包含网站的背景、指南和指向详细文档的链接。这对于 LLMs 来说非常有用,因为它们的上下文窗口有限,无法处理整个网站的复杂 HTML 结构。研究表明,它特别适用于需要快速访问技术文档和 API 的场景,如软件开发环境。

如何使用 llms.txt

对于网站所有者,可以按照以下步骤创建和使用 llms.txt:

  • 创建文件: 在网站根目录创建一个名为 llms.txt 的文件,使用 Markdown 格式编写。
  • 添加内容: 包括标题(H1)、摘要(使用 blockquote)、可选的详细部分和链接。例如:
# My Website

> This is a brief summary of what my website offers.
Here are some key points:
- It provides [API documentation](https://example.com/api.md)
- It includes [tutorials](https://example.com/tutorials.md)
  • 提供 Markdown 版本: 为关键页面提供 Markdown 版本,通过在 URL 后加 .md 实现。
  • 使用工具: 可以利用如 llms.txt 生成器 自动生成文件,简化过程。

对于 LLMs,系统会检查网站是否有 /llms.txt 文件,并使用其中的信息快速了解网站,通过链接找到更多详情。

关于周边

为什么我上面会提到大幅度减少呢?因为这是一个新的民间协议,是一个新生的,约定俗成的内容。面对蓬勃发展的ai产业,很多产品经理不会要求自家ai爬虫遵守规则的。

llms.txt 是一种 2024 年 9 月由 Jeremy Howard 提出的网站标准,旨在增强大型语言模型(LLMs)对网站内容的理解和利用,特别是在推理阶段。其设计初衷是解决 LLMs 上下文窗口有限的问题,使其能够高效处理网站信息,而无需解析复杂的 HTML 结构。

llms.txt 的主要作用是为网站提供一个结构化、简洁的 LLM 友好内容入口。证据倾向于认为,它通过提供简短的摘要、背景信息和链接,帮助 LLMs 快速了解网站的目的和内容,避免处理复杂的网页元素如导航、广告和 JavaScript。这对于 LLMs 来说尤为重要,因为它们的上下文窗口通常无法容纳整个网站的全部内容。

使用方法与结构

对于网站所有者,创建和使用 llms.txt 的方法如下:

创建文件:

  • 在网站根目录创建一个名为 llms.txt 的文件。
  • 使用 Markdown 格式编写,确保内容适合人类阅读,也适合 LLMs 解析。

文件结构:

  • 标题(H1):必须包含项目或网站的名称,例如 # 搬砖日记
  • 摘要:使用 blockquote 格式提供简短描述,例如 > 白天给代码写对象,深夜给自己写日记
  • 详细部分(可选):可以包括段落或列表,但不使用额外的标题,例如:
Here are some key points about my website:
- It provides [API documentation](https://example.com/api.md)
- It includes [tutorials](https://example.com/tutorials.md)
  • 文件列表(可选):使用 H2 标题分隔,包含超链接和可选说明,例如:
## Resources
- [Detailed Guide](https://example.com/guide.md): Comprehensive user manual
  • “Optional”部分(可选):用于次要信息,LLMs 可以选择跳过,例如:
## Optional
- [Additional Resources](https://example.com/more.md)

如果你储存的txt文件在访问时出现中文乱码,那么你应该修改服务器配置:

Nginx

    # Serve .txt files with the correct Content-Type
    location ~ \.txt$ {
        default_type text/plain;
        charset utf-8;    # Ensure charset is specified as UTF-8
    }

Apache

# Ensure the default charset is set to UTF-8
    AddDefaultCharset UTF-8

    # Configure specific file types with UTF-8 charset
    <FilesMatch "\.(txt)$">
        ForceType 'text/plain; charset=UTF-8'
    </FilesMatch>

以上均为需要在配置文件中新添加的内容,请勿覆盖原有内容


最近Github多次从多个技术层面对大陆ip/用户进行了筛选封锁,据说是被CSDN的搬空Github给整的… 无论如何,虽然我不是ai从业者,但是如果恰好有相关的朋友看到这里,我给了一些小建议:

  • 在访问网站时,首先检查是否存在 /llms.txt 文件。
  • 使用文件中的信息快速了解网站的目的,并通过提供的链接找到详细内容,例如 API 文档或教程。
  • 可以结合工具如 llms_txt2ctx 解析文件,生成适合 LLMs 的上下文。

毕竟前台页面是给人看的。如果有winwin的方案,何乐而不为呢?