■ RunnableBranch 클래스를 사용해 서브 체인으로 분기해 실행하는 방법을 보여준다.
※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다.
▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
from dotenv import load_dotenv from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnableBranch load_dotenv() topicPromptTemplate = PromptTemplate.from_template( """Given the user question below, classify it as either being about `langchain`, `openai`, or `other`. Do not respond with more than one word. <question> {question} </question> Classification : """ ) topicRunnableSequence = topicPromptTemplate | ChatOpenAI() | StrOutputParser() langchainPromptTemplate = PromptTemplate.from_template( """You are an expert in langchain. \ Always answer questions starting with "As Harrison Chase told me". \ Respond to the following questio n: Question : {question} Answer :""" ) langchainRunnableSequence = langchainPromptTemplate | ChatOpenAI() openaiPromptTemplate = PromptTemplate.from_template( """You are an expert in openai. \ Always answer questions starting with "As Dario Amodei told me". \ Respond to the following question : Question: {question} Answer :""" ) openaiRunnableSequence = openaiPromptTemplate | ChatOpenAI() generalPromptTemplate = PromptTemplate.from_template( """Respond to the following question : Question : {question} Answer :""" ) generalRunnableSequence = generalPromptTemplate | ChatOpenAI() runnableBranch = RunnableBranch( (lambda x : "openai" in x["topic"].lower(), openaiRunnableSequence ), (lambda x : "langchain" in x["topic"].lower(), langchainRunnableSequence), generalRunnableSequence, ) runnableSequence = {"topic" : topicRunnableSequence, "question" : lambda x : x["question"]} | runnableBranch | StrOutputParser() responseString1 = runnableSequence.invoke({"question" : "how do I use openai?"}) print(responseString1) print() """ As Dario Amodei told me, to use OpenAI, you can start by visiting their website and exploring the various tools and resources they offer, such as the API documentation, tutorials, and example code. You can also sign up for an API key to access their services and start experimenting with their models and algorithms. Additionally, joining their community forums and attending their events can help you stay connected and learn from other users. """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 anyio==4.4.0 async-timeout==4.0.3 attrs==23.2.0 certifi==2024.6.2 charset-normalizer==3.3.2 dataclasses-json==0.6.7 distro==1.9.0 exceptiongroup==1.2.1 frozenlist==1.4.1 greenlet==3.0.3 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.2.5 langchain-community==0.2.5 langchain-core==0.2.9 langchain-openai==0.1.9 langchain-text-splitters==0.2.1 langsmith==0.1.81 marshmallow==3.21.3 multidict==6.0.5 mypy-extensions==1.0.0 numpy==1.26.4 openai==1.35.3 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 python-dotenv==1.0.1 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 sniffio==1.3.1 SQLAlchemy==2.0.31 tenacity==8.4.1 tiktoken==0.7.0 tqdm==4.66.4 typing-inspect==0.9.0 typing_extensions==4.12.2 urllib3==2.2.2 yarl==1.9.4 |
※ pip install python-dotenv langchain langchain-community langchain-openai 명령을 실행했다.