이 영상에서는 'LangChain’을 활용해 자신의 노트에 질문하는 방법을 소개합니다. Obsidian 메모 앱에서 노트를 로드하고 인덱스를 생성하여 자연어로 질문함으로써 원하는 정보를 쉽게 얻을 수 있습니다. 이 접근법은 메모의 복잡한 내용을 쉽게 탐색하고, 생각을 더 깊게 이해하는 데 도움을 줍니다. 메모 작성, 생각 정리, 그리고 생산성 향상에 있어 매우 효과적인 도구가 될 것입니다.
옵시디언 노트 가져오기
우선, Obsidian 앱에서 노트를 가져오는 방법부터 시작해 보겠습니다.
LangChain에서는 langchain_community.document_loaders
모듈의 ObsidianLoader
클래스를 사용하여 이를 수행할 수 있습니다.
아래의 코드는 사용자의 시스템에 저장된 옵시디언 노트를 로드하는 예제입니다.
from langchain_community.document_loaders import ObsidianLoader
loader = ObsidianLoader("/Users/anpigon/Memo")
docs = loader.load()
이 코드는 특정 경로(/Users/anpigon/Memo
)에 저장된 옵시디언 노트를 로드합니다. docs
변수에는 로드된 노트의 내용이 저장됩니다.
인덱스 만들기
노트를 로드한 후에는, 노트의 내용을 효율적으로 검색할 수 있도록 인덱스를 생성해야 합니다. 여기서는 벡터스토어(VectorStore) 인덱스 생성 방법을 사용하며, 이를 위해 먼저 ChromaDB를 설치합니다.
pip install --quiet chromadb
ChromaDB 설치 후, LangChain의 langchain_community.embeddings
모듈에서 HuggingFaceEmbeddings
클래스를 사용하여 한국어 임베딩 모델(jhgan/ko-sroberta-multitask
)을 통해 노트의 내용을 벡터로 변환합니다. 그런 다음, langchain.indexes
모듈의 VectorstoreIndexCreator
클래스를 사용하여 인덱스를 생성합니다.
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.indexes import VectorstoreIndexCreator
# embedding 모델을 명시적으로 지정하지 않으면,
# 기본적으로 langchain의 기본 임베딩 모델(OpenAI의 text-embedding-ada-002)를 사용합니다.
# index = VectorstoreIndexCreator().from_loaders([loader])
# HuggingFace의 임베딩 모델을 사용하려면,
# HuggingFaceEmbeddings 클래스에 모델 이름을 지정해 인스턴스를 생성합니다.
embeddings = HuggingFaceEmbeddings(model_name="jhgan/ko-sroberta-multitask")
index = VectorstoreIndexCreator(embedding=embeddings).from_loaders([loader])
OpenAI의 임베딩 모델을 사용하려면, OPENAI_API_KEY
가 필요합니다.
질문하기
마지막으로, 생성된 인덱스를 사용하여 특정 질문에 대한 답변을 검색해 보겠습니다. 여기서는 Google의 gemini-pro
AI 모델을 사용하여 질문("습관이란 무엇인가요?"
)에 대한 답변을 생성합니다.
from langchain_google_genai import ChatGoogleGenerativeAI
query = "습관이란 무엇인가요?"
# llm 모델을 명시적으로 지정하지 않으면,
# 기본적으로 langchain의 기본 모델(OpenAI의 gpt-3.5-turbo-instruct)를 사용합니다.
# index.query_with_sources(query)
# Google의 Generative AI 모델인 "gemini-pro"를 사용하여 쿼리를 실행합니다.
llm = ChatGoogleGenerativeAI(model="gemini-pro")
index.query_with_sources(query, llm=llm)
이 코드는 사용자가 정의한 질문에 대한 답변을 검색하고, 그 결과를 반환합니다. 반환된 결과는 질문, 답변, 그리고 사용된 소스 정보를 포함합니다.
{'question': '습관이란 무엇인가?',
'answer': '습관이란 반복적으로 하는 행위가 되풀이되어 생기는, 비교적 고정된 반응 양식을 말합니다.\n',
'sources': '20220913 습관이란 무엇인가.md'}
Ollama를 사용하는 방법
LangChain을 활용하는 또 다른 방법으로는 Ollama
도구를 사용하는 것입니다. Ollama
는 다양한 AI 모델을 로컬 환경에서 쉽게 실행할 수 있도록 지원하는 도구입니다. 아래 예제는 Ollama
를 이용하여 질문에 대한 답변을 인덱스에서 검색하는 코드입니다.
from langchain_community.llms import Ollama
llm = Ollama(model="mistral")
query = "습관이란 무엇인가요?"
index.query_with_sources(query, llm=llm)
마치며
이 예제를 통해, 옵시디언 노트를 가져와서 인덱스를 생성하고, 생성된 인덱스를 활용해 질문에 대한 답변을 검색하는 전체 과정을 살펴보았습니다. 이 방법을 사용하면, 복잡한 노트의 내용을 쉽게 탐색하고, 필요한 정보를 빠르게 찾을 수 있습니다.
References
Links
- 한국어 임베딩과 제미니AI를 이용한 무료 RAG 시스템 구축하기
- 올라마(Ollama)와 옵시디언(옵시디언 노트앱)을 효과적으로 활용하는 방법
- 로컬에서 무료로 사용할 수 있는 LLM 도구, Ollama 활용 가이드
or
'개발 > AI 개발' 카테고리의 다른 글
AI 임베딩 모델 한국어 성능 비교 (2) | 2024.05.05 |
---|---|
한국어 임베딩과 제미니AI를 이용한 무료 RAG 시스템 구축하기 (6) | 2024.02.20 |
GPT 스토어가 오픈했습니다! (0) | 2024.01.11 |
오픈소스 Code Interpreter API를 활용한 데이터 시각화, 주식 차트 그리기, 이미지 편집 방법 (0) | 2023.07.24 |
GPT Engineer를 활용한 프로젝트 생성과 실행 (0) | 2023.07.22 |