{"id":11230,"date":"2025-05-25T10:39:21","date_gmt":"2025-05-25T01:39:21","guid":{"rendered":"https:\/\/www.stechstar.com\/user\/wordpress\/?p=11230"},"modified":"2026-08-20T03:36:52","modified_gmt":"2026-08-19T18:36:52","slug":"11230-2","status":"publish","type":"post","link":"https:\/\/www.stechstar.com\/user\/wordpress\/11230-2\/","title":{"rendered":""},"content":{"rendered":"<h1>[chatgpt] [ChatGPT] Function calling<\/h1>\n<h1>&nbsp;<\/h1>\n<pre data-ke-type=\"codeblock\">&nbsp;<\/pre>\n<h2 data-ke-size=\"size26\">Function Calling\uc774\ub780?<\/h2>\n<p data-ke-size=\"size16\">Chatgpt Chat Completions API\ub97c \uc0ac\uc6a9\ud558\uba74, \uc9c8\ubb38\uc744 \ud558\uace0 \ub2f5\ubcc0\uc744 \uc5bb\uc744 \uc218 \uc788\ub2e4.<br \/>\nFunction Calling\uc744 \uc0ac\uc6a9\ud558\uba74, \uc9c8\ubb38\uc5d0 \uc801\ud569\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud568\uc218\uc640 \ub9e4\uac1c\ubcc0\uc218\ub97c \ucd94\ucc9c\ubc1b\uc744 \uc218 \uc788\ub2e4.&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc989, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc5b4\ub5a4 \ud568\uc218\ub97c \ud638\ucd9c\ud558\ub294\uac8c \uc88b\uc744\uc9c0 gpt\uc5d0\uac8c \ubb3c\uc5b4\ubcfc \uc218 \uc788\ub294 \uae30\ub2a5\uc774\ub77c\uace0 \ubcfc \uc218 \uc788\ub2e4.<\/p>\n<h2 data-ke-size=\"size26\">\uc608\uc81c\ucf54\ub4dc<\/h2>\n<p data-ke-size=\"size16\">open ai\uc5d0\uc11c \uac00\uc838\uc628 \ud30c\uc774\uc36c \uc608\uc81c \ucf54\ub4dc\uc774\ub2e4. \ud55c\uc904\ud55c\uc904 \uc77d\uc5b4\ubcf4\uba74, \uc5b4\ub5a4 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uac74\uc9c0 \uc27d\uac8c \uac10\uc774 \uc628\ub2e4.&nbsp;<\/p>\n<pre id=\"code_1690211626725\" class=\"python\" data-ke-language=\"python\" data-ke-type=\"codeblock\"><code class=\"hljs\"><span class=\"hljs-keyword\">import<\/span> openai\n<span class=\"hljs-keyword\">import<\/span> json\n\n\n<span class=\"hljs-comment\"># \ud56d\uc0c1 \uac19\uc740 \ub0a0\uc528\ub97c \ub9ac\ud134\ud558\ub294 \uc608\uc2dc\uc6a9 \ub354\ubbf8 \ud568\uc218\uc774\ub2e4. <\/span>\n<span class=\"hljs-comment\"># \uc2e4\uc81c \uac1c\ubc1c\ud658\uacbd\uc5d0\uc11c\ub294 \uc0c1\ud669\uc5d0 \ub9de\ub294 \ucf54\ub4dc\ub97c \uad6c\ud604\ud574\uc57c\ud55c\ub2e4.<\/span>\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">get_current_weather<\/span><span class=\"hljs-params\">(location, unit=<span class=\"hljs-string\">\"fahrenheit\"<\/span>)<\/span>:<\/span>\n    <span class=\"hljs-string\">\"\"\"Get the current weather in a given location\"\"\"<\/span>\n    weather_info = {\n        <span class=\"hljs-string\">\"location\"<\/span>: location,\n        <span class=\"hljs-string\">\"temperature\"<\/span>: <span class=\"hljs-string\">\"72\"<\/span>,\n        <span class=\"hljs-string\">\"unit\"<\/span>: unit,\n        <span class=\"hljs-string\">\"forecast\"<\/span>: [<span class=\"hljs-string\">\"sunny\"<\/span>, <span class=\"hljs-string\">\"windy\"<\/span>],\n    }\n    <span class=\"hljs-keyword\">return<\/span> json.dumps(weather_info)\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">run_conversation<\/span><span class=\"hljs-params\">()<\/span>:<\/span>\n    <span class=\"hljs-comment\"># Step 1: chatgpt\uc5d0\uac8c \uc9c8\ubb38\uacfc \uc774\uc6a9\ud560 \uc218 \uc788\ub294 \ud568\uc218 \ubaa9\ub85d\uc744 \uc804\ub2ec\ud55c\ub2e4. <\/span>\n    messages = [{<span class=\"hljs-string\">\"role\"<\/span>: <span class=\"hljs-string\">\"\uc0ac\uc6a9\uc790\"<\/span>, <span class=\"hljs-string\">\"content\"<\/span>: <span class=\"hljs-string\">\"\uc11c\uc6b8 \ub0a0\uc528\ub294 \uc5b4\ub54c? \"<\/span>}]\n    functions = [\n        {\n            <span class=\"hljs-string\">\"name\"<\/span>: <span class=\"hljs-string\">\"get_current_weather\"<\/span>,\n            <span class=\"hljs-string\">\"description\"<\/span>: <span class=\"hljs-string\">\"\uc704\uce58\ub97c \uc804\ub2ec\ud558\uba74, \ud604\uc7ac \ub0a0\uc528\ub97c \uc54c\ub824\uc900\ub2e4\"<\/span>,\n            <span class=\"hljs-string\">\"parameters\"<\/span>: {\n                <span class=\"hljs-string\">\"type\"<\/span>: <span class=\"hljs-string\">\"object\"<\/span>,\n                <span class=\"hljs-string\">\"properties\"<\/span>: {\n                    <span class=\"hljs-string\">\"location\"<\/span>: {\n                        <span class=\"hljs-string\">\"type\"<\/span>: <span class=\"hljs-string\">\"string\"<\/span>,\n                        <span class=\"hljs-string\">\"description\"<\/span>: <span class=\"hljs-string\">\"\uad6c\uad70\uc2dc  \uc804\ub2ec\ud55c\ub2e4. ex. \uc11c\uc6b8\ud2b9\ubcc4\uc2dc\"<\/span>,\n                    },\n                    <span class=\"hljs-string\">\"unit\"<\/span>: {<span class=\"hljs-string\">\"type\"<\/span>: <span class=\"hljs-string\">\"string\"<\/span>, <span class=\"hljs-string\">\"enum\"<\/span>: [<span class=\"hljs-string\">\"celsius\"<\/span>, <span class=\"hljs-string\">\"fahrenheit\"<\/span>]},\n                },\n                <span class=\"hljs-string\">\"required\"<\/span>: [<span class=\"hljs-string\">\"location\"<\/span>],\n            },\n        }\n    ]\n    response = openai.ChatCompletion.create(\n        model=<span class=\"hljs-string\">\"gpt-3.5-turbo-0613\"<\/span>,\n        messages=messages,\n        functions=functions, <span class=\"hljs-comment\"># \uc774 \uacf3\uc5d0\uc11c \ud568\uc218 \uc815\ubcf4\ub97c \uc804\ub2ec\ud55c\ub2e4.<\/span>\n        function_call=<span class=\"hljs-string\">\"auto\"<\/span>,  \n    )\n    response_message = response[<span class=\"hljs-string\">\"choices\"<\/span>][<span class=\"hljs-number\">0<\/span>][<span class=\"hljs-string\">\"message\"<\/span>]\n\n    <span class=\"hljs-comment\"># Step 2: GPT\uc5d0\uc11c \ud568\uc218 \ud638\ucd9c\uc744 \ud558\ub77c\uace0 \ud588\ub294\uc9c0 \ud655\uc778\ud558\uae30 <\/span>\n    <span class=\"hljs-keyword\">if<\/span> response_message.get(<span class=\"hljs-string\">\"function_call\"<\/span>):\n        <span class=\"hljs-comment\"># Step 3: GPT\uc5d0\uc11c \ud638\ucd9c\ud558\ub77c\uace0 \ud55c \ud568\uc218\ub97c \uc2e4\uc81c\ub85c \ud638\ucd9c\ud558\uae30 <\/span>\n        available_functions = {\n            <span class=\"hljs-string\">\"get_current_weather\"<\/span>: get_current_weather,\n        }  <span class=\"hljs-comment\"># \uc774 \uc608\uc81c\uc5d0\uc11c\ub294 \ud638\ucd9c\ud560 \uc218 \uc788\ub294 \ud568\uc218\ub97c 1\uac1c\ub9cc \ub450\uc5c8\uc9c0\ub9cc, \uc2e4\uc81c\ub85c\ub294 \uc5ec\ub7ec\uac1c\ub97c \ucd94\uac00\ud560 \uc218 \uc788\ub2e4. <\/span>\n        function_name = response_message[<span class=\"hljs-string\">\"function_call\"<\/span>][<span class=\"hljs-string\">\"name\"<\/span>] \/\/ GPT\uac00 \uc81c\uc548\ud55c \ud568\uc218 \uc774\ub984 \ud655\uc778\ud558\uae30 \n        fuction_to_call = available_functions[function_name] \/\/ GPT\uac00 \uc81c\uc548\ud55c \ud568\uc218 \ud560\ub2f9\ud558\uae30  \n        function_args = json.loads(response_message[<span class=\"hljs-string\">\"function_call\"<\/span>][<span class=\"hljs-string\">\"arguments\"<\/span>])\n        function_response = fuction_to_call(\n            location=function_args.get(<span class=\"hljs-string\">\"location\"<\/span>),\n            unit=function_args.get(<span class=\"hljs-string\">\"unit\"<\/span>),\n        ) <span class=\"hljs-comment\"># GPT\uac00 \uc81c\uc548\ud55c \ud568\uc218\ub97c GPT\uc5d0\uc11c \ucc3e\uc740 \ub9e4\uac1c\ubcc0\uc218\ub85c \uc804\ub2ec\ud558\uae30 <\/span>\n\n        <span class=\"hljs-comment\"># Step 4: \ud568\uc218 \ud638\ucd9c\ub85c \uc5bb\uc740 \uacb0\uacfc\ub97c gpt\uc5d0\uac8c \ub2e4\uc2dc \ubcf4\ub0b4\uc8fc\uae30 send the info on the function call and function response to GPT<\/span>\n        messages.append(response_message)  <span class=\"hljs-comment\"># API\uc73c\ub85c \ud638\ucd9c\ubc1b\uc740 \uac12\uc744 \ud655\uc7a5\ud558\uae30 <\/span>\n        messages.append(\n            {\n                <span class=\"hljs-string\">\"role\"<\/span>: <span class=\"hljs-string\">\"function\"<\/span>,\n                <span class=\"hljs-string\">\"name\"<\/span>: function_name,\n                <span class=\"hljs-string\">\"content\"<\/span>: function_response,\n            }\n        ) \n        second_response = openai.ChatCompletion.create(\n            model=<span class=\"hljs-string\">\"gpt-3.5-turbo-0613\"<\/span>,\n            messages=messages,\n        )  <span class=\"hljs-comment\"># gpt\uc5d0\uac8c \uc751\ub2f5 \uacb0\uacfc \ub2e4\uc2dc \uc804\ub2ec\ud558\uae30 <\/span>\n        <span class=\"hljs-keyword\">return<\/span> second_response\n\n\nprint(run_conversation())<\/code><\/pre>\n<h2 data-ke-size=\"size26\">\ucc38\uace0<\/h2>\n<p data-ke-size=\"size16\"><a href=\"https:\/\/platform.openai.com\/docs\/guides\/gpt\/function-calling\" data-cke-saved-href=\"https:\/\/platform.openai.com\/docs\/guides\/gpt\/function-calling\">https:\/\/platform.openai.com\/docs\/guides\/gpt\/function-calling<\/a><br \/>\n<a href=\"https:\/\/github.com\/joshlong\/chatgpt-spring-boot-starter\" data-cke-saved-href=\"https:\/\/github.com\/joshlong\/chatgpt-spring-boot-starter\">https:\/\/github.com\/joshlong\/chatgpt-spring-boot-starter<\/a><br \/>\n<a href=\"https:\/\/github.com\/openai\/openai-cookbook\/blob\/main\/examples\/How_to_call_functions_with_chat_models.ipynb\" data-cke-saved-href=\"https:\/\/github.com\/openai\/openai-cookbook\/blob\/main\/examples\/How_to_call_functions_with_chat_models.ipynb\">https:\/\/github.com\/openai\/openai-cookbook\/blob\/main\/examples\/How_to_call_functions_with_chat_models.ipynb<\/a><\/p>\n<p>\ucd9c\ucc98:&nbsp;<a href=\"https:\/\/americanopeople.tistory.com\/427\" data-cke-saved-href=\"https:\/\/americanopeople.tistory.com\/427\">https:\/\/americanopeople.tistory.com\/427<\/a>&nbsp;[\ubcf5\uc138\ud3b8\uc0b4:\ud2f0\uc2a4\ud1a0\ub9ac]<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_11230\" class=\"pvc_stats all  \" data-element-id=\"11230\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.stechstar.com\/user\/wordpress\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>[chatgpt] [ChatGPT] Function calling &nbsp; &nbsp; Function Calling\uc774\ub780? Chatgpt Chat Completions API\ub97c \uc0ac\uc6a9\ud558\uba74, \uc9c8\ubb38\uc744 \ud558\uace0 \ub2f5\ubcc0\uc744 \uc5bb\uc744 \uc218 \uc788\ub2e4. Function Calling\uc744 \uc0ac\uc6a9\ud558\uba74, \uc9c8\ubb38\uc5d0 \uc801\ud569\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ud568\uc218\uc640 \ub9e4\uac1c\ubcc0\uc218\ub97c \ucd94\ucc9c\ubc1b\uc744 \uc218 \uc788\ub2e4.&nbsp; \uc989, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc5b4\ub5a4 \ud568\uc218\ub97c \ud638\ucd9c\ud558\ub294\uac8c \uc88b\uc744\uc9c0 gpt\uc5d0\uac8c \ubb3c\uc5b4\ubcfc \uc218 \uc788\ub294 \uae30\ub2a5\uc774\ub77c\uace0 \ubcfc \uc218 \uc788\ub2e4. \uc608\uc81c\ucf54\ub4dc open ai\uc5d0\uc11c \uac00\uc838\uc628 \ud30c\uc774\uc36c \uc608\uc81c \ucf54\ub4dc\uc774\ub2e4. \ud55c\uc904\ud55c\uc904 \uc77d\uc5b4\ubcf4\uba74, \uc5b4\ub5a4 \ubc29\uc2dd\uc73c\ub85c [&hellip;]<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_11230\" class=\"pvc_stats all  \" data-element-id=\"11230\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.stechstar.com\/user\/wordpress\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[25,16,24,20],"tags":[],"class_list":["post-11230","post","type-post","status-publish","format-standard","hentry","category-25","category-16","category-24","category-20"],"a3_pvc":{"activated":true,"total_views":9,"today_views":0},"_links":{"self":[{"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/posts\/11230","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/comments?post=11230"}],"version-history":[{"count":3,"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/posts\/11230\/revisions"}],"predecessor-version":[{"id":11928,"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/posts\/11230\/revisions\/11928"}],"wp:attachment":[{"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/media?parent=11230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/categories?post=11230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.stechstar.com\/user\/wordpress\/wp-json\/wp\/v2\/tags?post=11230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}