LangChain, Chromadb 이용 문서 기반 RAG 구현하기

LangChain을 이용해 RAG 와 같은 토이프로젝트를 실행해보셨던 분들이라면 익숙하실 python 모듈입니다.

 

https://pypi.org/project/chromadb/

 

chromadb

Chroma.

pypi.org


 

RAG를 구현하려면 벡터 데이터베이스로부터 정보를 가져와 LLM에 전달해야 하죠?

벡터 데이터베이스 역할을 하는 것이 바로 Chromadb 모듈입니다.

 

 

pypi 에 나와있는 모듈 특징을 보더라도 LangChain, LlamaIndex를 위주로 하는 데이터베이스 모델임을 확인할 수 있습니다.

 

다음 명령어를 통해 설치할 수 있습니다.

pip install chromadb

 

https://velog.io/@dasiy/%EB%AC%B8%EC%84%9C%EB%A5%BC-%EA%B8%B0%EB%B0%98%EC%9C%BC%EB%A1%9C-%ED%95%98%EB%8A%94-%EC%B1%97%EB%B4%87-feat.langchain-ChromaDB

 

문서를 기반으로 하는 챗봇 📚&🤖 (feat.langchain ,ChromaDB)

안녕하세요. 오늘은 문서를 기반으로 응답할 수 있는 챗봇을 만들어 보도록 하겠습니다.reference1 : https://www.youtube.com/watch?v=ftXLn9DE7YYreference2 : https://www.youtube.com/

velog.io

 

본 링크를 통해 LangChain을 이용한 RAG 을 구현해보고자 했습니다.

데이터베이스 호출시 Chromadb가 호출되지 않는 문제점이 있었습니다.

 

 

요런 오류가 발생합니다.

 

기존의 pydantic에서 제공되던 BaseSettings 가 pydantic-settings로 옮겨져서 여기서 호출을 해와야 합니다.

... 다시 한 번 아래 문장을 통해 pydantic-settings를 설치해줍니다.

pip install pydantic-settings

 

이후 오류가 난 Chromadb에서 config 파일을 직접 수정해주었습니다. (근데 chromadb 사용하시는 분들이 많을텐데 왜 이런 오류가?...)

 

여튼.. 해줬습니다.

 

 

근데 그 상태에서 또 모듈을 불러오게 되면

partially initialized module 'chormadb' has no attribute 'config' (most likely due to a circular import)

라는 Error 가 발생합니다.

 

 

오류를 구글링 해 보았습니다.

https://github.com/chroma-core/chroma/issues/774

 

[Bug]: Chromadb import error. Dependency issue: Install pydantic-settings package · Issue #774 · chroma-core/chroma

What happened? What happened? There was a PydanticImportError when trying to import chromadb. The error occurred because the BaseSettings class has been moved to the pydantic-settings package. What...

github.com

 

Python 버전이 맞지 않으면 버전 오류가 나는 것 같아보이네요..

 

저랑 같은 방법으로 해결했는데 왜 전 오류가?..

 

 

Fast API 와 Chromadb 사이에서 충돌문제가 발생하는 것 같네요

 

아래 링크들을 참조하시면 좋을 것 같습니다.

https://stackoverflow.com/questions/2464568/can-someone-explain-what-exactly-this-error-means-typeerror-issubclass-arg-1

 

Can someone explain what exactly this error means,TypeError: issubclass() arg 1 must be a class

I have zero idea as to why I'm getting this error.

stackoverflow.com

https://stackoverflow.com/questions/63420889/fastapi-pydantic-circular-references-in-separate-files/70384637#70384637

 

FastAPI / Pydantic circular references in separate files

I would love to use a schema that looks something like the following in FastAPI: from __future__ import annotations from typing import List from pydantic import BaseModel class Project(BaseModel):...

stackoverflow.com

 

 

 

저는 결국 해결을 못해서 새로 가상환경을 만들어 

!pip install langchain==0.0.142
!pip install openai==0.27.4
!pip install chromadb==0.3.21
!pip install tiktoken==0.3.3

 

로 환경설정을 맞춰주었지만, 

LangChain, tiktoken, openai 버전을 모두 다운그레이드 해야 한다는 번거로움이 있습니다.

문제 해결 방법을 찾게 된다면 글을 또 수정해보도록 하겠습니다!

 

환경설정들을 맞춰주고 나니,

아래와 같은 오류가 발생합니다.

text-davinci-003 deprecated..

https://platform.openai.com/docs/deprecations

더 이상 open AI 에서 text-davinci-003 모델을 지원하지 않는 것 같습니다.

환경설정을 위해 버전을 다운그레이드 해 줬더니...🙄

 

기존 코드는 이렇게 되어 있었는데요,

모델 종류를 설정해오는 방식으로 변경하였습니다.

 

llm = ChatOpenAI(model_name = 'gpt-3.5-turbo')

 

로 변경하여 추가하였습니다.

 

결과 생성

 

문서를 기반으로 질문(query)에 대한 답을 추출해 내는 것을 확인할 수 있습니다!

 

 

OpenAI API에서 Embedding 모델로 따로 분류되어 사용량이 측정되네요 ㅎㅎ