AI LLM을 실시간 접지 소스 및 데이터와 연결하는 어댑터
주요 개선 사항 나열
풀어 주다 | 날짜 | 주요 특징 |
---|---|---|
2.0.5 | 2024년 4월 1일 | 주요 업데이트: OpenAI 및 GoogleAI 외에도 ClaudeAI를 지원합니다. |
2.0.0 | 2024년 1월 5일 | 주요 업데이트: OpenAI 외에 GoogleAI도 지원합니다. |
1.3.0 | 2023년 12월 16일 | 관련 데이터를 활용하고 관련 응답을 생성하기 위한 프롬프트가 개선되었습니다. 이제 모든 메서드에 대한 응답이 런타임 정보를 제공합니다. |
1.2.9 | 2023년 11월 3일 | (1) 에이전트 구성은 (선택 사항) 언어 키를 지정할 수 있습니다. 이것이 설정되면 LLM은 항상 입력 언어에 관계없이 지정된 언어로 생각하고 응답합니다. 참고 : 경우에 따라 번역 품질이 최적이 아닐 수 있으므로 철저한 테스트를 적극 권장합니다. (2) 올인원 방식의 응답에는 LLM에서 응답을 생성하기 위해 사용하는 접지 데이터가 포함됩니다. 이렇게 하면 신뢰성이 향상됩니다. |
1.2.8 | 2023년 10월 26일 | 응답 품질을 향상시키기 위해 심층적인 프롬프트 기술을 통합했습니다. |
1.2.2 | 2023년 10월 18일 | API 결정을 위한 LLM 프롬프트 및 논리가 개선되었습니다. |
1.1.1 | 2023년 10월 9일 | 사용자 입력이 공정하고, 책임감 있고, 정중하고, 인간적임을 보장하기 위해 헌법적 AI의 풍미를 통합하는 LLM 프롬프트가 도입되었습니다. |
1.1.0 | 2023년 10월 8일 | 후속 질문에 대한 맥락/기억을 구축하는 기능이 도입되었습니다. |
1.0.0 | 2023년 10월 8일 | 초기 출시. |
다중 모드 인공 지능 모델인 LLM은 최소한의 지침으로 콘텐츠를 생성하는 데 폭넓게 적용할 수 있습니다. 제로샷 또는 퓨샷과 같은 프롬프트 기술은 이러한 LLM을 기반으로 구축된 채팅 애플리케이션의 일상적인 사용자들 사이에서 인기가 있습니다. 즉, 응답의 질은 훌륭하지만, 얼마나 신뢰할 수 있을까요? 모델이 즉석에서 "만들기"(일명 환각)를 하고 있지 않다는 것을 어떻게 알 수 있나요?
결과적으로 적절한 프롬프트 기술과 함께 상황별 데이터를 제공하여 LLM을 기반으로 삼는 것이 매우 중요합니다. LLM이 더 나은 응답을 생성할 수 있도록 근거 있는 정보가 포함된 프롬프트를 맥락으로 사용하는 것이 널리 따르는 관행입니다.
그러한 접근 방식 중 하나가 프롬프트와 함께 LLM에 제공된 텍스트 임베딩을 저장하고 검색하는 RAG(검색 증강 생성)입니다. 그러나 RAG는 텍스트 임베딩으로 변환된 정적 정보를 사용하여 그래프 데이터베이스(일명 벡터 데이터베이스)에 저장하므로 관련 정보를 검색 하고 접지를 통해 강화하여 텍스트/응답을 생성 할 수 있습니다.
RAG 패턴은 LLM과 함께 실시간 데이터를 사용하여 효과적이고 신뢰할 수 있는 응답을 생성할 수 있는지에 대한 의문을 제기할 수 있습니다. 간단한 대답은 "물론 그렇습니다!" 입니다. . 그러나 이는 애플리케이션 개발자의 어깨에 훨씬 더 많은 책임이 있다는 것을 의미합니다. 개발자는 API를 호출하여 LLM이 관련 응답을 생성하도록 프롬프트 내에 응답을 래핑해야 합니다. 하지만 모든 질문에 대해 동일한 API를 계속해서 호출할 수 있을까요? - 아마도 그렇지 않을 것입니다! 질문에 따라 어떤 API를 호출해야 하고 어떤 매개변수를 전달해야 하는지 동적으로 결정하려면 어떻게 해야 합니까? 그것은 또한 LLM의 기능처럼 들립니다.
이것이 AI-Dapter( AI Adapter 로 읽음)가 작동하는 곳입니다. AI-Dapter는 개발자를 위한 LLM 기반 애플리케이션 개발 프로세스를 가속화하여 LLM에 대한 후속 활동 부담을 덜어주고 애플리케이션에만 집중할 수 있도록 합니다.
사전 정의된 API 저장소에서 올바른 API 엔드포인트를 식별하고 ,
식별된 API 엔드포인트에서 실시간 데이터를 수집하고 ,
선택한 LLM 모델을 사용하여 응답을 생성합니다 .
애플리케이션 코드 내에 AI-Dapter 프레임워크를 연결하고 이를 블랙박스 로 원활하게 사용하여 사용자 질문에 대한 LLM 기반 응답을 수행함으로써 개발자 경험이 엄청나게 향상되었습니다. 이러한 사용자 질문 자체는 제로샷 프롬프트에 가까울 수 있습니다.
이 블랙박스의 실제 작업은 다음과 같습니다.
선택한 LLM 모델을 자격 증명과 통합하는 기능(참고: 현재 OpenAI GPT 모델만 지원됨)
사용자 입력을 활용하여 식별을 수행하는 통합 엔진 -
API 기반 데이터 소스,
해당 API에서 실시간 데이터 수집
LLM을 사용하여 실시간 데이터를 기반으로 응답을 생성합니다.
GitHub 토론을 통해 피드백이나 새로운 기능 요청을 제출해 주세요.
GitHub Issues를 통해 문제를 제출해 주세요.
NodeJS 프로젝트용 AI-Dapter를 설치하려면 명령줄에서 다음을 실행하세요. 프로젝트의 루트 디렉터리에 있는지 확인하세요.
npm install ai-dapter --save
TypeScript NodeJS 프로젝트를 설정했다고 가정하고 다음과 같이 AIDapter 클래스를 가져옵니다.
"ai-adapter"에서 AIDapter를 가져옵니다.
AI-Dapter를 초기화하려면 일부 필수 및 선택 매개변수를 전달하여 설정을 완료해야 합니다. 아래에는 예가 나와 있으며 그 뒤에 지원되는 매개변수에 대한 문서가 나와 있습니다.
const ai = 새로운 AIDapter({ "app_name": "<<짧은 앱 이름>>" "공급자": "OpenAI", "model_name": "gpt-3.5-turbo-16k", "엔드포인트": "https://api.openai.com/v1/chat/completions", "authentication": {"api_key": "<>","org_id": "< >" }, "온도": "<<0.0과 2.0 사이>>"});
설정을 초기화하기 위해 지원되는 매개변수 목록입니다.
매개변수 | 필수(M) / 선택(O) | 목적 | 가능한 값 |
---|---|---|---|
app_name | 중 | 짧은 앱 이름. | - |
provider | 중 | LLM 모델 제공업체입니다. 참고 : 현재 OpenAI에서 직접 제공하는 모델만 지원됩니다. | "오픈AI" |
model_name | 영형 | 공급자가 출시한 모델을 선택할 수 있습니다. gpt-3.5-turbo-16k , gemini-pro 또는 claude-3-haiku-20240307 과 같이 큰 토큰 크기를 허용하는 모델을 사용하는 것이 좋습니다. | - |
endpoint | 영형 | 공급자가 LLM 모델을 제공하는 끝점입니다. 공급자별 설명서를 참조해야 할 수도 있습니다. 예를 들어 OpenAI 채팅 완료 모델은 https://api.openai.com/v1/chat/completions 엔드포인트에서 제공되고, GoogleAI 모델은 https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent /models/gemini-에서 제공됩니다. https://generativelanguage.googleapis.com/v1/models/gemini-pro:generateContent 및 ClaudeAI 모델은 https://api.anthropic.com/v1/messages 에서 제공됩니다. | - |
authentication | 중 | 공급자가 지정한 인증 세부정보를 제공하세요. 예를 들어 OpenAI에는 API 키와 조직 ID가 필요하므로 위의 초기화 예시와 같이 api_key 및 org_id 필드에 제공됩니다. | - |
telemetry | 영형 | 원격 측정 데이터 수집. 기본값은 true입니다. | 참/거짓 |
AI-Dapter를 사용하면 역할, 성격 추가 등 특정 에이전트 구성을 사용자 정의할 수 있습니다. 같은 맥락에서 실시간 API 응답의 레코드 수 제어, 추가 컨텍스트 전달 또는 후속 조치 등을 시뮬레이션하기 위한 접지 정보
에이전트 및 구성 옵션은 다음과 같이 단일 개체로 전달됩니다. 이러한 구성 값을 조회하고 조정하려면 아래의 해당 섹션을 참조하세요.
옵션을 보자: AIDapterOptions = { "agentConfig": { "role": "개인 비서" }, "dataConfig": { "max_records": 7 }};
다음은 현재 지원되는 에이전트 구성 매개변수입니다. agentConfig
개체 아래에 다음 필드를 추가합니다.
매개변수 | 필수(M) / 선택(O) | 목적 | 가능한 값 |
---|---|---|---|
role | 중 | 사용자 질문에 대한 LLM의 접근 방식을 안내하는 데 도움이 됩니다. 예를 들어, 육군 상사의 역할에서 LLM은 현재 시간에 대한 질문에 "현재 시간은 오전 8시 1분 EDT입니다."와 같이 응답할 수 있는 반면, 코미디언은 항상 내 질문에 대해 한 줄의 농담을 합니다. "이제 시계를 사야 할 시간이에요! 농담이에요. 현재 동부 일광 절약 시간(EDT) 시간대 기준으로 2023년 10월 7일 오전 8시 1분입니다." | - |
personality | 영형 | LLM의 응답 톤에 개성을 부여합니다. | - |
language | 영형 | 사용자 질문의 언어와 관계없이 상담원이 응답할 언어입니다. 기본값은 영어입니다. | - |
expert_at | 영형 | LLM이 의료, 자동차 엔진 등과 같은 특정 분야의 전문가라고 가정해야 한다면 | - |
max_words | 영형 | LLM의 응답이 얼마나 길거나 짧아야 하는지 제어합니다. 기본값은 200단어 미만입니다. | 1에서 200 사이의 숫자 |
다음은 현재 지원되는 데이터 구성 매개변수입니다. dataConfig
개체 아래에 다음 필드를 추가합니다.
매개변수 | 필수(M) / 선택(O) | 목적 | 가능한 값 |
---|---|---|---|
max_records | 중 | 실시간 API 호출에서 얻은 결과 집합의 상위 레코드를 소매해야 하는 수를 제어합니다. API 호출 결과가 접지에 사용되므로 이 매개변수는 입력 토큰 크기를 제어하는 데 필수적입니다. 참고 : 상위 X개 행만 유지되므로 내림차순으로 정렬된 데이터를 포함하는 API 엔드포인트를 제공하는 것이 가장 좋습니다. 기본값=10 | 1에서 10 사이의 임의의 숫자 |
additional_context | 영형 | 후속 조치와 유사한 기능이 예상되는 경우 추가 컨텍스트가 제공될 수 있습니다. (6.3. 접지 실시간 데이터를 사용한 LLM 응답 생성의 예 참조) | 다음과 같은 구조의 배열이어야 합니다. [{ "question": "", "response_summary": "", "entities": { ... } }, { ... }] |
max_contexts | 영형 | 최신 X 컨텍스트를 유지합니다. AI-Dapter는 이 배열의 끝에 최신 컨텍스트가 항상 추가된다는 가정 하에 additional_context 배열의 마지막 두 요소를 유지합니다. | 1 또는 2 |
AI-Dapter는 다음과 같은 세 가지 기능을 제공하므로 이러한 기능에 액세스하는 세 가지 방법이 있습니다.
권장사항: 최고의 개발자 경험을 위해서는 6.3을 참조하세요. 실시간 데이터 기반 LLM 응답 생성
AIDapter.getRealtimeSources(input: string, apiRepository: Types.APIRepository[]): Promise<알 수 없음>
사용자 질문을 기반으로 관련 API 엔드포인트를 얻는 것이 목표인 경우 이 방법을 사용하세요.
매개변수 | 필수(M) / 선택(O) | 목적 | 데이터 유형 |
---|---|---|---|
input | 중 | 사용자 질문 | 텍스트 |
apiRepository[] | 중 | LLM이 사용할 유효성 검사 지침과 함께 API 끝점에 사용되는 자리 표시자, API 끝점(메서드, URL, 헤더 및 데이터)에 대한 세부 정보가 포함된 완전한 API 저장소를 제공합니다. | 7. API 저장소를 참조하세요. |
필드 | 목적 |
---|---|
api_endpoints[] | 식별된 모든 API 엔드포인트의 배열입니다. |
provider | 어떤 LLM 공급자가 사용되었는지 나타냅니다. |
runtime | 전체 응답 시간을 추적합니다. 이는 LLM의 API 응답 시간에 따라 달라집니다. |
// AI-Dapter 가져오기 및 초기화 "ai-adapter"에서 AIDapter 가져오기;const ai = new AIDapter({ "공급자": "GoogleAI", "authentication": {"api_key": "<<귀하의 API 키>>" }});// 적절한 API가 식별, 업데이트 및 반환될 API 저장소를 정의합니다.// 이 예는 API 끝점의 한 가지 예만 제공하지만 배열이므로 여러 개를 제공해야 합니다. 이러한 API 엔드포인트.const apiRepository = [ {"api_info": { "title": "현재 시간", "description": "주어진 위치에 대한 적절한 시간대와 위치를 식별하고 해당 위치의 시간을 가져옵니다."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "area_location의 예는 America/New_York 또는 Europe/London입니다. 제공된 유효한 위치를 기반으로 적절한 Area_location을 결정하세요." ,"기본값": "미국/뉴욕" }] }];// 이것은 사용자의 질문입니다. 입력 = "뭄바이는 지금 몇 시야?"// 이제 getRealtimeSources() 메서드를 호출하여 유효한 API 엔드포인트를 얻습니다sai.getRealtimeSources(input, apiRepository) .then((resp) => {console.log(resp);/* { "api_endpoints": [ { "api": { "method": "GET", "url": "https://worldtimeapi.org /api/timezone/Asia/Kolkata", "headers": { "Content-Type": "application/json" } }, "placeholders": [ { "placeholder": "[area_location]", "determined": true } ], "status": "OK" } ], "provider": "GoogleAI", "runtime": "2초" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
사용자가 제공한 도시인 Mumbai 를 기반으로 LLM은 자리 표시자 area_location 에 대한 적절한 값을 결정하고 업데이트된 API 엔드포인트를 반환했습니다.
AIDapter.getDataFromRealtimeSource(입력: 문자열, apiRepository: Types.APIRepository[], dataConfig?: Types.DataConfig | 정의되지 않음): Promise<알 수 없음>
사용자 질문을 기반으로 관련 API 엔드포인트에서 데이터를 얻는 것이 목표인 경우 이 방법을 사용하십시오.
매개변수 | 필수(M) / 선택(O) | 목적 | 데이터 유형 |
---|---|---|---|
input | 중 | 사용자 질문 | 텍스트 |
apiRepository[] | 중 | API 정보, 엔드포인트(메서드, URL, 헤더 및 데이터) 및 자리 표시자의 배열입니다. | 7. API 저장소를 참조하세요. |
dataConfig | 영형 | API 호출에서 얻은 데이터를 제어하는 구성 매개변수입니다. | 5.2를 참조하세요. 데이터 구성 |
필드 | 목적 |
---|---|
api_results[] | 모든 API 호출의 응답 배열입니다. |
provider | 어떤 LLM 공급자가 사용되었는지 나타냅니다. |
runtime | 전체 응답 시간을 추적합니다. 이는 LLM의 API 응답 시간에 따라 달라집니다. |
// AI-Dapter 가져오기 및 초기화 "ai-adapter"에서 AIDapter 가져오기;const ai = new AIDapter({ "공급자": "GoogleAI", "authentication": {"api_key": "<<귀하의 API 키>>" }});// 적절한 API가 식별, 업데이트 및 반환될 API 저장소를 정의합니다.// 이 예는 API 끝점의 한 가지 예만 제공하지만 배열이므로 여러 개를 제공해야 합니다. 이러한 API 엔드포인트.const apiRepository = [ {"api_info": { "title": "현재 시간", "description": "주어진 위치에 대한 적절한 시간대와 위치를 식별하고 해당 위치의 시간을 가져옵니다."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "area_location의 예는 America/New_York 또는 Europe/London입니다. 제공된 유효한 위치를 기반으로 적절한 Area_location을 결정하세요." ,"기본값": "미국/뉴욕" }] }];// 이것은 사용자의 질문 입력입니다 = "뭄바이는 지금 몇 시야?"// 데이터 구성 dataConfig = { "max_records": 3 }// 이제 getDataFromRealtimeSource() 메서드를 호출하여 관련된 모든 호출에서 데이터를 얻습니다. 사용자 Questionai.getDataFromRealtimeSource(question, apiRepository, dataConfig)를 기반으로 하는 API 엔드포인트 .then((resp) => {console.log(resp);/* { "api_results": [ { "api_sources": "worldtimeapi.org", "data": { "약어": "IST", "client_ip ": "50.126.214.61", "날짜시간": "2024-01-05T22:48:30.316887+05:30", "day_of_week": 5, "day_of_year": 5, "dst": false, "dst_from": null, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "시간대": "아시아/콜카타", "unixtime": 1704475110, "utc_datetime": "2024-01-05T17:18:30.316887+00:00", "utc_offset": "+05:30", "week_number": 1 } } ], "공급자": "GoogleAI", "런타임": "4초" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
API 호출의 응답입니다. 이 데이터는 LLM 접지에 사용될 수 있습니다.
AIDapter.getLLMResponseFromRealtimeSources(input: string, apiRepository: Types.APIRepository[], options?: AIDapterOptions | 정의되지 않음): Promise<알 수 없음>
사용자 질문을 기반으로 LLM 응답을 얻는 것이 목표인 경우 이 방법을 사용하십시오. 여기에는 관련 API 엔드포인트 식별, 식별된 API 호출, LLM 프롬프트에서 이를 사용하여 LLM으로부터 응답 수신이 포함됩니다.
권장사항: 애플리케이션 개발 프로세스를 최대한 가속화하려면 이 방법을 사용하십시오.
매개변수 | 필수(M) / 선택(O) | 목적 | 데이터 유형 |
---|---|---|---|
input | 중 | 사용자 질문 | 텍스트 |
apiRepository[] | 중 | API 정보, 엔드포인트(메서드, URL, 헤더 및 데이터) 및 자리 표시자의 배열입니다. | 7. API 저장소를 참조하세요. |
options | 영형 | 에이전트 및 데이터 구성 | 5. 에이전트 및 데이터 구성 옵션을 참조하세요. |
필드 | 목적 |
---|---|
ai_response | LLM이 생성한 응답입니다. |
ai_status | 성공적인 API 호출을 수행하는 데 필요한 모든 데이터 요소의 가용성을 기반으로 응답이 이루어졌는지 확인하는 데 도움이 됩니다. 가능한 값: OK, FOLLOW-UP 또는 INCOMPLETE |
ai_context | 여기에는 짧은 응답 요약과 엔터티 목록이 포함됩니다. 이 필드의 기본 아이디어는 후속 대화와 관련된 사용 사례를 위한 것입니다. 후속 질문을 제출할 때 전체 개체를 dataConfig 옵션 내에서 additional_content 로 전달할 수 있습니다. |
provider | 어떤 LLM 공급자가 사용되었는지 나타냅니다. |
runtime | 전체 응답 시간을 추적합니다. 이는 LLM의 API 응답 시간에 따라 달라집니다. |
// AI-Dapter 가져오기 및 초기화 "ai-adapter"에서 AIDapter 가져오기;const ai = new AIDapter({ "공급자": "GoogleAI", "authentication": {"api_key": "<<귀하의 API 키>>" }});// 적절한 API가 식별, 업데이트 및 반환될 API 저장소를 정의합니다.// 이 예는 API 끝점의 한 가지 예만 제공하지만 배열이므로 여러 개를 제공해야 합니다. 이러한 API 엔드포인트.const apiRepository = [ {"api_info": { "title": "현재 시간", "description": "주어진 위치에 대한 적절한 시간대와 위치를 식별하고 해당 위치의 시간을 가져옵니다."},"api_endpoint": { "method": "GET", "url": "http://worldtimeapi.org/api/timezone/|area_location|", "headers": {"Content-Type": "application/json" }},"placeholders": [ {"placeholder": "|area_location|","validation_criteria": "area_location의 예는 America/New_York 또는 Europe/London입니다. 제공된 유효한 위치를 기반으로 적절한 Area_location을 결정하세요." ,"기본값": "미국/뉴욕" }] }];// 이것은 사용자의 질문 입력입니다 = "뭄바이는 지금 몇 시야?"// 결합된 에이전트 구성 및 데이터 구성 옵션을 제공하는 AI-Dapter 옵션: AIDapterOptions = { "agentConfig": { "role": "내 질문에 대해 항상 한 줄 농담만 하는 코미디언" }, "dataConfig": { "max_records": 7 }};// 이제 getLLMResponseFromRealtimeSources() 메서드를 호출하여 사용자 질문에 대한 LLM 응답을 얻습니다.// LLM 응답은 접지를 위해 실시간 데이터를 사용하는 프롬프트를 기반으로 합니다. ai.getLLMResponseFromRealtimeSources(질문, apiRepository, 옵션) .then((resp) => {console.log(resp);/* { "ai_response": "볼리우드의 꿈이 날아오르고 길거리 음식의 향기가 공기를 가득 채우는 활기 넘치는 도시 뭄바이의 현재 시간은 22입니다. 2024년 1월 5일 멋진 금요일에 50입니다. 따라서 게이트웨이 오브 인디아(Gateway of India)에서 차이를 마시거나 현지 댄스의 비트에 맞춰 춤을 추거나 클럽, 기억하세요. 시간은 누구도 기다리지 않습니다. 가장 큰 볼리우드 스타도 마찬가지입니다!", "ai_status": "OK", "ai_context": { "questions": "뭄바이는 지금 몇 시야? 뭄바이에서?", "entities": [], "data": [ { "abbreviation": "IST", "client_ip": "50.126.214.61", "datetime": "2024-01-05T22:50:51.261990+05:30", "day_of_week": 5, "day_of_year": 5, "dst": false, "dst_from": null, "dst_offset": 0, "dst_until": null, "raw_offset": 19800, "시간대": "아시아/콜카타", "unixtime": 1704475251, "utc_datetime": "2024-01-05T17:20:51.261990+00:00", "utc_offset": "+05:30", "week_number": 1 } ] , "소스": [ "worldtimeapi.org" ] }, "provider": "GoogleAI", "runtime": "6초" } */ }).catch((err) => console.log(JSON.stringify(err, null, 4)));
제공된 API 저장소에서 관련 API를 식별하기 위해 사용자 질문이 먼저 사용됩니다. 또한 이 메서드는 식별된 API를 호출하고 해당 응답을 수집하여 최종 LLM 프롬프트를 기반으로 하고 생성된 응답을 반환합니다.
또한 응답에는 ai_response
필드 내의 LLM 생성 콘텐츠와 ai_context
필드 내의 컨텍스트가 포함되어 있습니다. 전체 컨텍스트는 후속 질문과 함께 dataConfig.additional_context
로 전달될 수 있습니다.
예제에서는 후속 대화를 활성화하기 위해 컨텍스트를 전달하는 방법을 보여줍니다.
// 앞의 예와 같이 ai_context에는 다음 정보가 포함됩니다:// --------------------------------- ------------------// resp.ai_context: {// "질문": "뭄바이는 지금 몇 시야? 뭄바이의 현재 날짜는 언제입니까?",// "엔티티": [],// "데이터": [// {// "약어": "IST",// "클라이언트_ip": "50.126.214.61",// "날짜시간": "2024-01-05T22:50:51.261990+05:30",// "day_of_week": 5,// "day_of_year": 5,// "dst": false,// "dst_from": null,// "dst_offset": 0,// "dst_until": null,// "raw_offset": 19800,// "timezone": "Asia/Kolkata",// "unixtime": 1704475251,// "utc_datetime": "2024-01-05T17 :20:51.261990+00:00",// "utc_offset": "+05:30",// "주_번호": 1// }// ],// "소스": [// "worldtimeapi.org"// ]// }// --- ------------------------------------- -----------// 위의 컨텍스트를 dataConfig.additional_context에 추가합니다 ...if(options.dataConfig[additional_context]){