inflearn logo
강의

講義

知識共有

一度で完成するAIエージェント開発オールインワン (w. LangGraph, Google ADK, CrewAI)

検索拡張生成技術(RAG) 実装: インデキシング、リトリーバー w. langchain

섹션6장 .chroma/esl_topics폴더에 관하여

61

Tora King

投稿した質問数 2

0

안녕하세요.
좋은 강의 항상 감사드립니다.

한 가지 문의드리고 싶습니다.
섹션 6의 28강에서 RAG 실행 부분을 실습하던 중,
제 로컬 환경에서는 코드가 에러 없이 정상적으로 실행되었지만
.chroma/esl_topics 폴더가 생성되지 않는 현상이 발생했습니다.

코드 상으로는 os.makedirs(PERSIST_DIR, exist_ok=True) 구문이 있으므로
폴더가 자동으로 생성될 것으로 예상했는데, 실제로는 생성되지 않는 것 같습니다.

혹시 해당 폴더가 생성되는 정확한 경로를 알려주실 수 있을까요?
또는 Windows 환경에서는 위 코드로 폴더가 생성되지 않는 경우가 있는지도 궁금합니다.

확인 부탁드립니다.
감사합니다.

image.png

import os
from typing import Type, Optional
from crewai.tools import BaseTool
from pydantic import BaseModel, Field
from env import OPENAI_API_KEY
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA

os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY

PDF_FILENAME = os.path.join("knowledge", "29ESLConversationTopic.pdf")
PERSIST_DIR = os.path.join(".chroma", "esl_topics")

def qa(question):

    os.makedirs(PERSIST_DIR, exist_ok=True)

    embeddings = OpenAIEmbeddings()

    try:
        has_index = bool(os.listdir(PERSIST_DIR))
    except FileNotFoundError:
        has_index = False

    if has_index:

        vectordb = Chroma(persist_directory=PERSIST_DIR, embedding_function=embeddings)

    else:
        loader = PyPDFLoader(PDF_FILENAME)
        docs = loader.load()

        splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
        chunks = splitter.split_documents(docs)

        vectordb = Chroma.from_documents(chunks, embeddings, persist_directory=PERSIST_DIR)

        retriever = vectordb.as_retriever(search_kwargs={"k": 3})
        llm = ChatOpenAI(model="gpt-4o-mini",temperature=0.3)

        return RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever).run(question)

class RAGToolInput(BaseModel):
    question: str = Field(description="질문")

class RAGTool(BaseTool):
    name: str = "ESL_Chroma_RAG"
    description: str = "Retrieves from '29 ESL Conversation Topics' PDF via ChromaDB and answers questions."
    args_schema: Type[BaseModel] = RAGToolInput

    def _run(self, question: str):
        try:
            return qa(question)
        except Exception as e:
            return str(e)


rag_tool = RAGTool()


















python

回答 1

0

amamov

안녕하세요

PERSIST_DIR = os.path.join(".chroma", "esl_topics") 는 현재 작업 디렉토리(cwd) 기준인데 터미널/IDE/노트북에 따라 cwd가 프로젝트 루트가 아닐 수도 있습니다. (물론 강의처럼 루트 경로에서 실행하면 이슈가 없을 것 같긴 한데.. 정확한 원인은 파악이 어렵네요..)

아래 코드로 변경해주시고, 안되신다면 print된 부분을 공유해주시면 더 도움을 드리겠습니다.

아래 코드는 참고로 실행 중인 스크립트 파일 기준(프로젝트 내부 고정 경로)으로 찍는 방법입니다.

from pathlib import Path
...

BASE_DIR = Path(__file__).resolve().parent
PDF_FILENAME = BASE_DIR / "knowledge" / "29ESLConversationTopic.pdf"
PERSIST_DIR = BASE_DIR / ".chroma" / "esl_topics"

...

PERSIST_DIR.mkdir(parents=True, exist_ok=True)
print("CWD          :", Path.cwd())
print("__file__ base:", BASE_DIR)
print("PERSIST_DIR   :", PERSIST_DIR.resolve())
print("Exists?       :", PERSIST_DIR.exists())

 

질문있습니다~

0

25

1

firestore query 문제

0

36

0

구글 검색엔진 만들기 중 [전체 웹 검색] 안보임

0

44

1

마지막 부분이 이해가 안됩니다.

0

65

1

Trace Batch Finalization 부분이 출력되지 않습니다

1

53

1

SIGHUP 에러

0

70

1

Trace Batch Finalization 이 부분이 출력되지않는데요.

1

74

2

아래문의 답에 답글로도 달았는데 답이없으셔서 다시 남깁니다.

0

77

2

yaml 파일을 계속 찾으면서 에러가 띄네요!

0

84

2

dynamic_agent가 없어도 괜찮지 않나요?

0

62

2

firestore database 위치에 서울이 없습니다.

0

110

2

firecrawl 사용해서 구현했는데 Url정보를 포함하지 않습니다.

0

88

1

봇 계속 실행

0

104

2

야후에서 정보를 못얻어와요.

0

77

2

가상환경 세팅이 잘 되지 않습니다 ㅠㅠ

0

103

2

flow.plot() 그래프 시각화가 돼지 않네요

0

93

3

발급 받은 토큰이 서버에서 거절되었다고 나와요.

0

85

2

english tutor 관련 langchain 임포트 에러

1

178

3

.\.venv\Scripts\activate 어디다가 입력해야 하나요?

0

125

3

main.py 눌러도 안떠요

0

82

2

보충강의 잘못올리신거 같아요

0

74

1

12:32 반응이 없는데 왜그런거죠?

0

51

2

10:40 이 부분이 저는 안떠요

0

54

2

5:46 저 부분이 안보이는데

0

46

1