### ChromaDB 설치 Source: https://github.com/teddynote/langchain-kr/blob/main/10-VectorStore/04-Chroma.ipynb ChromaDB 라이브러리를 설치하는 Python 코드입니다. `%pip install -qU chromadb` 명령어를 사용하여 설치를 진행합니다. ```python %pip install -qU chromadb ``` -------------------------------- ### Install and Upgrade huggingface_hub Source: https://github.com/teddynote/langchain-kr/blob/main/04-Model/06-HuggingFace-Endpoint.ipynb Python의 huggingface_hub 패키지를 설치하거나 최신 버전으로 업그레이드합니다. 이 패키지는 Hugging Face Hub API와 상호 작용하는 데 필요합니다. ```python %pip install --upgrade --quiet huggingface_hub ``` -------------------------------- ### Install Transformers Package Source: https://github.com/teddynote/langchain-kr/blob/main/04-Model/08-Huggingface-Pipelines.ipynb Hugging Face 모델을 사용하기 위해 필요한 'transformers' 패키지를 설치합니다. 이 패키지는 모델 로딩 및 추론에 필수적입니다. ```python %pip install --upgrade --quiet transformers --quiet ``` -------------------------------- ### Install LangChain and Sentence Transformers Source: https://github.com/teddynote/langchain-kr/blob/main/09-Embeddings/03-HuggingFaceHub.ipynb Installs or upgrades the langchain and sentence-transformers libraries, which are necessary for using Hugging Face embeddings. ```python %pip install --upgrade --quiet langchain sentence_transformers ``` -------------------------------- ### 메타데이터 기반 컬렉션 필터링 (source) Source: https://github.com/teddynote/langchain-kr/blob/main/10-VectorStore/04-Chroma.ipynb Chroma 데이터베이스에서 메타데이터의 'source'를 기준으로 컬렉션을 필터링하는 방법을 보여줍니다. `example_db.get` 메서드에 `where` 인자를 사용하여 필터링 조건을 지정합니다. ```Python # source 기준으로 필터링 example_db.get(where={"source": "./data/appendix-keywords.txt"}) ``` -------------------------------- ### PromptTemplate을 이용한 프롬프트 구성 Source: https://github.com/teddynote/langchain-kr/blob/main/04-Model/01-OpenAI-LLM.ipynb PromptTemplate을 사용하여 동적인 프롬프트 문자열을 생성하는 방법을 보여줍니다. 템플릿 문자열과 입력 변수를 정의하여 사용자의 입력을 기반으로 프롬프트를 구성합니다. ```python from langchain.prompts import PromptTemplate # 질문 템플릿 형식 정의 template = "{country}의 수도는 뭐야?" # 템플릿 완성 prompt = PromptTemplate.from_template(template=template) prompt ``` -------------------------------- ### Install Hugging Face Hub Library Source: https://github.com/teddynote/langchain-kr/blob/main/09-Embeddings/03-HuggingFaceHub.ipynb Installs the huggingface_hub library, which provides convenient access to models and datasets from Hugging Face. ```python # !pip install huggingface_hub ``` -------------------------------- ### Install langchain-google-genai and Pillow Source: https://github.com/teddynote/langchain-kr/blob/main/04-Model/05-Google-Generative-AI.ipynb Installs or upgrades the langchain-google-genai package and the Pillow library, which is often used for image processing with multimodal models. ```python %pip install --upgrade --quiet langchain-google-genai pillow ``` -------------------------------- ### Get HuggingFace Inference API Key Source: https://github.com/teddynote/langchain-kr/blob/main/09-Embeddings/03-HuggingFaceHub.ipynb Retrieves the HuggingFaceHub API token from environment variables. ```python import os # 사용자로부터 HuggingFace Inference API 키를 입력받습니다. inference_api_key = os.environ.get("HUGGINGFACEHUB_API_TOKEN") ``` -------------------------------- ### 프롬프트 생성: 숫자 10배 계산 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/05-Runnable.ipynb Langchain의 PromptTemplate을 사용하여 간단한 프롬프트를 생성합니다. 이 프롬프트는 입력된 숫자를 10배하여 반환하도록 설계되었습니다. ```python from langchain.prompts import PromptTemplate # 프롬프트를 생성합니다 prompt = PromptTemplate.from_template("{num} 의 10배는?") prompt ``` -------------------------------- ### Create PromptTemplate Source: https://github.com/teddynote/langchain-kr/blob/main/04-Model/06-HuggingFace-Endpoint.ipynb 질문과 답변 형식을 지정하는 템플릿 문자열을 사용하여 PromptTemplate 객체를 생성합니다. 이 템플릿은 질문을 받아 모델이 답변을 생성하도록 안내하는 역할을 합니다. ```python from langchain.prompts import PromptTemplate template = """Please answer the following questions concisely. QUESTION: {question} ANSWER: """ prompt = PromptTemplate.from_template(template) ``` -------------------------------- ### Install Langchain Community and SQLAlchemy Source: https://github.com/teddynote/langchain-kr/blob/main/05-Memory/09-Memory-using-SQLite.ipynb Langchain-community 및 SQLAlchemy 패키지를 설치합니다. OpenAI 관련 패키지도 함께 설치합니다. ```python %pip install -qU langchain-community SQLAlchemy langchain-openai ``` -------------------------------- ### 2개 변수 LLMChain 실행 (run) Source: https://github.com/teddynote/langchain-kr/blob/main/04-Model/01-OpenAI-LLM.ipynb 두 개의 변수를 받는 PromptTemplate과 연결된 LLMChain의 run() 메서드를 사용하여 질문에 답변하는 방법을 보여줍니다. 두 지역 간의 시차를 묻는 예제입니다. ```python # 연결된 체인(Chain)객체 생성llm_chain = LLMChain(prompt=prompt, llm=llm) # 체인 실행: run() print(llm_chain.run(area1="서울", area2="파리")) ``` -------------------------------- ### Install deeplake Source: https://github.com/teddynote/langchain-kr/blob/main/11-Retriever/05-ParentDocumentRetriever.ipynb deeplake 라이브러리를 설치합니다. 이 라이브러리는 데이터 로딩 및 관리에 사용될 수 있습니다. ```python %pip install -qU deeplake ``` -------------------------------- ### OpenAI API 키 설정 Source: https://github.com/teddynote/langchain-kr/blob/main/10-VectorStore/02-FAISS.ipynb OpenAI API 키를 환경 변수로 설정하여 Langchain 애플리케이션에서 사용할 수 있도록 합니다. 사용자 입력 또는 .env 파일을 통해 설정할 수 있습니다. ```python import os # 사용자로부터 OpenAI API 키를 입력받아 환경 변수로 설정합니다. os.environ["OPENAI_API_KEY"] = "OPENAI API KEY 입력" ``` ```python # API 키를 환경변수로 관리하기 위한 설정 파일 from dotenv import load_dotenv # API 키 정보 로드 load_dotenv() ``` -------------------------------- ### Langchain 설치 Source: https://github.com/teddynote/langchain-kr/blob/main/13-LangChain-Expression-Language/10-Binding.ipynb Langchain 및 관련 라이브러리를 설치하는 Python 코드입니다. `%pip install` 명령어를 사용하여 필요한 패키지를 설치합니다. ```python %pip install -qU langchain langchain-openai ``` -------------------------------- ### 2개 이상의 변수를 포함하는 PromptTemplate 구성 Source: https://github.com/teddynote/langchain-kr/blob/main/04-Model/01-OpenAI-LLM.ipynb PromptTemplate을 사용하여 두 개 이상의 변수를 포함하는 템플릿을 구성하는 방법을 보여줍니다. 이를 통해 더 복잡한 질문이나 지시를 생성할 수 있습니다. ```python # 질문 템플릿 형식 정의 template = "{area1} 와 {area2} 의 시차는 몇시간이야?" # 템플릿 완성 prompt = PromptTemplate.from_template(template) prompt ``` -------------------------------- ### API 키 환경 변수 로드 (dotenv) Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/01-OpenAI-APIKey.ipynb Python 프로젝트에서 `.env` 파일을 사용하여 API 키를 환경 변수로 로드하는 방법입니다. `python-dotenv` 라이브러리를 설치하고 `load_dotenv()` 함수를 호출하여 `.env` 파일의 변수들을 로드합니다. ```python # API KEY를 환경변수로 관리하기 위한 설정 파일 # 설치: pip install python-dotenv from dotenv import load_dotenv # API KEY 정보로드 load_dotenv() ``` -------------------------------- ### PromptTemplate을 이용한 프롬프트 생성 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/02-OpenAI-LLM.ipynb Langchain의 PromptTemplate을 사용하여 변수를 포함하는 동적인 프롬프트 템플릿을 생성하는 방법입니다. 템플릿 문자열과 input_variables를 정의하여 사용합니다. ```python from langchain.prompts import PromptTemplate # 질문 템플릿 형식 정의 template = "{country}의 수도는 뭐야?" # 템플릿 완성 prompt = PromptTemplate.from_template(template=template) prompt ``` -------------------------------- ### 환경 변수 설정: .env 파일 로드 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/05-Runnable.ipynb dotenv 라이브러리를 사용하여 .env 파일에서 환경 변수를 로드합니다. 이는 API 키와 같은 민감한 정보를 안전하게 관리하는 데 사용됩니다. ```python # .env 파일을 읽어서 환경변수로 설정 from dotenv import load_dotenv # 토큰 정보로드 load_dotenv() ``` -------------------------------- ### Creating a Document Compressor Pipeline Source: https://github.com/teddynote/langchain-kr/blob/main/12-RAG/05-Retrievers.ipynb Demonstrates how to chain multiple document compressors and transformers using DocumentCompressorPipeline. This example first splits documents into smaller chunks, then filters redundant documents, and finally filters based on relevance to the query. ```python from langchain.retrievers.document_compressors import DocumentCompressorPipeline from langchain.text_splitter import CharacterTextSplitter from langchain_community.document_transformers import EmbeddingsRedundantFilter splitter = CharacterTextSplitter(chunk_size=300, chunk_overlap=0, separator=". ") redundant_filter = EmbeddingsRedundantFilter(embeddings=embeddings) relevant_filter = EmbeddingsFilter(embeddings=embeddings, similarity_threshold=0.76) pipeline_compressor = DocumentCompressorPipeline( transformers=[splitter, redundant_filter, relevant_filter] ) ``` -------------------------------- ### Playwright 및 BeautifulSoup4 설치 Source: https://github.com/teddynote/langchain-kr/blob/main/07-DocumentLoader/01-Loaders/03-web-crawling.ipynb Playwright와 BeautifulSoup4 라이브러리를 최신 버전으로 업그레이드하고 Playwright 브라우저 엔진을 설치합니다. `-qU` 플래그는 조용히(quietly) 업그레이드하고, `playwright install`은 필요한 브라우저를 설치합니다. ```python %pip install -qU playwright beautifulsoup4 ! playwright install ``` -------------------------------- ### 2개 이상의 변수를 포함하는 PromptTemplate 생성 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/02-OpenAI-LLM.ipynb PromptTemplate에서 두 개 이상의 변수를 사용하여 더욱 복잡하고 동적인 프롬프트를 생성하는 방법을 보여줍니다. 템플릿 문자열에 여러 개의 중괄호 변수를 포함시킵니다. ```python # 질문 템플릿 형식 정의 template = "{area1} 와 {area2} 의 시차는 몇시간이야?" # 템플릿 완성 prompt = PromptTemplate.from_template(template) prompt ``` -------------------------------- ### 2개 변수 LLMChain apply()를 사용한 배치 처리 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/02-OpenAI-LLM.ipynb 두 개 이상의 변수를 사용하는 LLMChain에 apply 함수를 적용하여 여러 입력에 대한 결과를 배치로 처리하는 예제입니다. 각 입력은 모든 변수를 포함하는 딕셔너리여야 합니다. ```python input_list = [ {"area1": "파리", "area2": "뉴욕"}, {"area1": "서울", "area2": "하와이"}, {"area1": "켄버라", "area2": "베이징"}, ] # 반복문으로 결과 출력 result = llm_chain.apply(input_list) for res in result: print(res["text"].strip()) ``` -------------------------------- ### OpenAI 라이브러리 버전 확인 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/02-OpenAI-LLM.ipynb 설치된 OpenAI 라이브러리의 버전을 확인하는 간단한 Python 코드입니다. 특정 버전의 기능을 사용하거나 호환성 문제를 진단할 때 유용합니다. ```python import openai openai.__version__ ``` -------------------------------- ### LLMChain apply() 결과 반복 출력 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/02-OpenAI-LLM.ipynb apply() 함수로 처리된 결과 리스트를 반복문을 사용하여 각 항목의 'text' 값을 추출하고 출력하는 예제입니다. strip() 함수를 사용하여 불필요한 공백을 제거합니다. ```python # input_list 에 대한 결과 반환 result = llm_chain.apply(input_list) # 반복문으로 결과 출력 for res in result: print(res["text"].strip()) ``` -------------------------------- ### 환경 변수에서 API 키 로드 Source: https://github.com/teddynote/langchain-kr/blob/main/03-OutputParser/08-OutputFixingParser.ipynb dotenv 라이브러리를 사용하여 .env 파일에서 API 키를 로드합니다. 이는 민감한 API 키를 코드에 직접 포함하지 않고 안전하게 관리하기 위한 일반적인 방법입니다. ```python from dotenv import load_dotenv load_dotenv() ``` -------------------------------- ### LangChain Hub에 프롬프트 등록하기 Source: https://github.com/teddynote/langchain-kr/blob/main/02-Prompt/03-LangChain-Hub.ipynb 생성된 프롬프트를 LangChain Hub에 등록하는 Python 코드입니다. hub.push 함수를 사용하여 'teddynote/simple-summary-korean'이라는 이름으로 업로드합니다. ```python from langchain import hub # 프롬프트를 허브에 업로드합니다. hub.push("teddynote/simple-summary-korean", prompt) ``` -------------------------------- ### 캐시된 임베딩 설정 (Python) Source: https://github.com/teddynote/langchain-kr/blob/main/12-RAG/09-RAPTOR-Long-Context-RAG.ipynb OpenAI의 임베딩 모델을 사용하여 텍스트를 벡터로 변환하고, LocalFileStore를 통해 이 임베딩 결과를 캐싱합니다. 이는 반복적인 임베딩 계산을 줄여 성능을 향상시킵니다. ```Python from langchain_openai import OpenAIEmbeddings from langchain.embeddings import CacheBackedEmbeddings from langchain.storage import LocalFileStore store = LocalFileStore("./cache/") # embeddings 인스턴스를 생성합니다. embd = OpenAIEmbeddings(model="text-embedding-3-small", disallowed_special=()) cached_embeddings = CacheBackedEmbeddings.from_bytes_store( embd, store, namespace=embd.model ) ``` -------------------------------- ### 유사도 검색 (쿼리 기반) (Python) Source: https://github.com/teddynote/langchain-kr/blob/main/10-VectorStore/01-VectorStore.ipynb ChromaDB 벡터 저장소에서 특정 쿼리와 가장 유사한 문서를 찾는 Python 코드입니다. similarity_search 메서드를 사용합니다. ```python # 유사도 검색(쿼리) similar_docs = chroma_db.similarity_search("TF IDF 에 대하여 알려줘") print(similar_docs[0].page_content) ``` -------------------------------- ### LangChain Hub에서 최신 프롬프트 가져오기 Source: https://github.com/teddynote/langchain-kr/blob/main/02-Prompt/03-LangChain-Hub.ipynb LangChain Hub에서 'rlm/rag-prompt'의 가장 최신 버전을 가져오는 Python 코드입니다. LangChain 라이브러리의 hub 모듈을 사용합니다. ```python from langchain import hub # 가장 최신 버전의 프롬프트를 가져옵니다. prompt = hub.pull("rlm/rag-prompt", api_url="https://api.hub.langchain.com") ``` -------------------------------- ### RunnablePassthrough를 사용한 체인 실행 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/05-Runnable.ipynb RunnablePassthrough를 사용하여 입력값을 프롬프트와 LLM으로 전달하는 체인을 구성하고 실행합니다. 입력값 10을 사용하여 결과를 확인합니다. ```python runnable_chain = {"num": RunnablePassthrough()} | prompt | ChatOpenAI() # dict 값이 RunnablePassthrough() 로 변경되었습니다. runnable_chain.invoke(10) ``` -------------------------------- ### Docker Compose 환경 변수 설정 Source: https://github.com/teddynote/langchain-kr/blob/main/10-VectorStore/04-Chroma.ipynb ChromaDB Docker 컨테이너 실행 시 ALLOW_RESET 환경 변수를 TRUE로 설정하여 데이터베이스 초기화를 가능하게 합니다. 이는 docker-compose.yml 파일의 environment 섹션에서 설정됩니다. ```yaml command: uvicorn chromadb.app:app --reload --workers 1 --host 0.0.0.0 --port 8000 --log-config log_config.yml environment: - IS_PERSISTENT=TRUE - ALLOW_RESET=TRUE ports: - 8000:8000 ``` -------------------------------- ### OutputFixingParser를 사용한 잘못된 형식 파싱 Source: https://github.com/teddynote/langchain-kr/blob/main/03-OutputParser/08-OutputFixingParser.ipynb OutputFixingParser를 사용하여 이전에 파싱에 실패했던 잘못된 형식의 문자열을 파싱합니다. OutputFixingParser는 LLM을 호출하여 오류를 수정하고 올바른 형식의 데이터를 반환합니다. ```python # 잘못된 형식의 출력 # misformatted # OutputFixingParser 를 사용하여 잘못된 형식의 출력을 파싱 # actor = new_parser.parse(misformatted) # 파싱된 결과 # actor ``` -------------------------------- ### Hub에 등록된 프롬프트 가져오기 Source: https://github.com/teddynote/langchain-kr/blob/main/02-Prompt/03-LangChain-Hub.ipynb LangChain Hub에 성공적으로 등록된 'teddynote/simple-summary-korean' 프롬프트를 다시 가져오는 Python 코드입니다. ```python from langchain import hub # 프롬프트를 허브로부터 가져옵니다. pulled_prompt = hub.pull("teddynote/simple-summary-korean") ``` -------------------------------- ### 스트리밍으로 질문 답변 받기 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/02-OpenAI-LLM.ipynb 스트리밍 모드로 설정된 ChatOpenAI 객체를 사용하여 질문에 대한 답변을 실시간으로 출력하는 예제입니다. invoke 메서드를 호출하면 콜백 핸들러를 통해 출력이 콘솔에 표시됩니다. ```python # 질의내용 question = "대한민국에 대해서 300자 내외로 최대한 상세히 알려줘" # 스트리밍으로 답변 출력 response = llm.invoke(question) ``` -------------------------------- ### OpenAI API 키 확인 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/01-OpenAI-APIKey.ipynb 환경 변수에 설정된 OpenAI API 키를 출력하여 올바르게 로드되었는지 확인하는 Python 코드입니다. `os.environ`을 사용하여 'OPENAI_API_KEY' 환경 변수의 값을 가져옵니다. ```python import os print(f"[API KEY]\n{os.environ['OPENAI_API_KEY']}") ``` -------------------------------- ### 메타데이터 기반 컬렉션 필터링 (page_number) Source: https://github.com/teddynote/langchain-kr/blob/main/10-VectorStore/04-Chroma.ipynb Chroma 데이터베이스에서 메타데이터의 'page_number'를 기준으로 컬렉션을 필터링하는 방법을 보여줍니다. `example_db.get` 메서드에 `where` 인자를 사용하여 필터링 조건을 지정합니다. ```Python # page_number 기준으로 필터링 example_db.get(where={"page_number": 0}) ``` -------------------------------- ### LangChain Prompt Hub에서 프롬프트 가져오기 (Python) Source: https://github.com/teddynote/langchain-kr/blob/main/14-Agent/01-Agent.ipynb LangChain Prompt Hub에서 미리 정의된 에이전트 프롬프트를 가져오는 Python 코드입니다. 이 프롬프트는 에이전트의 동작 방식을 안내하는 데 사용됩니다. ```Python from langchain import hub # hub에서 prompt를 가져옵니다 - 이 부분을 수정할 수 있습니다! prompt = hub.pull("hwchase17/openai-functions-agent") ``` -------------------------------- ### ChatPromptTemplate을 사용하여 프롬프트 생성하기 Source: https://github.com/teddynote/langchain-kr/blob/main/02-Prompt/03-LangChain-Hub.ipynb ChatPromptTemplate을 사용하여 사용자 정의 프롬프트를 생성하는 Python 코드입니다. 요약 작업을 위한 템플릿을 정의합니다. ```python from langchain.prompts import ChatPromptTemplate prompt = ChatPromptTemplate.from_template( "주어진 내용을 바탕으로 다음 문장을 요약하세요. 답변은 반드시 한글로 작성하세요\n\nCONTEXT: {context}\n\nSUMMARY:" ) prompt ``` -------------------------------- ### LLMChain run() 메서드를 이용한 프롬프트 실행 Source: https://github.com/teddynote/langchain-kr/blob/main/04-Model/01-OpenAI-LLM.ipynb LLMChain의 run() 메서드를 사용하여 프롬프트 템플릿에 변수를 전달하고 LLM의 응답을 받는 방법을 보여줍니다. 단일 변수에 대한 질문에 답변하는 예제입니다. ```python # 체인 실행: run()llm_chain.run(country="일본") ``` -------------------------------- ### LLMChain apply()를 사용한 배치 처리 Source: https://github.com/teddynote/langchain-kr/blob/main/01-Basic/02-OpenAI-LLM.ipynb LLMChain의 apply 함수를 사용하여 여러 개의 입력에 대해 동시에 질문을 처리하고 결과를 리스트로 반환하는 방법입니다. 각 입력은 딕셔너리 형태로 제공됩니다. ```python input_list = [{"country": "호주"}, {"country": "중국"}, {"country": "네덜란드"}] response = llm_chain.apply(input_list) ```