안녕하세요. 이번에는 LangChain, Ollama, LangGraph를 사용하여 간단한 AI 답변 생성 시스템을 구축하는 방법을 소개하겠습니다.

 


사용된 기술 및 라이브러리

 

  • LangChain: AI 모델과의 상호작용을 쉽게 구성할 수 있는 프레임워크입니다. 다양한 모델과 연결하여 일련의 작업을 처리하는 데 유용합니다.
  • Ollama: 다양한 언어 모델을 제공하는 플랫폼으로, 여기서는 gemma2.gguf 모델(SionicAI)을 사용해 AI 응답을 생성합니다.
  • LangGraph: 상태 기반의 워크플로우를 구성할 수 있는 툴입니다. 이를 통해 복잡한 프로세스를 손쉽게 관리할 수 있습니다.

 

코드 설명

이제 코드를 단계별로 살펴보겠습니다.

 

0. 필요한 모듈 임포트

from typing import TypedDict
from langchain_community.llms.ollama import Ollama
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langgraph.graph import StateGraph, END

1. 상태 스키마 정의

 

 

# 상태 스키마 정의
class State(TypedDict):
    question: str # 사용자의 질문
    answer: str # 답변

2. Ollama 모델 초기화

다음으로, Ollama 플랫폼에서 gemma2 모델을 초기화합니다.

이 모델은 사용자가 제공한 질문에 대한 답변을 생성할 것입니다.

gemma_model = Ollama(model="gemma2")

 

3. 프롬프트 템플릿 정의

LangChain의 PromptTemplate을 사용하여 AI 모델에 전달할 프롬프트를 정의합니다.

이 프롬프트는 사용자로부터 받은 질문을 템플릿에 삽입하여 모델이 처리할 수 있도록 합니다.

prompt = PromptTemplate.from_template("다음 질문에 대답해주세요: {question}")

 

4. LangChain 체인 생성

여기서는 LangChain을 사용하여 모델에 질문을 전달하고, 그 결과를 파싱하여 최종적으로 답변을 반환하는 체인을 생성합니다.

chain = prompt | gemma_model | StrOutputParser() | (lambda x: {"answer": x})
# 'lambda'를 사용하지 않을경우, 체인에서 반환되는 값이 dict 형식이 아니면 오류가 발생할 수 있습니다.

 

5. LangGraph 상태 그래프 생성 및 설정

LangGraph를 사용하여 상태 기반의 워크플로우를 설정합니다.

먼저 StateGraph를 생성하고, 필요한 노드와 엣지를 추가합니다.

workflow = StateGraph(State)

# 노드 추가
workflow.add_node("답변_생성", chain)

# 시작 노드 설정
workflow.set_entry_point("답변_생성")

# 종료 조건 설정
workflow.add_edge("답변_생성", END)

 

6. 그래프 컴파일 및 실행

마지막으로, 그래프를 컴파일하고 실행합니다.

아래의 예시에서는 "인공지능이란 무엇인가요?"라는 질문에 대한 답변을 생성합니다.

# 그래프 컴파일
app = workflow.compile()

# 사용 예시
result = app.invoke({"question": "인공지능이란 무엇인가요?"})
print(result['answer'])

 

실행결과

답변

마무리

이 포스팅에서는 LangChain, Ollama, LangGraph를 사용하여 간단한 AI 답변 생성 시스템을 구축하는 방법을 살펴보았습니다. 이 예제를 통해 복잡한 AI 시스템을 더 쉽게 구성할 수 있는 방법을 이해하셨기를 바랍니다. 추가적으로 더 깊이 있는 작업을 원한다면, 각 라이브러리의 문서를 참고하여 다양한 기능을 활용해보세요!

 

해당 코드는 간단하게 작성을 하였으며.

라이센스는 MIT 라이센스에 적용됨을 알립니다.

'AI+RAG' 카테고리의 다른 글

로컬 Ollama를 vscode에서 추론을 해보자!  (0) 2024.08.17
Gemma2 GGUF를 로컬Ollama에 등록해보자!  (0) 2024.08.16