기타내용

패스트캠퍼스 AI 개발자의 LLM 마스터 클래스(3)

k9e4h 2025. 1. 31. 23:50

LLM 서비스 개발 실습

 

검색 라이브러리

langchain-community, duckduckgo-search

 

RAG - Retrieval-Augmented Generation

조회해서 생성하는 것, RAG 를 한다는 것은 아나운서가 스크립트 관련된 내용을 쪽지 만들어 놓는 것.

RAG를 만드는 것은 쪽지 내용을 어떤식으로 채울지 하는 것

 

유튜브 조회, 요약 라이브러리

youtube_search, youbutetranslate-api, pytube

faiss-cpu ( 검색내용을 embedding 위한 라이브러리 - 책에 도서번호를 부여하고 카테고리화하는 것 )

 

==> chat GPT는 제약이 많았지만 langchain 은 그런 제약을 많이 해결해주었다.

==> langchain이 너무 많이 변경되는 중이라 소스코드가 정상동작하지 않을 수 있다.

==> RAG 에 활용하기 좋다.

==> langchain을 사용하지않고 in-house에서 개발하는 경우도 많다. 하지만 빠르게 개발하려면 langchain이 편하긴하다.

 

----

 

Function Calling

받는 것과 주는 것의 규격이 정확하게 맞춰져있어서 자동화 할 수 있음 ex 공장의 순서

LLM을 사용하기 위해서 output을 규격화하는 것이 중요하다. - Deterministic / Non-Deterministic

 

 

질의할 때마다 응답이 달라짐.

그 문제를 해결하기 위해서 Output 의 스키마를 사전 정의하여 전달

 

functions = 어떤 기능을 원하는지 설명 함

function_call 을 사용하면 최소한 원하는 규격의 응답이 왔는지를 확인 할 수 있음 ( 올바른 응답인지는 알 수 없음 (

 

 사용자 질문을 받으면 function_call을 이용하여 사용자의 내용을 추출하여 gpt 호출 후 답변을 받는다.

답변과 duckduckgo를 이용하여 검색한다.

 

실제로 사용하고싶은 기능과 LLM을 합치기 위해서 function calling을 많이 사용 함

LLM이 생각하는대로 대답하는 것이 아니라 검색등 정확한 데이터를 넘기기 위해. ex) 런던 날씨가 어떄?

혹은 원하는 output으로 가공하기 위해서 


response_format을 이용하여 json 형식으로 받을 수 있다.

 

-----

 

LLM으로 서비스를 만든다는 것은?

* 데이터 보안을 고려할 때는 데이터가 파일로 있는지, DB에 있는지 다른 곳에서 가져와야하는것인지 등을 고려해야 함

 

 

 

grounding information = prompt를 만들기 위해 답변을 합치는 역할

검색할 때 Vector DB, embedding 개념 사용

LLM의 답변을 답변을 바로 사용자 응답으로 보내는 것이 아니라 응답을 확인하는 단계를 거쳐야 한다.

 

---

언어 모델의 특성

 

환각( hallucination )

ChatGPT는 잘못된 정보도 올바른 정보라고 착각할 수 있다. = hallucination 할루시네이션

그렇기때문에 오픈북으로 정보를 찾을 수 있도록한다 = RAG 알에이지, 래그 , retreival-argumented generation = 검색 증강 생성

 

RAG = 컨닝페이퍼 줄테니까 그거 보고 읽어, 모르는거 아는척하지말고! = langchain을 이용해서 컨닝페이퍼

langchain의 예시 = 유투브, 웹 검색

 

Grounding 이란?

- 땅에 붙어 있는 것, 기초 교육

 

ex) LLM은 hallucination(환각)이 많기 때문에 grounding 해야한다.

grounding 할 수 있는 방법으로 RAG를 많이 사용

 

LLM에 질문하는 방식에 따라서 답변의 수준이 달라지니까 prompt engineering을 통해 LLM을 잘 활용해보자,

그러나 질문을 잘해도 LLM이 모르는 정보는 제대로된 답변을 얻을 수 없음

그래서, 질문+쪽지를 LLM에 전달하자 

 

 

RAG의 패턴

 

RAG 버전 1. 가장 간단한 방법

- 프롬프트에 데이터 포함, API Call로 데이터 가져오기

 

 

RAG 버전 2.

미리 저장되어있는 데이터를 가져와서 프롬프트를 만듬 -> embedding

LLM 모델을 몇 번 쓸 수도 있음

ex) 정중한 이메일을 써야할 때, 미리 저장되어잇는 데이터 중에서 "정중한 이메일" 이라는 라벨링이 되어있는 데이터를 소량(fewshot) 찾아서 함께 담는다

ex) 이메일 카탈로그, 뉴스레터등의 종류를 분류해서 예시로 사용

 

 

RAG 버전3.

Embedding 데이터가 많아질 경우 Vector DB를 사용

사용자가 질문하기 전 부터 데이터를 사전 정의

 

RAG 버전 4.

LLM의 Fine turning(미세조정)을 통해 

LLM에게 답변의 예시를 미리 학습 시킴. RAG 이전 버전들과 다른 점은 LLM 호출 시 데이터를 함께 전달하는 것보다는 LLM 응답 이전에 학습을 시켜두는 것이다.

------

 

AI에서 Embedding이란?

데이터, 특히 단어나 문장과 같은 텍스트 데이터를 벡터의 형태로 표현하는 과정을 의미합니다.

이 벡터는 원래의 텍스트 데이터보다 낮은 차원을 가지며, 기계 학습 모델이 이해할 수 잇는 형태로 변환됩니다.

이런 벡터를 '임베딩 벡터'라고 하며, 이는 데이터의 의미적, 문맥적 특성을 수치화한 것입니다.

==> 위치 표현

 

cosine similarity 유사도 = 비슷하면 1, 비슷하지 않으면 -1 에 가까움 ( 0.8 이하면 비슷하지 않다고 보면 될 듯)

언어, 단어, 문장 뭉치를 줬을 때 유사도를 확인하는 것

이 것을 바탕으로 정확한 단어가 아니더라도 비슷한 단어를 유추할 수 있게 됨

두 문장의 유사도도 검색 가능

 

Semantic search (<-> Retrieval search)

의미적 표현을 사용하여 색인화 하는것을 포함하는 검색 방법.

정확한 문자열이 아닌 "의미"를 찾기

 

임베딩에도 모델이 각자있다. 

ex) A마트의 상품 주소와 B마트의 상품 주소는 다른 것 처럼.

text-embedding-ada-002

언어 모델에 따라 주로 사용하는 임베딩 모델이 있음.

 

https://platform.openai.com/docs/guides/embeddings

 

 

 

 

Output from AI LLMs is Non-Deterministic

반응형