AWS Bedrock AgentCore与Strands SDK构建SAP智能采购Agent实战

🔑 核心摘要

  • 采用AWS Glue OData连接器实现SAP EKKO/EKPO表数据的批量ETL抽取,存储至S3并通过Athena查询
  • 基于Strands Agents SDK构建采购Agent,利用Tool Use模式实现模型推理与工具执行的自动循环
  • 通过Bedrock AgentCore Runtime托管Agent运行,AgentCore Memory管理多轮对话上下文
  • 自定义Lambda Tools封装Athena查询与SAP Gateway API调用,Knowledge Base提供非结构化采购政策检索

AWS Bedrock AgentCore与Strands SDK构建SAP智能采购Agent实战

企业采购场景的技术挑战与解决思路

在典型的SAP采购管理场景中,采购人员需要频繁切换多个事务码完成日常工作:使用ME41查询询价单、ME47查看供应商报价、XK03核对供应商主数据,最终通过ME21N创建采购订单。这种传统操作模式存在明显的效率瓶颈——信息分散在SAP GUI、Excel报表和邮件系统中,容易导致决策延迟和采购风险。

本方案的核心设计思路是:通过自然语言交互替代SAP GUI的事务码操作,让采购人员以Chat对话方式完成RFQ查询、报价分析、供应商核查和PO创建等全流程操作。技术实现上,我们将AWS的数据集成能力、生成式AI服务与SAP系统进行深度整合。

系统架构设计与核心组件

三层架构设计

整体架构分为数据层智能层交互层三个核心部分,各层职责明确:

  • 数据层:AWS Glue通过OData协议从SAP抽取RFQ、报价单、供应商主数据等业务数据,经ETL转换后存储至S3;Athena使用Glue Data Catalog作为元数据存储库提供查询能力
  • 智能层:Strands Agent作为核心编排引擎,根据用户意图调度对应Tools执行;Bedrock AgentCore Runtime提供托管运行环境,AgentCore Memory管理会话上下文
  • 交互层:前端应用通过AgentCore Runtime API发起自然语言请求,获取结构化响应

核心业务流程

从技术实现角度,业务请求的处理流程如下:

  1. 查询类请求:Agent识别意图后调用Lambda驱动的Athena查询Tool,从S3中检索预处理的SAP数据
  2. 创建类请求:Agent调用PO创建Tool,通过Lambda调用SAP Gateway暴露的OData API接口完成订单创建
  3. 知识类请求:Agent调用Knowledge Base Tool,检索供应商付款条件、碳排放标准等非结构化采购政策信息

SAP数据集成实现

OData协议选型考量

SAP OData是基于HTTP的标准Web协议,支持使用ABAP查询和更新SAP数据。相比传统的RFC/BAPI方式,OData具有以下优势:

  • 符合RESTful API设计规范,更适合现代化的API驱动架构
  • 提供更好的可维护性和扩展性
  • 支持与外部应用程序、平台和设备的无缝集成

在AWS服务选型上,虽然AWS AppFlow也支持OData协议,但本方案需要进行数据类型转换等复杂ETL操作,因此选择AWS Glue作为数据集成工具。

SAP端配置要点

在SAP系统中需要完成以下配置:

  1. 在SAP Gateway中配置操作数据供应(ODP)数据来源
  2. 通过事务码/IWFND/MAINT_SERVICE启用OData V2.0目录服务
  3. 使用SAP Gateway Client测试服务发布状态,确保EKKO和EKPO表的OData服务可正常访问

Glue OData连接配置

创建AWS Glue OData Connection时,需要提供以下关键配置:

  • Application Host URL:SAP OData实例的主机地址
  • Service Path:OData服务的应用路径
  • 认证信息:通过AWS Secrets Manager安全存储SAP凭证,Glue作业在运行时动态检索

这种配置方式将敏感信息与作业代码分离,增强了整体安全性和灵活性。

Agent框架与Tools实现

Strands Agents SDK核心特性

Strands Agents SDK是AWS发布的开源AI智能体开发框架,其核心优势在于:

  • 充分利用大语言模型的原生推理、规划和工具调用能力
  • 无需复杂的编排逻辑,用简洁代码构建Agentic AI应用
  • 支持Orchestrator模式(Tool Use),实现模型推理和工具执行的自动循环

Agent运行逻辑设计

本方案采用Orchestrator模式,Agent的运行逻辑包含以下核心要素:

  • System Prompt:定义Agent的专业身份(SAP可持续性采购顾问)和可用工具列表
  • Tools体系:每个Tool包含准确的功能描述,确保Agent能正确识别并调用
  • 循环执行:模型推理与工具执行交替进行,直至达成业务目标

