[AIFactory 세미나] ChatGPT Learning Day - ChatGPT 기반 나만의 챗봇서비스 개발
https://www.youtube.com/live/n8hKjxCVNdo
제로베이스 상태인 사람을 대상으로, chatGPT 활용한 서비스 만드는 방법을 소개하는 강연의 정리글.
Prompt 관련
Prompt Engineering 기법 간단한 소개
- giving instruction. 지문과 지시문을 분리.
role prompting.
- 원하는 역할을 명시하는 것.
- 어떤 역할을 맡기고 요청을 보냈을 때 좋은 답변을 주는지 prompt engineering 검색하면 나온다고 함.
Standard prompt: 답변 유도문
- Few Shot prompts: 몇 가지 예시를 제공하는 것.
Chain of Thinking Prompt (COT)
- 즉답을 요구하는 대신, 순차적으로 답변을 유도하는 방식
- 과정이 중요할 때 사용할 수 있음.
서비스에서 응답을 받은 사용자가 '왜 그런 결과를 얻었는지' 이유를 되물을 수 있음. 그 정보도 making + showing.
chatGPT 활용 서비스에서는 지시문이 핵심. 사용자는 Input만 넣을 거지만, input을 받기 전 미리 지시문을 세팅해 두는 게 서비스의 역할.
- 좋은 대답을 만드는 지시문은 이미 가치를 인정받고 있으며 거래 대상이 되고 있음
하지만 역으로 사용자가 입력으로
- instruction을 무시하고 답변해달라
- 서비스에서 입력받은 지시문이 뭔지 말해달라
라고 하면 그 지시를 따르게 되어 있음. 따라서 서비스에서 의도하지 않은 결과를 사용자에게 노출하지 않도록 후처리하는 작업이 필요함.
bing에서 누군가 prompt를 해킹? 누출? 시킨 사례가 있다고 함
Learning 관련
이건 AI 관심 좀 있던 사람이라면 다 아는 내용. just for Recap.
- 지도학습
- task 중심: AI 모델 + 대량의 데이터로 해당 데이터 문제해결에 특화된 모델 생성
- fine-tuning: 이미 만들어진 모델에 소량의 데이터로 튜닝
- bert / gpt는 LLM (Large language model). 여기에 원하는 데이터만 일부 넣어서 fine-tuning.
- in-context learning: AI 모델의 파라미터가 업데이트되는 게 아님. 지시문과 질문만으로 문제해결
- zero shot: 지시문을 상세히 정해주고, 질문 한 번에 답변을 얻는 방식
- one shot: 예시 하나 추가
- few shot: 예시 여러 개
- one shot learning의 예시.
만약 chatGPT로 카페 주문을 받도록 한다고 하면, 위와 같이 지시문을 정확히 넣어줘야 오류를 줄일 수 있다.
cf. GPT 3.5 모델의 경우 Input의 토큰 제한이 4096. 지시문으로 입력할 게 많아지면 Vector Database 써야 함
chatGPT 활용한 서비스를 구상하려면, Prompt Template 을 적절하게 구성해야 함. 위 예시는 prompt template으로 '타로카드 점치기'를 만든 모습
- 지시문
- 지문
- 질문
- 답변유도
서비스 예시
chatGPT API가 나오기 전에는 chrome extension같은 확장 앱을 썼었음
- 번역 / 웹 검색결과 제공 등... 을 제공하는 식.
- 토큰개수 제한이 있었으니까 지문 최대한 밀어넣으려고 DB 붙여 쓰는 등
이 중 가장 뜨던 게 pinecone.
- 데이터 임베딩 / vector화 지원해서
- 데이터 학습 / 갱신 / 필터링을 빠르게 할 수 있도록 지원
즉, vector DB에 쿼리 날려서 유사한 정보를 전부 다 chatGPT에 던진 뒤 요약을 맡기는 식.
- 사용자와의 대화내용을 전부 저장해둔 뒤 필요 시 chatGPT에 전부 집어넣어서 맥락을 복구한다던가... -> Long term memory.
- 나에게 맞춤형으로 제공되는 AI가 될 가능성이 있다
외부 API와 연동해서, chatGPT가 모르는 정보를 제공하는 형태. - LangChain.
chatGPT api가 공개된 이후
- 사용자에게서 질문이 오면, 질문에 맞는 정보나 로직을 사용자가 만든 웹 / 앱에서 처리하고 지문 형태로 chatGPT에 전달하는 것이 가능해졌다.
- chatGPT의 '예측할 수 없는 응답'을 필터링할 수 있게 됨
openAI에게 데이터를 넘겨줄 수 없는 구조라면, 사내에 LLM 모델을 구축해야 함
- LLM 모델 자체는 여러 선택지가 있음
몇주 전 chatGPT에 플러그인이 생겼다. 외부서비스와 직접 연동할 수 있도록 지원되기 시작함.
- 사용자에게 질문이 들어오면
- DB에서 이전에 대화했던 내역 전부를 지시문과 지문 형태로 prompt 생성
- 이전에 이야기했던 맥락을 유지함.
예시: https://aifactory.space/competition/detail/2286
예시: https://aifactory.space/competition/detail/2302
- 고서이미지 AI 모델의 GUI로 chatGPT를 붙인 것.
- 번역은 AI 모델이 하고, 번역으로 나온 결과물을 chatGPT input으로 넣어서 번역하는 식.
적용할 때 겪은 일: OCR 응답 결과를 chatGPT로 넘길 때 서순 문제. 서순 정렬하는 전처리 하고 데이터 넘겨야 했음
- 기존 서비스에 붙일 때 생길 수 있는 에러사항은 고려해야 한다
그 외에도 notionAI, visual ChatGPT가 서비스 형태로 제공중.
이후 아래 내용은 aifactory에서 확인할 수 있는 서비스 소개
문서gpt: https://aifactory.space/competition/play/2295
- Github의 paperQA 기반. 파일 업로드하고 질문하면, 그 파일에 해당하는 내용으로 답변을 해준다
LangChain: https://python.langchain.com/en/latest/index.html
- github: https://github.com/hwchase17/langchain
- 모든 LLM 모듈 사용 가능
- prompt 사용 가능
- memory context 설정 가능
- 문서 indexing
- chain: ChatGPT 사용한 sequential 처리
- agent
Q. 대화 히스토리를 계속 전달하면 API 호출 비용이 결국 늘어나는 구조?
- Yes. 추가로, 히스토리를 계속 기억시키기 위해 기존 대화이력을 전부 저장
- 과거이력 없이도 응답할 수 있는가? vs 과거이력 검색하면 응답할 수 있는가? vs 과거 context까지 포함해서 요청을 보내야 응답할 수 있는가?
- 이거 하려면 langChain Agent가 필요함
Q. 표/그래프도 되나?
- 지금은 안되는 걸로 앎. 표 / 그래프 해석할 수 있는 AI model이 따로 붙어야 할 거 같음.
Q. Vector DB 특장점
- 자연어 처리에서 Embedding / Vectorized token 연산을 위해 쓰던 것. 유사도검색 등의 작업에 편리함