标签:ABAP, MCP, YAAI, 开源, AI
分类:SAP / SAP&接口
一句话总结
YAAI(Yet Another ABAP AI)是 Christoph Jänelli 在 ABAP 世界里用 ABAP 代码复刻 LangChain/Ollama 全套能力的开源项目,从后端 LLM 客户端 → 对话管理 → 函数调用 → RAG → MCP Server 一条龙。本文盘清这套生态一年的全部家底:yaai / yaai_ui / yaai_fc / yaai_cloud / yaai_mcp / abap-mcp-server 各自干什么、如何拼装、以及为什么说"YAAI 是 SAP 官方 ABAP MCP 的最佳互补"。
1. 一位 ABAP 老人做的人工智能实验
"I've been an ABAP developer since ABAP 4.6C. For the first time in my career I'm laughing out loud at what AI can do inside ABAP."
------ christianjianelli,YAAI 作者
它不是要让 Joule 失业,而是补足 SAP 商用方案 vs 企业现实之间的鸿沟:
| 痛点 | YAAI 解法 |
|---|---|
| Joule 只能用 SAP 管的模型 | LLM 完全可控:OpenAI / Ollama / Gemini / 自托管 / NVIDIA |
| 想在 OnPrem 落地不行 | 纯 ABAP 库,7.52+ 都能跑 |
| 想给旧系统嵌入智能要付授权费 | MIT 协议,唯一费用是你买的 LLM token |
| 工具调用想自己接 SAP BAPI | 第一公民支持------Function Calling 是 yaai_fc 主线 |
它不像 Joule 是一个 IDE 内的 Copilot,它更像一个"ABAP SDK + ABAP 环境内的 Agent Runtime",让你能在 SAP 业务程序里直接让 AI 干活的智能层。
2. 完整组件地图
┌──────────────────────────────────────────────────────┐
│ yaai_ui(ABAP AI UI 组件) │
│ - Chat UI - Code Assistant - SAP GUI 集成 │
└──────────────────────────────────────────────────────┘
▲
┌──────────────────────────────────────────────────────┐
│ yaai_cloud(BTP ABAP Environment) │
│ - 预置 ABAP 工具库(基于 XCO Library) │
│ - Agent 调试 & 测试基础设施 │
└──────────────────────────────────────────────────────┘
▲
┌──────────────────────────────────────────────────────┐
│ yaai_mcp(MCP Server) │
│ - 把 ABAP AI tools 暴露成 MCP 工具给外部 Agent │
└──────────────────────────────────────────────────────┘
▲
┌──────────────────────────────────────────────────────┐
│ yaai_fc(Function Calling / Tools) │
│ - 把 Z_TOOL_READ_SALES_ORDERS 这种 ABAP 方法注册 │
│ 为 LLM 可调用的工具 │
└──────────────────────────────────────────────────────┘
▲
┌──────────────────────────────────────────────────────┐
│ yaai(核心后端库) │
│ - LLM 多厂商客户端 │
│ - 对话管理(多轮 Session) │
│ - RAG(接入自定义表 + SAP 数据源) │
│ - Embedding 存储 │
└──────────────────────────────────────────────────────┘
打包过的 abap-mcp-server (Python 端做 stdio 桥接)把这套生态完整封装,让 Claude Code / GitHub Copilot / Cursor 直接在外部用 MCP 协议调用。
3. abap-mcp-server:7 大工具组解锁 ABAP 全场景
Python 包装后,已注册的 60+ 工具如下:
| 工具组 | 工具名 / 能力 |
|---|---|
| DDIC 数据字典 | 域、数据元素、结构、透明表、表类型的读 / 搜索 / 创建 / 更新;域固定值的翻译;数据元素 label 多语 |
| CDS 视图 | 创建 / 更新 / 删除 CDS、修改字段、读源 |
| SQL 直发 | sql_query 任意 SELECT/INSERT/UPDATE/DELETE,自动飞回结果 |
| ABAP 类 | 读 / 搜索 / 创建 / 更新 / 检 / 激活 |
| ABAP 接口 | 同上(interfaces) |
| ABAP 函数组 & FM | Function Group 创建 / 更新 / 激活;BAPI / RFC 模块全生命周期 |
| ABAP 程序 & Include | Report / Include 创建 / 检 / 激活 |
| Transport 管理 | 创建 Workbench 与 Customizing 请求、查询、释放 |
| Messages & Message Class | 创建 / 翻译 / 删除 |
| ABAP Mass Activation | 一次性激活整批对象或基于 Transport Request 批量激活 |
架构时序:
text
MCP Client (Codex/Copilot/Claude)
│ tool request
▼
ABAP MCP Server (Python) ← stdio
│ http
▼
SAP ICF Service (/sap/yaai/)
│
▼
ABAP AI tools MCP
│
▼
SAP System (ABAP AI tools、Function Calling、RAG)
这套工具面已经覆盖 SAP 所有 DDIC + ABAP Workbench 日常对象,是迄今最完整的开源 ABAP MCP Server。
4. 5 分钟上手:abap-mcp-server 本地部署
4.1 ABAP 系统侧
- 通过 abapGit 依次拉
yaai/yaai_fc/yaai_mcp到你的 SAP。 - SM59 建一个 RFC Destination(指向本机,留给 ICF 用)。
- SICF 激活服务
/sap/yaai/*。
4.2 Python 端
bash
git clone https://github.com/christianjianelli/yaai_mcp.git
cd abap-mcp-server
python -m venv .venv && .venv\Scripts\activate # Windows
pip install -r requirements.txt # mcp / requests / python-dotenv
.env:
ini
BASE_URL=https://<your-host>:44300/sap/yaai/
SAP_USERNAME=DEVELOPER01
SAP_PASSWORD=xxx
4.3 MCP 客户端集成
GitHub Copilot in Eclipse / VS Code 的 MCP config:
json
{
"servers": {
"abap-mcp-server": {
"type": "stdio",
"command": "uv",
"args": [
"--directory", "D:\\Python\\abap-mcp-server",
"run", "main.py"
]
}
}
}
启动后问 Co-pilot:"你有什么工具?"------你应该能看到上面那 60+ 条 abap_* 工具。
5. YAAI vs SAP Joule:一图对比
| 维度 | SAP Joule for Developers | YAAI |
|---|---|---|
| LLM 选择 | SAP 托管(SAP-ABAP-1 / GPT / Anthropic 等) | 完全可控:任何 OpenAI 兼容 API + Ollama 自托管 |
| License | 商业(Joule Base 订阅),免费期至 2026-09 | MIT |
| 适用范围 | SAP BTP ABAP / S/4HANA Cloud Public | OnPrem + Cloud(≥ ABAP 7.52) |
| 聚焦 | IDE 内开发者 Copilot | ABAP 业务程序内嵌智能 |
| MCP 集成 | 官方 ABAP MCP Server(与 YAAI yaai_mcp 互相兼容) | yaai_mcp + abap-mcp-server |
| 调试 | SAP 管控 | 全开发者掌控:日志、token 计费、prompt 都能改 |
| AI Unit 计费 | 需购买 | 无;只付 LLM 第三方费用 |
实战建议:Joule 控生产,YAAI 管 PoC 。两者完全等价能写代码,但很多客户会用 YAAI 在不公开的数据场景下做 POC、通过 yaai_mcp 把工具暴露给上层 agent。
6. 用 yaai_fc 把 ABAP 方法变 LLM 工具:示例代码
注册一个销售订单查询方法给 LLM:
abap
DATA(lo_chat) = zcl_yaai_chat=>create( ).
" register a tool the LLM can call
lo_chat->register_tool(
iv_name = 'get_customer_orders'
iv_description = 'Retrieves orders for a customer ID'
io_handler = me " implements tool interface
).
DATA(lo_resp) = lo_chat->ask(
iv_question = |上周我所在区域的销售订单有哪些?|
).
LLM 端看到的工具描述就是 get_customer_orders + 那段自然语言说明;它会自动判断要不要调,调多少次,怎么传参,回写时怎么用。
7. RAG 把企业数据装进 LLM
YAAI 的 RAG 走以下路径:
- 把 SAP 表 / CDS / 自定义文档切片、入 Embedding、存到 ABAP 内的 vector store。
- 查询时先走 Embedding 相似度检索 → 取 Top-K → 拼接成 Context 给 LLM。
- 提供"事实可追溯"的回答(降低幻觉,尤其是订单、业务规则、流程类问题)。
这是 Joule 没提供的------它给你"一个通用 Chat 助手",而 YAAI 能让你把整个 SCN / 仓库的内部文档对自家私有 LLM 做上下文增强。
8. 五条实战经验
/sap/yaai/路径必须白名单到 SAP Web Dispatcher 与 Cloud Connector;HTTPS 强制,证书自备。- DDIC 操作写入需要 DRY_RUN 防护------yaai_mcp 自带 ACL,逐包分层授权。
- SQL 直发的 RLS :开源版本已经包一层 SQL 解析器,禁
INTO、CALL TRANSACTION,谨防被 prompt 注入拖库。 - 会话存储 :yaai 默认把对话历史放到自定义表,记得配置 GR_DAYS 的 housekeeping job。
- MCP 通过 stdio 调用:很多企业代理会把 stdio 命令卡掉,建议自起本地 MCP 桥接服务(HTTP SSE)再用。
9. 路线展望与生态选择
- YAAI 1.x 还在快速演进,目标是*"ABAP-native Agent Runtime"*------支持 memory、tool registry、scheduler、eval harness。
- 与 SAP 官方 ABAP MCP Server 关系:互补而非竞争。Jänelli 自己在论坛说过------SAP 出 QA 工具,他会跟进;如果官方做 Agent runtime,他就不重复造轮子。
- 实际场景:
- BTP 客户:jA_cDTP_team 用 Joule + yaai_cloud;SAP 出新 ABAP MCP Server 之后 yaai_mcp 直接复用。
- OnPrem ECC:独自使用 yaai 系列;外部 Agent 用 abap-mcp-server 调用。
- 混合:OnPrem 接 YAAI,BTP 上跑 Joule Studio Agent,两者通过 yaai_fc 定义的工具集对齐。
写在最后:YAAI 是 ABAP 工程师最值得"玩一年"的项目
如果你是 ABAP 老兵,从未写过 Python、不想学 LangChain------YAAI 是你依然能用 100% ABAP 代码 把 AI 工程玩起来的最朴素路径。一年的迭代让它已经从"玩具"成长为一套能上生产的运行时------而 MCP 化之后,外部 Claude/Copilot 都可以带着能力进入 SAP 系统而不丢任何上下文。
这是 SAP 官方 ABAP MCP GA 之外,第二条 ABAP 进 AI 时代的台阶。