SK Tech Summit 2023 - 비즈니스에 실제로 활용 가능한 LLM 서비스 만들기
비즈니스에 실제로 활용 가능한 LLM 서비스 만들기
SKT Data Application팀 김찬호님
개요
chatGPT 출시 전인 22년 9월 / 출시 이후인 23년 9월에 세콰이어 캐피털에 올라온 글.
GPT-4한테 요약시킨 결과
- 22.09: Gen AI가 창의성의 일부분에서 인간보다 우월한 성과를 내고 있다.
- 23.09: Gen AI는 혁신적인 제품이었다. 유용성에 의문이 있었으나, 가치를 창출하는 시장이 출현하고 있다. 기대해볼 만하다.
- 22.09: foundation 모델 열거하고, 도메인 예시만 짤막하게 썼던 반면
- 23.09: Stack 구조를 소개함. 도메인별 foundation 모델 / serving, management tool / framework / application / monitoring 등 다양한 부분이 발전했음
Production Level에서 가치를 창출하는 '적용 사례' / Challenge?
- 슬라이드에는 6개가 명시되어 있지만, 이건 어디서 공식으로 명명된 게 아니며 상호 영향을 미치는 부분도 있다.
Security
미디어에서 한창 겁주던 시절의 대표적인 보도예시.
- 기업 내부정보가 유출되는 게 아닐까?
- 서비스의 Monitoring / Audit이 가능한가?
Azure Cloud에서 제공하는 OpenAI를 선택했었는데
- Cloud Provider에서 제공하는 Compliance, Reliability, Security를 신뢰할 수 있었기 때문.
- 데이터센터 연결 쪽에서 특히 좋음.
public OpenAI는 서비스 품질개선이나 악의적인 공격 방지를 위해 데이터를 일정 기간 수집하고, 필요시 human access가 가능하다는 점을 명시함.
Azure OpenAI의 경우, 서비스 시작할 때부터 opt-out 옵션을 제공했음.
- prompt monitoring
- content filtering
OpenAI vs Azure OpenAI: 앱 특징, 타겟 고객 특징, 인프라 요구사항에 맞춰서 선택하면 된다.
Hallucination / Controllability
23년 2월, Bard가 오답을 내놓은 사례.
- LLM이 잘못된 답을 생성할 때 어떻게 해야 하나?
- 내부자료나 최신자료를 근거로 답변하도록 만들 수 있나?
- 답변 정확도 높이는 방법은?
- 원하는 형태로 답을 받으려면?
대부분의 LLM에서는 temperature / top P 등의 옵션을 제공함.
결국 LLM은 '다음에 나올 단어 예측' 모델이므로, 특정 단어 다음에 어떤 단어가 나올지 확률을 계산할 수 있다.
- 때로는 특정 단어가 높은 확률로 나올 수도 있고 (Peaked), 다양한 단어가 비슷한 확률로 등장할 수도 있다 (Flat)
top P
- 기준이 되는 확률값을 정의한 뒤, 개별 단어의 확률 총합이 기준 확률에 도달할 때까지 후보군을 수집한다.
- 후보군에서 랜덤으로 하나 고르는 식.
- i.e. 오른쪽 예시의 경우 top P가 0.5라면, 개별 등장확률이 0.08 미만인 thougth, knew, had... 등 다양한 단어가 후보군에 올라간다.
- 계산 편하게 대충 0.08 확률이라고 치면, 0.5에 근접할 때까지 확률을 더하다 보면 6~7개 단어가 후보군에 포함됨.
- 그 6~7개 단어 중에서 랜덤으로 하나 뽑는다
- 만약 왼쪽 예시처럼 단어 하나가 0.8로 높은 확률이라면, 그 단어 하나만 뽑아도 top P 기준치였던 0.5를 초과함. 따라서 단어 선택지는 하나밖에 안 나온다.
temperature: scaling parameter
- 확률 간 절대값 차이를 줄여주는 옵션.
- 좀전의 예시에서 0.8 확률의 단어는 이론의 여지 없이 그냥 선택됨. temperature 값을 주면, 0.8이었던 가중치가 예컨대 0.5 이하로 내려가도록 scale을 조정한다.
- 조정되면, 랜덤 샘플링에서 선택할 수 있는 단어의 선택지가 많아질 수 있다.
RAG 기법 / 아키텍처로 응답에 필요한 레퍼런스 지식을 전달할 수 있다. Cache 아키텍처를 좀더 보자면
- Ask Question -> Embedding -> Vector Space에서 relevant Docs를 가져온다 -> LLM에 전달
- 여기서, 자주 호출될 것 같은 query는 long-term memory에 저장해두고, cache hit할 경우 LLM 거치지 않고 바로 응답하도록 한다.
- controllability 향상. 내가 의도한 답변을 전달할 수 있기 때문.
Prompt 관련 설정들
- Directive: Complex한 Direction을 주고
- Data: 적절한 데이터 넣어주고
- Role: 역할을 부여한다.
Chain of Thoughts (COT) / 이걸 트리 구조로 확장하면 단방향 Tree of Thoughts.
단방향 말고, 과거에 만든 tree 정보도 재활용하자 - Graph of Thoughts
이외에도 기상천외한 방법들이 사례로 나오고 있는데
- Take a deep breath and Work on this step by step 했더니 성능이 올라갔다
- 감정에 호소하니까 성능이 올라갔다
언어는 수학이나 공학으로 이루어진 게 아니므로... 그럴 수 있다고 생각한다.
학습한 언어 데이터에 이런 경향성이 반영되어 있을 수 있기 때문.
Performance / Measurement
OpenAI는 RateLimit을 설정해뒀다. 리소스가 부족하니까.
Performance를 올리는 방법으로 Scale up, Scale out이 있는데
- scale up: reserved capacity 지원. 비싼 대신 빠르다.
- scale out
Measurement: MMLU가 거의 표준으로 자리잡았음.
- 57개 영역 - 수학, 공학 등 다양한 분야의 지식에 정답을 맞추는지 확인하는 것.
- GPT-4가 제일 수치가 높음.
그러나.. 이게 비즈니스 / vertical 영역에 부합하는지는 불확실.
요런 정성적인 기준을 가지고 평가할 수 있음.
- Grounded: RAG로 던져준 지식이 LLM 응답결과에 얼마나 포함되었나
- Relevance
- Coherence: 응집도 있는 답변인가
- ...
LangSmith 프레임워크에서도 이런 기준을 제시하고 있음.
Actionability / Feedback / UX
챗봇 말고, 실제로 Action을 가능하게 하려면?
- Function Call, Agent...
사용자의 피드백을 어떻게 사용할 것인가
- 좋은 답변은 cache해서 넘겨주거나
- 따봉 받은 input / output Pair를 fine-tuning에 쓴다던가
interaction 디자인 / LLM 잘못 쓰는 것들 방어는 어떻게?
Agent Architecture 예시: MS의 AutoGen
LLM chat 서비스에서 시작할 때 쓰는 UX 예시
- '나는 무슨 일을 하는 챗봇입니다' 소개
- 예시로 어떤 문장을 넣을 수 있는지 안내
다양한 분야에서 논의 / 발전이 이루어지는 중.
Foundation 모델 자체의 발전속도도 빠르다. Multi Modal인 GPT-4V의 경우
- '존맛탱' 이 포함된 이미지를 던져주면 그게 무슨 뜻인지 설명해준다거나
- 사진을 주고 '이 사람이 차보다 큰가' 질문하면 '원근감 때문에 확신할 수 없다' 라고 답한다거나