GPT 분류
lang chain 요약
컨텐츠 정보
- 1,136 조회
- 0 추천
- 목록
본문
요약
https://docs.langchain.com/docs/
## Introduction
Language : Large Language Model의 Language
Chain: 모듈들을 체인으로 연결하여 다른 툴의 출력을 다음 툴의 입력으로 연결하는 방식
예: 검색 -> OpenAI(LLM) -> 계산
LLM(Large Language Model)을 이용해서 뭔가 만들때 쓸수 있는 툴/라이브러리 모음
## Schema
### Text
텍스트 입력, 텍스트 출력
### ChatMessages
상호작용하는 채팅 인터페이스
SystemChatMessage : AI System 정보
HumanChatMessage : 사람이 AI 시스템과 상호 작용하는 정보
AIChatMessage : AI 시스템에서 오는 정보를 나타내는 채팅 메시지
### Examples
함수에 대한 입력과 예상 출력을 나타내는 입력/출력 또는 체인에 대한 입력/출력
모델에 대한 예는 모델을 미세 조정하는 데 사용
### Document
페이지_콘텐츠(데이터의 콘텐츠)와 메타데이터(데이터의 속성을 설명하는 보조 정보)로 구성
## Model
* Language Model
* Chat Model
* Text Embedding Model
## Prompts
프롬프트"는 모델에 대한 입력을 의미, 프롬프트 템플릿은 이 입력의 구성을 담당
LangChain은 프롬프트를 쉽게 구성하고 작업할 수 있도록 여러 클래스와 함수를 제공
### Prompt Value
"프롬프트"는 기본 모델에 전달되는 것을 의미, LangChain의 프롬프트에 대한 주요 추상화는 모두 텍스트 데이터를 처리
### Prompt Template
PromptValue는 최종적으로 모델에 전달되는 값
대부분의 경우 이 값은 하드코딩되지 않고 사용자 입력, 기타 정적이지 않은 정보(종종 여러 소스에서 가져온),
고정 템플릿 문자열의 조합을 기반으로 동적으로 생성
PromptValue를 생성하는 객체를 PromptTemplate라고 하며 이 객체는 입력 변수를 받아 PromptValue를 반환하는 메서드를 노출
### Example Selectors
예제 선택기는 사용자 입력을 받은 다음 사용할 예제 목록을 반환하는 객체
### Output Parser
2개의 메서드가 있음
get_format_instructions() -> str: 언어 모델의 출력 형식을 지정하는 방법에 대한 지침이 포함된 문자열을 반환하는 메서드
parse(str) -> Any: 문자열(언어 모델의 응답으로 가정)을 받아 특정 구조로 구문 분석하는 메서드
## Indexes
인덱스는 LLM이 문서와 가장 잘 상호작용할 수 있도록 문서를 구조화하는 방법
문서 작업을 위한 유틸리티 함수, 다양한 유형의 인덱스, 그리고 이러한 인덱스를 체인에서 사용하기 위한 예제가 포함
### Document Loaders
다양한 소스에서 문서를 로드하는 작업을 담당하는 클래스
### Text Splitters
텍스트를 작은 덩어리로 분할하는 작업을 담당하는 클래스
### VectorStores
가장 일반적인 인덱스 유형입니다. 임베딩에 의존하는 인덱스
### Retrievers
언어 모델과 결합할 관련 문서를 가져오기 위한 인터페이스
## Memory
메모리는 대화 과정에서 데이터를 저장하고 검색하는 개념
입력에 따라 관련 데이터를 가져옴
입력 및 출력을 기반으로 그에 따라 상태를 업데이트
Short term memory : 일반적으로 단일 대화의 맥락에서 데이터를 전달하는 방법
Long term memor : 대화 간에 정보를 가져오고 업데이트하는 방법을 다룹니다.
### Chat Message History
2개의 메서드 있음 - 사용자의 메시지와 그에 따른 AI의 응답을 저장
add_user_message
add_ai_message
## Chain
일반적인 사용 사례를 달성하기 위해 특정 방식으로 결합된 일련의 모듈형 구성 요소(또는 다른 체인)로 돌아가는 매우 일반적인 개념
Chain 유형 : Chain, LLMChain, Index-related chains, Prompt Selector
Chain : 체인은 여러 개별 컴포넌트를 포괄하는 엔드투엔드 래퍼
LLMChain : LLM체인은 가장 일반적인 유형의 체인
이 체인은 PromptTemplate, 모델(LLM 또는 ChatModel), 선택적 출력 파서로 구성
Index-related chains : 체인은 인덱스와 상호 작용하는 데 사용
- Stuffing(스터핑) : 모든 관련 데이터를 프롬프트에 컨텍스트로 채워 언어 모델에 전달
장점: LLM을 한 번만 호출. 텍스트를 생성할 때 LLM이 모든 데이터에 한 번에 액세스
단점: 대부분의 LLM에는 컨텍스트 길이가 있으며,
큰 문서(또는 많은 문서)의 경우 컨텍스트 길이보다 큰 프롬프트가 표시되므로 작동하지 않을 수 있음.
- Map Reduce : 각 데이터 청크에 대해 초기 프롬프트를 실행
장점: StuffDocumentsChain보다 더 큰 문서(및 더 많은 문서)로 확장
개별 문서에서 LLM에 대한 호출은 독립적이므로 병렬화 할 수 있음
단점: StuffDocumentsChain보다 훨씬 더 많은 LLM 호출이 필요
최종 결합 호출 중에 일부 정보가 손실
- Refine : 첫 번째 데이터 청크에서 초기 프롬프트를 실행하여 일부 출력을 생성
나머지 문서의 경우, 해당 출력이 다음 문서와 함께 전달되어 새 문서를 기반으로 출력을 수정하도록 LLM에 요청
장점: 더 관련성 높은 컨텍스트를 가져올 수 있으며, MapReduceDocumentsChain보다 손실이 적을 수 있음
단점: StuffDocumentsChain보다 LLM에 대한 호출이 더 많이 필요
또한 호출은 독립적이지 않으므로 MapReduceDocumentsChain처럼 병렬로 실행할 수 없음.
또한 문서 순서에 대한 잠재적인 종속성이 있음.
- Map-Rerank : 각 데이터 청크에 대해 초기 프롬프트를 실행하여 작업을 완료하려고 시도할 뿐만 아니라 답변이 얼마나 확실한지에 대한 점수를 부여하는 것을 포함
점수에 따라 응답의 순위가 매겨지고 가장 높은 점수가 반환
장점: MapReduceDocumentsChain과 비슷한 장점. MapReduceDocumentsChain에 비해 더 적은 호출이 필요
단점: 문서 간의 정보를 결합할 수 없음 즉, 하나의 문서에 하나의 간단한 답변이 있을 것으로 예상할 때 가장 유용
Prompt Selector : 체인에서 사용할 기본 프롬프트를 하드코딩하는 대신 PromptSelector라는 개념을 사용합니다. 이 PromptSelector는 전달된 모델에 따라 기본 프롬프트를 선택하는 역할을 담당
## Agent
### Tool : 언어 모델이 함수와 쉽게 상호 작용할 수 있도록 하는 함수에 대한 특정 추상화
구체적으로, 도구의 인터페이스에는 단일 텍스트 입력과 단일 텍스트 출력이 있음
### Toolkit : 특정 문제를 해결하는 데 사용할 수 있거나 필요한 도구 그룹
### Agent : 에이전트는 모델을 감싸는 래퍼로, 사용자 입력을 받아 수행할 '작업'과 그에 해당하는 '작업 입력'에 해당하는 응답을 반환
### Agent Executor : 에이전트와 도구 집합
에이전트 실행기는 에이전트를 호출하고, 액션과 액션 입력을 다시 받고, 해당 입력으로 액션이 참조하는 도구를 호출하고, 도구의 출력을 가져온 다음 모든 정보를 다시 에이전트로 전달하여 다음 액션을 가져오는 일을 담당
## Use Cases
### Personal Assistants
프롬프트 템플릿 - 개인 비서의 행동 방식을 안내합
기억력 - 개인 비서가 무언가를 기억
도구 - 개인 비서는 사용자가 제공하는 도구에 따라 차별화
에이전트 - 개인 비서는 어떤 작업을 수행해야 하는지 이해
에이전트 실행자 - 도구와 에이전트를 확보한 후에는 이를 실행에 옮기기 위해 에이전트가 해당 도구를 사용할 수 있는 환경을 설정
### Question Answering Over Documents
검색 증강 생성의 개념은 질문이 주어지면 먼저 검색 단계를 수행하여 관련 문서를 가져오는 것입
그런 다음 원래 질문과 함께 해당 문서를 언어 모델에 전달하여 응답을 생성
* Ingestion : 언어 모델을 사용하여 데이터와 상호 작용하려면 먼저 적절한 형식을 가져와야 함.
백스토어로 문서 수집 하는 과정
문서 로드(문서 로더 사용)
문서 분할(텍스트 분할기 사용)
문서에 대한 임베딩 생성(텍스트 임베딩 모델 사용)
벡터스토어에 문서 및 임베딩 저장하기
* Generation :
사용자 질문 받기
질문과 관련된 문서를 색인에서 조회
질문과 관련 문서(PromptTemplate 사용)에서 PromptValue를 구축
PromptValue를 모델에 전달
결과를 다시 가져와 사용자에게 반환
### Chatbots
챗봇 python 가이드 문서 : https://python.langchain.com/docs/use_cases/chatbots.html
### Querying Tabular Data
문서 로드
표 형식으로 저장된 텍스트 데이터가 있는 경우, 다른 텍스트/비정형 데이터와 마찬가지로 데이터를 문서에 로드한 다음 색인을 생성
CSVLoader와 같은 문서 로더를 사용한 다음 해당 데이터에 대한 인덱스를 생성하고 그런 식으로 쿼리
쿼리하기
숫자 표 형식의 데이터가 더 많거나 데이터 양이 많아서 색인을 생성하고 싶지 않은 경우 언어 모델을 사용하여 데이터와 직접 상호 작용
체인
체인은 미리 정해진 일련의 단계
에이전트
에이전트는 더 복잡하며 수행해야 할 작업을 이해하기 위해 LLM에 여러 번 쿼리
## Interacting with APIs : API 작업에 사용할 수 있는 모든 리소스를
## Extraction
추출을 수행하는 방법은 출력 파서에서 추출하려는 정보의 스키마를 정의
그런 다음 지정된 형식으로 정보를 추출하는 지침과 함께 원시 텍스트 블롭을 받는 PromptTemplate을 생성
## Evaluation
문제
랭체인 체인과 에이전트를 평가하는 것은 정말 어려울 수 있습니다. 여기에는 두 가지 주요 이유가 있습니다:
# 1: 데이터 부족
일반적으로 프로젝트를 시작하기 전에 체인/에이전트를 평가할 수 있는 데이터가 많지 않습니다. 이는 대개 대규모 언어 모델(대부분의 체인/에이전트의 핵심)이 훌륭한 소수 학습자 및 제로 샷 학습자이기 때문에 대량의 예제 데이터 세트 없이도 특정 작업(텍스트-SQL 변환, 질문 답변 등)을 시작할 수 있는 경우가 거의 항상 있기 때문입니다. 이는 모델을 사용하기 전에 먼저 많은 데이터 포인트를 수집해야 했던 기존 머신 러닝과는 완전히 대조적입니다.
# 2번: 메트릭 부족
대부분의 체인/에이전트는 성능을 평가할 수 있는 좋은 지표가 없는 작업을 수행하고 있습니다. 예를 들어, 가장 일반적인 사용 사례 중 하나는 어떤 형태의 텍스트를 생성하는 것입니다. 생성된 텍스트를 평가하는 것은 분류 예측이나 숫자 예측을 평가하는 것보다 훨씬 더 복잡합니다.
솔루션
LangChain은 이 두 가지 문제를 모두 해결하려고 시도합니다. 지금까지 우리가 가진 것은 솔루션의 초기 단계이며, 완벽한 솔루션이 있다고 생각하지 않습니다. 따라서 이에 대한 피드백, 기여, 통합 및 생각을 매우 환영합니다.
각 문제에 대해 현재까지 파악한 내용은 다음과 같습니다:
# 1: 데이터 부족
저희는 허깅페이스의 커뮤니티 공간인 LangChainDatasets를 시작했습니다. 이 공간은 커먼체인과 에이전트를 평가하기 위한 오픈소스 데이터 세트의 모음입니다. 저희는 우선 5개의 데이터세트를 제공했지만, 앞으로는 커뮤니티의 노력으로 발전시켜 나갈 계획입니다. 데이터셋을 기여하려면 커뮤니티에 가입하기만 하면 데이터셋을 업로드할 수 있습니다.
또한, 사람들이 자신만의 데이터셋을 최대한 쉽게 만들 수 있도록 하는 것을 목표로 하고 있습니다. 이를 위한 첫 번째 단계로, 문서가 주어지면 그 문서에 대한 질문-답변 작업을 평가하는 데 사용할 수 있는 질문-답변 쌍을 생성하는 QAGenerationChain을 추가했습니다.
# 2번: 메트릭 부족
메트릭 부족에 대한 두 가지 해결책이 있습니다.
첫 번째 해결책은 지표를 사용하지 않고 결과를 눈으로 보고 체인/에이전트의 성능을 파악하는 것입니다. 이를 지원하기 위해 저희는 체인 및 에이전트 실행에 대한 UI 기반 시각화 도구인 추적 기능을 개발했으며, 앞으로도 계속 개발할 예정입니다.
두 번째로 권장하는 솔루션은 언어 모델 자체를 사용하여 출력을 평가하는 것입니다. 이를 위해 이 문제를 해결하기 위한 몇 가지 다양한 체인과 프롬프트가 있습니다.
# 실습
https://learn.deeplearning.ai/langchain/lesson/2/models,-prompts-and-parsers
## 소개
LangChain :
Harrison Chase의 창조: AI 응용 프로그램 개발을 더 빠르고 쉽게 만드는 프레임워크.
DeepLearning.ai 협력: 전문적인 내용 제공과 함께하는 협력 강좌.
커뮤니티 참여와 발전: 오픈 소스 프로젝트로 많은 기여자들의 지원을 받아 빠른 발전 중.
강좌 커리큘럼: 모델, 프롬프트, 파서 등의 LangChain 핵심 구성 요소 교육.
## LangChain: Models, Prompts and Output Parsers
관련자료
-
링크
댓글 0
등록된 댓글이 없습니다.