如何在Amazon Bedrock中生成嵌入?是否有自动化实现方案?
自动化实现Amazon Bedrock生成嵌入并存储的方案
当然有自动化的实现方式,以下是两种主流落地方案,完全满足你上传内容到S3后自动生成嵌入并存储的需求:
方案一:S3事件触发Lambda + Bedrock + 目标存储(S3/OpenSearch)
这是灵活性最高的自定义方案,流程逻辑如下:
- 配置S3存储桶的对象创建事件通知,当有新文件上传时自动触发Lambda函数
- Lambda函数读取S3中的内容,调用Bedrock的嵌入模型生成向量
- 将生成的嵌入结果存储回S3(比如以JSON格式保存)或直接写入OpenSearch的向量索引
示例代码(Lambda函数核心逻辑)
import boto3 import json s3 = boto3.client('s3') bedrock_runtime = boto3.client('bedrock-runtime') opensearch = boto3.client('opensearch') # 若使用OpenSearch则初始化该客户端 def lambda_handler(event, context): # 1. 获取S3上传的文件信息 bucket = event['Records'][0]['s3']['bucket']['name'] key = event['Records'][0]['s3']['object']['key'] # 2. 读取文件内容(假设为文本文件,可根据实际格式调整) response = s3.get_object(Bucket=bucket, Key=key) content = response['Body'].read().decode('utf-8') # 3. 调用Bedrock生成嵌入(以Amazon Titan Embeddings模型为例) model_id = 'amazon.titan-embed-text-v1' body = json.dumps({ "inputText": content, "dimensions": 1024 # 可选参数,根据模型支持的维度调整 }) embed_response = bedrock_runtime.invoke_model( modelId=model_id, contentType='application/json', accept='application/json', body=body ) embed_result = json.loads(embed_response['body'].read()) embedding = embed_result['embedding'] # 4. 存储结果:方式一 - 存回S3 output_key = f"embeddings/{key.split('/')[-1]}.json" s3.put_object( Bucket=bucket, Key=output_key, Body=json.dumps({"original_key": key, "embedding": embedding}) ) # 4. 存储结果:方式二 - 写入OpenSearch(需提前创建向量索引) # opensearch.index( # index='document_embeddings', # body={ # "content": content, # "embedding": embedding, # "source_key": key # } # ) return { 'statusCode': 200, 'body': json.dumps('嵌入生成并存储完成') }
方案二:OpenSearch Service Ingest Pipeline + Bedrock
如果最终目标是将嵌入存储到OpenSearch,可直接利用OpenSearch的内置能力,无需编写Lambda函数:
- 创建OpenSearch的Ingest Pipeline,在管道中配置调用Bedrock的嵌入模型,自动为输入的文本字段生成嵌入向量
- 配置数据导入方式(如S3批量导入、Logstash等),当数据进入OpenSearch时,Ingest Pipeline会自动触发嵌入生成并写入向量字段
核心配置示例(Ingest Pipeline)
{ "description": "基于Bedrock生成嵌入的处理管道", "processors": [ { "bedrock_embedding": { "model_id": "amazon.titan-embed-text-v1", "field_map": { "content": "embedding" // 将content字段的文本生成嵌入,存储到embedding字段 }, "region": "us-east-1" // 替换为你的AWS区域 } } ] }
关键注意事项
- 权限配置:确保Lambda/OpenSearch拥有S3读取、Bedrock模型调用、目标存储写入的IAM权限
- 模型适配:Bedrock支持多种嵌入模型(如Titan、Cohere、Anthropic),不同模型的请求参数和输出格式略有差异,需对应调整代码或配置
- 批量优化:处理大文件或大量文件时,建议在Lambda中实现分块处理、异步批量调用,避免超时或限流
内容的提问来源于stack exchange,提问作者kishi
相关产品推荐
相关产品推荐

