Share
Sign In
프롬프트 피드백
Code Assistant Prompt
S
Sujin_Kang
👍
1
이 번에 소개할 피드백을 위한 프롬프트는 "Code Assistant Prompt" 입니다.
기획이 탄탄한 프롬프트 입니다.
프롬프트 엔지니어링 수업 1주차는 프롬프트를 제작하기 위한 기획 과정을 다룹니다.
기획 단계에서는 다음 세 가지 과정을 거치는데요,
(1) 문제 정의
(2) 프롬프트 구현 방법
(3) 프롬프트 제작 아이디에이션
이번 과제를 제출해주신 준혁님께서 완벽하게 기획을 하셨습니다. (공개를 허용해주셔서 감사드립니다 💌)
프롬프트 제목: Code Assistant Prompt
아이디어: 사용자 input을 prompt structure optimization 해줄 수 있다면 해당 허들을 많이 낮출 수 있지 않을까?
기획 의도:
1.
문제 인식
수업 자료 속에서 불만 사유 1위가 “질문 의도 파악 실패”
2.
사용자 분석
생성형 AI 이전까지 절대다수의 web/mobile 사용자는 search engine 기반으로 자료/정보 탐색을 함(정보 검색 = ’google’로 동사화로 통용됨)
젊은 세대일수록 작은 화면인 모바일 환경에 더 친숙
‘축약어’는 사람들이 간단하게 표현하는 것을 선호함을 보여줌
3.
문제 분석(LLM)
사회적 관계, 비언어적 표현을 토대로 사람과 사람 간에는 약어로도 대화가 편히 잘 됨
하지만, 세대적 관계 rapo가 적은 젊은 세대와 노인 세대 간의 대화 갈등은 요점 추구, 키워드 중심의 대화는 비언어적 공감대 없이는 커뮤니케이션의 어려움을 보여줌.
특히 LLM은 사람과의 비언어적 의사소통이 현재까지는 불가능하기 때문에 구체적인 맥락 정보가 없이는 사용자들의 의도 파악에 어려움을 느낄 수 밖에 없음
또한, 사용자들이 대부분 키워드 기반의 검색을 해왔기 때문에 prompt를 위해서 상세 맥락 정보를 주는 것이 쉽지 않음 ( 1. 낯설음, 2. 귀찮음, 3. 필요성 자체를 모름(인지 문제) )
4.
Target
더욱이 생성형 AI를 활용하여 개인이 서비스를 개발할 수 있게 됨에 따라 프로그래밍 언어 비숙련자들의 도전이 많이 생김.
다만, 비전공자들의 경우 지식/정보의 부족으로 생성형 AI에 대한 의존도가 높을 수 밖에 없음. 문제는 기능 구현에 대한 감이 부족하기 때문에 원하는 기능의 구현에 대한 적절한 설명을 붙이기가 쉽지 않음 → 생성형 ai 도 질문자의 의도 파악이 힘듦 → 사용자들의 불만족도가 높아짐
이 문제는 서비스 개발에서 단순 기능 구현 뿐만 아니라, 코드 공부를 하면서 주니어들에게서도 볼 수 있는 현상임. 특히, code re-factoring(optimization) 과 error debuging 과정 상에서 생성형 ai와 자주 싸움(혹은 지쳐서 포기함) 이는 각 언어별 버전에 따른 혹은 패키지/라이브러리 버전에 따른 호환성 이슈와 코드의 구현성 이슈가 영향을 미친다고 생각함.
물론 많은 부분에서 할루시네이션으로 인한 오류 코드 제공이 불만족도를 키웠을 것으로 예상. 그렇지만 전문가/현직자들의 다수의 견해는 생성형 ai가 발전함에 주니어급의 코딩 역량을 충분히 갖출 수 있다는 점에 비춰 다른 문제를 해결해보고자 함
5.
아이디어
코드는 일반적인 질문들 보다 구조상 횡적 너비가 크기 때문에 구조적인 prompt structure를 짜서 상세 설명을 같이 곁들여서 제공하는 것은 허들이 두 배는 크다고 생각.
기대 결과:
(1) 코드가 없는 사용자의 경우
조금 더 구체화된 prompt를 통해 원하는 수준의 구현 코드를 답변 받을 수 있음
사용된 언어와 라이브러리/패키지의 버전 정보도 같이 받아 구현 이슈를 줄일 수 있음
(2) with 코드
버전 관리
코드와 이슈만 복사 붙여넣기 하면 적절한 prompt를 답변 받을 수 있음
프롬프트 원문
###{instruction} 1. 사용자가 "CodeSnippet"을 입력했다면, 해당 코드**Optimization** 제시 및 **Error Debuging** 2. "CodeSnippet"의 *Syntax*를 확인하여 사용한 **Program Language** 명시 3. You should give **Version** information you use when prints Prompt 4. If Error information is not in user_input then request which error user have faced when you feel vague from "CodeSnippet" or user_input 5. If user not give "CodeSnippet", you just make full code for user request 6. IF user give "CodeSnippet", you need to ask whether you should give full codes or give partial codes which you have modified by asking "Yes/No" 7. If user not give "CodeSnippet" and **No mention** about **Program Language**, you have to ask **which type of program language user want to use** 8. Lets Think Step by Step ###{Format} if you do not need to ask to user f""" *프롬프트 생성기* 문제 설명: {description} 코드: {code} 버전 정보: - *프로그래밍 언어*: {language version} - *라이브러리/패키지*: {library_versions} """ --- ###{Format} if you need to ask to user print "프로그래밍 언어: 에 사용을 원하시는 언어를 기입해서 사용해주세요." f""" *프롬프트 생성기* 문제 설명: {description} 코드: {code} 언어 정보: - *프로그래밍 언어*: """ ###{Example} [사용자 입력 예시] def add(a, b): return a + b "이 함수의 결과가 예상과 다릅니다." [Prompt 출력 예시] *프롬프트 생성기* 문제 설명: "함수의 결과가 예상과 다릅니다." 코드: """{python} def add(a, b): return a + b """ 버전 정보: - *프로그래밍 언어*: Python - *라이브러리/패키지*: 3.* --- ###{Input} 네이버 뉴스 크롤링을 하고 싶어요.
프롬프트 사용 결과
프롬프트 생성기
문제 설명: "네이버 뉴스에서 특정 주제나 키워드와 관련된 뉴스 기사를 자동으로 크롤링하는 함수 구현"
코드:
import requests from bs4 import BeautifulSoup def crawl_naver_news(keyword, num_articles=10): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } search_url = f"[https://search.naver.com/search.naver?&where=news&query={keyword}](https://search.naver.com/search.naver?&where=news&query=%7Bkeyword%7D)" response = requests.get(search_url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') articles = [] for item in soup.select('.list_news > li'): title = item.select_one('.news_tit').get_text() link = item.select_one('.news_tit')['href'] articles.append({'title': title, 'link': link}) if len(articles) >= num_articles: break return articles
프롬프트 피드백
프롬프트 수정 방향
(1) 복잡함: 프롬프트 안에 많은 조건절과 요구사항에 대한 문장이 중첩되어있음 → This can make it cahllenging for an AI to consistently follow all instructions accurately.
(2) 구조의 간결함: 프롬프트에 이미 구조를 잘 잡아두었지만 [Introduction] - [Format] and [Example], 전체적인 구조를 수정할 필요성이 있습니다. 사람이 한 눈에 봐도 이해하기 편한 구조로요. 내용 또한 중복이 많아 제거해야 합니다.
(3) 지시문의 모호함: 몇몇 문장이 명확하지가 않습니다.
(4) 에러 핸들링: 에러 핸들링에 대한 대안이 프롬프트에 없습니다. 여러 에러 타입에 대한 문장을 추가해야 해요.
(5) rigid output format: 아웃풋 구조를 rigid 하게 한 것은 좋지만, 코딩 시나리오에 따라 다르게 할 필요성이 있습니다. 그래서 format 을 좀 더 flexible 하게 하면 좋을 것 같아요.
수정한 프롬프트 원문
""" Based on the following information and user problem, please generate the full code snippet. [response format] f""" 문제 설명: {네이버 뉴스 크롤링 웹 스크레이퍼 생성} #문제를써주세요. 코드: {code or NA} -- # 프로그래밍 언어: {language_version} # 버전 정보: # 라이브러리/패키지: {library_versions} # 코드 설명: {step_by_step_explanation} # 최적화 및 디버깅 팁: {optimization_and_debugging_tips} """
사용 결과
✏️
프롬프트 생성기
문제 설명: 네이버 뉴스 크롤링 웹 스크레이퍼 생성
코드: 위의 antArtifact 태그 내에 포함된 코드를 참조하세요.
프로그래밍 언어: Python 3.7+
버전 정보:
라이브러리/패키지:
requests==2.26.0
beautifulsoup4==4.10.0
pandas==1.3.3
코드 설명:
crawl_naver_news 함수는 주어진 검색어와 페이지 수에 따라 네이버 뉴스를 크롤링합니다.
BeautifulSoup을 사용하여 HTML을 파싱하고 뉴스 제목, 언론사, 요약, 링크를 추출합니다.
save_to_csv 함수는 크롤링한 데이터를 CSV 파일로 저장합니다.
메인 부분에서 사용자 입력을 받아 크롤링을 실행하고 결과를 저장합니다.
최적화 및 디버깅 팁:
대량의 데이터를 크롤링할 때는 aiohttp를 사용한 비동기 요청을 고려하세요.
네이버의 로봇 정책을 준수하고, 요청 간 적절한 간격을 두어 IP 차단을 방지하세요.
예외 처리를 추가하여 네트워크 오류나 파싱 오류에 대비하세요.
User-Agent를 설정하여 더 안정적인 크롤링을 할 수 있습니다.
이 코드를 실행하기 전에 필요한 라이브러리를 설치해야 합니다. 다음 명령어를 사용하세요:
Copypip install requests beautifulsoup4 pandas
이 스크립트를 실행하면 사용자가 입력한 검색어와 페이지 수에 따라 네이버 뉴스를 크롤링하고, 결과를 CSV 파일로 저장합니다. 파일 이름에는 타임스탬프가 포함되어 있어 여러 번 실행해도 이전 결과를 덮어쓰지 않습니다.
import requests from bs4 import BeautifulSoup import pandas as pd from datetime import datetime def crawl_naver_news(query, pages=1): base_url = "https://search.naver.com/search.naver?where=news&query=" news_data = [] for page in range(1, pages + 1): url = f"{base_url}{query}&start={(page-1)*10 + 1}" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') news_list = soup.select("ul.list_news > li") for news in news_list: title = news.select_one("a.news_tit") press = news.select_one("a.info.press") summary = news.select_one("div.news_dsc") if title and press and summary: news_data.append({ "title": title.text, "press": press.text, "summary": summary.text.strip(), "link": title["href"] }) return news_data def save_to_csv(data, filename): df = pd.DataFrame(data) df.to_csv(filename, index=False, encoding='utf-8-sig') if __name__ == "__main__": query = input("Enter the search query: ") pages = int(input("Enter the number of pages to crawl: ")) news_data = crawl_naver_news(query, pages) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"naver_news_{timestamp}.csv" save_to_csv(news_data, filename) print(f"Crawling completed. Data saved to {filename}")
결과에서 Code 를 잘 학습할 수 있도록 보조하는 것을 볼 수 있습니다.
Subscribe to 'sujin-prompt-engineer'
안녕하세요,
슬래시페이지 구독을 하시면, 이따금씩 발행하는 글을 이메일로 받아보실 수 있어요.
구독하시겠어요?
Subscribe
👍
1
Sujin_Kang
Few-shot 프롬프트 생성기
Fastcampus 오프라인 프롬프트 엔지니어링 수업은 매 주의 과제가 있습니다. 제출해 주시는 과제 중엔 함께 보면 좋을 프롬프트가 참 많습니다. 그 중 소개하고 싶은 프롬프트가 있습니다. Few-shot 프롬프트 생성기입니다. Few-shot prompt engineering 기법 Few-shot prompt engineering 은 여러 개의 예제를 사용하는 기법입니다. 예를 들어서, 한 단어를 영어로 번역하는 프롬프트라면 여러 가지 예제를 사용해서 에어컨이라는 단어의 영어 단어를 생성하게 하는 것입니다. 다음 단어를 한국어에서 영어로 번역해줘. 사과: apple 핸드폰: mobile phone 에어컨: 프롬프트 기능 개발을위한 예제 자동 생성 툴 이 글에 소개하는 프롬프트는 기능 개발을 위한 예제 자동 생성 툴입니다. 프롬프트 엔지니어가 직업인 분의 프롬프트라 제가 이렇다 할 피드백을 하지 않아도, 이미 완성형인데요. 프롬프트를 함께 보겠습니다. ( 흔쾌히 공유를 허용해주셨습니다. 감사합니다 ) 프롬프트 제목: Few-shot 프롬프트 생성기
👍
3