[PYTHON/LANGCHAIN] AgentExecutor 클래스 : 생성자에서 trim_intermediate_steps 인자를 사용해 장기 실행 에이전트의 중간 단계 제거하기
■ AgentExecutor 클래스의 생성자에서 trim_intermediate_steps 인자를 사용해 장기 실행 에이전트의 중간 단계를 제거하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에
■ AgentExecutor 클래스의 생성자에서 trim_intermediate_steps 인자를 사용해 장기 실행 에이전트의 중간 단계를 제거하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에
■ AgentExecutor 클래스의 생성자에서 early_stopping_method/max_iterations 인자를 사용해 반복 제한/시간 제한 중단 문자열을 반환하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에
■ AgentExecutor 클래스의 생성자에서 max_execution_time 인자를 사용해 최대 실행 시간을 설정하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶
■ AgentExecutor 클래스의 생성자에서 max_iterations 인자를 사용해 사용자 지정 반복 횟수 초과 실행시 중단하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env
■ AgentExecutor 클래스의 생성자에서 return_intermediate_steps 인자를 사용해 중단 단계를 반환하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ AgentExecutor 클래스의 stream 메소드를 사용해 질의 응답하는 방법을 보여준다. ※ 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 |
from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_core.tools import tool from langchain_core.prompts import ChatPromptTemplate from langchain.agents import create_tool_calling_agent from langchain.agents import AgentExecutor load_dotenv() chatOpenAI = ChatOpenAI(model = "gpt-4o") chatPromptTemplate = ChatPromptTemplate.from_messages( [ ("system" , "You are a helpful assistant."), ("human" , "{input}" ), ("placeholder", "{agent_scratchpad}" ) ] ) @tool def magicFunction(input : int) -> int: """Applies a magic function to an input.""" return input + 2 toolList = [magicFunction] runnableSequence = create_tool_calling_agent(chatOpenAI, toolList, prompt = chatPromptTemplate) agentExecutor = AgentExecutor(agent = runnableSequence, tools = toolList) query = "what is the value of magic_function(3)?" for addableDict in agentExecutor.stream({"input" : query}): print(addableDict) print("-" * 100) """ {'actions': [ToolAgentAction(tool='magic_function', tool_input={'input': 3}, log="\nInvoking: `magic_function` with `{'input': 3}`\n\n\n", message_log=[AIMessageChunk(content='', additional_kwargs={'tool_calls': [{'index': 0, 'id': 'call_7iH5SstP0NB75GGRzulZZ53J', 'function': {'arguments': '{"input":3}', 'name': 'magic_function'}, 'type': 'function'}]}, response_metadata={'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_6b68a8204b'}, id='run-15ad5b62-46c6-411d-b7f6-fcee0f04d6cd', tool_calls=[{'name': 'magic_function', 'args': {'input': 3}, 'id': 'call_7iH5SstP0NB75GGRzulZZ53J', 'type': 'tool_call'}], tool_call_chunks=[{'name': 'magic_function', 'args': '{"input":3}', 'id': 'call_7iH5SstP0NB75GGRzulZZ53J', 'index': 0, 'type': 'tool_call_chunk'}])], tool_call_id='call_7iH5SstP0NB75GGRzulZZ53J')], 'messages': [AIMessageChunk(content='', additional_kwargs={'tool_calls': [{'index': 0, 'id': 'call_7iH5SstP0NB75GGRzulZZ53J', 'function': {'arguments': '{"input":3}', 'name': 'magic_function'}, 'type': 'function'}]}, response_metadata={'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_6b68a8204b'}, id='run-15ad5b62-46c6-411d-b7f6-fcee0f04d6cd', tool_calls=[{'name': 'magic_function', 'args': {'input': 3}, 'id': 'call_7iH5SstP0NB75GGRzulZZ53J', 'type': 'tool_call'}], tool_call_chunks=[{'name': 'magic_function', 'args': '{"input":3}', 'id': 'call_7iH5SstP0NB75GGRzulZZ53J', 'index': 0, 'type': 'tool_call_chunk'}])]} {'steps': [AgentStep(action=ToolAgentAction(tool='magic_function', tool_input={'input': 3}, log="\nInvoking: `magic_function` with `{'input': 3}`\n\n\n", message_log=[AIMessageChunk(content='', additional_kwargs={'tool_calls': [{'index': 0, 'id': 'call_7iH5SstP0NB75GGRzulZZ53J', 'function': {'arguments': '{"input":3}', 'name': 'magic_function'}, 'type': 'function'}]}, response_metadata={'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_6b68a8204b'}, id='run-15ad5b62-46c6-411d-b7f6-fcee0f04d6cd', tool_calls=[{'name': 'magic_function', 'args': {'input': 3}, 'id': 'call_7iH5SstP0NB75GGRzulZZ53J', 'type': 'tool_call'}], tool_call_chunks=[{'name': 'magic_function', 'args': '{"input":3}', 'id': 'call_7iH5SstP0NB75GGRzulZZ53J', 'index': 0, 'type': 'tool_call_chunk'}])], tool_call_id='call_7iH5SstP0NB75GGRzulZZ53J'), observation=5)], 'messages': [FunctionMessage(content='5', additional_kwargs={}, response_metadata={}, name='magic_function')]} {'output': 'The value of `magic_function(3)` is 5.', 'messages': [AIMessage(content='The value of `magic_function(3)` is 5.', additional_kwargs={}, response_metadata={})]} (env) king@cosmos:~/testproject$ python main.py <class 'langchain_core.runnables.utils.AddableDict'> (env) king@cosmos:~/testproject$ python main.py {'actions': [ToolAgentAction(tool='magicFunction', tool_input={'input': 3}, log="\nInvoking: `magicFunction` with `{'input': 3}`\n\n\n", message_log=[AIMessageChunk(content='', additional_kwargs={'tool_calls': [{'index': 0, 'id': 'call_Qv8SUJFIEtg02siem3SE7Nxj', 'function': {'arguments': '{"input":3}', 'name': 'magicFunction'}, 'type': 'function'}]}, response_metadata={'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_6b68a8204b'}, id='run-e8b2e03f-f3a8-4b68-90ab-5dcfbb35659e', tool_calls=[{'name': 'magicFunction', 'args': {'input': 3}, 'id': 'call_Qv8SUJFIEtg02siem3SE7Nxj', 'type': 'tool_call'}], tool_call_chunks=[{'name': 'magicFunction', 'args': '{"input":3}', 'id': 'call_Qv8SUJFIEtg02siem3SE7Nxj', 'index': 0, 'type': 'tool_call_chunk'}])], tool_call_id='call_Qv8SUJFIEtg02siem3SE7Nxj')], 'messages': [AIMessageChunk(content='', additional_kwargs={'tool_calls': [{'index': 0, 'id': 'call_Qv8SUJFIEtg02siem3SE7Nxj', 'function': {'arguments': '{"input":3}', 'name': 'magicFunction'}, 'type': 'function'}]}, response_metadata={'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_6b68a8204b'}, id='run-e8b2e03f-f3a8-4b68-90ab-5dcfbb35659e', tool_calls=[{'name': 'magicFunction', 'args': {'input': 3}, 'id': 'call_Qv8SUJFIEtg02siem3SE7Nxj', 'type': 'tool_call'}], tool_call_chunks=[{'name': 'magicFunction', 'args': '{"input":3}', 'id': 'call_Qv8SUJFIEtg02siem3SE7Nxj', 'index': 0, 'type': 'tool_call_chunk'}])]} |
{'steps':
■ RunnableWithMessageHistory 클래스의 invoke 메소드를 사용해 채팅하는 방법을 보여준다. ※ 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 |
from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_core.tools import tool from langchain_core.prompts import ChatPromptTemplate from langchain.agents import create_tool_calling_agent from langchain.agents import AgentExecutor from langchain_core.chat_history import InMemoryChatMessageHistory from langchain_core.runnables.history import RunnableWithMessageHistory load_dotenv() chatOpenAI = ChatOpenAI(model = "gpt-4o") @tool def magicFunction(input : int) -> int: """Applies a magic function to an input.""" return input + 2 toolList = [magicFunction] chatPromptTemplate = ChatPromptTemplate.from_messages( [ ("system" , "You are a helpful assistant."), ("placeholder", "{chat_history}" ), ("human" , "{input}" ), ("placeholder", "{agent_scratchpad}" ) ] ) runnableSequence = create_tool_calling_agent(chatOpenAI, toolList, chatPromptTemplate) agentExecutor = AgentExecutor(agent = runnableSequence, tools = toolList) inMemoryChatMessageHistory = InMemoryChatMessageHistory(session_id = "test-session") runnableWithMessageHistory = RunnableWithMessageHistory( agentExecutor, lambda session_id : inMemoryChatMessageHistory, input_messages_key = "input", history_messages_key = "chat_history" ) configurationDictionary = {"configurable" : {"session_id" : "test-session"}} responseDictionary1 = runnableWithMessageHistory.invoke({"input" : "Hi, I'm polly! What's the output of magic_function of 3?"}, configurationDictionary) outputString1 = responseDictionary1["output"] print(outputString1) print("-" * 100) responseDictionary2 = runnableWithMessageHistory.invoke({"input" : "Remember my name?"}, configurationDictionary) outputString2 = responseDictionary2["output"] print(outputString2) print("-" * 100) responseDictionary3 = runnableWithMessageHistory.invoke({"input": "what was that output again?"}, configurationDictionary) outputString3 = responseDictionary3["output"] print(outputString3) """ Hello Polly! The output of the magic function for the input 3 is 5. |
Yes, you
■ RunnableWithMessageHistory 클래스의 생성자에서 input_messages_key/history_messages_key 인자를 사용해 RunnableWithMessageHistory 객체를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ RunnableWithMessageHistory 클래스의 invoke 메소드를 사용해 채팅하는 방법을 보여준다. ※ 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 72 73 74 75 76 77 78 79 80 81 82 83 |
from dotenv import load_dotenv from langchain_community.tools.tavily_search import TavilySearchResults from langchain_community.document_loaders import WebBaseLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import FAISS from langchain.tools.retriever import create_retriever_tool from langchain_openai import ChatOpenAI from langchain import hub from langchain.agents import create_tool_calling_agent from langchain.agents import AgentExecutor from langchain_core.chat_history import BaseChatMessageHistory from langchain_community.chat_message_histories import ChatMessageHistory from langchain_core.runnables.history import RunnableWithMessageHistory load_dotenv() chatOpenAI = ChatOpenAI(model = "gpt-4o") tavilySearchResults = TavilySearchResults(max_results = 2) webBaseLoader = WebBaseLoader("https://docs.smith.langchain.com/overview") documentList = webBaseLoader.load() recursiveCharacterTextSplitter = RecursiveCharacterTextSplitter(chunk_size = 1000, chunk_overlap = 200) splitDocumentList = recursiveCharacterTextSplitter.split_documents(documentList) openAIEmbeddings = OpenAIEmbeddings() faiss = FAISS.from_documents(splitDocumentList, openAIEmbeddings) vectorStoreRetriever = faiss.as_retriever() vectorStoreRetrieverTool = create_retriever_tool( vectorStoreRetriever, "langsmith_search", "Search for information about LangSmith. For any questions about LangSmith, you must use this tool!", ) toolList = [tavilySearchResults, vectorStoreRetrieverTool] chatPromptTemplate = hub.pull("hwchase17/openai-functions-agent") runnableSequence = create_tool_calling_agent(chatOpenAI, toolList, chatPromptTemplate) agentExecutor = AgentExecutor(agent = runnableSequence, tools = toolList) sessionIDDictionary = {} def getChatMessageHistory(sessionID : str) -> BaseChatMessageHistory: if sessionID not in sessionIDDictionary: sessionIDDictionary[sessionID] = ChatMessageHistory() return sessionIDDictionary[sessionID] runnableWithMessageHistory = RunnableWithMessageHistory( agentExecutor, getChatMessageHistory, input_messages_key = "input", history_messages_key = "chat_history", ) responseDictionary1 = runnableWithMessageHistory.invoke( {"input" : "hi! I'm bob"}, config = {"configurable" : {"session_id" : "<foo>"}} ) print(responseDictionary1) print("-" * 100) responseDictionary2 = runnableWithMessageHistory.invoke( {"input" : "what's my name?"}, config = {"configurable" : {"session_id" : "<foo>"}} ) print(responseDictionary2) print("-" * 100) """ {'input': "hi! I'm bob", 'chat_history': [], 'output': 'Hello Bob! How can I assist you today?'} |
{'input': "what's
■ RunnableWithMessageHistory 클래스의 생성자에서 input_messages_key/history_messages_key 인자를 사용해 RunnableWithMessageHistory 객체를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ AgentExecutor 클래스의 invoke 메소드 사용시 채팅 히스토리를 설정하는 방법을 보여준다. ※ 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 72 |
from dotenv import load_dotenv from langchain_community.tools.tavily_search import TavilySearchResults from langchain_community.document_loaders import WebBaseLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import FAISS from langchain.tools.retriever import create_retriever_tool from langchain_openai import ChatOpenAI from langchain import hub from langchain.agents import create_tool_calling_agent from langchain.agents import AgentExecutor from langchain_core.messages import HumanMessage from langchain_core.messages import AIMessage load_dotenv() chatOpenAI = ChatOpenAI(model = "gpt-4o") tavilySearchResults = TavilySearchResults(max_results = 2) webBaseLoader = WebBaseLoader("https://docs.smith.langchain.com/overview") documentList = webBaseLoader.load() recursiveCharacterTextSplitter = RecursiveCharacterTextSplitter(chunk_size = 1000, chunk_overlap = 200) splitDocumentList = recursiveCharacterTextSplitter.split_documents(documentList) openAIEmbeddings = OpenAIEmbeddings() faiss = FAISS.from_documents(splitDocumentList, openAIEmbeddings) vectorStoreRetriever = faiss.as_retriever() vectorStoreRetrieverTool = create_retriever_tool( vectorStoreRetriever, "langsmith_search", "Search for information about LangSmith. For any questions about LangSmith, you must use this tool!", ) toolList = [tavilySearchResults, vectorStoreRetrieverTool] chatPromptTemplate = hub.pull("hwchase17/openai-functions-agent") runnableSequence = create_tool_calling_agent(chatOpenAI, toolList, chatPromptTemplate) agentExecutor = AgentExecutor(agent = runnableSequence, tools = toolList) responseDictionary = agentExecutor.invoke( { "chat_history" : [ HumanMessage(content = "hi! my name is bob"), AIMessage(content = "Hello Bob! How can I assist you today?") ], "input" : "what's my name?" } ) print(responseDictionary) """ { 'chat_history' : [ HumanMessage(content = 'hi! my name is bob', additional_kwargs = {}, response_metadata = {}), AIMessage(content = 'Hello Bob! How can I assist you today?', additional_kwargs = {}, response_metadata = {}) ], 'input' : "what's my name?", 'output' : 'Your name is Bob.' } """ |
■ AgentExecutor 클래스에서 OPENAI 모델과 TAVILY 도구를 사용해 질의 응답하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ AgentExecutor 클래스의 생성자에서 agent/tools 인자를 사용해 AgentExecutor 객체를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ create_tool_calling_agent 함수를 사용해 모델, 도구 및 프롬프트 템플리트를 결합한 RunnableSequence 객체를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에
■ pull 함수를 사용해 랭체인 허브에서 OPEN-AI 함수 관련 ChatPromptTemplate 객체를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 |
from langchain import hub chatPromptTemplate = hub.pull("hwchase17/openai-functions-agent") |
▶ 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 |
aiohappyeyeballs==2.4.3 aiohttp==3.10.9 aiosignal==1.3.1 annotated-types==0.7.0 anyio==4.6.0 async-timeout==4.0.3 attrs==24.2.0 certifi==2024.8.30 charset-normalizer==3.4.0 exceptiongroup==1.2.2 frozenlist==1.4.1 greenlet==3.1.1 h11==0.14.0 httpcore==1.0.6 httpx==0.27.2 idna==3.10 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.3.3 langchain-core==0.3.10 langchain-text-splitters==0.3.0 langsmith==0.1.132 multidict==6.1.0 numpy==1.26.4 orjson==3.10.7 packaging==24.1 propcache==0.2.0 pydantic==2.9.2 pydantic_core==2.23.4 PyYAML==6.0.2 requests==2.32.3 requests-toolbelt==1.0.0 sniffio==1.3.1 SQLAlchemy==2.0.35 tenacity==8.5.0 typing_extensions==4.12.2 urllib3==2.2.3 yarl==1.14.0 |
※ pip
■ ChatPromptTemplate 클래스의 from_messages 정적 메소드를 사용해 멀티모달 프롬프트를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ ChatPromptTemplate 클래스의 from_messages 정적 메소드를 사용해 멀티모달 프롬프트를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ ChatOpenAI 클래스에서 FewShotPromptTemplate 객체를 사용해 채팅하는 방법을 보여준다. ※ 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 |
from dotenv import load_dotenv from langchain_core.prompts import PromptTemplate from langchain_core.prompts.few_shot import FewShotPromptTemplate from langchain_openai import ChatOpenAI load_dotenv() exampleList = [ { "question" : "아이유로 삼행시 만들어주세요.", "answer" : """ 아 : 아이유는 이 : 이런 강의를 들을 이 유 : 유가 없다. """ }, { "question" : "김민수로 삼행시를 만들어주세요.", "answer" : """ 김 : 김치는 맛있다. 민 : 민달팽이도 좋아하는 김치! 수 : 수억을 줘도 김치는 내꺼! """ } ] examplePromptTemplate = PromptTemplate(input_variables = ["quesiton", "answer"], template = "Question : {question}\n{answer}") fewShotPromptTemplate = FewShotPromptTemplate( examples = exampleList, example_prompt = examplePromptTemplate, suffix = "Question : {input}", input_variables = ["input"] ) chatOpenAI = ChatOpenAI(model_name = "gpt-4o-mini") runnableSequence = fewShotPromptTemplate | chatOpenAI responseAIMessage = runnableSequence.invoke({"input" : "홍길동으로 삼행시를 만들어주세요."}) print(responseAIMessage.content) |
▶ requirements.txt
■ FewShotPromptTemplate 클래스의 생성자에서 examples/example_prompt/suffix/input_variables 인자를 사용해 FewShotPromptTemplate 객체를 만드는 방법을 보여준다. ▶ 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 |
from langchain_core.prompts import PromptTemplate from langchain_core.prompts.few_shot import FewShotPromptTemplate exampleList = [ { "question" : "아이유로 삼행시 만들어주세요.", "answer" : """ 아 : 아이유는 이 : 이런 강의를 들을 이 유 : 유가 없다. """ }, { "question" : "김민수로 삼행시를 만들어주세요.", "answer" : """ 김 : 김치는 맛있다. 민 : 민달팽이도 좋아하는 김치! 수 : 수억을 줘도 김치는 내꺼! """ } ] examplePromptTemplate = PromptTemplate(input_variables = ["quesiton", "answer"], template = "Question : {question}\n{answer}") fewShotPromptTemplate = FewShotPromptTemplate( examples = exampleList, example_prompt = examplePromptTemplate, suffix = "Question : {input}", input_variables = ["input"] ) |
▶ 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 |
aiohappyeyeballs==2.4.0 aiohttp==3.10.5 aiosignal==1.3.1 annotated-types==0.7.0 anyio==4.4.0 attrs==24.2.0 certifi==2024.8.30 charset-normalizer==3.3.2 frozenlist==1.4.1 greenlet==3.1.0 h11==0.14.0 httpcore==1.0.5 httpx==0.27.2 idna==3.8 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.2.16 langchain-core==0.2.39 langchain-text-splitters==0.2.4 langsmith==0.1.117 multidict==6.1.0 numpy==1.26.4 orjson==3.10.7 packaging==24.1 pydantic==2.9.1 pydantic_core==2.23.3 PyYAML==6.0.2 requests==2.32.3 sniffio==1.3.1 SQLAlchemy==2.0.34 tenacity==8.5.0 typing_extensions==4.12.2 urllib3==2.2.2 yarl==1.11.1 |
※ pip install langchain
■ ChatPromptTemplate 클래스의 from_messages 정적 메소드에서 SystemMessagePromptTemplate/HumanMessagePromptTemplate 객체 리스를 사용해 ChatPromptTemplate 객체를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에
■ HumanMessagePromptTemplate 클래스의 from_template 정적 메소드를 사용해 HumanMessagePromptTemplate 객체를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 |
from langchain_core.prompts import HumanMessagePromptTemplate humanTemplateString = "{재료}" humanMessagePromptTemplate = HumanMessagePromptTemplate.from_template(humanTemplateString) |
▶ 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 |
aiohappyeyeballs==2.4.0 aiohttp==3.10.5 aiosignal==1.3.1 annotated-types==0.7.0 anyio==4.4.0 attrs==24.2.0 certifi==2024.8.30 charset-normalizer==3.3.2 frozenlist==1.4.1 greenlet==3.1.0 h11==0.14.0 httpcore==1.0.5 httpx==0.27.2 idna==3.8 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.2.16 langchain-core==0.2.39 langchain-text-splitters==0.2.4 langsmith==0.1.117 multidict==6.1.0 numpy==1.26.4 orjson==3.10.7 packaging==24.1 pydantic==2.9.1 pydantic_core==2.23.3 PyYAML==6.0.2 requests==2.32.3 sniffio==1.3.1 SQLAlchemy==2.0.34 tenacity==8.5.0 typing_extensions==4.12.2 urllib3==2.2.2 yarl==1.11.1 |
※ pip install langchain
■ SystemMessagePromptTemplate 클래스의 from_template 정적 메소드를 사용해 SystemMessagePromptTemplate 객체를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from langchain_core.prompts import SystemMessagePromptTemplate systemTemplateString = """ 당신은 요리사입니다. 제가 가진 재료들을 갖고 만들 수 있는 요리를 추천하고, 그 요리의 레시피를 추천해주시기 바랍니다. 제가 가진 재료는 아래와 같습니다. <재료> {재료} """ systemMessagePromptTemplate = SystemMessagePromptTemplate.from_template(systemTemplateString) |
▶ 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 |
aiohappyeyeballs==2.4.0 aiohttp==3.10.5 aiosignal==1.3.1 annotated-types==0.7.0 anyio==4.4.0 attrs==24.2.0 certifi==2024.8.30 charset-normalizer==3.3.2 frozenlist==1.4.1 greenlet==3.1.0 h11==0.14.0 httpcore==1.0.5 httpx==0.27.2 idna==3.8 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.2.16 langchain-core==0.2.39 langchain-text-splitters==0.2.4 langsmith==0.1.117 multidict==6.1.0 numpy==1.26.4 orjson==3.10.7 packaging==24.1 pydantic==2.9.1 pydantic_core==2.23.3 PyYAML==6.0.2 requests==2.32.3 sniffio==1.3.1 SQLAlchemy==2.0.34 tenacity==8.5.0 typing_extensions==4.12.2 urllib3==2.2.2 yarl==1.11.1 |
※ pip install langchain
■ PromptTemplate 클래스의 생성자에서 input_variables/template 인자를 사용해 PromptTemplate 객체를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ ChatPromptTemplate 클래스의 format_prompt 메소드를 사용해 ChatPromptValue 객체를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 |
from langchain_core.prompts import ChatPromptTemplate chatPromptTemplate = ChatPromptTemplate.from_template("tell me a joke about {subject}") chatPromptValue = chatPromptTemplate.format_prompt(subject = "soccer") humanMessage = chatPromptValue.messages[0] print(humanMessage.content) |
▶ 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 |
aiohappyeyeballs==2.4.0 aiohttp==3.10.5 aiosignal==1.3.1 annotated-types==0.7.0 anyio==4.4.0 attrs==24.2.0 certifi==2024.8.30 charset-normalizer==3.3.2 frozenlist==1.4.1 greenlet==3.1.0 h11==0.14.0 httpcore==1.0.5 httpx==0.27.2 idna==3.8 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.2.16 langchain-core==0.2.39 langchain-text-splitters==0.2.4 langsmith==0.1.117 multidict==6.1.0 numpy==1.26.4 orjson==3.10.7 packaging==24.1 pydantic==2.9.1 pydantic_core==2.23.3 PyYAML==6.0.2 requests==2.32.3 sniffio==1.3.1 SQLAlchemy==2.0.34 tenacity==8.5.0 typing_extensions==4.12.2 urllib3==2.2.2 yarl==1.11.1 |
※ pip install langchain 명령을
■ ChatPromptTemplate 클래스의 from_template 정적 메소드를 사용해 ChatPromptTemplate 객체를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 |
from langchain_core.prompts import ChatPromptTemplate chatPromptTemplate = ChatPromptTemplate.from_template("tell me a joke about {subject}") |
▶ 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 |
aiohappyeyeballs==2.4.0 aiohttp==3.10.5 aiosignal==1.3.1 annotated-types==0.7.0 anyio==4.4.0 attrs==24.2.0 certifi==2024.8.30 charset-normalizer==3.3.2 frozenlist==1.4.1 greenlet==3.1.0 h11==0.14.0 httpcore==1.0.5 httpx==0.27.2 idna==3.8 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.2.16 langchain-core==0.2.39 langchain-text-splitters==0.2.4 langsmith==0.1.117 multidict==6.1.0 numpy==1.26.4 orjson==3.10.7 packaging==24.1 pydantic==2.9.1 pydantic_core==2.23.3 PyYAML==6.0.2 requests==2.32.3 sniffio==1.3.1 SQLAlchemy==2.0.34 tenacity==8.5.0 typing_extensions==4.12.2 urllib3==2.2.2 yarl==1.11.1 |
※ pip install langchain