랭체인
-
[LlamaIndex] Building RAG Applications for Production카테고리 없음 2024. 2. 6. 22:45
RAG 애플리케이션의 프로토타입을 만드는 것은 쉽지만 성능이 뛰어나고 강력하며 대규모 지식 자료로 확장 가능하도록 만드는 것은 어렵습니다. 이 가이드에는 RAG 파이프라인의 성능을 향상시키기 위한 다양한 팁과 요령이 포함되어 있습니다. 먼저 몇 가지 일반적인 기술의 개요와 구현방법을 설명합니다. 가장 간단한 기술부터 가장 어려운 기술까지 있습니다. 최종 목표는 검색 및 생성 성능을 최적화하여 더 복잡한 데이터 세트에 대한 더 많은 쿼리에 환각 없이 정확하고 답변하는 것입니다. ○ 검색된 Chunk와 응답 합성에 사용되는 Chunk 분리하여 생각하기 더 나은 검색을 위한 핵심 기술은 검색에 사용되는 Chunk를 합성에 사용되는 Chunk와 분리하는 것입니다 # 문서와 관련된 청크로 연결되는 문서 요약 삽입..
-
[LlamaIndex] Advanced Retrieval Strategies카테고리 없음 2024. 2. 5. 13:04
지금까지 LlamaIndex로 RAG를 구현하는 방법들을 알아봤습니다. 이번에는 고급 RAG 구현하는 몇가지 방법을 알아보겠습니다. ○ Query Transformation 사용자 쿼리는 RAG 쿼리 엔진, 에이전트 또는 기타 파이프라인의 일부로 실행되기 전에 여러 가지 방법으로 변환 및 분해될 수 있습니다. 1. Routing: 쿼리는 유지하되, 쿼리가 적용되는 Tool을 선택합니다. 2. Query-Rewriting: 다양한 방법으로 쿼리를 다시 작성합니다. 3. Sub-Questions: 쿼리를 여러 개의 하위 질문으로 분해합니다. 4. ReAct Agent Tool Picking: 초기 쿼리가 주어지면 1) 선택할 Tool과 2) 해당 Tool에서 실행할 쿼리를 식별합니다. # Routing 이 ..
-
[LlamaIndex] Evaluating카테고리 없음 2024. 1. 30. 12:29
평가와 벤치마킹은 LLM 개발에서 중요한 개념입니다. LLM 앱(RAG, 에이전트)의 성능을 향상하려면 이를 측정할 수 있는 방법이 있어야 합니다. LlamaIndex는 생성된 결과의 품질을 측정하는 주요 모듈을 제공합니다. 또한 검색 품질을 측정하기 위한 주요 모듈도 제공합니다. ○ Response Evaluation(응답 평가) LlamaIndex는 결과의 품질을 측정하기 위해 LLM 기반 평가 모듈을 제공합니다. 이는 "골드" LLM(예: GPT-4)을 사용하여 예측된 답변이 다양한 방식으로 올바른지 여부를 결정합니다. 이러한 현재 평가 모듈 중 다수에는 실측 라벨이 필요 하지 않습니다. 쿼리, 컨텍스트, 응답의 일부 조합을 통해 평가를 수행하고 이를 LLM 호출과 결합할 수 있습니다. 평가 모듈은..
-
[LlamaIndex] Querying카테고리 없음 2024. 1. 29. 12:21
이제 데이터를 로드하고, 인덱스를 작성하고, 나중에 사용할 수 있도록 해당 인덱스를 저장했습니다. LLM 응용 프로그램의 가장 중요한 부분인 쿼리를 시작할 준비가 되었습니다. 쿼리는 간단히 말하면 LLM에 대한 프롬프트 호출입니다. 쿼리는 질문을 하고 답변을 얻을 수도 있고, 요약 요청이 될 수도 있고, 훨씬 더 복잡한 지침이 될 수도 있습니다. ○ 기본 사용법 쿼리의 기본은 QueryEngine 입니다. QueryEngine을 얻는 가장 간단한 방법은 다음과 같이 색인을 생성하여 색인을 얻는 것입니다. query_engine = index.as_query_engine() response = query_engine.query( "Write an email to the user given their bac..
-
[LlamaIndex] Storing카테고리 없음 2024. 1. 22. 16:24
데이터를 로드하고 Indexing한 후에는 다시 Indexing하는 데 드는 시간과 비용을 피하기 위해 해당 데이터를 저장하는 것이 좋습니다. 기본적으로 Indexing된 데이터는 메모리에만 저장됩니다. ○ 특정 경로에 저장 아래 코드는 지정된 경로에 Indexing 데이터를 저장하고 다시 불러오는 예시 입니다. from llama_index import StorageContext, load_index_from_storage # Indexing된 데이터를 특정 경로에 저장 storage_context.persist(persist_dir="") # rebuild storage context storage_context = StorageContext.from_defaults(persist_dir="") # ..
-
[LlamaIndex] Indexing카테고리 없음 2024. 1. 22. 16:08
데이터가 로드되면 이제 Document 개체 목록(또는 Node 목록)이 생성됩니다. 이제 쿼리를 시작할 수 있도록 Index를 빌드할 시간입니다. Index는 Document 객체로 구성된 데이터 구조로, LLM에서 쿼리할 수 있도록 설계되었습니다. LlamaIndex는 다양한 인덱스 유형을 제공합니다. ○ Vector Store Index Vector Store Index는 가장 자주 접하게 되는 인덱스 유형입니다. Vector Store Index는 문서를 가져와서 노드로 분할합니다. 그런 다음 모든 노드의 텍스트에 대한 벡터 임베딩을 생성하여 LLM에서 쿼리할 수 있도록 준비합니다. # Embedding 벡터 임베딩은 LLM 애플리케이션이 작동하는 방식의 핵심입니다. 흔히 임베딩이라고 부르는 벡터..
-
[LlamaIndex] Prompt카테고리 없음 2024. 1. 16. 22:23
Prompt는 LLM이 출력을 생성할때 가장 많은 영향을 미치는 요소 중 하나 입니다. Prompt는 답변 합성, 검색, 인덱스 구성 등에 사용됩니다. LlamaIndex에서는 Prompt를 개선하기 위한 간단한 방법부터 고급 방법까지 제공하고 있습니다. ○ Prompt 사용 패턴 # 사용자 정의 프롬프트 LlamaIndex에서는 PromptTemplate 클래스를 사용하여 간단하게 기본 Prompt를 수정 할 수 있습니다. from llama_index.prompts import PromptTemplate # 텍스트 질의응답 프롬프트 수정 text_qa_template_str = ( "Context information is" " below.\n---------------------\n{context_..
-
[LlamaIndex] Loading Data카테고리 없음 2024. 1. 16. 16:03
LLM을 설정한 이후, 데이터와 관련된 작업을 시키기 위해서는 먼저 데이터를 로드 하고 처리해야 합니다. 로드 & 처리된 데이터는 색인화 및 저장 단계를 거쳐 활용할 수 있습니다. Loading Data 단계에서는 Loaders와 Transformaions으로 데이터를 어떻게 불러들이고 처리하는지 살펴보겠습니다. ○ Loaders LlamaIndex에서는 Data Connector를 통해 데이터를 Load 합니다. Data Connector는 다양한 데이터 원본에서 데이터를 수집한 것을 'Document'라는 개체로 저장합니다. 'Document'는 텍스트, 이미지 등의 데이터를 의미하는것 뿐만 아니라 관련된 메타데이터도 포함하여 의미합니다. # 기본 Data Connector 사용 LlamaIndex에..