🔑 核心摘要
- 采用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发起自然语言请求,获取结构化响应
核心业务流程
从技术实现角度,业务请求的处理流程如下:
- 查询类请求:Agent识别意图后调用Lambda驱动的Athena查询Tool,从S3中检索预处理的SAP数据
- 创建类请求:Agent调用PO创建Tool,通过Lambda调用SAP Gateway暴露的OData API接口完成订单创建
- 知识类请求: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系统中需要完成以下配置:
- 在SAP Gateway中配置操作数据供应(ODP)数据来源
- 通过事务码/IWFND/MAINT_SERVICE启用OData V2.0目录服务
- 使用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落地。