일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- lcel
- 챗봇 만들기
- csvloader
- langsmith
- azure ai
- runnablepassthrough
- azure open ai
- Runnable
- azureai
- runnablelambda
- 자연어처리
- 문서/번역 서비스 사용
- azure open ai service
- ai language
- runnableparallel
- chain생성
- RecursiveCharacterTextSplitter
- pdfloader
- azure services
- Multimodal
- 자연어 처리
- rag
- Azure
- Parallel
- langchain
- GPT
- webbaseloader
- splitter
- teddynote
- OpenAI
- Today
- Total
목록분류 전체보기 (28)
Nathaniel

Embed는 문서인 Document → Load하고 문서 내부의 문단, 문장, 단어로 Splitter 분할기를 사용하여 자른다.그 자른 값 즉 chunk들을 Embedding/ 벡터화 된 숫자값으로 변환해야한다. Embedding을 왜 벡터 값으로 변환하냐면 chunk별로 별도의 숫자를 부여해서 이 숫자를 가진 값과 유저가 입력 값으로 넣은 질문이 비슷한 값을 가지고 있는지 유사도 검색(retriever)하고 유사한 문장을 가져와 유저에게 답변을 주는 데에 중요한 역할을 하기 때문에 Embedding을 하는 것. 문서 내용을 Split으로 첫 단추를 잘 끼우는 것 좋지만, Embedding 모델을 잘 선택해야 하는 것도 문제이다. 우리는 한글로 번역된 모델을 사용해야 하기 때문에 영어보다는 한글에 특화된..
이 텍스트는 Documents를 Chunk_size별로 글자를 나눠준다는 의미이고, 재귀적으로 잘라준다는 뜻이다.ex ) 문단 → 문장 → 단어 → 글자 순으로 점점 작게 자름.기본적으로 ["\n\n", "\n", ".", " "] 나뉜다단계 1단계\n\n(문단)2단계\n(줄 바꿈)3단계. (문장)4단계" " (단어)5단계고정 길이 이렇게 크게 자르다가 작게 자르는 이유는?? 문단이나 문장의 의미를 최대한 유지하면서,LLM이 잘 이해할 수 있도록 부드럽고 자연스럽게 텍스트를 나누는 분할기로 사용된다. "그래서 통상 재귀적으로 분할한다"라고 부른다. from langchain_text_splitters import RecursiveCharacterTextSplittertext = """나는 고양이를 좋아한..

Base Loader 받는 방법에 대해서 공부를 해야 하는데 그 부분은 나중에 다뤄볼 예정이다. Document_Loader에서 가장 많이 사용하는 함수는 load()가 되는데, 문서를 로드해서 반환하는 List[Document]형태이다.Data Type은 List이고, 로드된 문서 페이지 수와 로드한 문서의 페이지의 객체를 확인할 수 있다( metadata도 같이) load() 예시 사항은 아래 코드 및 출력을 확인해보면 알 수 있다.from langchain_core.documents import Documentdocument = Document(page_content="안녕하세요? 이건 랭체인의 도큐먼드 입니다")# 도큐먼트의 속성 확인document.__dict__# 출력{'id': None,..

Langchain은 LLM을 위한 선택적 캐싱 레이어를 제공한다. - 동일한 완료를 여러 번 요청하는 경우 LLM 공급자에 대한 API 호출 횟수를 줄여 비용을 절감할 수 있음 - LLM 제공업체에 대한 API 호출 횟수를 줄여 애플리케이션의 속도를 높일 수 있다. InMemory CacheInMemory Cache를 사용해서 동일 질문에 대한 답변을 저장하고, 캐시에 저장된 답변을 반환하는 대신에휘발성 특징을 가진 InMemory Cache는 프로그램을 종료 즉시 저장된 답변은 사라지게 된다. 아래의 사진에서 InMemory Cache를 사용했을 때 비교할 것은 처음 답변과, 두 번째 동일 답변에 대한 출력 시간이다.1) 처음 답변 - Wall time : 2.74s2) 두 번째 답변 - Wall..

출력 Parser에 대한 역할에 대해 알아보자 Langchain의 출력파서(output Parser)는 언어 모델(LLM)의 출력을 더 유용하고 구조화된 형태로 변환하는 중요한 컴포넌트이다. 원래의 Parser는 해석하다이지만 Langchain에서는 변환하다는 의미가 좀 더 부각된다. Json 형식인 딕셔너리 Key:Value 로 데이터를 가져오는 게 굉장히 용이하다. Parser가 하는 역할은 일반적인 문단을 봤을 때 정확하게 내용을 딱 찝어오는 게 어렵다 Parser의 종류는 굉장히 많다. 아래에는 Parser의 종류별 코드 출력을 넣었다. PydanticeOutputParser스키마를 따르는 데이터 구조로 변환함.CommaSeparatedListOutputParser리스트 형식으로 출력이 된다.St..

prompt template을 생성할 때 변수 {}, {} 두 개가 있을 경우 한 개를 중간에 끼워 넣어서 변수를 대신해서 쓸 수 있다. prompt_template을 만들 때, .yaml 파일 형식 안에 내가 원하는 내용을 넣어서 Template을 만들어서 사용하면 RAG를 할 때 더욱더 좋다는 것을 알 수 있다._type: "prompt"template: | {country}의 수도에 대해서 알려주세요. 수도의 특징을 다음의 양식에 맞게 정리해 주세요. 300자 내외로 작성해 주세요. 한글로 작성해 주세요. #양식: 1. 면적 2. 인구 3. 역사적 장소 4. 특산품input_variables: ["country"] 채팅형식의 챗봇을 사용할 때는 ChatpromptTemplate를 사..

Runnable 3대장에 대해 알아보자 1. RunnablePassthrough1-1. RunnablePassthrough 사용이유??prompt는 key:value 쌍인데 이것이 엄청 많아진다면 어떻게 다 기억할 수 있을까?사용자가 key 값을 다 기억하지 못하기 때문에 RunnablePassthrough()를 사용해서 prompt에 바로 넣어주는 간편한 방식이며 기억하기 위한 스트레스를 해소해줄 수 있는 좋은 수단이 될 것이다. 기존에 chain 생성하는 단계에서 chain = prompt | llm 으로 코드를 진행했지만,RunnablePassthrough를 사용하면 곧바로 prompt에 사용자 답변인 10을 key:value 형태로 넣어줄 수 있게 도와주는 것runnable_chain = {"n..

지난번 LCEL문법을 사용하여 Langchain의 chain을 진행했다.유닉스 파이프를 인용한 " | " 문자를 사용해 chain을 만들었는데 그 구조는 아래와 같다.chain = prompt | llm | Outputparser stream = 실시간 출력으로 응답 받고invoke = 출력되는 답변을 완성될 때까지 기다렸다가 한번에 받기위 두 가지를 진행했었다. Batch, max_concurrency 이번엔 batch(단위 실행) 여러 개의 딕셔너리를 포함하는 리스트를 인자로 받아서 딕셔너리에 있는topic의 키 값을 사용한 일괄처리 수행방법이다. answer = chain.batch([{"topic:": "ChatGPT"}, {"topic":"instagram"}]) 이런 방식이다.그리고 변수로 ..