自定义Tools实现详解

基于Lambda的查询Tool:封装Athena查询逻辑,支持采购询价、报价单、价格和供应商基础信息等业务数据查询。

基于Lambda的PO创建Tool:通过调用SAP Gateway暴露的OData API接口实现订单创建。接口URL通过Lambda环境变量配置,认证信息从AWS Secrets Manager动态获取。

基于Bedrock Knowledge Base的Tool:将Knowledge Base封装为自定义Tool,用于检索供应商付款条件、碳排放标准、采购政策等非结构化信息。作为完全托管式RAG解决方案,Knowledge Base支持灵活自定义并提供较高的检索准确性。

Agent部署与运行环境

Agent通过Amazon Bedrock AgentCore进行部署和运行,该服务的核心能力包括:

  • AgentCore Runtime:提供专用基础设施,安全、可扩展地托管Agent
  • AgentCore Memory:提供短期记忆(short-term memory),记录对话上下文,支持多轮连续交互
  • 框架无关性:适用于任何Agent框架和模型

核心代码实现

Agent System Prompt配置

SYSTEM_PROMPT = """你是一位专业的SAP可持续性采购顾问,专门从事供应链分析和可持续采购决策支持。

专业身份
作为采购领域的专家,你具备深厚的SAP系统经验和可持续性评估能力,能够为企业提供数据驱动的采购决策支持。

可用工具
1. query_sap_data: 查询SAP数据
   - 支持RFQ查询、报价统计等
   - 参数:query_type, year, month, days等
   
2. create_purchase_order: 创建采购订单
   - 调用SAP Gateway API
   - 参数:vendor_id, material, quantity, price等
   
3. search_knowledge_base: 查询采购政策知识库
   - 检索供应商评估标准、付款条件、可持续性政策等
   - 参数:query_text
"""

Lambda Tool封装示例

import boto3
import json

def query_sap_data(query_type: str, **kwargs) -> dict:
    """
    封装Athena查询,支持多种SAP数据查询类型
    """
    athena_client = boto3.client('athena')
    
    # 根据query_type构建SQL
    sql_templates = {
        "rfq_list": "SELECT * FROM sap_ekko WHERE doc_type = 'AN'",
        "quotation_summary": "SELECT vendor_id, COUNT(*) as count FROM sap_ekpo GROUP BY vendor_id",
        "vendor_info": f"SELECT * FROM sap_vendor WHERE vendor_id = '{kwargs.get('vendor_id')}'"
    }
    
    query = sql_templates.get(query_type)
    
    response = athena_client.start_query_execution(
        QueryString=query,
        QueryExecutionContext={'Database': 'sap_procurement'},
        ResultConfiguration={'OutputLocation': 's3://query-results-bucket/'}
    )
    
    return {"execution_id": response['QueryExecutionId']}

Knowledge Base Tool集成

import boto3

def search_knowledge_base(query_text: str) -> dict:
    """
    调用Bedrock Knowledge Base进行RAG检索
    """
    bedrock_agent = boto3.client('bedrock-agent-runtime')
    
    response = bedrock_agent.retrieve(
        knowledgeBaseId='YOUR_KB_ID',
        retrievalQuery={'text': query_text},
        retrievalConfiguration={
            'vectorSearchConfiguration': {
                'numberOfResults': 5
            }
        }
    )
    
    return {
        "results": [
            {"content": r['content']['text'], "score": r['score']} 
            for r in response['retrievalResults']
        ]
    }

架构实践建议

基于本方案的实施经验,提供以下实践建议:

  • 数据同步策略:建议采用增量同步机制,通过SAP Change Data Capture或时间戳字段实现,避免全量抽取带来的性能开销
  • Tool粒度设计:每个Tool应聚焦单一职责,功能描述需准确具体,避免模型调用时产生歧义
  • 错误处理机制:在Lambda Tool中实现完善的异常捕获和重试逻辑,特别是SAP Gateway API调用场景
  • 安全合规:SAP凭证必须通过Secrets Manager管理,Lambda执行角色遵循最小权限原则

需要优化您的 AWS 架构? 如果您正在规划SAP与AWS的智能化集成方案,欢迎联系我们获取Bedrock AgentCore与Strands SDK的最佳实践指导,加速您的企业AI Agent落地。

AWS账单代付

AWS/阿里云/谷歌云官方认证架构师,专注云计算解决方案。