Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2025-02-02
2025-02-02
74
[◀️ Vertex AI Gemini 둘러보기](https://www.joinc.co.kr/w/LLM-NATIVE-APP-DEVELOP-003) [🗂️ 목차](https://www.joinc.co.kr/w/LLM-NATIVE-APP-DEVELOP-001) ### 프롬프트 엔지니어링이란 LLM은 방대한 데이터를 학습하여 다양한 작업을 수행 할 수 있는 **잠재력**을 가지고 있지만 그 잠재력을 최대한 활용하기 위해서는 적절한 지시와 정보가 필요하다. 이러한 지시와 정보는 프로그래밍 언어가 아닌 "**인간의 언어 형태**"로 전달되어야 한다. 인간의 언어는 프로그래밍 언어에 비해서 매우 유연하지만 모호성, 중의성, 비유, 함축 등을 포함하여 다양한 의미로 해석이 될 수 있다. 따라서 정확한 응답을 얻기 위해서는 우리가 원하는 바를 모호하지 않게 명확하고 정확하게 지시를 해야 한다. 회사 업무에서 직원이 일을 제대로 하기 위해서는 명확하게 업무를 지시해야 하는 것과 같은 이치다. 물론 어떤 직원은 "모호하게 지시해도" 찰떡 같이 알아 먹고 작업을 수행하거나 작업 내용이 맞는지 다시 묻거나 하겠지만 "LLM"은 그렇게 까지 똑똑하지 못하다. 엄청나게 많은 정보를 저장하고 있지만 일 머리는 그다지 좋지 않은 직원이라고 이해하면 된다. **프롬프트 엔지니어링(Prompt Engineering)** 는 원하는 결과물을 얻기 위한 일종의 대화 기법이라고 보면 된다. ### 프롬프트 Learning ? LLM은 한번 학습을 하면 추가적인 학습을 할 수 없다. 따라서 사용자는 LLM에 요청을 할 때 추가적인 정보들을 LLM에 전달해야 한다. 1. 프롬프트 Learning: 문제를 푸는 방법, 내가 원하는 정보, 분석을 원하는 파일 등을 프롬프트에 추가하여 전달한다. 즉 프롬프트에 학습 데이터를 전달한다. 2. RAG(Retrieval-Augmented Generation): **검색 증강 생성**이라고 한다. 데이터베이스, 인터넷 등에서 데이터를 검색해서 LLM에 전달해서 응답을 만든다. 즉 인터넷과 데이터베이스로 부터 "학습 데이터"를 전달한다. Gemini에서는 Grounding 이라는 기능으로 부르고 있다. BigQuery에 Grounding 혹은 Google Search에 Grounding 하여서 회사 내부의 정보, 인터넷 정보로 부터 응답을 생성한다. ### 프롬프트 엔지니어링을 한다는 것은 어떤 느낌일까 ? LLM이든 (프로그래밍 언어를 이용한) 개발이든 어떤 결과를 얻기 위해서 명령을 내리는 것이다. 아래 Python 코드를 보자. 나이가 30인 이상인 사람을 출력하는 간단한 코드다. ```python # 리스트 형식의 딕셔너리 data = [ {"name": "Alice", "age": 30, "city": "New York"}, {"name": "Bob", "age": 25, "city": "Los Angeles"}, {"name": "Charlie", "age": 35, "city": "Chicago"} ] # 나이가 30 이상인 사람 필터링 filtered_data = [person for person in data if person['age'] >= 30] # 결과 출력for person in filtered_data: print(filtered_data) ``` 실행 결과 ```json [{'name': 'Alice', 'age': 30, 'city': 'New York'}, {'name': 'Charlie', 'age': 35, 'city': 'Chicago'}] ``` 같은 작업을 Gemini를 이용해서 수행해보자. **💬 Input** 아래 데이터에서 나이가 30 이상인 사람의 정보를 알려 주세요. name, age, city alice, 30, New York bob, 25, Los Angeles Charlie, 35, Chicago **🤖 OutPut** 나이가 30 이상인 사람은 다음과 같습니다. - **alice:** 30세, New York 거주 - **Charlie:** 35세, Chicago 거주 ---- 인간의 언어만으로 원하는 응답을 얻을 수 있다. 하지만 출력 방식이 맘에 들지 않는다. JSON 형태로 응답을 요청해보자. **💬 Input** 아래 데이터에서 나이가 30 이상인 사람의 정보를 알려 주세요. 출력 포맷은 JSON 으로 해주세요. name, age, city alice, 30, New York bob, 25, Los Angeles Charlie, 35, Chicago **🤖 OutPut** ```json [ { "name": "alice", "age": 30, "city": "New York" }, { "name": "Charlie", "age": 35, "city": "Chicago" } ] ``` 좀 더 복잡한 테스트를 해보자. 고객의 제품 평가 댓글에서 고객의 만족도를 검토하는 작업을 수행하는 테스트를 해보자. **💬 Input** 당신은 고객의 제품에 대한 평가를 분석하는 어시스턴트입니다. 아래 문장에서 제품에 대한 고객의 평점을 1점부터 5점까지 평가해 주세요. 그리고 어떤 제품에 대한 평가인지도 알려주세요. 이번에 AMD ryzen 5800을 구매했습니다. 성능도 매우 뛰어나고 발열도 적은 것을 확인했습니다. 게임성능은 약간 떨어지기는 하지만 많은 코어수로 크리에이터 작업에 높은 성능을 보여줘서 만족하고 있습니다. 제가 게임을 그다지 많이 하는 편도 아니고요. 가격만 좀 낮춰 줬으면 하는 바램이 있습니다. **🤖 OutPut** 이 리뷰는 **AMD Ryzen 5 5800 CPU (혹은 CPU와 쿨러 세트)**에 대한 것입니다. 고객은 제품에 대해 전반적으로 만족하고 있습니다. **평점: 4점** **이유:** - **장점:** 뛰어난 성능, 낮은 발열, 많은 코어 수로 인한 크리에이터 작업에 대한 높은 성능을 언급했습니다. 고객의 사용 패턴(게임보다는 크리에이터 작업)에 맞춰 제품의 강점을 잘 활용하고 있음을 보여줍니다. - **단점:** 게임 성능이 약간 떨어진다는 점과 가격이 비싸다는 점을 언급했습니다. 하지만 게임을 많이 하지 않는다는 점을 고려하면 게임 성능의 단점은 상대적으로 작게 작용합니다. 가격에 대한 불만은 제품 자체의 결점이라기보다는 가격 정책에 대한 의견입니다. 전반적으로 고객은 제품의 장점에 만족하고 있으며, 단점은 고객의 사용 패턴과 상황을 고려했을 때 큰 문제가 되지 않는 수준입니다. 따라서 4점으로 평가했습니다. ---- 훌륭하게 작업을 수행하는 것을 확인 할 수 있다. 하지만 응답 결과를 데이터베이스에 넣기 위해서 JSON이나 CSV와 같은 특정 형태로 변경하거나 특정 포맷에 맞게 출력하려면 "인간의 언어로" 이를 친절하게 설명해줘야 한다. ✅ 이쯤에서 프롬프트 엔지니어링을 이용해서 컴퓨터에 작업을 시키는 것과 프로그래밍 언어를 이용해서 컴퓨터에 작업을 시키는 것의 차이를 정리해보자. ##### 명령 전달 방식 * 프로그래밍 언어: * **형식적**이고 **구체적인 명령어**로 작성된다. * 프로그래머는 컴퓨터가 실행 할 수 있도록 가능한 **정확한 로직화 절차**를 세부적으로 정의해야 한다. * if, for, while 같은 제어 구조와 함수 호출을 사용하여 단계별로 지시한다. * 프롬프트 엔지니어링: * 자연어와 비슷한 **비정형적** 이고 **추상적인 요청** 으로 컴퓨터에게 의도를 전달한다. * 사용자는 LLM의 **학습된 지식** 과 **추론 능력**을 활용한다. * 명시적인 로직 대신에 원하는 결과를 자연스럽게 기술하며 하며, 모델이 이를 해석해서 적합한 작업을 수행 한다. ##### 결과의 신뢰성과 제어 가능성 * 프로그래밍 언어: * **결정론적**이다. 입력이 동일하면 동일한 값을 출력한다. * 복잡한 문제를 처리하기 위해서 논리적인 구조를 상세히 설계 할 수 있다. * 프롬프트 엔지니어링 * **확률적**, **비 결정적** 이다. 학습 데이터, 파라메터, 동일한 맥락 에서도 동일한 입력에 대한 출력이 달라 질 수 있다. * 제어 가능성이 제한적이며, 의도한 결과를 출력하기 위해서 여러 번의 실험(프롬프트 튜닝)이 필요하다. | 항목 | 프로그래밍 언어 | 프롬프트 엔지니어링 | | ----- | ------------------------ | -------------------------- | | 명령 방식 | 형식적, 로직기반 | 자연어, 추론기반 | | 해석 방식 | 컴파일러/인터프리터(결정론적) | LLM의 추론 (확률론적, 비 결정적) | | 결과 제어 | 높은 제어 가능성, 반복 실행시 일관된 결과 | 제어 가능성 낮음, 결과의 변동 가능성 | | 적용 범위 | 범용적이고 복잡한 작업 | 지식 기반, 언어/아이디어 생성 및 분석에 강점 | 프로그래밍 언어는 정밀한 로직과 시스템 구축이 필요할 때 강점을 발휘한다. 반면 프롬프트 엔지니어링은 복잡한 지식 기반의 작업의 처리에 강점을 가진다. LLM이 기존의 모든 일을 대체 할 수 있는 것이 아니다. 두 방식을 적절히 조합하면 효율적이고 창의적인 문제 해결이 가능하다. ### 비 전문가를 전문가처럼 일하게 만들기 ![](https://www.nyserda.ny.gov/-/media/Project/Nyserda/Images/Programs/Clean-Energy-Workforce/Energize-Your-Future/hero-careers-in-energy-assessment.jpg?h=400&w=1000&la=en&hash=2AC998C237789DD7DAC70D3B21A191F1) 프롬프트를 통해서 원하는 결과를 만들어내는 과정을 보면 **(지식은 많지만 일하는 법은 모르는)비 전문가를 훈련시켜서 주어진 일을 실행 할 수 있도록 작업을 지시**하는 것과 유사함을 알 수 있다. LLM은 전문가가 아닌, 비 숙련 노동자라고 생각하고 접근해야 한다. 예제로 사용했던 프롬프트를 새로 작성하고 이를 분석해보자 ``` 당신은 고객의 제품에 대한 평가를 분석하는 어시스턴트입니다. 아래 문장에서 제품에 대한 고객의 평점을 1점부터 5점까지 평가해 주세요. 그리고 어떤 제품에 대한 평가인지도 알려주세요. example를 참고해서 JSON 형태로 출력해주세요. 부가적인 데이터는 필요없이 JSON 데이터만 출력해주세요. 이번에 AMD ryzen 5800을 구매했습니다. 성능도 매우 뛰어나고 발열도 적은 것을 확인했습니다. 게임성능은 약간 떨어지기는 하지만 많은 코어수로 크리에이터 작업에 높은 성능을 보여줘서 만족하고 있습니다. 제가 게임을 그다지 많이 하는 편도 아니고요. 가격만 좀 낮춰 줬으면 하는 바램이 있습니다. ### example `{"product":"레노보 데스크탑","rating":3,"analysis":{"positive_points":["뛰어난 성능","유용한 기능",],"negative_points":["높은 가격","복잡한 사용"]}}` ``` 이 프롬프트는 아래의 구성요소들을 포함하고 있다. 1. 페르소나: 모델이 특정 역할, 성격, 관점을 갖추고 응답하도록 한다. 예를 들어 "입문 개발자를 대상으로 설명해주는" , "전문 프로그래머를 대상으로 하는", "친절하고 신뢰 할 수 있는 의사", "숙련된 데이터 과학자" 등으로 모델이 맥락에 적합한 방식으로 답할 수 있도록 방향을 제시한다. 2. 지시: 모델에게 특정 작업을 수행하라고 지시한다. 3. 예시: 작업 내용과 출력을 명확히 하기 위해서 모델에 예시를 제공한다. 4. 형식: 특정 형식으로 출력하도록 지시 할 수 있다. 이 프롬프트에서는 JSON 형식으로 결과를 출력하도록 요구하고 있다. ### PROMPT 프레임워크 프롬프트는 결국 글을 쓰는 기법으로 프롬프트 엔지니어링에도 몇 가지 기법들과 **프레임워크**가 있다. 이들 기법 그리고 프레임워크를 살펴보겠다. 대표적인 엔지니어링 기법은 아래와 같다. * Zero-Shot: "이 문장을 영어로 번역해 주세요" 와 같이 별도 예시 없이 지시 만으로 작업을 수행한다. * Few-Shot: 모델이 작업을 이해할 수 있도록 여러 개의 예시를 제공하는 기법이다. 위의 제품 평가 예제의 경우 "example" 를 제공하고 있는 **few-shot** 기법을 사용하고 있다. 하나의 예시만을 제공하는 경우 **one-shot** 기법으로 분류하기도 한다. * Chain of Thought(CoT): 문제의 해결을 단계적으로 접근 하는 방식을 요구한다. 이들 엔지니어링 기법을 아래 설명하는 **AUTOMAT Framework**에 맞춰서 프롬프트를 작성하면 된다. ##### AUTOMAT 프레임워크 다양한 프레임워크 중 **AUTOMATE** 프레임워크를 소개한다. AUTOMATE는 아래의 첫 글자를 따서 만든 프레임워크다. - **A**ct as a ..., Bot Persona - **U**ser Persona, Audience - **T**argeted action - **O**utput Definition - **M**ode/Tonality/Style - **A**typical cases - **T**opic whitelisting |Phillar|설명|모범사례|부적절한 사례| |---|---|---|---| |**A**ct as a..., Bot Persona|몇 개의 문장으로 봇의 페르소나를 정의|💯 구체적으로 설명한다. <br>Act as a sensitive elderly psychotherapist... <br>Act as a patient support staff... <br>Act as a professional journalist... <br>Act as a pebble. a car in love with its driver... <br>Act as a 4th grader math tutor... <br>Act as a csh-terminal on the mac...|🚫 어차피 AI가 취할 행동 방식을 설명하지 않는다 <br>Act as a helpful AI ...| |**U**ser persona, Audience|청중의 배경, 예상 지식 수준을 몇 개의 단어로 설명한다|💯 청중을 설명한다. <br>소프트웨어 엔지니어링 석사에게 설명한다. <br>5살 어린이도 이해할 수 있도록... <br>테슬라 모델-5 소유자를 대상으로...|🚫 청중을 설명하지 않는다. <br>나에게 말해줘 <br>사용자에게 말해줘| |**T**argeted Action|입력에서 출력의 변환 과정이나 모델이 출력을 생성하는 방법을 의미있는 동사와 객체를 사용해서 설명한다|💯 작업을 묘사한다 <br>...요약... <br>...목록... <br>...분류... <br>...추출... <br>...형식으로... <br>...코멘트... <br>...python 코드로... <br>...설명...|🚫 "답해주세요"와 같은 동사를 사용하지 않는다. <br>...질문에 답해주세요... <br>...써주세요... <br>...알려주세요...| |**O**utput Define|출력은 별도의 섹션에서 자세히 설명한다.|💯 출력형식을 설명한다. <br>...목록으로... <br>...수학 공식으로... <br>...테이블 형식으로... <br>...Java 코드로... <br>...JSON 형식으로... <br>...0.0과 1.0 사이의 부동소수점 형식으로... <br>...2자리의 ISO 국가 코드로... <br>...4인분의 식사를 위한 재료의 목록...|🚫 너무 일반적인 표현 <br>...답해주세요... <br>...문장으로... <br>...몇 개의...| |**M**odel/Tonality/Style|모델이 메시지를 전달하는 방식을(이메일, 에세이, 인터넷 게시물 등) 설명한다.|💯 mode/tone/style를 설명한다. <br>...공감적으로... <br>...자신감있는... <br>...공격적인... <br>...비평적인... <br>...비꼬는... <br>...재치있는... <br>...법률문서...|🚫 AI가 어차피 보이려는 행동 <br>...친절하게... <br>...스마트하게... <br>...똑똑하게... <br>...중립적으로...| |**A**typical cass|주로 프로그래밍 방식의 LLM 애플리케이션을 개발할 때 필요하다.|💯 예외케이스를 설명한다. <br>... 그리고 영화의 title, director, release date를 표에 나열한다. director과 release date가 없다면 "-"를 표시한다. <br> <br>질문에 대한 답변에 제공될 context가 없다면, 답변을 할 수 없다고 말한다. <br> <br>메일의 카테고리가 "offer", "confirmation", "receipt"가 아닌 경우 카테고리를 NULL로 설정하고 내용 필드를 채우지 말아주세요. <br> <br>사용자의 질문이 주제와 어긋나는 경우 John Deere 트랙터와 수확 장비에 대해서만 이야기 할 수 있다고 대답하세요. <br> <br>사용자가 질문을 하는 것이 아니라 자신의 의견을 말하거나 피드백을 제공하는 경우 "xyz"을 실행하세요|🚫 가정이 잘 못됐을 때, 지침을 주는 걸 잊지 말라 <br>...당신의 지식에 있는 내용만 답하세요... <br>> 모를 때는 어떻게 해야 하나 ? <br> <br>...입력된 영어를 프랑스어로 번역해주세요... <br>> 만약 프랑스어를 입력한다면 ?| |**T**opic whitelisting|챗봇 시스템을 구축할 때, 모델이 모든 것에 대해서 이야기하는 것을 원하지 않을 수 있다. 환각을 보이거나 위험한 주제를 다룰 수도 있기 때문이다.|💯 대화 주체의 목록을 설정한다. <br>...CRB2004의 기능과 작동에 대한 질문에만 대답한다. 장치에 대한 사용자 피드백에 대해서 의견을 말하고 기능을 알려준다.|🚫 모델에게 무엇에 대해 이야기하지 말아야 하는지 말하지 말라. 이런 목록은 완전하지 않다. <br>...정치, 성, 중교, 중동 갈등, 음모론, 인종등에 대해서는 말하지 마세요. <br>> 자살하는 방법, 정부 서버 해킹 방법, 여자친구를 복종시키는 방법에 대해서 이야기하는 건 괜찮은가 ?| 많은 글쓰기 방법 혹은 프레임워크들이 그렇듯이 "절대적인 하나의 방법"은 없다. 프레임워크를 참고하여 다양하게 테스트를 하고 프롬프트를 작성하면 원하는 답을 얻을 확률을 크게 높일 수 있을 것이다. ### 프롬프트 구성요소 정리 이상에서 프롬프트도 인간이 글을 쓰거나 업무를 지시하는 것과 마찬가지로 여러 요소로 구성됨을 알 수 있다. 아래는 주요 핵심 요소들로 구성된 프롬프트 예시다. ``` ### Instruction 당신은 사용자가 여행 계획을 세우는 것을 돕는 여행 상담사입니다. 사용자의 요청에 따라 여행 일정, 추천 명소, 숙박 옵션 등을 제공하세요. 사용자와의 대화에서 필요한 정보를 수집하여 최적의 여행 계획을 제안하십시오. ### Example Dialogs - User: "저는 이번 가을에 일본으로 여행을 가려고 합니다. 도쿄와 교토를 방문할 계획인데, 7일간의 일정을 추천해 주세요." - Assistant: "좋은 선택입니다! 도쿄에서 4일, 교토에서 3일을 보내는 일정을 추천드립니다. 도쿄에서는 아사쿠사, 시부야, 도쿄 타워 등을 방문할 수 있습니다. 교토에서는 후시미이나리 신사, 기온 거리, 금각사 등이 필수 코스입니다. 여행 일정에 대해 더 자세한 정보를 원하시나요?" - User: "예, 도쿄에서 추천할 만한 레스토랑도 알려주세요." - Assistant: "도쿄에서 인기 있는 레스토랑으로는 미슐랭 스타를 받은 스키야바시 지로, 전통 일식을 맛볼 수 있는 교조류 니혼바시 텐치 등이 있습니다. 어떤 음식을 선호하시나요?" ### Output Details - 여행 일정 제안: 도쿄 4일, 교토 3일로 구체적인 여행 일정을 제공하세요. - 추천 명소: 도쿄와 교토에서 방문할 만한 주요 명소와 이유를 설명하세요. - 식당 추천: 도쿄의 인기 레스토랑 2곳 이상을 추천하고, 사용자 취향에 맞는 추천을 추가적으로 제시하세요. - 여행 팁: 가을에 일본을 방문할 때 유의해야 할 사항이나 추가 팁을 제공하세요. ``` Vertex Gemini로 테스트를 해보자. 위의 프롬프트를 System Instructions에 넣고 테스트하면 된다. 가장 최근 정보로 응답 받을 수 있도록 Grounding 을 활성화했다. **💬 Input** 3인 가족이 사포르에 5박 6일로 사포르를 여행 할 계획입니다. 번잡한 시내 중심가 보다는 조용한 교외에서 너무 바쁘지 않은 일정으로 여행을 하고 싶습니다. **🤖 OutPut** 3인 가족을 위한 삿포로 5박 6일 여행 계획을 세워 드리겠습니다. 시내 중심가보다는 조용한 교외 지역에서 너무 바쁘지 않은 일정을 원하시므로, 다음의 내용을 고려하여 계획을 세웠습니다. **숙소:** * **나카지마 공원 (Nakajima Park) 주변:** 조용하고 자연 친화적인 분위기를 선호하신다면 나카지마 공원 주변이 좋습니다. 도심과 가까우면서도 평화로운 휴식을 취할 수 있습니다. 이 지역에는 아늑한 호텔이나 료칸(일본 전통 여관)이 있어 더욱 편안한 경험을 제공할 수 있습니다. * **추천 숙소:** Vessel Inn Sapporo Nakajima Park 또는 Sapporo International Youth Hostel (예산 친화적) * **기타 구 (Kita Ward):** 현지인들의 일상 생활을 경험하고 싶다면, 삿포로 북쪽에 있는 기타 구가 좋습니다. 이곳은 주거 지역이 많아 조용하고, 슈퍼마켓, 식당, 상점 등 편의시설도 잘 갖춰져 있습니다. 홋카이도 대학교가 있어 젊고 활기찬 분위기를 느낄 수 있습니다. **여행 일정:** **1일차:** * **오후:** 신치토세 공항 도착 후 숙소로 이동 * **저녁:** 숙소 주변의 조용한 레스토랑에서 저녁 식사 * **추천 식당:** Cafe & Trattoria Polaris (어린이 놀이 공간이 있는 이탈리안 레스토랑) * **숙소:** 나카지마 공원 주변 또는 기타 구 호텔에서 휴식 **2일차:** * **오전:** **모에레누마 공원 (Moerenuma Park)** 방문: 예술적인 조경과 디자인이 돋보이는 공원으로, 아이들이 뛰어놀기 좋습니다. 자전거 대여도 가능합니다. * **점심:** 공원 내 또는 근처 레스토랑에서 식사 * **오후:** **삿포로 예술 공원 (Sapporo Art Park)** 방문: 자연과 예술을 함께 즐길 수 있는 곳으로, 다양한 야외 조각품을 감상할 수 있습니다. * **저녁:** 가족 친화적인 레스토랑에서 저녁 식사 * **추천 식당:** CAFE VOIZ (아이들을 위한 놀이 공간과 베이비 침대가 있는 카페) **3일차:** * **오전:** **마루야마 동물원 (Maruyama Zoo)** 방문: 다양한 동물들을 가까이에서 볼 수 있으며, 유모차 대여 서비스도 제공합니다. * **점심:** 동물원 내 또는 주변 레스토랑에서 식사 * **오후:** **홋카이도 신궁 (Hokkaido Jingu Shrine)** 방문: 조용하고 평화로운 분위기에서 산책을 즐길 수 있습니다. * **저녁:** 현지 음식을 맛볼 수 있는 레스토랑에서 저녁 식사 * **추천 식당:** 삿포로 맥주원 (Sapporo Beer Garden) - 가족 단위 손님에게 인기있는 곳입니다. **4일차:** * **오전:** **다키노 스즈란 공원 (Takino Suzuran Hillside Park)** 방문: 넓은 잔디밭과 다양한 놀이 시설이 있어 아이들이 즐겁게 뛰어놀 수 있습니다. * **점심:** 공원 내 또는 주변에서 간단한 식사 * **오후:** **시로이 코이비토 파크 (Shiroi Koibito Park)** 방문: 유명한 과자 공장 견학 및 체험 프로그램에 참여할 수 있습니다. * **저녁:** 스시 또는 해산물 레스토랑에서 저녁 식사 * **추천 식당:** 회전초밥 네무로 하나마루 (Nemuro Hanamaru) 또는 Toriton Teine Shop **5일차:** * **오전:** **삿포로 사토랜드 (Sapporo Satoland)** 방문: 농장 동물과 교감하고, 승마 체험, 아이스크림 만들기 체험 등을 할 수 있습니다. * **점심:** 사토랜드 내에서 간단한 식사 * **오후:** **오타루 (Otaru)** 당일치기 여행: 운하, 오르골당, 유리 공예점 등 볼거리가 다양합니다. * **추천 장소:** 오타루 수족관 (Otaru Aquarium) * **저녁:** 오타루 또는 삿포로에서 저녁 식사 **6일차:** * **오전:** 숙소에서 체크아웃 후 신치토세 공항으로 이동 * **오후:** 신치토세 공항에서 출발 **식당 추천:** * **Cafe & Trattoria Polaris:** 어린이 놀이 공간이 있는 이탈리안 레스토랑으로, 가족 단위 손님에게 좋습니다. * **CAFE VOIZ:** 아이들을 위한 놀이 공간과 베이비 침대가 있는 편안한 분위기의 카페입니다. * **삿포로 맥주원 (Sapporo Beer Garden):** 징기스칸 요리를 맛볼 수 있는 인기 레스토랑으로, 넓은 공간과 가족 친화적인 분위기를 제공합니다. * **회전초밥 네무로 하나마루 (Nemuro Hanamaru):** 신선한 해산물을 맛볼 수 있는 인기 스시 레스토랑입니다. * **Toriton Teine Shop:** 신선한 회전초밥 전문점으로 가족 식사에 적합합니다. * **Family Restaurant Lilac:** 어린이 메뉴를 제공하는 가족 친화적 레스토랑입니다. **여행 팁:** * **교통:** 삿포로 시내는 지하철, 버스 등 대중교통이 잘 되어 있지만, 교외 지역은 렌터카를 이용하는 것이 편리할 수 있습니다. * **환전:** 미리 환전을 해두거나 신용카드를 준비해 가는 것이 좋습니다. * **날씨:** 삿포로는 가을에 날씨가 쌀쌀할 수 있으니 따뜻한 옷을 준비하는 것이 좋습니다. * **예약:** 인기 있는 숙소나 레스토랑은 미리 예약하는 것이 좋습니다. * **가족 여행:** 가족 여행객에게 적합한 놀이 시설이나 공원을 적극 활용하여 즐거운 시간을 보내세요. 이 일정은 제안일 뿐이며, 가족의 관심사와 선호도에 따라 얼마든지 조정할 수 있습니다. 즐거운 삿포로 여행 되시길 바랍니다! ---- 너무 많은 정보를 포함하고 있어서 한눈에 보기에 어렵다. 일정 표 형태로 만들어달라고 프롬프트를 수정했다. **💬 Input** 3인 가족이 사포르에 5박 6일로 사포르를 여행 할 계획입니다. 번잡한 시내 중심가 보다는 조용한 교외에서 너무 바쁘지 않은 일정으로 여행을 하고 싶습니다. 한 눈에 보기 쉽도록 일정 표 형태로 만들어주세요. **🤖 OutPut** 삿포로 5박 6일 가족여행(3인) 조용한 교외 중심, 느긋한 일정 **일정표** | **요일** | **시간** | **활동** | **장소** | **참고** | | ------------ | ------ | --------------- | -------------------------------- | ------------------------ | | **1일차 (도착)** | 오후 4시 | 신치토세 공항 도착 | 신치토세 공항 | 공항 리무진 버스 이용, 숙소로 이동 | | | 오후 5시 | 숙소 체크인 | 삿포로 외곽 조용한 지역 숙소 (예: 조잔케이 온천 지역) | 미리 예약 필수, 온천 즐기기 | | | 저녁 7시 | 저녁 식사 | 숙소 근처 로컬 레스토랑 | 징기스칸, 수프카레 등 현지 음식 맛보기 | | **2일차** | 오전 9시 | 조잔케이 온천 마을 산책 | 조잔케이 온천 마을 | 자연 경관 감상, 온천 체험 | | | 오후 1시 | 점심 식사 | 조잔케이 온천 마을 식당 | | | | 오후 2시 | 조잔케이 계곡 트레킹 | 조잔케이 계곡 | 가족과 함께 즐기는 가벼운 트레킹 코스 선택 | | | 저녁 6시 | 저녁 식사 | 숙소 근처 레스토랑 또는 숙소 내 식당 | | | **3일차** | 오전 9시 | 삿포로 시내 당일 여행 | 삿포로 시내 | 대중교통 이용 | | | 오전 10시 | 삿포로 맥주 박물관 | 삿포로 맥주 박물관 | 맥주 시음 및 역사 체험 (성인) | | | 오후 12시 | 점심 식사 | 삿포로 시내 레스토랑 | 스프카레, 라멘 등 다양한 음식 선택 | | | 오후 1시 | 오도리 공원 산책 | 오도리 공원 | 계절별 아름다운 풍경 감상 | | | 오후 4시 | 삿포로 시계탑 방문 | 삿포로 시계탑 | 역사적 건축물 관람 | | | 저녁 6시 | 저녁 식사 | 삿포로 시내 레스토랑 | | | | 저녁 8시 | 숙소로 이동 | | | | **4일차** | 오전 9시 | 오타루 당일 여행 | 오타루 | 기차 이용 | | | 오전 10시 | 오타루 운하 산책 | 오타루 운하 | 운하 주변 풍경 감상, 사진 촬영 | | | 오후 12시 | 점심 식사 | 오타루 레스토랑 | 해산물 요리 즐기기 | | | 오후 1시 | 오타루 오르골당 방문 | 오타루 오르골당 | 다양한 오르골 감상 | | | 오후 4시 | 삿포로로 이동 | | | | | 저녁 6시 | 저녁 식사 | 삿포로 레스토랑 | | | **5일차** | 오전 9시 | 삿포로 시내 관광 또는 쇼핑 | 삿포로 시내 | | | | 오후 1시 | 점심 식사 | 삿포로 시내 레스토랑 | | | | 오후 2시 | 자유시간 | | | | | 저녁 6시 | 삿포로 마지막 만찬 | | 징기스칸이나 스프카레 전문점 방문 추천 | | **6일차 (출발)** | 오전 9시 | 체크아웃 | | 짐 정리, 공항 이동 준비 | | | 오전 10시 | 신치토세 공항으로 이동 | | 공항 리무진 버스 이용 | | | 오후 1시 | 출발 | 신치토세 공항 | | **추천 명소** * **조잔케이 온천:** 삿포로에서 가까운 온천 마을. 아름다운 자연 경관과 다양한 온천 시설을 갖추고 있어 가족 여행에 적합합니다. 도시의 번잡함에서 벗어나 휴식을 취할 수 있는 최적의 장소입니다. * **오타루 운하:** 아름다운 운하와 유럽풍 건물들이 어우러진 아기자기한 도시. 운하를 따라 산책하며 사진 찍기에 좋습니다. 오르골당, 유리공예 체험 등 다양한 볼거리와 즐길거리가 있습니다. 가족과 함께 추억을 만들기에 좋은 곳입니다. * **삿포로 맥주 박물관:** 삿포로 맥주의 역사와 제조 과정을 배우고, 시음도 할 수 있습니다. (성인) * **오도리 공원:** 삿포로 시내에 위치한 대형 공원. 계절별로 아름다운 풍경을 감상할 수 있습니다. 특히 겨울에는 눈 축제가 열립니다. * **삿포로 시계탑:** 삿포로의 상징적인 건축물. 역사적 의미와 아름다운 건축 양식을 감상할 수 있습니다. **식당 추천** * **징기스칸 전문점:** 삿포로 지역 특유의 양고기 요리인 징기스칸을 맛볼 수 있는 곳. 다양한 징기스칸 전문점이 있으니 취향에 맞춰 선택할 수 있습니다. * **스프카레 전문점:** 삿포로의 명물 음식인 스프카레를 맛볼 수 있는 곳. 취향에 따라 매운 정도, 재료 등을 선택할 수 있습니다. 가족 구성원의 취향을 고려하여 선택하는 것이 좋습니다. * **니조 시장 (오타루):** 신선한 해산물을 맛볼 수 있는 오타루의 유명 시장. 초밥, 해산물 덮밥 등 다양한 음식을 맛볼 수 있습니다. **여행 팁** * 삿포로는 겨울철 눈이 많이 내리기 때문에 겨울 여행 시 방수/방한 용품을 충분히 준비해야 합니다. * 삿포로 외곽 지역은 대중교통이 다소 불편할 수 있으므로, 렌터카를 이용하거나 택시를 이용하는 것을 고려해보세요. (가족 구성원 중 운전 가능한 사람이 있는 경우) * 숙소는 미리 예약하는 것이 좋습니다. 특히 온천 지역 숙소는 예약 경쟁이 치열할 수 있습니다. * 가을철에는 단풍이 아름답게 물드는 시기이므로, 단풍을 감상할 수 있는 코스를 여행 계획에 포함시켜보는 것을 추천드립니다. **추가 정보:** 제공된 정보는 2025년 1월 26일 현재 정보를 기반으로 작성되었습니다. 여행 전 최신 정보를 확인하고, 여행 계획에 맞춰 세부 일정을 조정하는 것을 추천드립니다. 즐거운 삿포로 가족 여행 되시길 바랍니다! ### 프롬프트 타입 ##### Zero-Shot 프롬프팅 프롬프트 엔지니어링에서 **Zero-shot**은 예제나 데모없이 작업을 수행하도록 지시하는 것을 의미한다. 즉 모델이 이전에 본 적 없는 새로운 유형의 작업이나 질문에 대해, 오직 프롬프트의 정보만을 기반으로 답변을 생성해야 하는 것이다. 예를 들어 **"다음 문장을 한국어로 번역하세요: The cat sat on the mat"** 와 같은 프롬프트가 zero-shot에 해당한다. 모델은 오로지 내부 지식을 활용하여 번역을 시도한다. Zero-shot은 **일반적인 작업에 대해서 간단하게** 사용하기에는 좋지만 모델에 전달되는 정보가 매우 제한적이기 때문에 few-shot 에 비해서 성능이 떨어지는 경우가 많다. **Zero-shot 프롬프트 예제** Gemini를 이용해서 아래 프롬프트를 테스트해보자. 1. 번역 1. 프롬프트: "다음 문장을 스페인어로 번역하세요: The weather is beautiful today" 2. 기대출력: El tiempo está hermoso hoy. 2. 요약: 1. 프롬프트: "다음 기사를 3문장으로 요약하세요: 기사본문" 2. 기대출력: "기사 핵심 내용을 3문장으로 요약" 3. 질문 답변: 1. 프롬프트: "대한민국의 수도는 어디인가요" 2. 기대출력: "대한민국의 수도는 서울입니다." **Zero-shot 프롬프팅의 한계** **문맥 전달의 어려움**. 간단한 작업은 한 문장으로 지시 할 수 있겠지만, 복잡한 작업을 한 문장으로 지시하는 것은 매우 어려울 것이다. 작업을 하는데 필요한 문맥과 정보를 짧은 문장으로는 충분히 전달 할 수 없기 때문이다. ### One-Shot & Few-Shot 프롬프팅 퓨샷 프롬프팅은 모델에게 **몇 가지 예시(few-shot)** 를 제공하여 원하는 작업을 수행하도록 한다. 모델은 제공된 예시를 통해서 문맥을 이해하고 패턴을 학습하며 이를 바탕으로 입력에 대한 적절한 출력을 생성한다. **One-Shot 프롬프팅은 "하나의 예시"** 를 가지는 경우이므로 few-shot 프롬프팅의 일부라고 볼 수 있다. **Few-Shot 프롬프팅의 주요 구성요소들** 1. 작업 정의: 모델에게 수행하고자 하는 작업을 명확하게 정의 한다. 2. 예시 제시: 모델이 작업을 이해하는데 도움이 되는 몇 가지 예시를 제공한다. 3. 입력 제시: 모델에게 새로운 입력을 제시하고, 입력에 대한 출력을 생성하도록 요청한다. **Few-Shot 예제** LLM은 문맥, 글의 분위기를 이해하는데 탁월한 능력을 가지고 있다. 감성 분석(Sentiment Analysis)을 위한 프롬프트를 작성해보자. 당신은 영화 리뷰 감성 분석 전문가입니다. 주어진 영화 리뷰 텍스트를 읽고, 해당 리뷰가 긍정적인 감정, 부정적인 감정, 혹은 중립적인 감정을 표현하는지 정확하게 분류해야 합니다. 그리고 분석한 이유를 한 문장으로 간단히 설명해 주세요. 불릿기호를 이용해서 출력해주세요. ---- **💬 Input** **분류 기준:** * **긍정:** 영화에 대한 만족, 호평, 칭찬 등의 감정을 표현하는 경우 * **부정:** 영화에 대한 불만족, 혹평, 비판 등의 감정을 표현하는 경우 * **중립:** 영화에 대한 긍정/부정적인 감정이 명확하게 드러나지 않거나, 객관적인 정보만을 전달하는 경우 **예시:** * "이 영화는 정말 훌륭했어요! 배우들의 연기도 최고였고, 스토리도 탄탄했습니다.": 긍정 * "시간 낭비였어요. 스토리도 엉망이고, 영상도 끔찍했습니다.": 부정 * "이 영화는 2시간 30분 상영시간을 가지고 있습니다. 주연 배우는 A, B, C 입니다.": 중립 * "처음에는 지루했지만, 후반부로 갈수록 점점 재미있어졌어요.": 긍정 **입력:** "이터널스"는 마블의 새로운 영웅들을 소개하는 야심찬 SF 서사시입니다. 10명의 불멸의 영웅들이 고대 악에 맞서 인류를 지키는 이야기를 담고 있죠. 화려한 CG와 광활한 스케일은 압도적이지만, 10명이라는 많은 캐릭터를 다루다 보니 각 인물의 이야기가 충분히 녹아들지 못한 점은 아쉽습니다. 액션 장면은 볼만하지만, 스토리 전개는 다소 지루하게 느껴지기도 했습니다. 전반적으로 기대에 미치지 못했지만, 마블의 새로운 가능성을 엿볼 수 있었던 영화였습니다. **출력:** 감성: {긍정/부정/중립} 이유: "감성 분석의 이유" **🤖 OutPut** - **감성:** 중립 - **이유:** 긍정적인 부분과 아쉬운 부분을 동시에 언급하며 전반적으로 객관적인 평가를 내리고 있어 중립적 감정으로 분류됩니다. ---- ### Vertex AI Prompt Gallery Vertex AI 플랫폼에서 제공하는 **Promt Gallery**를 이용하면, 다양한 목적에 사용 할 수 있는 프롬프트 모범 사례를 확인하고 테스트 해 볼 수 있다. ![Prompt gallery](https://docs.google.com/drawings/d/e/2PACX-1vT0oXStuQH7E2pD9RRGPqs6TOGb9GfPe1BAbVnWYnRpbUoh7M5pQ_NCyOcbNXMb3U4Wln-zwyhyiJBb/pub?w=1048&h=512) 개발자는 프롬프트를 테스트해서 최적화 하고 이를 다른 이름으로 저장할 수 있다. 개인이 만든 프롬프트는 **Prompt management** 에서 확인 할 수 있다. ![Prompt Gallery](https://docs.google.com/drawings/d/e/2PACX-1vTW0gcW3oiDqyQdLZdYdV58Lg5jWwEfujH-Aq1aGrwvfyzYIJx3FRBHEMdk5I_03JJQwn--65ev-MEZ/pub?w=1030&h=500) ### 프롬프트 엔지니어링은 창작활동에 가깝다 LLM의 언어적 특징 때문에, 프롬프트 엔지니어링을 이용해서 원하는 응답을 얻어가는 과정은 프로그래밍 보다는 글쓰기, **창작 활동**에 가깝다. 창작 활동은 소설, 블로깅, 세미나, 논문, 보고서, 그림 그리기 등 창작물의 종류에 따라 글 쓰는 스타일이 변경된다. 그리고 이 스타일은 고정된게 아니고 계속해서 발전해 나간다. 프롬프트 엔지니어링 역시, 작업에 따른 프롬프트 템플릿을 관리하고 더 나은 응답을 만들기 위해서 계속 해서 발전시켜 나가야 한다. 끊임 없는 테스트, 평가, 관리가 중요하다. **Prompt management** 등의 툴을 이용해서 프롬프트를 체계적으로 관리하는 것을 권장한다. 여러분의 주요 자산이 될 것이다. ### 프롬프트 엔지니어링의 미래 업무 수행자가 초보자 일 수록, 업무를 잘 이해하지 못 할 수록 작업 지시서를 꼼꼼히 작성해야 할 것이다. 반대로 업무 수행자가 숙련자일 수록 작업 지시서를 대충 작업해도 알아서 일을 수행 할 것이다. 프롬프트 엔지니어링을 하다 보면, 예상했던 것 이상으로 많은 고민과 시행착오가 필요하다는 것을 경험하게 될 것이다. 지금 LLM은 이미 놀라운 수준이기는 하지만 사람의 의도를 제대로 파악하기에는 아직은 충분하지 않기 때문이다. 이는 모델이 발전할 수록 (대충 지시해도 의도를 이해하기 때문에) 프롬프트 엔지니어링의 중요도가 덜해질 수 있음을 의미한다. 실제로 모델의 성능이 향상되면서 이전에는 복잡하고 상세하게 작성해야 했던 프롬프트가 **더욱 간결** 해지거나 **자연스러운 문장 형태**로 표현해도 의도에 맞는 결과를 생성하는 경우가 늘어나고 있다. 하지만 프롬프트 엔지니어링의 중요성이 완전히 사라지지는 않을 것이다. * 여전히 필요한 명확성: 모델이 아무리 발전해도 여전히 **명확한 지시**는 필요하다. 특히 복잡한 작업이나 특정한 결과물을 원할 경우에는 구체적인 정보를 담은 프롬프트가 중요하다. * 새로운 기능: 모델이 발전함에 따라서, 더 넓은 영역에 모델을 사용하게 될 것이다. 이에 대응하기 위해서는 새로운 프롬프트 엔지니어링 기술이 필요하다. * 인간의 역할: 프롬프트 엔지니어링은 **단순히 텍스트를 작성하는 것** 이상의 의미를 가진다. 모델의 능력을 최대한 활용하도록 최적화 해야 한다. 또한 윤리적인 문제와 잠재적인 리스크를 포함 할 수 있는데, 이때 인간의 판단과 개입이 필수적이다. ### 복습 1. GCP Console에서 Vertex AI 서비스를 찾는다. Prompt Gallery에서 프롬프트를 작성해서 테스트하고 저장한다. 2. 본문의 감성분석을 긍정/부정/중립이 아닌 1~5까지 점수로 출력하도록 프롬프트를 수정해보자. 3. 뉴스의 날씨와 관련된 텍스트를 읽고, 날씨를 요약해서 출력하는 프롬프트를 만들고 테스트 해보자. * 오늘 날씨는 맑고 기온은 25도입니다. 전국적으로 쾌청한 날씨가 이어지겠습니다.: 맑고 쾌청한 날씨 [◀️ Vertex AI Gemini 둘러보기](https://www.joinc.co.kr/w/LLM-NATIVE-APP-DEVELOP-003) [🗂️ 목차](https://www.joinc.co.kr/w/LLM-NATIVE-APP-DEVELOP-001)
Recent Posts
LLama-3.2-Vision 테스트
Vertex Gemini 기반 AI 에이전트 개발 04. 프롬프트 엔지니어링
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Vertex Gemini 기반 AI 에이전트 개발-소개
생성 AI 모델 Flux.1 설치 및 사용
GPT를 이용한 Reranker 테스트
5분만에 만들어보는 Streamlit 챗봇
Let's encrypt로 SSL 인증서 관리하기
Archive Posts
Tags
LLM
vertex gemini 기반 AI Agent 개발
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags