You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Amazon Bedrock中生成嵌入?是否有自动化实现方案?

自动化实现Amazon Bedrock生成嵌入并存储的方案

当然有自动化的实现方式,以下是两种主流落地方案,完全满足你上传内容到S3后自动生成嵌入并存储的需求:

方案一:S3事件触发Lambda + Bedrock + 目标存储(S3/OpenSearch)

这是灵活性最高的自定义方案,流程逻辑如下:

  1. 配置S3存储桶的对象创建事件通知,当有新文件上传时自动触发Lambda函数
  2. Lambda函数读取S3中的内容,调用Bedrock的嵌入模型生成向量
  3. 将生成的嵌入结果存储回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:42:40