本节我们将基于一个pdf文件,创建自己的knowledge base。
Bedrock Knowledge Base
是一种 RAG (Retrieval Augmented Generation)
实现。用户无需自建基础设施,它会自动向量化和索引,并支持多种检索方式(向量搜索、语义搜索、混合检索),它会自动进行文档切分和处理,内置数据版本控制
Bedrock knowledge bases需要读取s3的数据,这里我们先创建一个s3桶,并上传一个pdf文件:
aws s3 mb s3://knowledge-base-xxx
wget https://ico.org.uk/media/for-organisations/guide-to-the-general-data-protection-regulation-gdpr-1-0.pdf
aws s3 cp guide-to-the-general-data-protection-regulation-gdpr-1-0.pdf s3://knowledge-base-xxx
进入bedrock服务,创建knowledge base
:
名称和IAM role保持默认选项,选择S3作为数据源:
进入下一步后,选择上一步创建的S3桶作为数据源:
选择Titan Text Embeddings v2
作为Embedding model;
在向量数据库的选择中,可以使用opensearch、Aurora、MongoDB、Redis等,我们这里使用Quick create
,这样会自动创建一个opensearch serverless集群作为向量数据库:
进入最后一步,review上面的选择,然后进行创建:
创建过程需要等待5分钟。
创建好knowledge base后,还需要进行数据同步,它会自动读取pdf,并进行embedding操作,保存到opensearch serverless:
等待同步完成:
在右侧选择一个模型,并进行查询:
提问问题后,它会根据pdf的内容进行回答,并且点击参考中的链接,会跳转到s3的对应路径:
在bedrock-agent-runtime中,有两个API retrieve
和retrieveAndGenerate
如果关闭右上角的Generate responses
, knowledge base只会获取向量数据库中的结果,不会再调用LLM再次生成回答:
从控制台抓包也能看到这两种方式不同API的调用: