Anpassen eines generierten Widgets customize-generated-widget
decorate und die EDS-Projektstruktur - zu lernen, bevor Sie ein Widget anpassen.Die Plattform erstellt für jede generierte Aktion ein EDS-Widget. Das Widget empfängt bereits das Aktionsergebnis, rendert Beispieldaten, wendet Host-Stile an und ist mit der Aktion in LLM Apps verknüpft.
Testen Sie zunächst das generierte Widget. Passen Sie dann den Datenvertrag, die Interaktion und das visuelle Design an.
Journey: Suchen Sie den generierten Block → richten Sie seinen Datenvertrag aus → passen Sie ihn sicher an → zeigen Sie eine lokale Vorschau → Bereitstellung und Tests an.
Erstelltes Widget suchen
Öffnen Sie das beim Erstellen der App ausgewählte EDS-Repository. Jedes erzeugte Widget ist ein EDS-Block:
blocks/
└── <action-name>/
├── <action-name>.js
└── <action-name>.css
- Die JavaScript-Datei liest das Aktionsergebnis und erstellt die Schnittstelle.
- Die CSS-Datei steuert das Layout, das responsive Verhalten und das visuelle Design.
- Die generierte Pull-Anfrage zeigt die genauen Dateien an, die für die Aktion erstellt wurden.
Auf der Plattform werden auch die Widget-URLs und unterstützende SDK-Dateien konfiguriert. Sie müssen kein zweites EDS-Projekt erstellen oder diese Werte erneut eingeben, um ein generiertes Widget anzupassen.
Verbinden des LLM Apps SDK mit dem Widget
Das @adobe/llmapps-sdk-Paket verbindet das EDS-Widget mit dem LLM-Host. Das generierte EDS-Repository umfasst:
scripts/
├── aem-embed.js
└── llmapps-sdk.js
aem-embed.js stellt die Host-Verbindung her, lädt die EDS-Seite und ruft Ihren -Block auf:
export default async function decorate(block, bridge) {
// Customize the widget here.
}
SDK wird nicht in den Baustein importiert. Die verbundene bridge wird automatisch bereitgestellt. Dadurch kann das Widget:
- Lesen Sie das Handler-Ergebnis mit
bridge.toolResult. - Anwenden von Host-Stilen mit
bridge.applyHostStyles(). - Setzen Sie das Gespräch mit
bridge.sendMessage()fort. - Rufen Sie eine weitere Aktion mit
bridge.callTool()auf. - Lassen Sie die Größe mit der
bridge.autoResize()synchronisiert.
In diesem Handbuch werden die gängigen Bridge-Methoden behandelt. Die vollständige API finden Sie 🔗 dem @adobe/llmapps-sdk-Paket .
Grundlagen zum Datenvertrag
Der Aktions-Handler gibt structuredContent zurück, und der Block liest es aus bridge.toolResult.
// Handler result
return {
content: [{ type: 'text', text: `Found ${products.length} products.` }],
structuredContent: { products, total: products.length }
};
// EDS block
export default async function decorate(block, bridge) {
const result = bridge ? await bridge.toolResult : null;
const products = result?.structuredContent?.products ?? [];
// Render products.
}
Wenn Sie structuredContent ändern, aktualisieren Sie den Handler und das Widget zusammen. Siehe Anpassen eines generierten Handlers für den vollständigen Rückgabevertrag.
Sicheres Rendern externer Daten
Handler-Ausgabe als nicht vertrauenswürdige Daten behandeln. BEVORZUGEN Sie DOM-APIs wie textContent, anstatt Antwortwerte in innerHTML einzufügen.
function createProductCard(product, bridge) {
const card = document.createElement('article');
card.className = 'product-card';
const title = document.createElement('h3');
title.textContent = String(product.name ?? 'Product');
const button = document.createElement('button');
button.type = 'button';
button.textContent = 'Tell me more';
button.addEventListener('click', () => {
if (bridge && product.id) {
bridge.sendMessage(`Show me details for product ${String(product.id)}`);
}
});
card.append(title, button);
return card;
}
Validieren Sie URLs, bevor Sie sie href oder src zuweisen, und lassen Sie nur die für das Erlebnis erforderlichen Protokolle zu.
Verwenden der Host-Brücke
EDS übergibt eine verbundene Brücke an decorate(block, bridge). Guard Bridge ruft auf, damit der Block auch während der direkten EDS-Vorschau gerendert wird.
Anwenden von Host-Stilen
if (bridge) {
bridge.applyHostStyles();
}
Dies gilt für Host-Typografie und Design-Variablen. Ihr Widget-CSS sollte sowohl helle als auch dunkle Host-Designs unterstützen.
Folgenachricht senden
await bridge.sendMessage('Show me similar products.');
Verwenden Sie sendMessage, wenn eine Interaktion die Konversation fortsetzen soll.
Andere Aktion aufrufen
const result = await bridge.callTool('get-product-details', {
id: product.id
});
Verwenden Sie callTool für eine explizite Interaktion, die ein anderes Aktionsergebnis erfordert. Übergeben Sie nur validierte Werte und behandeln Sie Fehler, ohne interne Details anzuzeigen.
Widget-Größe synchronisieren
if (bridge) {
bridge.autoResize(block);
}
Rufen Sie autoResize nach dem ersten Rendern auf, damit der Host auf Inhaltsänderungen reagieren kann.
Vorschau der Änderungen
Generierte Blöcke sollten Beispieldaten für die direkte Vorschau enthalten, wenn bridge nicht verfügbar ist.
So zeigen Sie eine lokale Vorschau des EDS-Projekts an:
npm install -g @adobe/aem-cli
aem up
Öffnen Sie die generierte Widget-Seite unter http://localhost:3000. Überprüfen Sie:
- Status „Leer“, „Laden“, „Erfolg“ und „Fehler“.
- Langer Text und fehlende optionale Felder.
- Tastaturnavigation und sichtbarer Fokus.
- Helle und dunkle Themen.
- Enge und breite Layouts.
Stellen Sie dann die App für das Staging bereit und testen Sie sie mit Live structuredContent in der LLM-Plattform.
Veröffentlichen der Anpassung
- Übergeben Sie die EDS-Änderungen und übertragen Sie sie.
- Wenn Sie die Datenform geändert haben, übertragen Sie die entsprechenden Handler-Änderungen und übertragen Sie sie.
- Stellen Sie die App für das Staging bereit.
- Testen Sie die Aktion und das Widget in ChatGPT.
- Die verifizierte Version zur Produktion weiterleiten.
Andere EDS-Setups
Wenn Sie die App nicht automatisch erstellt haben oder eine vorhandene EDS-Site integrieren möchten, lesen Sie Eigenes EDS-Projekt .