langchain 4

[LangChain] LLM 워크플로우 : Routing 구현

Routing은 이전 단계의 결과에따라 다음 단계를 비결정적으로 정의할 수 있도록 한다.  RunnableLambda 혹은 RunnableBranch를 이용하는 방법이있지만, 현재는 RunnableLambda를 사용하는 방법이 권장된다.  RunnableLambda는 Python callable을 Runnable로 바꿔주기만하는데, 별도로 RunnableBranch를 사용하기보다는 Python 코드 분기문을 통해 처리를 하라는 것이다. 실습유저의 질문이 파이썬 혹은 코틀린 프로그래밍과 관련 있을 경우, 이에 최적화된 프롬프트로 답변할 수 있도록 분기처리를 추가해볼 것이다. 먼저, 질문이 파이썬이나 코틀린과 관련되어있는지만 확인하는 체인을 준비한다.from langchain_core.prompts impo..

[LangChain] LLM Workflow : 병렬처리 구현

실행하려는 체인들이 각각 독립적일때, 메모리를 더 사용해서 수행시간을 단축시키기 위해 체인을 병렬처리할 수 있다. RunnableParallel을 이용해 체인을 병렬처리해보았다. RunnableParallel역시 다른 Runnable~시리즈처럼 Runnable 표준 인터페이스를 상속한다. 구현코드제공된 주제에 따라 간단한 설명과, 시를 써달라는 요청을 했다.from langchain_ollama.llms import OllamaLLMmodel = OllamaLLM( model="gemma2:2b")from langchain_core.prompts import PromptTemplateprompt1 = PromptTemplate.from_template( """ {topic}에 대해서 1줄..

[LangChain] LLM Workflow : Chaining 구현

LLM을 이용한 애플리케이션을 만들때, 가장 단순한 구조는 사용자의 입력을 받아 LLM이 질문에 대해 응답을 생성하고, 출력하는 Input - LLM - Output으로 이루어진 체인이다. 작업 요구 사항에 따라 여러 단계의 과정이 추가되어야하거나, 혹은 하나의 LLM에서 나온 응답을 다음 LLM이 받아서 처리하는 연속적인 처리 구조로 만들어야할 수 있다. 이러한 체이닝 구조의 워크플로우를 LangChain을 이용해 구현해보았다. LangChain에서 실행가능한 모든 것들은 Runnable이다. 이 Runnable은 LCEL이라는 LangChain에서 사용하는 도메인 랭귀지를 이용해 선언적으로 사용할 수 있다. | 연산자를 이용해 이전단계의 출력을 다음단계로 보내는 식이다.chain = (prompt |..

Langchain으로 간단한 RAG 구현하기

Langchain으로 소설 "난쟁이가 쏘아올린 작은 공" PDF 문서에 대한 답변을 제공해 줄 수 있는 간단한 RAG 애플리케이션을 구현했다. (코드에 대한 설명은 Gist 주석으로 대신한다.) 아직 잘 모르는 상태로 무작정 다이브했으니, 간단하게 개념을 정리하겠다. LLM이 답변을 지어내는 것을 방지하고, 커스텀한 컨텍스트 제공을 위해 LLM을 이용한 챗봇에는 검색증강생성(RAG)라는 기술을 사용한다. RAG 애플리케이션은 일반적으로 두 구성요소로 이루어진다. 1. 인덱싱(Indexing) - 소스에서 데이터를 수집하고 인덱싱하는 과정2. 검색과 생성(Retrieval and generation) - 유저에게 쿼리를 받아서 인덱스에서 관련 데이터를 찾아 모델에게 전달하는 실질적인 RAG 체인이다. 인..