OPENAISDK-AEMasCSSDK(这个名称看起来像是一个特定软件或开发工具包的标识,直接翻译可能无法传达其具体含义,但按照字面结构可以翻译为:“OPENAI 开发工具包 - AEMasCSS 开发工具包”,不过实际翻译时可能需要根据该名称在具体上下文中的含义进行调整。)
这个仓库通过MCP(模型上下文协议)服务器,实现了OpenAI SDK与Adobe Experience Manager作为云服务(AEM as CS)的首次开源集成。该项目采用Maven多模块构建方式,并配有一个Node.js桥接程序,用于与OpenAI的最新SDK进行通信。
建筑学
flowchart LR
Business[Business User Prompt]
LLM[OpenAI LLM]
SDK[OpenAI SDK Bridge]
MCP[MCP Server Layer]
AEM[AEM SDK APIs]
Business --> LLM --> SDK --> MCP --> AEM
AEM -->|Response| MCP -->|JSON| SDK -->|Narrative| LLM --> Business模块
| 模块 | 用途 |
|---|---|
aem-connector-core | OSGi服务、Sling模型门面、配置+密钥解析。 |
aem-connector-servlets | 暴露用于活动、页面、资产和内容片段的MCP(管理控制面板)操作的REST端点。 |
aem-connector-ui 用于模拟AEM作者体验的编写存根(HTL + 客户端库)。 | |
aem-connector-tests JUnit 5 + Mockito 测试套件,用于核心服务和servlet编排测试。 | |
sdk-bridge 使用TypeScript构建的Node.js微服务,作为OpenAI SDK与MCP层之间的调用中介。 |
入门指南/开始使用
先决条件
- Java 17及以上版本
- Maven 3.9+
- Node.js 18及以上版本
- 访问AEM SDK实例(本地或容器化)
- OpenAI API密钥存储在HashiCorp Vault、AWS Secrets Manager中,或作为环境变量存储
构建所有模块
mvn -B clean verify构建SDK桥接器
cd sdk-bridge
npm install
npm run build在本地堆栈上运行桥接(或:桥接服务)
export OPENAI_API_KEY=sk-... # or configure Vault/AWS integration
export MCP_BASE_URL=http://localhost:8080
export AEM_BASIC_AUTH=admin:admin # or provide AEM_JWT_TOKEN for bearer flows
node dist/index.js示例工作流
这个(或“该”) examples/test-prompts.json 该文件包含集成测试和手动运行时使用的示例提示。重点流程包括:
- 创建一个带有英雄横幅的新着陆页
- 上传这张图片并在页面中使用它
- 生成一个包含3个示例优惠的活动
每个提示都对应一个JSON有效载荷,该有效载荷由SDK桥接器转发到MCP服务器。
REST 示例
所有端点均需要HTTP基本凭据(admin:admin (默认情况下)或解析出的承载令牌 从已配置的密钥存储中。每个响应都包含一个 X-Request-ID 日志的相关性头部信息 追踪。在本地测试时直接触发MCP servlets:
curl -u admin:admin -H "Content-Type: application/json" \
-d '{"title":"Demo Landing Page","template":"/conf/demo/settings/wcm/templates/landingpage","parentPath":"/content/demo"}' \
http://localhost:4502/bin/connector/createPagecurl -u admin:admin -F "file=@banner.jpg" \
"http://localhost:4502/bin/connector/uploadAsset?path=/content/dam/demo/banner.jpg"curl -u admin:admin -H "Content-Type: application/json" \
-d '{"fragmentPath":"/content/dam/demo/fragment","elementName":"title","value":"New Fragment Title"}' \
http://localhost:4502/bin/connector/updateCFcurl -u admin:admin -H "Content-Type: application/json" \
-d '{"name":"Spring Offer","startDate":"2025-03-01","endDate":"2025-04-15","segments":["premium","returning"],"offers":[{"title":"10% Off","content":"Save 10% this spring"}]}' \
http://localhost:4502/bin/connector/createCampaigncurl -H "Authorization: Bearer $(cat connector.jwt)" \
http://localhost:4502/bin/connector/health端到端演示工作流程
将整个连接器管道与演示工作流servlet整合在一起:
curl -u admin:admin \
http://localhost:4502/bin/connector/demoWorkflow来自 TypeScript 桥接:
await llm.runDemoWorkflow();SDK Bridge 使用方法
await llm.createCampaign({
name: "Spring Offer",
startDate: "2025-03-01",
endDate: "2025-04-15",
segments: ["premium"],
offers: [{ title: "10% Off", content: "Save 10%" }]
});MCP响应合同
现在,内存中的MCP服务器会在每次调用时回显结构化元数据:
requestId— 服务器端生成的单调递增标识符。operation— 其中一个CREATE_CAMPAIGN,CREATE_PAGE,UPLOAD_ASSET,或UPDATE_CONTENT_FRAGMENT.payload— 为调用提交的参数的规范化副本。timestamp— 用于审计关联的ISO-8601时间戳。
这种丰富的响应也会被持久化存储在一个执行历史记录中,测试和下游工具可以查询该记录以进行验证 可达性和可观测性。
配置和密钥
OSGi 配置通过由(系统)管理的专用元类型接口暴露出来 ConnectorConfigurationService:
- OpenAiConfig(可译为“OpenAI配置”) 提供OpenAI API端点和一个秘密引用,如
env:OPENAI_API_KEY,
vault:openai/api,或 aws:prod/openai。
- AemConnectorConfig 翻译为中文是:“AEM连接器配置” — 声明目标AEM主机,基本身份验证密钥引用(预期格式
username:password),以及用于验证承载令牌(bearer tokens)的JWT密钥。
秘密查找由以下方式处理: SecretResolver,该程序检查所有已注册的 SecretsManager 实现。在秘密名称前加上 env:, vault:或者 aws: 通过……强行达成解决方案 匹配提供者,如果首选提供者不可用,则自动回退到其他提供者。
持续集成
GitHub Actions 工作流 (.github/workflows/maven.yml) 协调四个任务:
- Java — 运行
mvn -B clean verify --file pom.xml强制执行70%的JaCoCo覆盖率门禁并上传
Surefire/JaCoCo 构建产物。
- 节点 — 安装依赖项,对TypeScript桥进行代码检查,并执行桥测试框架。
- 覆盖范围 — 将Java和Node的测试输出汇总成一个可下载的包,以便进一步处理
检查。
- CodeQL(代码查询语言) — 通过GitHub CodeQL对Java和JavaScript源代码进行静态分析。
本地贡献者可以通过以下方式镜像这些检查: make lint 并且 make format,它封装了 Maven 的格式化器 插件以及用于桥梁的 ESLint/Prettier 工具链。
贡献指南
我们欢迎提交拉取请求!请阅读 CONTRIBUTING.md 并使用模板打开待解决问题 .github/ISSUE_TEMPLATE.md讨论旨在促进建筑方案的辩论和路线图创意的构思。
路线图
每周更新实时进行 docs/roadmap.md添加您的里程碑,并跨连接器、桥接器和创作体验跟踪进度。
离线开发注意事项
与本仓库一起打包的开发容器在没有出站网络访问的情况下运行。Maven 和 npm 因此,用于解析第三方依赖的命令在本地将无法执行;请依赖GitHub Actions或在线(工具/服务) 工作站用于执行完整的构建和测试套件,并将本地运行视为配置正确性检查。
