안녕하세요 강사님. 마지막 Streamlit Cloud 배포 후 버전 오류가 발생해서 질문 납깁니다! Python은 3.10.17 버전 사용하고 있습니다. retriever에 pinecone 사용하지 않고 Chroma 를 사용했고요, requirements.txt 에 버전은 langchain-chroma==0.2.3 chromadb==0.6.3 로 들어가 있습니다. 오류는 unsupported version of sqlite3. Chroma requires sqlite3 >= 3.35.0. 라고 뜨는 걸 보면 chromadb 에서 sqlite3 를 사용하고 그 버전 오류인 것 같은데요.. 어떻게 조치를 할지 검색해도 잘 모르겠어서 질문 남깁니다. 감사합니다.
3.2.1 OpenAIEmbeddings 대신 UpstageEmbeddings를 활용하는 방법 으로 실습 예제 하고 있는데요 기존 예제로 하면 chain_type 이 없이 동영상자료에서는 그대로 실행되었는데, 실제로 해보니 chain_type 이 2번째로 와야 하는데 없어서 오류가 뜨더라구요,... 아래는 동영상에서 실행되는 코드 입니다. from langchain.chains import RetrievalQA qa_chain = RetrievalQA.from_chain_type( llm, retriever=database.as_retriever(), chain_type_kwargs={"prompt": prompt} ) TypeError Traceback (most recent call last) Cell In[17], line 3 1 from langchain.chains import RetrievalQA ----> 3 qa_chain = RetrievalQA.from_chain_type( 4 llm, 5 database.as _retriever(), 6 chain_type_kwargs={"prompt":prompt} 7 ) 가 뜨게 되는데 확인해 보니, from langchain.chains import RetrievalQA qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", # 기본 체인 타입 (원하면 "map_reduce"도 가능) retriever=database.as_retriever(), chain_type_kwargs={"prompt": prompt} ) chain_type 이 빠져서 안돌아 가더라구요.. chain_type 을 넣어주면 잘 돌아갑니다. 혹시나 저처럼 헤메이실 분을 위해 올려둡니다. OpenAI 유료결제 안하는 바람에 Upstage로 따라해보려고 하는데... 앞으로의 강의는 OpenAI 로 작성되는것 같아서 유료결제를 해야 할까요...?? 그리고 로컬 Ollama 로 하는 영상도 시간 나시면 올려주시면 좋겠어요~^^ 덕분에 langChain 의 l 도 모르던 제가 따라하게 되네요 좋은 영상 감사합니다.
안녕하세요 강사님 정해져있는 문서를 Rag로 가져오는것이 아닌 openAPI에서 필요한 정보를 호출해서 가져오도록 만들고 싶습니다. openAPI에 requests로 호출해서 데이터를 가져오는 부분까지 완성했습니다. 수업중에 llm에게 dictionary 지정해주는것처럼 openAPI에서 호출한 정보를 rag로 가져오도록 하는 방법을 가르쳐주세요 감사합니다
안녕하세요 선생님 수업 잘 듣고 열심히 만들고 있는데 한가지 해결이 안되는 부분이 있어 이렇게 글 남깁니다. 문서를 100개를 넣고, LLM이 대답할 때 인사규정에 따르면 혹은 인사규정을 참조하여 규정명을 나오게 하고 싶은데, 매칭이 잘안되거나 잘못된 규정명을 알려주곤 하는데 정확한 방법이 있을까요? 백터 DB에서 메타 데이터 지정하는 방식 이거나 document에 정의해 호출하는 방식 등을 사용하는데 .. 선생님도 이렇게 하실까요??
안녕하십니까 강의 잘 듣고있습니다.! from langchain_ollama import OllamaEmbeddings embeddings = OllamaEmbeddings(model="llama3.2") import os from pinecone import Pinecone from langchain_pinecone import PineconeVectorStore index_name = "tax-table-index" pinecone_api_key = os.environ.get("PINECONE_API_KEY") pc = Pinecone(api_key=pinecone_api_key) database = PineconeVectorStore.from_documents(document_list, embedding=embeddings, index_name=index_name) Embedding 후 PinecondVectorStore 저장 할떄 아래와 같은 예외가 발생합니다. ``` PineconeApiException: (400) Reason: Bad Request HTTP response headers: HTTPHeaderDict({'Date': 'Thu, 17 Apr 2025 02:53:26 GMT', 'Content-Type': 'application/json', 'Content-Length': '118', 'Connection': 'keep-alive', 'x-pinecone-request-latency-ms': '2664', 'x-pinecone-request-id': '9090329298438964680', 'x-envoy-upstream-service-time': '2', 'server': 'envoy'}) HTTP response body: {"code":11,"message":"Error, message length too large: found 4194738 bytes, the limit is: 4194304 bytes","details":[]} Output is truncated. View as a scrollable element or open in a text editor. ``` OllamaEmbeddings(model="llama3.2") 를 사용하고 있는데요. 해당 모델로 임베딩을 하면 Pinecone에서 허용하는 데이터를 초과하는 것 으로 보이는데요 이러한 경우 처리하는 방법이 있을까요? 아니면 모델을 변경해야하는 걸까요?
강의중에 들어가시는 langchain 홈페이지가 지금이랑 version이 다른것 같은데 현재 version 홈페이지에서는 강의 내용에 나오는 곳을 찾을 수가 없습니다. 혹시 version이 달라도 괜찮을까요? 예를 들어 Microsoft Word Document loaders를 찾고 싶습니다.
안녕하세요. 3.2 예제 실습중 아래와 같은 이슈를 해결하지 못하여 질문 드립니다. 사용자 환경운 github 에서 제고해준 code space 환경에서 테스트 중입니다. 오류 코드는.. from langchain_chroma import Chroma # 데이터를 처음 저장할 때 database = Chroma.from_documents(documents=document_list, embedding=embedding, collection_name='chroma-tax', persist_directory="./chroma") 위 코드 실행시 아래와 같은 오류가 발생합니다. AttributeError Traceback (most recent call last) Cell In[108], line 4 1 from langchain_chroma import Chroma 3 # 데이터를 처음 저장할 때 ----> 4 database = Chroma.from_documents(documents=document_list, embedding=embedding, collection_name= 'chroma-tax' , persist_directory= "./chroma" ) 6 # 이미 저장된 데이터를 사용할 때 7 #database = Chroma(collection_name='chroma-tax', persist_directory="./chroma", embedding_function=embedding) File /workspaces/faith79/.venv/lib/python3.12/site-packages/langchain_chroma/vectorstores.py:1239 , in Chroma.from_documents (cls, documents, embedding, ids, collection_name, persist_directory, client_settings, client, collection_metadata, kwargs) 1237 if ids is None: 1238 ids = [ doc.id if doc.id else str(uuid.uuid4()) for doc in documents] -> 1239 return cls.from_texts( 1240 texts=texts, 1241 embedding=embedding, 1242 metadatas=metadatas, 1243 ids=ids, 1244 collection_name=collection_name, 1245 persist_directory=persist_directory, 1246 client_settings=client_settings, 1247 client=client, 1248 collection_metadata=collection_metadata, 1249 kwargs, 1250 ) ... --> 327 client settings = chromadb.config.Settings(is_persistent=True) 328 client settings.persist_directory = persist_directory 329 else: AttributeError : module 'chromadb' has no attribute 'config' Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings... //////////////////////////////////////////////////////////////////////////////// chromadb 에서 config 속성 사용이 안된다는거 같아요. 그래서 langchain_chroma의 버전도 변경하고 chromadb 도 설치 후 버전도 이것저것 변경해 보았는데, 동일한 이슈만 지속적으로 나오고 있습니다 꼭 해결하고 싶어요~ 도와주세요.
3.4 벡터 데이터베이스로 pinecone 설정하는 강의를 듣고 있는데 최종 답변이 아래와 같이 나왔습니다. 처음에는 답변이 잘 나오다가 어느 순간부터 관련 정보가 없다고 나오는데 혹시 그 이유에 대해 알 수 있을까요? {'query': '연봉 5천만원인 거주자의 종합소득세는?', 'result': '죄송합니다. 제공된 문서에 구체적인 소득세율이나 계산 방법에 대한 정보가 없어서, 연봉 5천만원인 거주자의 종합소득세를 정확하게 계산할 수 없습니다.'}
안녕하세요 윈도우환경에서 pip install langchain-chroma 시 아래와 같은 오류가 발생하였습니다 chatGpt에 물어보니 Visual Studio Build Tools 2022 - "C++를 사용한 데스크탑 개발" 을 설치하면 된다고 해서 설치했는데도 같은 오류가 발생합니다 혹시 원인을 해결법을 있을까요?? (new_env) PS D:\00-git\LLMS\rag> pip install langchain-chroma Collecting langchain-chroma Using cached langchain_chroma-0.2.2-py3-none-any.whl.metadata (1.3 kB) Collecting langchain-core!=0.3.0,!=0.3.1,!=0.3.10,!=0.3.11,!=0.3.12,!=0.3.13,!=0.3.14,!=0.3.2,!=0.3.3,!=0.3.4,!=0.3.5,!=0.3.6,!=0.3.7,!=0.3.8,!=0.3.9,<0.4.0,>=0.2.43 (from langchain-chroma) Using cached langchain_core-0.3.45-py3-none-any.whl.metadata (5.9 kB) Collecting numpy<2.0.0,>=1.26.2 (from langchain-chroma) Using cached numpy-1.26.4.tar.gz (15.8 MB) Installing build dependencies ... done Getting requirements to build wheel ... done Installing backend dependencies ... done Preparing metadata (pyproject.toml) ... error error: subprocess-exited-with-error × Preparing metadata (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [12 lines of output] + D:\00-git\LLMS\rag\new_env\Scripts\python.exe C:\Users\son\AppData\Local\Temp\pip-install-w42pka3_\numpy_b7703e22acb64ae9bde7b4f773c9579f\vendored-meson\meson\ meson.py setup C:\Users\son\AppData\Local\Temp\pip-install-w42pka3_\numpy_b7703e22acb64ae9bde7b4f773c9579f C:\Users\son\AppData\Local\Temp\pip-install-w42pka3_\numpy_b7703e22acb64ae9bde7b4f773c9579f\.mesonpy-js85t3mm -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=C:\Users\son\AppData\Local\Temp\pip-install-w42pka3_\numpy_b7703e22acb64ae9bde7b4f773c9579f\.mesonpy-js85t3mm\meson-python-native-file.ini The Meson build system Version: 1.2.99 Source dir: C:\Users\son\AppData\Local\Temp\pip-install-w42pka3_\numpy_b7703e22acb64ae9bde7b4f773c9579f Build dir: C:\Users\son\AppData\Local\Temp\pip-install-w42pka3_\numpy_b7703e22acb64ae9bde7b4f773c9579f\.mesonpy-js85t3mm Build type: native build Project name: NumPy Project version: 1.26.4 ..\meson.build:1:0: ERROR: Compiler cl cannot compile programs. A full log can be found at C:\Users\son\AppData\Local\Temp\pip-install-w42pka3_\numpy_b7703e22acb64ae9bde7b4f773c9579f\.mesonpy-js85t3mm\meson-logs\meson-log.txt [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. [notice] A new release of pip is available: 24.3.1 -> 25.0.1 [notice] To update, run: python.exe -m pip install --upgrade pip error: metadata-generation-failed × Encountered error while generating package metadata. ╰─> See above for output. note: This is an issue with the package mentioned above, not pip. hint: See above for details. (new_env) PS D:\00-git\LLMS\rag>
query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?'의 쿼리는 다음과 같이 답변합니다. 제공된 문맥에는 연봉 5천만 원인 직장인의 소득세가 구체적으로 정의되어 있지 않습니다. 근로소득에 대한 기본세율이 적용된다고 언급되어 있지만, 기본세율의 구체적인 수치는 제공되지 않았습니다. 따라서 필요한 정보가 부족하여 소득세의 정확한 금액을 계산할 수 없습니다. query = '연봉 5천만원의 소득세를 구체적으로 계산하고, 세율 및 공제 내용을 포함해 설명해 주세요.'의 쿼리에서 연봉이 5천만 원일 경우, 소득세를 계산하기 위해서는 종합소득 과세표준에 적용되는 세율을 사용해야 합니다. 1,400만 원 초과 5,000만 원 이하 구간에 해당하므로 세율은 84만 원 + (1,400만 원을 초과하는 금액의 15%)입니다. 따라서 소득세는 84만 원 + (3,600만 원 * 0.15) = 624만 원이 됩니다. 쿼리 내용에 따라 다르게 답변하는데, 왜 그런건지 알수 있나요? 코드 첨부합니다. # 질문 설정 #query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?' query = '연봉 5천만원의 소득세를 구체적으로 계산하고, 세율 및 공제 내용을 포함해 설명해 주세요.' import pprint # LLM 설정 from langchain_openai import ChatOpenAI llm = ChatOpenAI(model='gpt-4o') from langchain import hub from langchain.chains import RetrievalQA prompt = hub.pull("rlm/rag-prompt") retriever = database.as _retriever() #pprint.pprint(retriever.invoke(query)) qa_chain = RetrievalQA.from_chain_type( llm, retriever= database.as _retriever(), chain_type_kwargs={"prompt": prompt} ) import pprint #pprint.pprint(retriever.invoke(query)) # LLM 실행 ai_message = qa_chain.invoke(query) # 딕셔너리 형태의 응답에서 "answer" 또는 "result" 키 값만 출력 if isinstance(ai_message, dict): answer = ai_message.get("answer") or ai_message.get("result") or "응답 없음" print(answer) else: print(ai_message)
import os # 기존 환경 변수 확인 print("OPENAI_API_KEY:", os.getenv("OPENAI_API_KEY")) print("UPSTAGE_API_KEY:", os.getenv("UPSTAGE_API_KEY")) # OpenAI API 키 삭제 (Upstage API만 사용하도록 설정) if "OPENAI_API_KEY" in os.environ: del os.environ["OPENAI_API_KEY"] # Upstage API 키 직접 설정 os.environ["UPSTAGE_API_KEY"] = "up_kh9mX7uA129qfCuzmcf6COX4HUabn" 처음에 OpenAI API 키랑 Upstage API 키 간의 충돌이 일어났구나 싶어, 위와 같이 코드를 작성한 후에 다시 크로마 DB에 임베딩을 시켜보는 데도 계속 똑같습니다 ㅠㅠ 심지어 API 키를 계속 새로 발급받아도 이래요 ㅠㅠ 어디가 문제일까요...?
안녕하세요 dictionary chain을 구성할때 궁금한 점이 있습니다. dictionary = ["사람을 나타내는 표현 -> 거주자"] 으로 수업중에 진행한 것을 봤습니다! 다만 다양한 단어 사전이 필요할 수 있을 것 같은데 구조를 어떻게 하면 좋을지 고민되어 여쭤봅니다. 1. 리스트 형태 dictionary = [ "사람 -> 거주자", "학생 -> 학습자", "교수 -> 강사", "회사원 -> 직장인" ] 2. 완전 비정형 텍스트 dictionary = """ 사람 -> 거주자, 학생 -> 학습자, 교수 -> 강사, 회사원 -> 직장인 """ 혹시 이럴때도 팁같은게 좀 있을까요??
3.4강을 보고 따라하고있습니다. 현재 test.ipynb에서 진행중이고 .env는 api key가 입력되어있습니다. 먼저 첫 셀을 실행하고 두 번째 셀로 연결을 하려는데 잘 되지 않네요. ㅠ 오류메세지는 다음과 같습니다. 파인콘 API키도 재발급 받아봤고 pc = Pinecone(api_key="pinecone_api_key") 이런식으로 직접 문자열로도 해봤는데 안되네요 ㅠㅠ 왜이런걸까요? 일단 API 키 인식을 못하길래 직접 이렇게 넣었는데도 안되네요; ㅠ 왜이런걸까요? 혹시 해결에 도움될 만한 추가 필요 자료가 있다면 이야기하시면 더 드리도록하겠습니다. ( 환경 pip 라던가.. ) 아래 공식 사이트에 가서 https://python.langchain.com/docs/integrations/vectorstores/pinecone/ 직접적인 환경변수를 넣으면 잘됩니다. 어째서일까요? 해결 : 커널을 재시작하니 잘됩니다. 모두들 기본에 충실하시길;;
3.2.1 LangChain과 Chroma를 활용한 RAG 구성 + Upstage Embeddings.ipynb 파일을 .py로 변환하여 실행시켰는데, 결과가 제대로 나오지 않습니다. 한번인가 정확하게 나왔던것 같습니다. 무슨 문제 인지 궁금합니다. -------------------------------- %runfile /home/sjhappy/downloads/source_code/LLM/inflearn-lim-application/3_2_ 2.py --wdir /home/sjhappy/anaconda3/envs/LLM_EN/lib/python3.9/site-packages/langsmith/client.py:253: LangSmithMissingAPIKeyWarning: API key must be provided when using hosted LangSmith API warnings.warn( {'query': '연봉 3천만원인 직장인의 소득세는 얼마인가요?', 'result': '질문에서 제공된 정보로는 정확한 소득세를 계산할 수 없습니다. 소득세는 근로소득 외에 다른 소득, 세액공제 및 감면액 등에 따라 달라질 수 있습니다. 따라서, 더 자세한 정보를 제공해주시면 소득세를 계산해드릴 수 있습니다.'} ------------------ # coding: utf-8 # # 1. 패키지 설치 # In[1]: # # 2. Knowledge Base 구성을 위한 데이터 생성 # # - [RecursiveCharacterTextSplitter]( https://python.langchain.com/v0.2/docs/how_to/recursive_text_splitter/)를 활용한 데이터 chunking # - split 된 데이터 chunk를 Large Language Model(LLM)에게 전달하면 토큰 절약 가능 # - 비용 감소와 답변 생성시간 감소의 효과 # - LangChain에서 다양한 [TextSplitter]( https://python.langchain.com/v0.2/docs/how_to/#text-splitters)들을 제공 # - chunk_size 는 split 된 chunk의 최대 크기 # - chunk_overlap 은 앞 뒤로 나뉘어진 chunk들이 얼마나 겹쳐도 되는지 지정 # In[1]: from langchain_community.document_loaders import Docx2txtLoader from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=1500, chunk_overlap=200, ) loader = Docx2txtLoader('./tax.docx') document_list = loader.load_and_split(text_splitter=text_splitter) # In[2]: from dotenv import load_dotenv from langchain_upstage import UpstageEmbeddings # 환경변수를 불러옴 load_dotenv() # OpenAI에서 제공하는 Embedding Model을 활용해서 chunk 를 vector화 embedding = UpstageEmbeddings(model="solar-embedding-1-large") # In[7]: from langchain_chroma import Chroma # 데이터를 처음 저장할 때 database = Chroma.from_documents(documents=document_list, embedding=embedding, collection_name='chroma-tax', persist_directory="./chroma") # 이미 저장된 데이터를 사용할 때 # database = Chroma(collection_name='chroma-tax', persist_directory="./chroma", embedding_function=embedding) # # 3. 답변 생성을 위한 Retrieval # # - Chroma 에 저장한 데이터를 유사도 검색( similarity_search() )를 활용해서 가져옴 # In[8]: query = '연봉 3천만원인 직장인의 소득세는 얼마인가요?' # k 값을 조절해서 얼마나 많은 데이터를 불러올지 결정 retrieved_docs = database.similarity_search(query, k=4) # In[9]: retrieved_docs # # 4. Augmentation을 위한 Prompt 활용 # # - Retrieval된 데이터는 LangChain에서 제공하는 프롬프트( "rlm/rag-prompt" ) 사용 # In[10]: from langchain_upstage import ChatUpstage llm = ChatUpstage() # In[11]: from langchain import hub prompt = hub.pull("rlm/rag-prompt") # # 5. 답변 생성 # # - [RetrievalQA]( https://docs.smith.langchain.com/old/cookbook/hub-examples/retrieval-qa-chain)를 통해 LLM에 전달 # - RetrievalQA 는 [create_retrieval_chain]( https://python.langchain.com/v0.2/docs/how_to/qa_sources/#using-create_retrieval_chain)으로 대체됨 # - 실제 ChatBot 구현 시 create_retrieval_chain 으로 변경하는 과정을 볼 수 있음 # In[12]: from langchain.chains import RetrievalQA qa_chain = RetrievalQA.from_chain_type( llm, retriever= database.as _retriever(), chain_type_kwargs={"prompt": prompt} ) # In[13]: ai_message = qa_chain({"query": query}) # In[14]: # 강의에서는 위처럼 진행하지만 업데이트된 LangChain 문법은 .invoke() 활용을 권장 ai_message = qa_chain.invoke({"query": query}) # In[15]: print(ai_message) # In[ ]:
안녕하세요 강사님. 🙂 질문 내용 3.3 강의를 듣던 중 chatGPT 말고 upstage로 구성하는 방법은 없을까? 하고 스스로 방법을 찾아봤습니다. https://github.com/openai/tiktoken/blob/main/tiktoken/model.py 현재 tiktoken에서 제공되는 model 중 upstage의 solar 모델이 없는 것 같습니다. upstage 로 RAG를 구성하는 방법도 배울 수 있을까요..?
안녕하세요. 지금 Chroma.from_documents(documents=document_list, embedding=embedding) 이 부분에서 에러가 나서 질문 드립니다. 개발 환경은 vscode에서 jupyter notebook 가상환경 만들어서 사용 중입니다. 사내에서 공부 중이라 drm으로 인해 txt 파일로 변경을 했고, ollama를 사용해서 embedding model을 생성했습니다. mxbai-embed-large 이 모델을 사용했고요. 일단 소요 시간이 너무 오래 걸립니다. 그리고 1시간이 넘어가고는 canceled future for execute_request message before replies were done 이 에러가 뜨더라고요. 그래서 python으로 작성을 했더니 2시간 정도 걸리니까 생성은 되더라고요. 이건 좀 아닌 거 같아서 질문 드립니다. 혹시 왜 이런지 아실까요?