■ ChatOpenAI 클래스의 bind 메소드를 사용해 저수준 제어시 공급자별 인수를 직접 바인딩하는 방법을 보여준다.
※ 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 84 |
from dotenv import load_dotenv from langchain_openai import ChatOpenAI load_dotenv() toolList = [ { "type" : "function", "function" : { "name" : "get_current_weather", "description" : "Get the current weather in a given location", "parameters" : { "type" : "object", "properties" : { "location" : { "type" : "string", "description" : "The city and state, e.g. San Francisco, CA", }, "unit" : {"type" : "string", "enum" : ["celsius", "fahrenheit"]} }, "required" : ["location"] } } } ] chatOpenAI = ChatOpenAI(model = "gpt-3.5-turbo-1106") runnableBinding = chatOpenAI.bind(tools = toolList) responseAIMessage = runnableBinding.invoke("What's the weather in SF, NYC and LA?") print(responseAIMessage) """ content='' additional_kwargs={ 'tool_calls' : [ { 'id' : 'call_quR1k7QIwMdlEUYUxmhqJqXT', 'function' : {'arguments' : '{"location" : "San Francisco, CA"}', 'name' : 'get_current_weather'}, 'type' : 'function' }, { 'id' : 'call_XNjsepezW6wo8E6Z3to9u4O6', 'function' : {'arguments' : '{"location" : "New York, NY"}', 'name' : 'get_current_weather'}, 'type' : 'function' }, { 'id' : 'call_CbhbaujqULMgtEQQz1WM80Ce', 'function' : {'arguments' : '{"location" : "Los Angeles, CA"}', 'name' : 'get_current_weather'}, 'type' : 'function' } ] } response_metadata={ 'token_usage' : {'completion_tokens' : 69, 'prompt_tokens' : 85, 'total_tokens' : 154}, 'model_name' : 'gpt-3.5-turbo-1106', 'system_fingerprint' : 'fp_3d37c73133', 'finish_reason' : 'tool_calls', 'logprobs' : None } id = 'run-127df0df-7591-44cc-b3ac-03d96d322045-0' tool_calls = [ { 'name' : 'get_current_weather', 'args' : {'location' : 'San Francisco, CA'}, 'id' : 'call_quR1k7QIwMdlEUYUxmhqJqXT' }, { 'name' : 'get_current_weather', 'args' : {'location' : 'New York, NY'}, 'id' : 'call_XNjsepezW6wo8E6Z3to9u4O6' }, { 'name' : 'get_current_weather', 'args' : {'location' : 'Los Angeles, CA'}, 'id' : 'call_CbhbaujqULMgtEQQz1WM80Ce' } ] usage_metadata = {'input_tokens' : 85, 'output_tokens' : 69, 'total_tokens' : 154} """ |
▶ 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 |
annotated-types==0.7.0 anyio==4.4.0 certifi==2024.6.2 charset-normalizer==3.3.2 distro==1.9.0 exceptiongroup==1.2.1 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.9 langchain-openai==0.1.8 langsmith==0.1.81 openai==1.35.2 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 tenacity==8.4.1 tiktoken==0.7.0 tqdm==4.66.4 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install python-dotenv langchain-openai 명령을 실행했다.