-
Notifications
You must be signed in to change notification settings - Fork 0
/
plugin.qmd
558 lines (397 loc) · 27.7 KB
/
plugin.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
# 챗GPT 플러그인
1950년대부터 본격적으로 컴퓨터가 도입되면서 CLI를 필두로 다양한 사용자 인터페이스(User Interface)가 적용되었다. 스티브 잡스의 애플사는 매킨토시 GUI에 이어 아이폰 모바일 인터페이스를 일반화시켰다면, 최근 챗GPT는 언어 사용자 인터페이스(LUI)를 통해 각 분야에 혁신을 예고하고 있다. 챗GPT 데이터 과학도 사용자 관점에서 보자. 기존 R, 파이썬, SQL, 엑셀 등 데이터 과학 구문을 머리속에 암기하고 있거나 구글이나 네이버를 통해 중요 키워드를 통해 문제를 해결해야 했었다. 하지만, 이제 챗GPT가 자연어를 이해하기 때문에 글쓰기, 수식, 이미지 생성, 다이어그램, 표, 그래프, 데이터 분석 등 글쓰기 전반에 변화는 필연적이다.\index{User Inferface!CLI}\index{User Inferface!GUI}\index{User Inferface!WUI}\index{User Inferface!MUI} \index{User Inferface!LUI}\index{사용자 인터페이스} [@wickham2023r] [@wickham2019welcome] [@gozalo2023chatgpt]
```{mermaid}
%%| label: fig-ui-evolution
%%| fig-cap: 사용자 인터페이스 진화
flowchart TB
subgraph A["사용자 인터페이스"]
direction LR
CLI["CLI 1950~<br>Command Line Interface<br> GUI 1970~<br> Graphic User Inferface"] --> WIMI
WIMI["Web Interface <br> 1994~ <br> Mobile Interface <br> 2007~"] --> NUI["LUI 2023~<br> Language <br> User Interface"]
end
classDef default fill:#f9f7f7,stroke:#333,stroke-width:2px;
classDef A font-size:16px;
```
[출처: [ChatGPT plugins](https://openai.com/blog/chatgpt-plugins)]{.aside}
## 플러그인
챗GPT **플러그인(Plugin)**은 GPT 언어 모형에 특별히 설계된 도구로 안전성 제공을 핵심 원칙으로 삼고 있다. 플러그인은 챗GPT가 최신 정보에 접근하거나 수학계산을 실행하고, 포스터 제작 같은 제3자 서비스를 챗GPT 인터페이스를 통해 이용하는 기능을 제공한다. 현재 기준(2023년 09월 기준) 부가세 포함 22 달러를 결재해야 플러그인을 사용할 수 있지만, 챗GPT 플러그인을 통해 사용자 요구에 맞는 더 유용한 정보와 서비스 제공이 가능하다.
챗GPT 플러그인은 데이터 과학자, 개발자, 일반 사용자, 디자이너 등 다양한 사람들에게 활용될 수 있는데, 데이터 과학자는 복잡한 쿼리나 코드 작성 없이도 데이터를 챗GPT에 업로드하고 분석 프롬프트를 함께 전달하면 챗GPT 고급 데이터 분석(Advanced Data Analysis, 구 Code Interpreter) 플러그인을 통해 고급 데이터 분석을 파이썬/R/SQL 코드 작성없이 수행할 수 있으며, 개발자는 챗GPT를 통해 코드 조각(code snippet)을 생성하거나 문제를 해결하는 데 도움을 받을 수 있고, 일반 사용자는 챗GPT를 통해 일상적인 질문에 대한 답을 얻을 수 있고, 수험생이나 학부모는 가정교사처럼 수학문제풀이에 챗GPT 플러그인(울프람)을 사용하고, 그래픽 디자이너는 이미지 생성/편집 플로그인(캔바 등)을 통해 빠른 시간내에 디자인 생성물을 작업할 수 있다.
![챗GPT 플러그인](images/chatGPT_plugins.jpg)
## 지오코딩
**지오코딩(Geocoding)**은 주소, 지명, 우편 번호 등의 위치 정보를 위도와 경도로 변환하는 것으로 이를 통해 특정 위치를 지도 상에 표시하거나, 위치 기반 서비스를 제공할 수 있다. 예를 들어, "서울특별시 강남구 테헤란로 212"라는 주소를 위도 37.5012746, 경도 127.0395857와 같은 좌표로 변환하는 일종의 함수로 볼 수 있다.
지오코딩은 주소나 지명을 위도와 경도로 변환하는 과정으로, 일반적으로 사용자가 주소나 지명을 입력하면 이를 API 요청으로 전달한다. 서버는 이 요청을 처리하여 해당 위치의 위도와 경도 정보를 반환한다. 이렇게 얻은 위도와 경도는 지도 상에 표시하거나 위치 기반 서비스를 제공하는 데 사용된다. 반대로, 위도와 경도를 주소나 지명으로 변환하는 것을 **역방향 지오코딩**이라고 한다. Google Maps API, Kakao Maps API, Naver Maps API 등 서비스 제공업체가 다수 존재하지만 일정 횟수 이상의 요청 제한, 정확도 문제, 데이터 갱신주기 등 제한사항을 파악하고 적절한 API를 선택하여 업무에 적용한다.
[[ShareGPT: 챗GPT Plugin - 지도API](https://chat.openai.com/share/dcfee23a-0853-454b-9d8c-f76fc4474cb6)]{.aside}
카카오 지도 API [기술문서](https://apis.map.kakao.com/web/documentation/)를 챗GPT 플러그인 "Link Reader"을 사용하여 좌표를 찍고 이를 지도위에 출력하는 코드를 작성해보자.
### 지오코딩 API 코드
카카오 지도 API를 호출해서 주소를 넘기는 프롬프트를 챗GPT 플로그인을 사용해서 위경도 좌표를 반환하는 생성한다.
::: {.callout-note collapse="false"}
### 웹사이트를 읽고 다음 지령을 준비해 https://apis.map.kakao.com/web/documentation/
``` markdown
Kakao 지도 API 문서는 다양한 지도 관련 기능을 제공한다. 이 문서는 지도 객체 생성, 이벤트, 메서드 등에 대한 상세한 정보를 담고 있다. 아래는 주요 내용의 요약이다.
### 지도 객체 생성
- `kakao.maps.Map(container, options)`: 지도를 생성한다.
- `container`: 지도가 표시될 HTML element
- `options`: 중심 좌표, 확대 수준, 지도 종류 등을 설정할 수 있다.
### 주요 메서드
- `setCenter(latlng)`: 지도의 중심 좌표를 설정한다.
- `getCenter()`: 지도의 중심 좌표를 반환한다.
- `setLevel(level, options)`: 지도의 확대 수준을 설정한다.
- `getLevel()`: 지도의 확대 수준을 반환한다.
- `setMapTypeId(mapTypeId)`: 지도의 타입을 설정한다.
- `getMapTypeId()`: 지도의 타입을 반환한다.
### 이벤트
- `center_changed`: 중심 좌표가 변경되면 발생한다.
- `zoom_start`: 확대 수준이 변경되기 직전에 발생한다.
- `zoom_changed`: 확대 수준이 변경되면 발생한다.
- `click`: 지도를 클릭하면 발생한다.
- `dblclick`: 지도를 더블클릭하면 발생한다.
이 외에도 다양한 메서드와 이벤트가 있어, 개발자가 원하는 기능을 쉽게 구현할 수 있다.
```
:::
::: {.callout-note collapse="false"}
### 주소를 넘기면 위경도 좌표를 반환하는 R 코드를 작성해줘.
R에서 주소를 위경도 좌표로 변환하기 위해 `httr` 패키지를 사용하여 Kakao API를 호출할 수 있다. 아래는 간단한 예시 코드이다.
``` r
# 필요한 패키지를 설치하고 불러온다
install.packages("httr")
install.packages("jsonlite")
library(httr)
library(jsonlite)
# 주소를 위경도로 변환하는 함수를 정의한다
get_latlng <- function(address) {
# Kakao API 키를 설정한다 (본인의 API 키로 교체해야 한다)
api_key <- "YOUR_KAKAO_API_KEY"
# API URL과 파라미터를 설정한다
url <- "https://dapi.kakao.com/v2/local/search/address.json"
params <- list(query = address)
headers <- add_headers("Authorization" = paste("KakaoAK", api_key))
# API를 호출한다
response <- GET(url, query = params, headers)
# 응답을 확인하고 JSON을 파싱한다
if (status_code(response) == 200) {
content <- content(response, "text", encoding = "UTF-8")
json_data <- fromJSON(content)
# 위경도를 추출한다
if (json_data$meta$total_count > 0) {
lat <- json_data$documents[[1]]$y
lng <- json_data$documents[[1]]$x
return(list(lat = lat, lng = lng))
} else {
return(NULL)
}
} else {
stop("API request failed")
}
}
# 함수를 테스트한다
address <- "서울특별시 강남구 테헤란로 212"
result <- get_latlng(address)
print(paste("Latitude:", result$lat, "Longitude:", result$lng))
```
이 코드에서 `YOUR_KAKAO_API_KEY` 부분을 본인의 Kakao API 키로 교체해야 한다. 이 함수는 주소(`address`)를 입력으로 받아 위도(`lat`)와 경도(`lng`)를 리스트로 반환한다.
주의: API 키를 공개하지 않도록 주의해야 한다.
:::
### 코드 수정
챗GPT가 제시한 "API 키를 공개하지 않도록 주의해야 한다"를 반영하여 `api_key <- "YOUR_KAKAO_API_KEY"` 부분을 `api_key <- Sys.getenv("KAKAO_MAP_API_KEY")` 바꿔 외부에 카카오 지도 API키를 숨긴다. "가톨릭관동대학교" 주소 "강원도 강릉시 범일로579번길 24"를 넣어 위경도 좌표를 얻어낸다.
```{r}
#| code-line-numbers: "10"
#| eval: false
#| echo: true
# 필요한 패키지를 설치하고 불러온다
# install.packages("httr")
# install.packages("jsonlite")
library(httr)
library(jsonlite)
# 주소를 위경도로 변환하는 함수를 정의한다
get_latlng <- function(address) {
# Kakao API 키를 설정한다 (본인의 API 키로 교체해야 한다)
api_key <- Sys.getenv("KAKAO_MAP_API_KEY")
# API URL과 파라미터를 설정한다
url <- "https://dapi.kakao.com/v2/local/search/address.json"
params <- list(query = address)
headers <- add_headers("Authorization" = paste("KakaoAK", api_key))
# API를 호출한다
response <- GET(url, query = params, headers)
# 응답을 확인하고 JSON을 파싱한다
if (status_code(response) == 200) {
content <- content(response, "text", encoding = "UTF-8")
json_data <- fromJSON(content)
# 위경도를 추출한다
if (json_data$meta$total_count > 0) {
lat <- json_data$documents[[1]]$y
lng <- json_data$documents[[1]]$x
return(list(lat = lat, lng = lng))
} else {
return(NULL)
}
} else {
stop("API request failed")
}
}
# 가톨릭관동대학교 주소
address <- "강원도 강릉시 범일로579번길 24"
result <- get_latlng(address)
print(paste("Latitude:", result$lat, "Longitude:", result$lng))
#> [1] "Latitude: 37.7373221158143 Longitude: 128.873681611316"
```
### 가톨릭관동대 위치
가톨릭관동대학교 주소 정보를 지오코딩을 통해 위경도 좌표를 얻는다. 다음으로 `ggplot`으로 주소를 찍고, 대한민국지도위에 올려 정확한 위치를 시각화한다.
```{r}
# 필요한 패키지를 설치하고 불러온다
# install.packages(c("sf", "ggplot2", "ggrepel"))
library(sf)
library(ggplot2)
library(ggrepel)
# 위경도 좌표와 주소를 가진 데이터 프레임을 생성한다
coordinates_df <- data.frame(
lon = 128.873681611316, # result$lng, # 경도
lat = 37.7373221158143, # result$lat, # 위도
address = c("강원도 강릉시 범일로579번길 24")
)
# 데이터 프레임을 sf 객체로 변환한다
coordinates_sf <- st_as_sf(coordinates_df, coords = c("lon", "lat"), crs = 4326)
# 대한민국지도
library(giscoR)
cntry <- gisco_countries
KOR <- subset(cntry, ISO3_CODE == "KOR")
# ggplot2와 geom_sf()를 사용하여 시각화한다
coordinates_sf |>
ggplot() +
geom_sf() +
geom_sf_text(aes(label = address), size = 2, nudge_y = 0.2) +
labs(title = "챗GPT 플로그인 사례",
x ="",
y ="") +
theme_minimal() +
geom_sf(data = KOR, fill = "transparent")
```
## 포스터 제작
[[ShareGPT: Canva 사용사례](https://chat.openai.com/share/9689351d-6f4b-475c-96e4-618e46aca82b)]{.aside}
[캔바](https://canva.com/)는 온라인 디자인 툴로, 사용자가 손쉽게 다양한 디자인을 생성할 수 있다. 전문적인 디자인 경험이 없는 사람들도 높은 품질의 그래픽 제작을 도와준다. 사진, 텍스트, 아이콘 등을 드래그 앤 드롭하는 방식으로 디자인을 할 수 있으며, 다양한 템플릿이 지원되어 작업을 더욱 쉽고 빠르게 그래픽 작업을 수행할 수 있으며, 소셜 미디어 포스트, 프레젠테이션, 포스터, 비즈니스 카드 등 다양한 형태의 디자인을 생성할 수 있다. 작업한 디자인은 캔바 내에서 바로 다운로드 가능하고 다른 사람과 공유할 수 있다.
::: {layout-ncol="3"}
![](images/plugin_canva.jpg){fig-align="center" width="287"}
![](images/plugin_canva_edit.jpg){fig-align="center" width="287"}
![](images/plugin_canva_poster.jpg){fig-align="center" width="287"}
:::
## 사실확인과 수학
### 사실 확인
울프람 알파(Wolfram Alpha) 사용해서 사실관계를 확인해보자.
::: {.callout-note collapse="false"}
### "지구는 평평하다"라는 주장을 검증해줘.
```
"지구는 평평하다"라는 주장에 대해 Wolfram Alpha를 이용해 검증해보았습니다.
### 입력 해석
- 질문: 지구는 평평하다?
### 결과
- 답변: 아니다.
- 지역적으로만 그렇다. 그리고 그것도 특정 지역, 예를 들어 미국 중서부에서만 해당된다.
자세한 정보는 [Wolfram|Alpha 웹사이트](https://www6b3.wolframalpha.com/input?i=Is+the+Earth+flat%3F)에서 확인할 수 있다.
이처럼 Wolfram Alpha는 다양한 주장이나 정보에 대한 팩트체크를 할 수 있는 유용한 도구이다.
```
[Wolfram\|Alpha 웹사이트](https://www6b3.wolframalpha.com/input?i=Is+the+Earth+flat%3F)
:::
::: {.callout-note collapse="false"}
### 라면을 많이 먹으면 건강에 정말 안좋은가?
Wolfram Alpha에서는 "라면을 많이 먹으면 건강에 정말 안 좋은가?"에 대한 구체적인 답변을 제공하지 못했다. 그러나 일반적으로 라면은 높은 나트륨, 지방, 인공 첨가물 등을 포함하고 있어, 과도하게 섭취할 경우 다음과 같은 건강 문제가 발생할 수 있다:
1. **고혈압**: 라면에는 나트륨이 많이 들어있다. 나트륨 과다 섭취는 혈압을 높일 수 있다.
2. **비만**: 라면은 칼로리가 높고, 지방도 많이 들어있다. 지속적으로 라면을 많이 먹으면 체중 증가의 위험이 있다.
3. **소화기 문제**: 라면은 소화가 잘 되지 않는 식품 중 하나이다. 과도한 섭취는 소화기에 부담을 줄 수 있다.
4. **영양 불균형**: 라면은 영양소가 적고, 나트륨이나 지방 등의 불필요한 성분이 많다. 이로 인해 영양 불균형이 발생할 수 있다.
5. **심혈관 질환**: 고혈압, 높은 콜레스테롤 등은 심혈관 질환의 위험을 높인다.
라면을 즐길 때는 이러한 점들을 고려하여 적당한 양과 빈도로 섭취하는 것이 중요하다.
:::
### 수능문제 풀이
[[ShareGPT: 팩트체크와 수학문제 풀이](https://chat.openai.com/share/e3e57271-9956-4348-abe9-4a87bc56a984)]{.aside}
2023학년도 대학수학능력시험 수학영역 문제를 풀어보자.
![](images/plugin_wolfram.jpg){fig-align="center" width="644"}
::: {.callout-note collapse="false"}
### 프롬프트 `\left(\frac{4}{2^{\sqrt{2}}}\right)^{2+\sqrt{2}}` 값은?
식 $$
\left(\frac{4}{2^{\sqrt{2}}}\right)^{2+\sqrt{2}}
$$ 의 값은 $4$입니다.
정확한 형태로는 $2^{(2 - \sqrt{2}) (2 + \sqrt{2})}$로 표현됩니다.
자세한 정보는 [Wolfram\|Alpha 웹사이트](https://www6b3.wolframalpha.com/input?i=%284+%2F+%282%5E%28sqrt%282%29%29%29%29%5E%282+%2B+sqrt%282%29%29)에서 확인할 수 있다.
:::
::: {.callout-note collapse="false"}
### 프롬프트: 과정도 설명해줘.
물론이다. 주어진 식은 $$
\left(\frac{4}{2^{\sqrt{2}}}\right)^{2+\sqrt{2}}
$$이다.
이 식을 단계별로 분해해보자.
### 단계 1: 분모를 간단하게 만들기 {.unnumbered}
먼저, 분모인 $2^{\sqrt{2}}$를 간단하게 만들기 위해 분자와 분모에 $2^{\sqrt{2}}$를 곱한다. 이렇게 하면:
$$
\left(\frac{4 \times 2^{\sqrt{2}}}{2^{\sqrt{2}} \times 2^{\sqrt{2}}}\right)^{2+\sqrt{2}}
$$
### 단계 2: 분모를 합치기 {.unnumbered}
이제 분모의 $2^{\sqrt{2}} \times 2^{\sqrt{2}}$를 합쳐 $2^{2\sqrt{2}}$로 만든다.
$$
\left(\frac{4 \times 2^{\sqrt{2}}}{2^{2\sqrt{2}}}\right)^{2+\sqrt{2}}
$$
### 단계 3: 분자를 합치기 {.unnumbered}
분자의 $4 \times 2^{\sqrt{2}}$를 합쳐 $2^2 \times 2^{\sqrt{2}} = 2^{2+\sqrt{2}}$로 만든다.
$$
\left(\frac{2^{2+\sqrt{2}}}{2^{2\sqrt{2}}}\right)^{2+\sqrt{2}}
$$
### 단계 4: 지수 법칙 적용 {.unnumbered}
지수 법칙에 따라 분자와 분모의 지수를 빼준다.
$$
\left(2^{(2+\sqrt{2}) - 2\sqrt{2}}\right)^{2+\sqrt{2}} = \left(2^{(2 - \sqrt{2})(2 + \sqrt{2})}\right)^{2+\sqrt{2}}
$$
### 단계 5: 최종 계산 {.unnumbered}
마지막으로, $(2 - \sqrt{2})(2 + \sqrt{2})$를 계산하면 $4 - 2 = 2$가 된다. 따라서 최종 결과는 $2^2 = 4$이다.
이렇게 해서 $$
\left(\frac{4}{2^{\sqrt{2}}}\right)^{2+\sqrt{2}} = 4
$$임을 확인할 수 있다.
:::
## 여행일정
챗GPT 언어모형의 강점이자 약점은 텍스트를 그럴듯하게 생성하지만 사실이 아니라는 점이다. 하지만 챗GPT 플러그인을 활용하면 이러한 문제를 해결할 수 있으며 기존에 비효율적이고 시간이 많이드는 작업을 손쉽게 해결할 수 있다.
여행 계획을 세우거나 예산을 산출하는 데 있어서도 이 도구를 효율적으로 사용할 수 있다. 챗GPT를 활용하여 타이베이 2박 3일 여행을 계획하고 예산을 산출하는 과정을 통해 또다른 챗GPT 플러그인 활용법을 알아보자.
### 플러그인 활성화
먼저, 대만 타이페이 여행과 관련된 챗GPT 플러그인을 설치하고 활성화한다. 현재기준 최대 3개까지 플러그인 활성화가 가능하기 때문에 항공권, 호텔, 렌터카 예약에 사용할 익스피디아(Expedia) 플러그인, 맛집 식당예약에 사용할 오픈테이블(OpenTable) 플러그인, 여행경비 계산을 위한 울프람(Wolfram) 플러그인을 설치하여 활성화한다.
![챗GPT 여행 플러그인](images/travel_plugin.jpg){fig-align="center" width="644"}
### 챗GPT 대화
챗GPT 플러그인을 활성화하고, 챗GPT 대화창에 먼저 전체적인 여행계획을 정리하여 프롬프트로 챗GPT에 입력한다. 전체적인 여행계획을 이해하고 ㅁㄴ저 호텔을 추천해준다.
::: callout-note
### 여행개요 프롬프트와 응답결과
#### 프롬프트 {.unnumbered}
``` html
10월 15부터 10월17일까지 2박 3일 대만 타이베이 여행 관광일정을 다음 사항을 고려하여 잡아줘
1. 숙박: 호텔 4성급이상
2. 차렌탈: 중형 승용차
3. 항공: 이코노미 클래스 3명
4. 오전 오후 유명 관광지를 한곳정도 도는 무난한 일정
```
#### 응답결과 {.unnumbered}
물론이다. 여행 일정을 잡는 데 도와드리겠다. 먼저 숙박에 대한 정보를 찾아보겠다. 타이베이에서 4성급 이상의 호텔을 원하신다고 하셨으니, 그에 맞는 숙박지를 추천해 드리겠다. 잠시만 기다려 주시길.
숙박에 대한 정보를 찾았다. 기본적으로 4성급 이상의 호텔을 찾았으며, 체크인 날짜는 2023년 10월 15일, 체크아웃 날짜는 2023년 10월 17일로 설정하였다. 이러한 조건을 바꾸고 싶다면 알려주시면 더 정확한 추천을 할 수 있다.
#### 1. [Grand Hyatt Taipei](https://apim.expedia.com/recommendations/og-redirect/97fe6b74-6c8b-4624-81e5-35ec312e25cd?brand=bex) {.unnumbered}
- **설명**: 이 호텔은 8개의 레스토랑, 풀 서비스 스파, 야외 수영장을 갖추고 있다. 무료 Wi-Fi와 무료 자체 주차도 제공된다.
- **위치**: Xinyi 지역에 위치해 있으며, TAITRA, Taipei International Convention Center, Taipei World Trade Center 등이 10분 거리에 있다.
- **최대 수용 인원**: 3명
- **별점**: 5.0
- **고객 평점**: 8.8 / 10.0 (리뷰 988개)
- **평균 숙박 가격**: \$223.32 USD
#### 2. [Shangri-La Far Eastern, Taipei](https://apim.expedia.com/recommendations/og-redirect/75c5e3e4-c525-4cbb-8d48-d54329937a86?brand=bex) {.unnumbered}
- **설명**: 이 호텔은 5개의 레스토랑, 2개의 야외 수영장, 3개의 바/라운지를 갖추고 있다. 무료 Wi-Fi와 무료 자체 주차도 제공된다.
- **위치**: 엔터테인먼트 지구에 위치해 있으며, National Taiwan University, Eastern Shopping District, Zhongxiao Road 등이 1마일 이내에 있다.
- **최대 수용 인원**: 3명
- **별점**: 5.0
- **고객 평점**: 9.2 / 10.0 (리뷰 986개)
- **평균 숙박 가격**: \$205.64 USD
#### 3. [Regent Taipei](https://apim.expedia.com/recommendations/og-redirect/e4ca1e2c-c25d-4960-b2cd-dcaddb977b79?brand=bex) {.unnumbered}
- **설명**: 이 호텔은 8개의 레스토랑, 풀 서비스 스파, 야외 수영장을 갖추고 있다. 무료 Wi-Fi와 무료 자체 주차도 제공된다.
- **위치**: 공항 근처에 위치해 있으며, Nanjing West Road와 Chifeng Street가 10분 거리에 있다.
- **최대 수용 인원**: 2명
- **별점**: 5.0
- **고객 평점**: 9.2 / 10.0 (리뷰 959개)
- **평균 숙박 가격**: \$186.71 USD
- **프로모션**: 14% 할인
이 중에서 어떤 호텔이 마음에 드는지 알려주시면, 다음으로 차 렌탈에 대한 정보를 찾아드리겠다. 더 자세한 정보나 다른 선택지를 원하신다면 알려주시기 바란다.
:::
다음으로 항공권도 예매한다. 챗GPT가 직접 답을 하는 대신 `Used Expedia` 플러그인을 사용해서 프롬프트를 익스피디아 측에 다음과 같이 전달한다.
``` json
{
"user_input_in_english": "I would like to book a flight from Incheon to Taipei with a direct flight for 3 people in economy class.",
"keywords": "flight|Incheon|Taipei|direct|3 people|economy class",
"origin": "Incheon",
"destination": "Taipei",
"departure_date": "2023-10-15",
"number_of_stops": 0
}
```
챗GPT가 한글을 영어로 번역하고 의도(Intent)를 파악하여 이를 정형데이터(Key-Value)로 변환하여 전달하고 익스피디아에서 전달받은 데이터를 한글로 번역하고 정형데이터를 사람이 읽기 좋은 형태로 변환하여 출력한다.
::: callout-note
### 호텔선정과 항공권 예매
#### 프롬프트 {.unnumbered}
``` html
Shangri-La Far Eastern, Taipei 호텔로 예약해주고 인천에서 출발하여 타이페이 직항하는 항공권도 찾아줘
```
#### 응답결과 {.unnumbered}
Shangri-La Far Eastern, Taipei 호텔을 선택하셨군요. 좋은 선택이다! 이제 항공권에 대한 정보를 찾았다. 기본적으로 인천에서 타이페이로 직항하는 항공권을 찾았으며, 출발 날짜는 2023년 10월 15일로 설정하였다. 이러한 조건을 바꾸고 싶다면 알려주시면 더 정확한 추천을 할 수 있다.
### 항공권 추천 {.unnumbered}
1. **Hahn Air Systems**
- **항공편 번호**: 9869
- **출발 공항**: ICN (인천)
- **도착 공항**: TPE (타이페이)
- **출발 시간**: 2023-10-15, 09:05 AM
- **도착 시간**: 10:50 AM
- **비행 시간**: 2h45m
- **가격**: \$252.90 USD
- [예약하기](https://apim.expedia.com/recommendations/og-redirect/a706e76f-e215-4dd3-b180-9e20f00c0de5)
2. **Asiana Airlines**
- **항공편 번호**: 713
- **출발 공항**: ICN (인천)
- **도착 공항**: TPE (타이페이)
- **출발 시간**: 2023-10-15, 02:20 PM
- **도착 시간**: 03:50 PM
- **비행 시간**: 2h30m
- **가격**: \$262.00 USD
- [예약하기](https://apim.expedia.com/recommendations/og-redirect/e1901b01-9303-431e-9847-ff54af4ea8a2)
이 중에서 어떤 항공권이 마음에 드는지 알려주시면, 다음으로 차 렌탈에 대한 정보를 찾아드리겠다. 더 자세한 정보나 다른 선택지를 원하신다면 알려주시기 바란다. 어떤 것이 마음에 드는가? 더 자세한 정보를 원하신다면 알려주시면 도와드리겠다.
:::
이런 과정을 거쳐서 순차적으로 관광지와 식당도 추천을 받아보면 각 항목은 잘 정리되었으나 총소요비용을 정리할 필요가 있다. 울프람 플러그인을 사용하면 깔끔하게 여행에 소요되는 전체적인 비용을 쉽게 산출하여 대략적인 대만 타이페이 2박3일 여행일정에 대한 감을 잡게 된다.
::: callout-note
### 렌터카 선정과 비용산출
#### 프롬프트 {.unnumbered}
``` html
3번 Honda Fit으로 선택합니다. 이제 총 비용 산출을 위해 각 항목별 소요예산을 최소, 최대, 평균으로 계산해주세요.
```
#### 응답결과 {.unnumbered}
죄송합니다. 원하시는 정보를 정확하게 가져오지 못했다. 그러나 각 항목별 소요 예산을 계산하기 위해 수동으로 계산을 해보겠다.
#### 각 항목별 소요 예산 (단위: USD) {.unnumbered}
1. **숙박 (Shangri-La Far Eastern, Taipei)**
- 최소: \$200 x 2박 = \$400
- 최대: \$300 x 2박 = \$600
- 평균: (\$200 + \$300) / 2 x 2박 = \$500
2. **항공 (Asiana Airlines)**
- 최소: \$300 x 3명 = \$900
- 최대: \$400 x 3명 = \$1200
- 평균: (\$300 + \$400) / 2 x 3명 = \$1050
3. **관광 (Small-Group Tour)**
- 최소: \$50 x 3명 = \$150
- 최대: \$70 x 3명 = \$210
- 평균: (\$50 + \$70) / 2 x 3명 = \$180
4. **차 렌탈 (Honda Fit)**
- 최소: \$229.79
- 최대: \$241.93
- 평균: (\$229.79 + \$241.93) / 2 = \$235.86
#### 총 비용 {.unnumbered}
- **최소**: \$400 (숙박) + \$900 (항공) + \$150 (관광) + \$229.79 (차 렌탈) = \$1679.79
- **최대**: \$600 (숙박) + \$1200 (항공) + \$210 (관광) + \$241.93 (차 렌탈) = \$2251.93
- **평균**: \$500 (숙박) + \$1050 (항공) + \$180 (관광) + \$235.86 (차 렌탈) = \$1965.86
이 정보가 도움이 되길 바란다. 추가로 궁금한 점이나 다른 정보가 필요하다면 알려주시기 바란다.
:::
### 여행일정 정리
여행 계획을 세우고 예산을 산출하는 과정은 종종 복잡하고 시간이 많이 소요되는 작업이다. 챗GPT 플러그인을 통해 정확한 대만 타이페이 여행과 관련된 호텔 예약, 항공권 예약, 차 렌탈, 관광지, 식당 등 여행에 필요한 정보를 쉽게 얻을 수 있다.
특히 챗GPT의 도움을 받아 여행일정을 정리하는 과정은 더욱 간편하고 편리하다. 마크다운 표와 머메이드(mermaid) 기능을 활용한다.
마크다운 표를 사용하면 여행에 소요되는 예산을 한눈에 볼 수 있다. 예를 들어, 2박 3일 타이베이 여행의 경우, 숙박, 항공, 관광, 차 렌탈 등 각 항목별로 최소, 최대, 평균 비용을 쉽게 확인할 수 있어 여행 준비를 할 때 예산을 더 효율적으로 분배할 수 있다.
| 항목 | 최소 (USD) | 최대 (USD) | 평균 (USD) |
|:-----------:|:-----------:|:-----------:|:-----------:|
| 숙박 | 400 | 600 | 500 |
| 항공 | 900 | 1200 | 1050 |
| 관광 | 150 | 210 | 180 |
| 차 렌탈 | 229.79 | 241.93 | 235.86 |
| **총 비용** | **1679.79** | **2251.93** | **1965.86** |
머메이드(mermaid) 기능을 활용하면 여행 일정을 시각적으로 표현할 수 있어 여행 전체 흐름을 더 쉽게 파악하고, 필요한 경우 수월하게 일정을 조정할 수 있다. 머메이드 코드 작성을 위해 사용한 프롬프트는 단순하다. 코드를 [https://mermaid.live/](https://mermaid.live/) 온라인 편집기에 붙여넣으면
간트 차트(Gantt chart)를 쉽게 작성할 수 있다.
> 2박3일 타이베이 여행 계획을 mermaid code로 작성해줘.
```{mermaid}
%%| echo: true
gantt
dateFormat YYYY-MM-DD
title 2박 3일 타이베이 여행 계획
section 숙박
Shangri-La Far Eastern, Taipei :a1, 2023-10-15, 3d
section 항공
인천 출발 :a2, 2023-10-15, 1d
타이베이 도착 :after a2, 1d
타이베이 출발 :a3, 2023-10-17, 1d
인천 도착 :after a3, 1d
section 관광
Jiufen :a4, 2023-10-15, 1d
Yehliu Geopark :a5, 2023-10-16, 1d
Shifen :a6, 2023-10-17, 1d
section 차 렌탈
Honda Fit 렌탈 :a7, 2023-10-15, 3d
```