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

如何配置Lambda实现Bedrock知识库与普通大模型按需调用?

无需单独创建Lambda函数,在现有函数内扩展逻辑即可

不需要单独新建Lambda函数,直接在现有函数里加判断逻辑就能实现需求:

  • 先调用Bedrock的检索接口,判断用户问题是否和知识库内容相关
  • 有相关内容就用你当前的retrieve_and_generate逻辑调用带知识库的模型
  • 没相关内容就直接调用普通大模型对话

修改后的代码示例

import boto3
import json

def lambda_handler(event, context):
    bedrock_agent_client = boto3.client('bedrock-agent-runtime', region_name='us-east-1')
    bedrock_client = boto3.client('bedrock-runtime', region_name='us-east-1')
    
    session_id = event.get('sessionId', None)
    user_query = event['query']
    
    # 先执行检索,获取知识库匹配结果
    retrieve_response = bedrock_agent_client.retrieve(
        knowledgeBaseId='WID0XRPRUS',
        retrievalConfiguration={
            'vectorSearchConfiguration': {
                'numberOfResults': 3,
                'filter': {}
            }
        },
        input={'text': user_query}
    )
    
    # 判断是否有有效匹配结果(可根据实际调整,比如加分数阈值)
    has_relevant_content = len(retrieve_response['retrievalResults']) > 0
    
    if has_relevant_content:
        # 调用带知识库的生成接口
        input_data = {
            'input': {'text': user_query},
            'retrieveAndGenerateConfiguration': {
                'knowledgeBaseConfiguration': {
                    'knowledgeBaseId': 'WID0XRPRUS',
                    'modelArn': 'arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0'
                },
                'type': 'KNOWLEDGE_BASE'
            }
        }
        if session_id:
            input_data['sessionId'] = session_id
        
        response = bedrock_agent_client.retrieve_and_generate(**input_data)
    else:
        # 调用普通大模型对话
        invoke_response = bedrock_client.invoke(
            modelId='anthropic.claude-3-sonnet-20240229-v1:0',
            contentType='application/json',
            accept='application/json',
            body=json.dumps({
                "anthropic_version": "bedrock-2023-05-31",
                "max_tokens": 1024,
                "messages": [
                    {"role": "user", "content": user_query}
                ]
            })
        )
        # 解析结果并对齐返回格式
        response_body = json.loads(invoke_response['body'].read())
        response = {
            'output': {
                'text': response_body['content'][0]['text']
            },
            'sessionId': session_id if session_id else None
        }
    
    return response

额外说明

  • 可以根据实际需求调整检索结果的判断规则,比如给retrievalResults里的score设阈值,过滤低匹配度的结果
  • 要确保Lambda的IAM角色拥有bedrock-agent-runtime:Retrieve、bedrock-runtime:InvokeModel这两个权限
  • 普通模型调用的参数(比如max_tokens)可以根据业务场景调整

内容的提问来源于stack exchange,提问作者douglas_min

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:55:09