在 Amazon Bedrock 的知识库中部署网络爬虫




Amazon Bedrock 是一项全托管服务,只需一个 API ,即可调用 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和 Amazon 等业界领先的人工智能 (AI) 公司推出的高性能基础模型 (FM),并构建兼具安全性和隐私性的负责任的生成式 AI 应用程序所需的各种能力。
简介
借助 Amazon Bedrock,可针对不同的用例尝试和评估顶级基础模型,也可通过检索增强生成 (RAG) 等技术利用您的企业数据自定义私有化基础模型,并基于您的企业系统和数据资源构建任务代理。借助 Knowledge Bases for Amazon Bedrock,您可以将数据源聚合到单个信息库中,从而轻松构建采用 RAG 技术的应用程序。
对于大部分 AI 应用程序而言,想要得到准确且相关的数据,就必须从各个网站获取最新的详尽信息。因此,不少客户希望借助 Knowledge Bases for Amazon Bedrock 扩展爬取和索引公共网站的功能。想要实现这一点,我们可以将网络爬虫集成到知识库中,以高效获取并利用这些网站上的数据。在本文中,我们将向您介绍如何无缝实现该功能。
用于知识库的网络爬虫
借助知识库中的网络爬虫数据源,您可以利用 AWS Management Console 或 API 基于爬取的网站数据为终端用户创建生成式 AI 网络应用程序。网络连接器提供以下默认爬取操作:获取所提供的种子 URL,遍历同一顶级域名 (TDP) 下与具有相同或更深 URL 路径的子链接。
目前需要考虑以下问题:网络爬虫只能爬取无需身份验证的 URL,URL 的主机字段不可以是 IP 地址,必须以 http:// 或 https:// 开头。此外,网络连接器会获取爬取页面中引用的非 HTML 文件,比如 PDF、文本文件、markdown 和 CSV 文件(除非这些文件明确排除在外),而不会考虑这些网页的 URL。在提供多个种子 URL 的情况下,网络连接器会爬取所有符合种子 URL 的 TPD 和路径的 URL。但最多只能提供 10 个源 URL,以供知识库作为爬取的起点。
默认情况下,网络连接器不会遍历不同域名下的网页,但由于其默认行为可以获取受支持的非 HTML 文件,因此爬取过程始终会在指定的范围内进行,并且爬取的信息会始终有所侧重且与目标数据源相关。
了解同步范围
在构建提供网页爬取功能的知识库时,可选择不同的同步类型来控制需要爬取的网页。下表展示了在不同同步范围内,根据给定源 URL 所爬取的路径示例(以 https://example.com 为例)。
Sync Scope Type | Source URL | Example Domain Paths Crawled | Description |
Default | https://example.com/products | https://example.com/products | Same host and the same initial path as the source URL |
https://example.com/products/product1 | |||
https://example.com/products/product | |||
https://example.com/products/discounts | |||
Host only | https://example.com/sellers | https://example.com/ | Same host as the source URL |
https://example.com/products | |||
https://example.com/sellers | |||
https://example.com/delivery | |||
Subdomains | https://example.com | https://blog.example.com | Subdomain of the primary domain of the source URLs |
https://blog.example.com/posts/post1 | |||
https://discovery.example.com | |||
https://transport.example.com |
您可以设置爬取速度的最大限速来控制最大爬取速度。该值越大,同步时间越短。但如果域名下存在 robots.txt 文件,爬取任务便会始终遵循该文件中的标准 robots.txt 指令,例如“允许”、“不允许”和爬取速度。
此外,还可使用包含和排除过滤器来进一步明确要爬取的 URL 范围。过滤器是应用于各个 URL 的正则表达式 (regex) 模式。如果某个 URL 与任一排除过滤器匹配,爬虫便会忽略该 URL。相反,如果设置了包含过滤器,爬虫便只会处理至少与任一过滤器匹配且未超出范围的 URL。例如,如需排除以 .pdf 结尾的 URL,可使用正则表达式 ^.*\.pdf$;如需爬取只包含 “products”一词的 URL,可使用正则表达式 .*products.*。
解决方案概述
接下来,我们将逐步演示如何利用网络爬虫构建知识库并对其进行测试,以及如何使用特定嵌入模型和 Amazon OpenSearch Service 向量集合(作为向量数据库)来构建知识库。此外,我们还将讨论如何对网络爬虫进行监控。
先决条件
请确保您有权爬取即将使用的 URL,并遵循 Amazon 可接受使用政策。同时,请确保这些 URL 的机器人检测功能均已关闭。知识库中的网络爬虫会通过用户代理 bedrockbot 来爬取网页。
利用网络爬虫构建知识库
在知识库中实现网络爬虫的具体步骤如下:
1. 在 Amazon Bedrock 控制台中,选择导航窗格中的“Knowledge bases”。
2. 点击 Create knowledge base。
3. 在 Provide knowledge base details 页面,设置以下配置:
a) 为知识库命名。
b) 对于 IAM permissions 项,选择 Create and use a new service role。
c) 对于 Choose data source项,选择 Web Crawler 作为数据源。
d) 点击 Next。
4. 在 Configure data source 页面,设置以下配置:
a) Source URLs 项输入 https://www.aboutamazon.com/news/amazon-offices。
b) Sync scope 项选择 Host only。
c) Include patterns 项输入 ^https?://www.aboutamazon.com/news/amazon-offices/.*$。
d) 对于排除模式,输入 *plants.*(我们不需要 URL 中包含“plants”一词的帖子)。
e) Content chunking and parsing 项选择 Default。
f) 点击 Next。
5. 在 Select embeddings model and configure vector store 页面,设置以下配置:
a) Embeddings model 项选择 Titan Text Embeddings v2。
b) Vector dimensions 项输入 1024。
c) Vector database 项选择 Quick create a new vector store。
d) 点击 Next。
6. 仔细检查后,选择 Create knowledge base。
在上述步骤中,我们使用同步范围 Include patterns 和 Host only 演示了如何使用网络爬虫中的包含模式。但如前所述,使用默认的同步范围也可实现同样的效果。

