자세히보기

빅데이타 & 머신러닝 147

LLM 애플리케이션 개발을 위한 Langchain - #2 주요 컴포넌트

Langchain의 주요 구성 요소 소개 조대협 (http://bcho.tistory.com) Langchain이 어떤 컴포넌트로 구성되어 있는지 살펴보자. 2023년 12월 현재 Langchain 라이브러리는 많은 업데이트가 있어서 이전 버전에 비교해서 컴포넌트 구성이나 기능이 다소 변경되었다. Langchain을 구성하는 주요 컴포넌트로는 Model, Prompt Template, Output Parser, Chain, Agent, Retrieval이 있다. 각각의 컴포넌트에 대해서 살펴보자. Model 먼저 Model 컴포넌트는 LLM 모델을 추상화하여 제공한다. 모델 컴포넌트는 입력으로 들어온 프롬프트에 대해서 텍스트 답변을 리턴하는 기능을 제공한다. Langchain은 다양한 LLM 모델을 지원..

LLM 애플리케이션 개발을 위한 Langchain #1-소개

LLM 애플리케이션 개발을 위한 Langchain 프레임웍 #1 소개와 ChatGPT, PaLM2 예제 조대협 (http://bcho.tistory.com) 배경 Open AI의 ChatGPT나 구글의 PaLM2와 같은 LLM 모델의 경우에는 LLM을 이용하여 서비스를 개발하기 위한 SDK를 제공한다. 이 SDK를 이용해서 애플리케이션을 직접 개발해도 되겠지만, SDK의 기능들을 추상화한 프레임웍을 사용한다면 조금 더 쉽게 애플리케이션을 개발할 수 있다. 예를 들어 데이터베이스들도 각각의 SDK를 제공하지만 자바와 같은 언어에서 개발을 할때는 JDBC와 같은 추상화 프레임웍을 사용하여 데이터베이스 종류에 상관없이 단일 프레임웍을 사용하여 개발할 수 있도록 하고, 더 나아가서는 JPA와 같은 고급 추상화 ..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #8 임베딩 API 비교

임베딩 API 비교 및 선택 조대협 (http://bcho.tistory.com) 이 글에서는 접근이 쉽고 많이 사용되는 open ai의 임베딩 모델을 사용했지만, 여러 임베딩 모델들이 있고, 임베딩 모델 마다 성능이 다르며 임베딩의 목적또한 다르다. RAG 를 소개하는 글이기 때문에, 문서 검색 (Document Retrieval) 기능이 주요 유스 케이스이지만, 임베딩은 분류(Classification), 클러스터링(Clustering) 등 다양한 시나리오로 사용이 가능하다. 구글의 Vertex.AI 임베딩 모델의 경우, 임베딩의 목적에 따라서 임베딩 타입을 지정하게 할 수 있다. 출처 : https://cloud.google.com/vertex-ai/docs/generative-ai/embeddin..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #7 RAG 쿼리한 정보로 LLM에 질의하기

RAG 쿼리한 정보로 LLM에 질의하는 프롬프트 조대협(http://bcho.tistory.com) RAG 구조를 이용해서 원하는 정보를 저장하고, 검색했으면 이를 LLM에 전달해서 답변을 생성하게 해야 한다. LLM에 컨텍스트 정보를 전달하기 위해서는 프롬프트를 사용하는데, 이때 LLM이 컨텍스트 정보 이외의 정보, 예를 들어 LLM 자체가 알고 있는 정보를 이용해서 유추한 답변을 만들어 낼 수 있기 때문에, 이를 방지하기 위한 프롬프팅이 필요하다. 아래는 RAG에서 추출한 정보를 기반으로 질의를 하는 프롬프트 예제이다. You are an intelligent assistant helping the users with their questions on {{company | research papers..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #6 임베딩을 위한 효과적 문장 분리 방법

임베딩을 위한 효과적 문장 분리 방법 조대협(http://bcho.tistory.com) 임베딩에서 알고리즘도 중요하지만 가장 중요한 것중 하나는 어떻게 문서를 파편으로 잘라낼것인가? (이를 영어로 Chunking이라고 한다.) 이다. 임베딩은 텍스트를 고정된 크기의 벡터로 변경하는 것이기 때문에, 긴 문단을 작은 벡터로 임베딩하게 되면 디테일한 의미를 잃어버릴 수 있고, 반대로 작은 문장으로 임베딩을 하면, 검색시 문장에 대한 정확도는 올라가겠지만, 문장이 짧아서 문장 자체가 가지고 있는 정보가 부족하게 된다. 그래서 적절한 Chunk 사이즈를 찾아내는 방법이 중요한데, 이를 Chunking strategy (문서 파편화 전략)이라고 한다. 이 글에서는 몇가지 대표적인 Chunking 방식과, 같이 활..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #5 ChatGPT에서 Pinecone 에 저장된 문서를 기반으로 답변하기

ChatGPT에서 Pinecone 에 저장된 문서를 기반으로 답변하기 조대협 (http://bcho.tistory.com) 지난 글에서 간단한 Pinecone의 사용방법에 대해서 알아보았다. 이번글에서는 텍스트를 임베딩하여 Pinecone에 저장하고, 이를 검색하는 방법에 대해서 소개한다. import pinecone import os import openai # Set your OpenAI API key openai.api_key = "{your API Key}" input_directory = "./golf_rule_paragraph" def extract_info_from_file(file_path): with open(file_path, 'r', encoding='utf-8') as file: #..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #4 텍스트 임베딩하기

OpenAI Embedding 모델을 이용하여 텍스트 임베딩 하기 조대협 (http://bcho.tistory.com) 앞의 글에서 Pinecone 데이터베이스를 이용하여 벡터 데이터를 어떻게 저장하는지 알아보았다. 그러면 텍스트나 이미지와 같은 데이터를 어떻게 벡터데이터로 변환하는 지를 알아보도록 하겠다. 이렇게 원본 데이터를 벡터로 변환하는 과정을 임베딩이라고 한다. 임베딩의 개념과 임베딩된 데이터에 대한 검색 방법은 https://bcho.tistory.com/1400 글을 참고하기 바란다. 데이터를 임베딩하는 방법은 간단하게 API를 사용하면 되는데, OpenAI의 경우 다양한 임베딩 API 를 제공한다. 1 세대 모델은 다음과 같다. 요즘은 “text-embedding-ada-002” 모델을 주..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #3 Pinecone 둘러보기

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #3 Pinecone 둘러보기 조대협 (http://bcho.tistory.com) Pinecone은 클라우드 매니지드 벡터 데이터 베이스로 구글,Azure,AWS 클라우드를 모두 지원한다. 여러가지 인스턴스 타입이 있으며, 최대 4천만 벡터까지 저장이 가능하다. 개발/테스트를 위한 프리티어가 있고 API키만 발급 받으면 손쉽게 사용할 수 있기 때문에, Langchain, ChatGPT와 함께 많이 사용되고 있다. 오늘은 Pinecone을 사용하는 방법에 대해서 알아보도록 한다. 먼저 pinecone.io 사이트에 접속해서 우측 상단의 Sign up 메뉴를 이용하여 회원 가입을 한후에, 사이트에 로그인한다. 로그인 후에 ..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #2 - 임베딩과 유사도 검색

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #2 - 임베딩과 유사도 검색 조대협 (http://bcho.tistory.com) 앞의 글에서 RAG가 어떻게 작동하는지에 대한 대략적인 개념에 대해서 살펴보았다. 이 글에서는 벡터데이터 베이스가 유사한 문서를 찾아내는 방법인 유사도 검색과, 텍스트등의 데이터를 이 벡터 공간으로 맵핑 시키는 임베딩의 개념에 대해서 알아보도록 한다. 임베딩의 개념 Pinecone 데이터베이스를 이해하기 위해서는 먼저 임베딩이라는 개념을 이해해야 한다. 텍스트를 그냥 데이터 베이스에 저장하는 것이 아니라, 벡터로 바꿔서 저장하는데, 단순하게 해시와 같은 방법으로 맵핑을 하는 것이 아니라 벡터 공간에 의미를 담은 상태로 변환하는 것을 임베딩..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #1

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #1 조대협 (http://bcho.tistory.com) RAG의 개념 Open AI의 ChatGPT나 Google의 PaLM 모델, 메타의 LLama 모델과 같은 LLM 모델은 학습 당시에 지식을 저장하여 뉴럴 네트워크 상에 그 지식을 담고 있다. 그래서 학습 당시까지의 지식을 기반으로한 질문에 대해서는 답변을할 수 있지만, 학습이 되지 않은 데이터나 또는 그 이후 나온 데이터에 대해서는 답변을 할 수 없는 제약을 가지고 있다. 또한 잘못된 정보를 학습하여, 잘못된 답을 내놓는 경우가 있을 수 있는데, 이를 Hallucination (환상)효과라고 한다. 이러한 두 문제를 해결하려면 최신의 데이터와 질문에 대한 답을 ..