Models API Lightning 웹 구성 요소 만들기
학습 목표
이 유닛을 완료하면 다음을 수행할 수 있습니다.
- 맞춤형 Apex 클래스를 만들 수 있습니다.
- Lightning 웹 구성 요소를 구축할 수 있습니다.
- Lightning 웹 구성 요소를 AI Playground에 배포할 수 있습니다.
- Lightning 앱 빌더로 조직 페이지를 편집할 수 있습니다.
이제 환경 설정을 완료했으므로 Lightning 웹 구성 요소에 기능을 추가할 차례입니다. 이 유닛에서는 Maria가 맞춤형 Apex 클래스를 생성하고, UI를 설계하고, 기능을 갖춘 JavaScript를 추가한 다음, Models API 대시보드를 AI Playground에 배포하는 과정을 함께 따라갑니다.
개발자 문서 작성자 예시 사용 사례
이 비디오에서는 이 모듈의 예시와 유사한 기본 예시를 사용하여 Models API에 액세스하는 Lightning 웹 구성 요소를 구축하는 방법을 보여 줍니다.
Models API Apex 클래스 만들기
- VS Code에서 force-app/main 아래에 있는 classes 폴더를 마우스 오른쪽 버튼으로 클릭하고 SFDX: Create Apex Class(SFDX: Apex 클래스 만들기)를 선택합니다. 클래스 이름을
DashboardController로 지정합니다.
- VS Code에서 새 Apex 클래스에는 기본 코드 5줄이 포함되어 있습니다. 이 기본 코드를 제거합니다. Apex 클래스와 Lightning 웹 구성 요소 파일에 대한 완전한 코드 샘플이 제공되므로 이 모듈에서는 기본 코드가 필요하지 않습니다.
-
DashboardController.clsApex 클래스 파일에서 아래의 코드를 복사해 붙여 넣습니다.
public with sharing class DashboardController {
@AuraEnabled
public static String createChatGenerations(String input) {
String fileContent = HousingData.jsonString;
// Escape double quotes, newlines, and carriage returns within the JSON string
String escapedFileContent = HousingData.jsonString
.replace('\\', '\\\\') // Escape backslashes
.replace('"', '\\"') // Escape double quotes
.replace('\n', '\\n') // Escape newlines
.replace('\r', '\\r'); // Escape carriage returns
// Construct the input string
String instructions = '[{"role": "user", "message": "Summarize the sample housing data as if you were a real estate broker. Housing Data: ' + escapedFileContent + '"}]';
// Deserialize the file content into a list of ChatMessage objects
List<DashboardController.ChatMessage> messages = (List<DashboardController.ChatMessage>) JSON.deserialize(
instructions,
List<DashboardController.ChatMessage>.class
);
// Instantiate the API class
aiplatform.ModelsAPI modelsAPI = new aiplatform.ModelsAPI();
// Prepare the request and body objects
aiplatform.ModelsAPI.createChatGenerations_Request request = new aiplatform.ModelsAPI.createChatGenerations_Request();
aiplatform.ModelsAPI_ChatGenerationsRequest body = new aiplatform.ModelsAPI_ChatGenerationsRequest();
// Specify model
request.modelName = 'sfdc_ai__DefaultGPT35Turbo';
// Create a list to hold chat messages
List<aiplatform.ModelsAPI_ChatMessageRequest> messagesList = new List<aiplatform.ModelsAPI_ChatMessageRequest>();
// Loop through the input messages and create message requests
for (ChatMessage msg : messages) {
aiplatform.ModelsAPI_ChatMessageRequest messageRequest = new aiplatform.ModelsAPI_ChatMessageRequest();
messageRequest.content = msg.message != null ? msg.message : ''; // Handle null message
messageRequest.role = msg.role != null ? msg.role : 'user'; // Handle null role
messagesList.add(messageRequest);
}
// Set the messages in the request body
body.messages = messagesList;
// Set the request body and model name
request.body = body;
String response = '';
try {
// Call the API and get the response
aiplatform.ModelsAPI.createChatGenerations_Response apiResponse = modelsAPI.createChatGenerations(
request
);
// Check that we have a non-null response
if (
apiResponse?.Code200?.generationDetails?.generations != null &&
!apiResponse.Code200.generationDetails.generations.isEmpty()
) {
// Set the variable from the response
response = apiResponse.Code200.generationDetails.generations[0]
.content;
} else {
// Handle the case where response is null
response = 'No content generated';
}
// Handle error
} catch(aiplatform.ModelsAPI.createChatGenerations_ResponseException e) {
System.debug('Response code: ' + e.responseCode);
System.debug('The following exception occurred: ' + e);
// Add error to the output
response = 'Unable to get a valid response. Error code: ' + e.responseCode;
}
return response;
}
public class ChatMessage {
public String role;
public String message;
public ChatMessage() {
}
public ChatMessage(String role, String message) {
this.role = role;
this.message = message;
}
}
}-
Ctrl+S(Windows) 또는 Cmd+S(macOS)를 눌러 파일을 저장합니다.
그라운딩 데이터를 위한 새 클래스 만들기
Maria의 Models API 대시보드가 올바르게 작동하려면 관련 주택 시장 데이터로 LLM을 그라운딩해야 합니다. 이 단계에서는 DashboardController 클래스에서 참조할 수 있도록 새 클래스를 생성하고 데이터로 채웁니다.
데모용이므로 이 데이터는 LWC 내의 로컬 파일입니다. 이 대시보드의 공식 구현에서는 이 단계의 데이터를 주택 시장 API에서 동적으로 가져옵니다.
- VS Code에서 classes 폴더를 마우스 오른쪽 버튼으로 클릭하고 SFDX: Create Apex Class(SFDX: Apex 클래스 만들기)를 선택합니다. 클래스 이름을
HousingData로 지정합니다.
-
HousingData.clsApex 클래스 파일에서 아래의 코드를 복사해 붙여 넣습니다.
public class HousingData {
public static final String jsonString = '{\n' +
'[' +
' {\n' +
' "County": "Adams",\n' +
' "Sales (SAAR)": 130,\n' +
' "% Change by quarter": 8.3,\n' +
' "% Change by year": -7.1,\n' +
' "Building Permits": 12,\n' +
' "% Change by year (Building Permits)": -25.0,\n' +
' "Median Price ($)": 318100,\n' +
' "% Change by year (Median Price)": 6.9,\n' +
' "Median Buyer HAI": 83.7,\n' +
' "First-time Buyer HAI": 59.7\n' +
' },\n' +
' {\n' +
' "County": "Benton",\n' +
' "Sales (SAAR)": 3060,\n' +
' "% Change by quarter": 2.3,\n' +
' "% Change by year": -16.2,\n' +
' "Building Permits": 447,\n' +
' "% Change by year (Building Permits)": 42.4,\n' +
' "Median Price ($)": 426900,\n' +
' "% Change by year (Median Price)": 0.3,\n' +
' "Median Buyer HAI": 81.8,\n' +
' "First-time Buyer HAI": 58.4\n' +
' },\n' +
' {\n' +
' "County": "Chelan",\n' +
' "Sales (SAAR)": 760,\n' +
' "% Change by quarter": -3.8,\n' +
' "% Change by year": -16.5,\n' +
' "Building Permits": 115,\n' +
' "% Change by year (Building Permits)": 74.2,\n' +
' "Median Price ($)": 563500,\n' +
' "% Change by year (Median Price)": 15.8,\n' +
' "Median Buyer HAI": 52.5,\n' +
' "First-time Buyer HAI": 37.5\n' +
' },\n' +
' {\n' +
' "County": "Clark",\n' +
' "Sales (SAAR)": 4830,\n' +
' "% Change by quarter": -19.0,\n' +
' "% Change by year": -34.3,\n' +
' "Building Permits": 698,\n' +
' "% Change by year (Building Permits)": -16.1,\n' +
' "Median Price ($)": 531500,\n' +
' "% Change by year (Median Price)": 5.8,\n' +
' "Median Buyer HAI": 72.9,\n' +
' "First-time Buyer HAI": 52.0\n' +
' },\n' +
' {\n' +
' "County": "Columbia",\n' +
' "Sales (SAAR)": 80,\n' +
' "% Change by quarter": 0.0,\n' +
' "% Change by year": -11.1,\n' +
' "Building Permits": 2,\n' +
' "% Change by year (Building Permits)": -86.7,\n' +
' "Median Price ($)": 228300,\n' +
' "% Change by year (Median Price)": -13.2,\n' +
' "Median Buyer HAI": 166.9,\n' +
' "First-time Buyer HAI": 119.1\n' +
' },\n' +
' {\n' +
' "County": "Franklin",\n' +
' "Sales (SAAR)": 1030,\n' +
' "% Change by quarter": 3.0,\n' +
' "% Change by year": -16.3,\n' +
' "Building Permits": 138,\n' +
' "% Change by year (Building Permits)": 29.0,\n' +
' "Median Price ($)": 426900,\n' +
' "% Change by year (Median Price)": 0.3,\n' +
' "Median Buyer HAI": 90.7,\n' +
' "First-time Buyer HAI": 64.7\n' +
' },\n' +
' {\n' +
' "County": "Garfield",\n' +
' "Sales (SAAR)": 0,\n' +
' "% Change by quarter": "NA",\n' +
' "% Change by year": "NA",\n' +
' "Building Permits": 0,\n' +
' "% Change by year (Building Permits)": "NA",\n' +
' "Median Price ($)": 268000,\n' +
' "% Change by year (Median Price)": 14.9,\n' +
' "Median Buyer HAI": 104.1,\n' +
' "First-time Buyer HAI": 74.3\n' +
' },\n' +
' {\n' +
' "County": "Grays Harbor",\n' +
' "Sales (SAAR)": 1660,\n' +
' "% Change by quarter": 0.0,\n' +
' "% Change by year": -19.4,\n' +
' "Building Permits": 69,\n' +
' "% Change by year (Building Permits)": -6.8,\n' +
' "Median Price ($)": 351300,\n' +
' "% Change by year (Median Price)": 7.6,\n' +
' "Median Buyer HAI": 71.1,\n' +
' "First-time Buyer HAI": 50.7\n' +
' },\n' +
' {\n' +
' "County": "Jefferson",\n' +
' "Sales (SAAR)": 480,\n' +
' "% Change by quarter": -5.9,\n' +
' "% Change by year": -12.7,\n' +
' "Building Permits": 31,\n' +
' "% Change by year (Building Permits)": 24.0,\n' +
' "Median Price ($)": 650000,\n' +
' "% Change by year (Median Price)": 16.4,\n' +
' "Median Buyer HAI": 43.2,\n' +
' "First-time Buyer HAI": 30.9\n' +
' },\n' +
' {\n' +
' "County": "King",\n' +
' "Sales (SAAR)": 18520,\n' +
' "% Change by quarter": -0.1,\n' +
' "% Change by year": -21.1,\n' +
' "Building Permits": 3110,\n' +
' "% Change by year (Building Permits)": 4.7,\n' +
' "Median Price ($)": 931000,\n' +
' "% Change by year (Median Price)": 13.4,\n' +
' "Median Buyer HAI": 58.6,\n' +
' "First-time Buyer HAI": 41.8\n' +
' },\n' +
' {\n' +
' "County": "Kitsap",\n' +
' "Sales (SAAR)": 3680,\n' +
' "% Change by quarter": -0.8,\n' +
' "% Change by year": -20.0,\n' +
' "Building Permits": 400,\n' +
' "% Change by year (Building Permits)": -49.0,\n' +
' "Median Price ($)": 532200,\n' +
' "% Change by year (Median Price)": 5.6,\n' +
' "Median Buyer HAI": 76.0,\n' +
' "First-time Buyer HAI": 54.2\n' +
' },\n' +
' {\n' +
' "County": "Kittitas",\n' +
' "Sales (SAAR)": 960,\n' +
' "% Change by quarter": 6.7,\n' +
' "% Change by year": -13.5,\n' +
' "Building Permits": 85,\n' +
' "% Change by year (Building Permits)": -15.0,\n' +
' "Median Price ($)": 521700,\n' +
' "% Change by year (Median Price)": -5.1,\n' +
' "Median Buyer HAI": 49.3,\n' +
' "First-time Buyer HAI": 35.2\n' +
' },\n' +
' {\n' +
' "County": "Lewis",\n' +
' "Sales (SAAR)": 970,\n' +
' "% Change by quarter": -6.7,\n' +
' "% Change by year": -26.5,\n' +
' "Building Permits": 110,\n' +
' "% Change by year (Building Permits)": 80.3,\n' +
' "Median Price ($)": 413000,\n' +
' "% Change by year (Median Price)": 5.7,\n' +
' "Median Buyer HAI": 72.0,\n' +
' "First-time Buyer HAI": 51.4\n' +
' },\n' +
' {\n' +
' "County": "Mason",\n' +
' "Sales (SAAR)": 1010,\n' +
' "% Change by quarter": -4.7,\n' +
' "% Change by year": -18.5,\n' +
' "Building Permits": 93,\n' +
' "% Change by year (Building Permits)": 31.0,\n' +
' "Median Price ($)": 391200,\n' +
' "% Change by year (Median Price)": 1.9,\n' +
' "Median Buyer HAI": 89.0,\n' +
' "First-time Buyer HAI": 63.5\n' +
' },\n' +
' {\n' +
' "County": "Okanogan",\n' +
' "Sales (SAAR)": 360,\n' +
' "% Change by quarter": -2.7,\n' +
' "% Change by year": -29.4,\n' +
' "Building Permits": 57,\n' +
' "% Change by year (Building Permits)": 29.5,\n' +
' "Median Price ($)": 369400,\n' +
' "% Change by year (Median Price)": 29.6,\n' +
' "Median Buyer HAI": 68.4,\n' +
' "First-time Buyer HAI": 48.8\n' +
' },\n' +
' {\n' +
' "County": "Pierce",\n' +
' "Sales (SAAR)": 9780,\n' +
' "% Change by quarter": -2.4,\n' +
' "% Change by year": -25.6,\n' +
' "Building Permits": 629,\n' +
' "% Change by year (Building Permits)": -17.1,\n' +
' "Median Price ($)": 547800,\n' +
' "% Change by year (Median Price)": 4.5,\n' +
' "Median Buyer HAI": 72.5,\n' +
' "First-time Buyer HAI": 51.7\n' +
' },\n' +
' {\n' +
' "County": "San Juan",\n' +
' "Sales (SAAR)": 220,\n' +
' "% Change by quarter": 0.0,\n' +
' "% Change by year": -8.3,\n' +
' "Building Permits": 23,\n' +
' "% Change by year (Building Permits)": 43.8,\n' +
' "Median Price ($)": 737500,\n' +
' "% Change by year (Median Price)": -13.2,\n' +
' "Median Buyer HAI": 41.4,\n' +
' "First-time Buyer HAI": 29.6\n' +
' },\n' +
' {\n' +
' "County": "Skagit",\n' +
' "Sales (SAAR)": 1420,\n' +
' "% Change by quarter": -6.0,\n' +
' "% Change by year": -24.9,\n' +
' "Building Permits": 169,\n' +
' "% Change by year (Building Permits)": 70.7,\n' +
' "Median Price ($)": 553100,\n' +
' "% Change by year (Median Price)": 6.7,\n' +
' "Median Buyer HAI": 53.9,\n' +
' "First-time Buyer HAI": 38.4\n' +
' },\n' +
' {\n' +
' "County": "Snohomish",\n' +
' "Sales (SAAR)": 7740,\n' +
' "% Change by quarter": -2.5,\n' +
' "% Change by year": -23.1,\n' +
' "Building Permits": 1060,\n' +
' "% Change by year (Building Permits)": 20.7,\n' +
' "Median Price ($)": 737700,\n' +
' "% Change by year (Median Price)": 6.4,\n' +
' "Median Buyer HAI": 69.1,\n' +
' "First-time Buyer HAI": 49.3\n' +
' },\n' +
' {\n' +
' "County": "Spokane",\n' +
' "Sales (SAAR)": 6010,\n' +
' "% Change by quarter": 2.6,\n' +
' "% Change by year": -13.4,\n' +
' "Building Permits": 736,\n' +
' "% Change by year (Building Permits)": -31.7,\n' +
' "Median Price ($)": 426500,\n' +
' "% Change by year (Median Price)": 4.8,\n' +
' "Median Buyer HAI": 74.9,\n' +
' "First-time Buyer HAI": 53.5\n' +
' },\n' +
' {\n' +
' "County": "Stevens",\n' +
' "Sales (SAAR)": 690,\n' +
' "% Change by quarter": -1.4,\n' +
' "% Change by year": -2.8,\n' +
' "Building Permits": 50,\n' +
' "% Change by year (Building Permits)": 31.6,\n' +
' "Median Price ($)": 303600,\n' +
' "% Change by year (Median Price)": 10.4,\n' +
' "Median Buyer HAI": 92.4,\n' +
' "First-time Buyer HAI": 66.0\n' +
' },\n' +
' {\n' +
' "County": "Wahkiakum",\n' +
' "Sales (SAAR)": 80,\n' +
' "% Change by quarter": -11.1,\n' +
' "% Change by year": 14.3,\n' +
' "Building Permits": 5,\n' +
' "% Change by year (Building Permits)": 25.0,\n' +
' "Median Price ($)": 417000,\n' +
' "% Change by year (Median Price)": 1.1,\n' +
' "Median Buyer HAI": 71.3,\n' +
' "First-time Buyer HAI": 50.9\n' +
' },\n' +
' {\n' +
' "County": "Walla Walla",\n' +
' "Sales (SAAR)": 560,\n' +
' "% Change by quarter": 1.8,\n' +
' "% Change by year": -11.1,\n' +
' "Building Permits": 40,\n' +
' "% Change by year (Building Permits)": -45.2,\n' +
' "Median Price ($)": 418700,\n' +
' "% Change by year (Median Price)": 3.1,\n' +
' "Median Buyer HAI": 68.2,\n' +
' "First-time Buyer HAI": 48.7\n' +
' },\n' +
' {\n' +
' "County": "Whatcom",\n' +
' "Sales (SAAR)": 2460,\n' +
' "% Change by quarter": 0.8,\n' +
' "% Change by year": -16.9,\n' +
' "Building Permits": 279,\n' +
' "% Change by year (Building Permits)": 16.2,\n' +
' "Median Price ($)": 650600,\n' +
' "% Change by year (Median Price)": 12.0,\n' +
' "Median Buyer HAI": 50.7,\n' +
' "First-time Buyer HAI": 36.2\n' +
' },\n' +
' {\n' +
' "County": "Yakima",\n' +
' "Sales (SAAR)": 1710,\n' +
' "% Change by quarter": -2.3,\n' +
' "% Change by year": -18.6,\n' +
' "Building Permits": 82,\n' +
' "% Change by year (Building Permits)": -33.3,\n' +
' "Median Price ($)": 341600,\n' +
' "% Change by year (Median Price)": 1.7,\n' +
' "Median Buyer HAI": 82.3,\n' +
' "First-time Buyer HAI": 58.7\n' +
' },\n' +
' {\n' +
' "County": "Statewide",\n' +
' "Sales (SAAR)": 77990,\n' +
' "% Change by quarter": -2.3,\n' +
' "% Change by year": -21.5,\n' +
' "Building Permits": 9229,\n' +
' "% Change by year (Building Permits)": -6.4,\n' +
' "Median Price ($)": 626100,\n' +
' "% Change by year (Median Price)": 9.3,\n' +
' "Median Buyer HAI": 63.1,\n' +
' "First-time Buyer HAI": 45.0\n' +
' }\n' +
']\n' +
'}';
}-
Ctrl+S(Windows) 또는 Cmd+S(macOS)를 눌러 파일을 저장합니다.
-
classes 폴더를 다시 마우스 오른쪽 버튼으로 클릭하고 SFDX: Deploy This Source to Org(SFDX: 조직에 원본 배포)를 선택합니다.
- 통합 터미널의 Output(출력) 탭에서 배포 결과를 확인합니다. 명령이 성공적으로 실행되었다면 배포된 원본 메시지가 조직에 업로드된 네 개의 파일을 표시합니다.
Models API Lightning 웹 구성 요소 구축
- Visual Studio Code에서 Ctrl+Shift+P(Windows) 또는 Cmd+Shift+P(macOS)를 눌러 명령 팔레트를 엽니다.
-
SFDX를 입력합니다.
-
SFDX: Create Lightning Web Component(SFDX: Lightning 웹 구성 요소 만들기)를 선택합니다.
- 새 구성 요소의 이름을
modelsAPIDashboard로 정합니다.
- Enter를 눌러 기본
force-app/main/default/lwc를 수락합니다.
-
Enter를 누릅니다.
-
lwc아래에 있는modelsAPIDashboard폴더에서 새로 생성된 파일을 확인합니다.
-
modelsAPIDashboard.htmlHTML 파일에서 아래의 코드를 복사해 붙여 넣습니다.
<template>
<div
class="slds-var-m-around_medium slds-grid slds-grid_vertical slds-box slds-theme_default">
<h1><font size="3"><b>Housing Market Dashboard</b></font>
</h1>
<!-- Chat messages container -->
<div
class="slds-scrollable_y"
style="height: 440px"
lwc:ref="chatContainer"
>
<!-- Iterate over each message in the messages array -->
<template for:each={messages} for:item="message">
<div key={message.id} class="slds-var-m-around_small">
<!-- If the message is from the assistant -->
<div class="custom-chat-message_inbound slds-var-p-around_small">
<div class="slds-chat-message__body">
<div class="slds-chat-message__text">{message.text}</div>
</div>
</div>
</div>
</template>
</div>
<!-- Loading indicator -->
<template lwc:if={isLoading}>
<div class="loading-container slds-var-m-around_small">
<div class="loading-text">
Analyzing data… One moment.
</div>
<div class="loading-indicator"></div>
</div>
</template>
<!-- Send button -->
<div class="slds-grid slds-grid_vertical-align-center send-button-container">
<div class="slds-col slds-size_1-of-4">
<lightning-button
label="Analyze"
variant="brand"
onclick={handleSendMessage}
disabled={isLoading}
></lightning-button>
</div>
</div>
</div>
</template>-
Ctrl+S(Windows) 또는 Cmd+S(macOS)를 눌러 파일을 저장합니다.
-
modelsAPIDashboard폴더를 마우스 오른쪽 버튼으로 클릭하고 New File(새 파일)을 선택합니다.
- 파일 이름을
modelsAPIDashboard.css로 입력합니다.
-
modelsAPIDashboard.cssCSS 파일에서 아래의 코드를 복사해 붙여 넣습니다.
.custom-chat-message_inbound {
border-radius: 10px;
max-width: 100%;
background-color: #f3f2f2;
align-self: flex-start;
}
.custom-chat-message_outbound {
border-radius: 10px;
max-width: 100%;
background-color: #0070d2;
color: white;
align-self: flex-end;
}
.send-button-container {
padding-top: 10px;
padding-bottom: 1px;
}
.custom-textarea {
width: 100%;
}
.loading-indicator {
width: 50px;
height: 25px;
overflow: hidden;
vertical-align: middle;
position: relative;
}
.loading-indicator::after {
content: "";
display: inline-block;
width: 50px;
height: 50px;
overflow: hidden;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
animation: loading 1s infinite steps(7);
}
@keyframes loading {
0% {
content: ".";
}
12.5% {
content: "..";
}
25% {
content: "...";
}
37.5% {
content: ".....";
}
50% {
content: "......";
}
62.5% {
content: "........";
}
75% {
content: "............";
}
87.5% {
content: "";
}
}-
Ctrl+S(Windows) 또는 Cmd+S(macOS)를 눌러 파일을 저장합니다.
-
modelsAPIDashboard.jsJavaScript 파일에서 아래의 코드를 복사해 붙여 넣습니다.
import { LightningElement, track } from "lwc";
import createChatGenerations from "@salesforce/apex/DashboardController.createChatGenerations";
export default class HousingMarket extends LightningElement {
@track housingData = [];
@track isLoading = false;
@track error;
@track messages = []; // Initialize messages
connectedCallback() {
this.fetchHousingMarketData();
}
// Get Housing Market Data
fetchHousingMarketData() {
this.isLoading = true;
createChatGenerations()
.then((result) => {
console.log(result);
this.error = undefined;
})
.catch((error) => {
this.error = error;
this.housingData = [];
})
.finally(() => {
this.isLoading = false;
});
}
// Handle analyze button click
handleSendMessage() {
this.isLoading = true; // Show loading indicator
// Call Apex method to fetch chat response
createChatGenerations()
.then((result) => {
const assistantMessageObj = {
id: this.messages.length + 1,
text: result,
role: "assistant",
isUser: false,
};
this.messages = [...this.messages, assistantMessageObj]; // Add assistant message to messages array
})
.catch((error) => {
console.error("Error fetching bot response", JSON.stringify(error));
})
.finally(() => {
this.isLoading = false; // Hide loading indicator
});
}
}-
Ctrl+S(Windows) 또는 Cmd+S(macOS)를 눌러 파일을 저장합니다.
메타데이터 파일에 해당 대상을 추가하여 다양한 Lightning Experience 페이지에서 이 구성 요소를 사용할 수 있도록 해 보겠습니다.
-
modelsAPIDashboard.js-meta.xmlXML 파일에서 아래의 코드를 복사해서 붙여 넣습니다.
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>61.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__AppPage</target>
<target>lightning__HomePage</target>
<target>lightning__RecordPage</target>
</targets>
</LightningComponentBundle>-
Ctrl+S(Windows) 또는 Cmd+S(macOS)를 눌러 파일을 저장합니다.
AI Playground에 배포하기
-
lwc아래의modelsAPIDashboard폴더를 마우스 오른쪽 버튼으로 클릭합니다.
-
SFDX: Deploy This Source to Org(SFDX: 조직에 이 원본 배포)를 클릭합니다.