在创建知识库时,可选择 Quick create vector store 选项来创建 Amazon OpenSearch Serverless 向量搜索集合。启用该选项后,系统会自动为您设置公共向量搜索集合和向量索引,并对其设置必填字段和必要的配置。此外,Knowledge Bases for Amazon Bedrock 还能管理端到端摄取和查询工作流。
测试知识库
接下来,我们来了解一下如何测试使用网络爬虫作为数据源的知识库:
1. 在 Amazon Bedrock 控制台上,导航至先前创建的知识库。
2. 在 Data source 下,选择数据源名称并点击 Sync。同步过程可能需要几分钟到几小时,具体取决于数据大小。
3. 同步任务完成后,在右侧面板的 Test knowledge base 下,选择 Select model 并点击想要选择的模型。
4. 输入以下任一提示词并查看模型响应:
a) 如何参观亚马逊西雅图办公区?
b) 提供有关亚马逊北美区第二总部的信息。
c) 亚马逊纽约办公区是什么样的?
截图如下所示,会在响应参考网页中返回引用的内容。其中 x-amz-bedrock-kb-source-uri 是网页链接,可帮助您验证响应的准确性。

使用 AWS SDK 创建知识库
以下代码展示了如何使用 AWS SDK for Python (Boto3) 在 Amazon Bedrock 中创建使用特定嵌入模型和 Amazon OpenSearch Service 向量集合(向量数据库)的知识库。
import boto3
client = boto3.client('bedrock-agent')
response = client.create_knowledge_base(
name='workshop-aoss-knowledge-base',
roleArn='your-role-arn',
knowledgeBaseConfiguration={
'type': 'VECTOR',
'vectorKnowledgeBaseConfiguration': {
'embeddingModelArn': 'arn:aws:bedrock:your-region::foundation-model/amazon.titan-embed-text-v2:0'
}
},
storageConfiguration={
'type': 'OPENSEARCH_SERVERLESS',
'opensearchServerlessConfiguration': {
'collectionArn': 'your-opensearch-collection-arn',
'vectorIndexName': 'blog_index',
'fieldMapping': {
'vectorField': 'documentid',
'textField': 'data',
'metadataField': 'metadata'
}
}
}
)
以下 Python 代码展示了如何使用 Boto3 为 Amazon Bedrock 知识库创建网络爬虫数据源,并明确列出了 URL 种子、爬取限制以及包含和排除过滤器:
import boto3
client = boto3.client('bedrock-agent', region_name='us-east-1')
knowledge_base_id = 'knowledge-base-id'
response = client.create_data_source(
knowledgeBaseId=knowledge_base_id,
name='example',
description='test description',
dataSourceConfiguration={
'type': 'WEB',
'webConfiguration': {
'sourceConfiguration': {
'urlConfiguration': {
'seedUrls': [
{'url': 'https://example.com/'}
]
}
},
'crawlerConfiguration': {
'crawlerLimits': {
'rateLimit': 300
},
'inclusionFilters': [
'.*products.*'
],
'exclusionFilters': [
'.*\.pdf$'
],
'scope': 'HOST_ONLY'
}
}
}
)
监控
可在 Amazon CloudWatch 日志中跟踪正在运行的网络爬虫的状态,该日志会报告网络爬虫访问的 URL,以及是否成功检索或跳过了这些 URL。下方截图展示了 Amazon CloudWatch 日志中爬取任务的具体情况。

清理
清理资源的具体步骤如下:
1. 删除知识库:
a) 在 Amazon Bedrock 控制台上,在导航栏中选择 Orchestration 下的 Knowledge bases。
b) 选择先前创建的知识库。
c) 记录知识库概述中 AWS Identity and Access Management (IAM) 服务角色的名称。
d) 记录 Vector database 中 Amazon OpenSearch Serverless 集合的 ARN。
e) 点击 Delete,再输入 delete 进行确认。
2. 删除向量数据库:
a) 在 Amazon Bedrock 控制台上,选择导航栏中 Serverless 下的 Orchestration。
b) 在搜索栏中输入先前保存的集合的 ARN。
c) 选择该集合并点击 Delete。
d) 在确认提示中输入 confirm,接着选择 Delete。
3. 删除 IAM 服务角色:
a) 在 IAM 控制台上,选择导航栏中的 Roles。
b) 搜索先前记录的角色名称。
c) 选中该角色并点击 Delete。
d) 在确认提示中输入角色名称,再删除该角色。
总结
在本文中,我们展示了如何利用 Knowledge Bases for Amazon Bedrock 来使用网络数据源,以实现公共网页的索引。借助该功能,可实现对网站的高效爬取和索引,利用网络上丰富的相关信息来填充知识库。此外,借助 Amazon Bedrock 的基础设施,还可利用最新的详尽数据来提高生成式 AI 应用程序的准确性和有效性。