AI 관련 정리
많은 데이터로 학습된 AI 모델
텍스트, 이미지, 음성 등 여러 형식의 데이터를 처리할 수 있는 멀티모달
만드는데 비용이 많이 들어서 일반 기업에서는 직접 만들 수 없다
openai나 meta 등에서 만든다.
FM의 한 종류로 자언어 처리에 특화된 모델
텍스트입력->텍스트출력
ex] gpt4o, gpt3.5 ...
메타에서 오픈소스로 공개한 LLM
텍스트, 이미지, 오디어 등을 벡터로 변환한다
고차원(openai의 small:1536, large:3072)의 숫자 배열로 변환된다.
높은 차원으로 변환할수록 더 세세한 구분이 되지만 비용이 증가한다.
같은 의미를 갖거나 비슷한 내용의 단어는 가까운 공간에 배치되어 유사도 검색에 주로 사용된다. (코사인, 유클리드..)
openai 등에서 embedding api를 제공한다.
LLM 에 질문을 하기 전, 외부 데이터베이스에 관련 정보를 검색하여서
프롬프트에 관련 정보를 제공하며 질문을 하는 시스템
주로 벡터 데이터베이스가 사용되며 특정 지식에 대한 질문에 많이 사용된다(Faq챗봇)
관련 정보를 같이 넘기기 때문에 AI 특유의 이상한 답변을 하지 않는다.
데이터베이스를 업데이트하여 최신 정보도 답변할 수 있다.
1. 특정 도메인에 대한 지식을 벡터화 하여 벡터DB에 미리 넣어둔다.
2. 질문을 동일한 벡터API를 사용하여 벡터화하여 벡터DB에 검색해 유사한 내용을 찾는다.
3. 찾은 내용을 바탕으로 chat API를 사용한다.
임베딩API도 저렴하기 때문에 chromaDB를 사용한 기본 예제 수준의 챗봇은 파이썬 몇십~몇백줄 정도로 가볍게 만들 수 있고 고도화가 관건인 듯 하다.
openai에서 제공하는 assistant api로도 만들 수 있다.
LLM 모델에 원하는 지식을 추가하는 것.
오픈소스 FM에 직접 할 수 있으나
openai 에서 fine-tuning api를 제공한다. 아마 다른데서도 할듯
[질문: 이름이 뭐야 / 답변: 내이름은 개발봇이야]
와 같은식의 데이터를 제공하여 훈련시킬 수 있다.
RAG와 비교하여 모델 자체에 데이터를 훈련시키기 때문에 답변 퀄리티가 더 좋을 수 있다. 최신화 하려면 추가로 훈련시켜야 한다.
파인튜닝 한 모델에 RAG와 함께 사용할 수도 있다.
프롬프트에 답변받고자 하는 예시를 포함하여 질문하는 프롬프팅 기법.
특정 포멧으로 답변받고자 하는 경우 유용하다.
RAG와 다르게 정보의 최신화나 정확성과는 별개로 답변의 출력 형식과 관련이 있다.
ai 관련 오픈소스 프레임워크로 python이 메인이고 nodejs도 지원은 하는데 전부는 아닌듯. ai 분야는 랭체인 외에도 대부분 파이썬이 메인인듯
ai api나 벡터 데이터베이스, 임베딩 등 ai 관련 기능들을 구성하기 쉽도록 한다.
예시로 Chroma 벡터DB에 저장할 때 임베딩API를 자동으로 연동하거나
RAG 시스템을 chat, vectordb, embedding 각각의 API를 사용하지 않고 랭체인 sdk로만 구성할 수 있다.
그 외에도 기능이 많아보이는데 아직 많이 써보진 못했다.
chat
기본 채팅 api
상태 비저장이기 때문에 chatgpt처럼 이전 대화내용을 기반으로 질문을 하려면 직접 넣어줘야한다.
파라미터로 이전 대화 내용을 입력하거나 원하는 응답 포멧(few-shot)을 예시화하여 추가할 수 있다.
대화 내용 목록 파라미터에서
role=system은 모델에게 지시할 규칙, AI의 역할 등을 입력
role=assistant는 모델의 응답
role=user 는 유저의 질문으로 구성된다.
assistant
초기 모델을 선택한 후 원하는 role을 적용하여 챗봇을 만들 수 있다.
openai에서 제공하는 벡터스토어와 연계가 되어 파일을 미리 넣어두고 RAG처럼 활용할 수도 있다.
fine tuning
파인 튜닝을 API를 사용해서 할 수 있다. 초기 모델을 고를 수 있다 (gpt4o, gpt4o mini ..)
embedding
벡터화 하는 API를 제공한다.
ada v2 이후에 text-embedding-3-large, text-embedding-3-small이 신규버전인 듯 하다.
ada v2와 small은 1536차원, large는 3072차원으로 벡터화한다.
가격은 adav2:small:large = 10:2:13 정도
더 알아볼거/공부할거
; 트랜스포머
; 허깅페이스
; 벡터DB 구조, 기능, 최적화
; etc...