- 통합 터미널의 Output(출력) 탭에서 배포 결과를 확인합니다. 명령이 성공적으로 실행되었다면 배포된 원본 메시지가 조직에 업로드된 네 개의 파일을 표시합니다.
Lightning 앱 빌더에서 페이지 편집
- Visual Studio Code에서 Ctrl+Shift+P(Windows) 또는 Cmd+Shift+P(macOS)를 눌러 명령 팔레트를 엽니다.
-
SFDX를 입력합니다.
-
SFDX: Open Default Org(SFDX: 기본 조직 열기)를 선택합니다.
그러면 AI Playground가 별도의 브라우저에서 열립니다.
- 톱니바퀴 아이콘(
)을 클릭하고 Setup(설정)을 선택합니다.
- Quick Find(빠른 찾기)의 Feature Settings(기능 설정) 섹션에서 Home(홈)을 검색하고 선택합니다.
- Advanced Seller Home(고급 판매자 홈)의 경우 설정을 Inactive(비활성)로 전환합니다.
- App Launcher(앱 시작 관리자)(
)에서 Sales(영업 담당자)를 검색 및 선택합니다.
- 톱니바퀴 아이콘(
)을 클릭하고 Edit Page(페이지 편집)를 선택합니다.
- Components(구성 요소) 목록 하단에서 Custom(사용자 지정) 섹션까지 스크롤합니다.
- Lightning 구성 요소 목록의 사용자 정의 영역에 있는 modelsAPIDashboard Lightning 웹 구성 요소를 페이지 캔버스 상단으로 드래그합니다.
-
Save(저장)를 클릭합니다.
-
Activate(활성화)를 클릭합니다.
-
Assign as Org Default(다음 조직 기본값으로 할당)를 클릭합니다.
-
Save(저장)를 클릭합니다.
-
Save(저장)를 다시 클릭한 다음 뒤로 버튼(
)을 클릭해 페이지로 돌아갑니다.
- 새 구성 요소를 확인하려면 페이지를 새로 고칩니다.
첫 번째 Models API Lightning 웹 구성 요소를 생성했습니다!
이제 DreamHouse Realty는 세일즈 홈 페이지에 대시보드 구성 요소를 직접 포함하고 있습니다. 이 대시보드를 통해 세일즈 팀은 현재 주택 시장 동향을 파악하고 구매자의 요구 사항을 더 정확하게 이해할 수 있습니다. 이 예시 구성 요소는 매우 단순하지만, 이러한 구현을 통해 Models API를 사용하여 비즈니스 사용 사례를 생성형 AI와 결합한 경우의 효과를 확인할 수 있습니다.
