EN

AWS Bedrock Knowledge Bases:2026年AI应用完全指南

使用AWS Bedrock Knowledge Bases构建生产级AI应用

返回教程列表🌐 Read in English
进阶20 分钟

AWS Bedrock Knowledge Bases:2026年AI应用完全指南

使用AWS Bedrock Knowledge Bases构建生产级AI应用

AWS Bedrock Knowledge Bases:2026年完全指南 概述 AWS Bedrock Knowledge Bases为企业级AI提供完全托管的RAG能力,集成S3和向量搜索。作为领先的云AI平台之一,它提供了生产应用所需的可靠性、可扩展性和安全性。

AWS Bedrock Knowledge Bases:2026年完全指南

概述

AWS Bedrock Knowledge Bases为企业级AI提供完全托管的RAG能力,集成S3和向量搜索。作为领先的云AI平台之一,它提供了生产应用所需的可靠性、可扩展性和安全性。

为什么选择AWS Bedrock Knowledge Bases?

  • 托管基础设施:无需ML专业知识即可部署
  • 企业合规:内置SOC 2、HIPAA、GDPR支持
  • 可扩展性:从原型到数百万用户自动扩展
  • 集成:与其他AWS Bedrock服务无缝协作
  • 入门指南

    前提条件

    bash
    

    安装SDK

    pip install aws-bedrock-sdk boto3

    配置凭证

    aws configure # 或等效的云提供商配置

    环境设置

    bash
    export CLOUD_API_KEY=your_api_key
    export CLOUD_REGION=us-east-1
    export CLOUD_PROJECT_ID=your_project_id
    

    核心实现

    基本API使用

    python
    import os
    import json
    import boto3  # 或等效的SDK
    from typing import Optional

    class AWSBedrockKnowledgeBasesClient: """AWS Bedrock Knowledge Bases客户端。""" def __init__(self, region: str = "us-east-1"): self.region = region self.client = self._initialize_client() def _initialize_client(self): """初始化AWS Bedrock客户端。""" return boto3.client( service_name="knowledgebases", region_name=self.region ) def call( self, prompt: str, model_id: str = "gpt-4o", max_tokens: int = 2048, temperature: float = 0.7 ) -> str: """向AWS Bedrock Knowledge Bases发起API调用。""" body = json.dumps({ "prompt": prompt, "max_tokens": max_tokens, "temperature": temperature }) response = self.client.invoke_model( modelId=model_id, body=body, contentType='application/json', accept='application/json' ) result = json.loads(response['body'].read()) return result.get('completion', result.get('output', {}).get('message', {}).get('content', [{}])[0].get('text', '')) def stream(self, prompt: str, model_id: str = "gpt-4o"): """从AWS Bedrock Knowledge Bases流式获取响应。""" body = json.dumps({"prompt": prompt, "stream": True}) response = self.client.invoke_model_with_response_stream( modelId=model_id, body=body ) stream = response.get('body') if stream: for event in stream: chunk = event.get('chunk') if chunk: data = json.loads(chunk.get('bytes').decode()) yield data.get('delta', {}).get('text', '')

    使用示例

    client = AWSBedrockKnowledgeBasesClient()

    简单调用

    response = client.call("用简单的话解释完全托管的RAG与S3和向量搜索") print(response)

    流式调用

    for chunk in client.stream("写一份关于完全托管的RAG与S3和向量搜索的详细指南"): print(chunk, end="", flush=True)

    构建生产级服务

    FastAPI集成

    python
    from fastapi import FastAPI, HTTPException
    from fastapi.responses import StreamingResponse
    from pydantic import BaseModel

    app = FastAPI(title="AWS Bedrock Knowledge Bases API") ai_client = AWSBedrockKnowledgeBasesClient()

    @app.post("/generate") async def generate(request: Request): try: if request.stream: def generate_stream(): for chunk in ai_client.stream(request.prompt, request.model): yield chunk return StreamingResponse(generate_stream(), media_type="text/plain") response = ai_client.call( request.prompt, request.model, request.max_tokens ) return {"response": response} except Exception as e: raise HTTPException(status_code=500, detail=str(e))

    @app.get("/models") async def list_models(): return {"models": ["gpt-4o", "claude-3-5-sonnet", "gemini-1.5-pro"]}

    批量处理

    python
    import asyncio
    from concurrent.futures import ThreadPoolExecutor

    async def batch_generate( prompts: list[str], model: str = "gpt-4o", max_concurrent: int = 5 ) -> list[str]: """并发处理多个提示。""" semaphore = asyncio.Semaphore(max_concurrent) async def process_one(prompt: str) -> str: async with semaphore: loop = asyncio.get_event_loop() return await loop.run_in_executor( None, lambda: ai_client.call(prompt, model) ) tasks = [process_one(p) for p in prompts] results = await asyncio.gather(*tasks, return_exceptions=True) # 处理错误 return [r if not isinstance(r, Exception) else f"Error: {r}" for r in results]

    以5倍并行度处理100个提示

    prompts = [f"问题 {i}" for i in range(100)] results = asyncio.run(batch_generate(prompts)) print(f"处理了 {len(results)} 个提示")

    成本管理

    python
    class CostOptimizer:
        """优化AWS Bedrock Knowledge Bases的成本。"""
        
        # 每百万Token的成本(近似值)
        MODEL_COSTS = {
            "gpt-4o": {"input": 5.0, "output": 15.0},
            "gpt-4o-mini": {"input": 0.15, "output": 0.60},
            "claude-3-5-sonnet": {"input": 3.0, "output": 15.0},
            "claude-3-5-haiku": {"input": 0.80, "output": 4.0}
        }
        
        def select_model(self, prompt: str, quality_required: str = "medium") -> str:
            """为任务选择最具成本效益的模型。"""
            prompt_length = len(prompt.split())
            
            if quality_required == "high" or prompt_length > 2000:
                return "gpt-4o"
            elif quality_required == "medium":
                return "gpt-4o-mini"
            else:
                return "gpt-4o-mini"  # 低质量任务最便宜
        
        def estimate_cost(self, prompt: str, model: str) -> float:
            """估算请求的成本。"""
            input_tokens = len(prompt.split()) * 1.3  # 粗略估计
            output_tokens = 500  # 平均输出
            
            costs = self.MODEL_COSTS.get(model, {"input": 5.0, "output": 15.0})
            
            input_cost = (input_tokens / 1_000_000) * costs["input"]
            output_cost = (output_tokens / 1_000_000) * costs["output"]
            
            return input_cost + output_cost

    optimizer = CostOptimizer() model = optimizer.select_model("关于天气的简单问题", quality_required="low") estimated = optimizer.estimate_cost("简单问题", model) print(f"模型: {model}, 预估成本: ${estimated:.6f}")

    安全最佳实践

    python
    import hashlib
    import hmac
    from functools import wraps

    def require_api_key(func): """验证API密钥的装饰器。""" @wraps(func) async def wrapper(*args, **kwargs): request = args[0] if args else kwargs.get('request') api_key = request.headers.get("X-API-Key", "") if not validate_api_key(api_key): raise HTTPException(status_code=401, detail="无效的API密钥") return await func(*args, **kwargs) return wrapper

    def sanitize_prompt(prompt: str) -> str: """基本的提示注入防护。""" # 移除潜在的系统指令注入 dangerous_patterns = [ "忽略之前的指令", "system:", "assistant:", "\n\nhuman:", ] sanitized = prompt for pattern in dangerous_patterns: sanitized = sanitized.replace(pattern.lower(), "[已过滤]") return sanitized[:10000] # 限制提示长度

    监控与可观测性

    python
    import logging
    from prometheus_client import Counter, Histogram

    logger = logging.getLogger(__name__)

    指标

    request_counter = Counter( 'ai_requests_total', 'API请求总数', ['model', 'status'] ) latency_histogram = Histogram( 'ai_request_duration_seconds', '请求延迟', ['model'] )

    @latency_histogram.labels(model='gpt-4o').time() def monitored_call(prompt: str, model: str = "gpt-4o") -> str: try: result = ai_client.call(prompt, model) request_counter.labels(model=model, status='success').inc() return result except Exception as e: request_counter.labels(model=model, status='error').inc() logger.error(f"API调用失败: {e}") raise

    结论

    AWS Bedrock Knowledge Bases为完全托管的RAG与S3和向量搜索提供了坚实的基础。通过遵循本指南中的模式,您可以构建具有适当安全性、监控和成本优化的生产就绪AI应用。


    *AWS Bedrock Knowledge Bases实现指南 | 2026年5月*

    相关工具

    AWS BedrockKnowledge Bases