CLOVA Studio ์ด์์ Posted May 14 ๊ณต์ ํ๊ธฐ Posted May 14 ย ๋ค์ด๊ฐ๋ฉฐ AI ์์ด์ ํธ ๊ธฐ์ ์ ๋จ์ํ ๋ํํ ๋ชจ๋ธ์ ๋์ด, ์ธ๋ถ ๋๊ตฌ(Tool)๋ฅผ ํ์ฉํ์ฌ ํ์ํ ์ ๋ณด๋ฅผ ์ง์ ์ฐพ์ ์๋ตํ๋ ๋ฐฉ์์ผ๋ก ๋น ๋ฅด๊ฒ ์งํํ๊ณ ์์ต๋๋ค. ํนํ, ๋ชจ๋ธ ๋จ๋ ์ผ๋ก๋ ํ๊ณ๊ฐ ์๋ ์ค์๊ฐ ์ ๋ณด ๊ฒ์๊ณผ ๊ฐ์ ์์ ์ ํจ๊ณผ์ ์ผ๋ก ์ง์ํ๊ธฐ ์ํด, ๊ฒ์ API๋ฅผ ์ฐ๋ํ '์น ๊ฒ์ AI ์์ด์ ํธ'๊ฐ ํฐ ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์์ต๋๋ค. ์ด Cookbook์์๋ LangGraph๋ฅผ ํ์ฉํ์ฌ ๊ฒ์ API๋ฅผ ๋๊ตฌ๋ก ์ฌ์ฉํ๋ AI ์์ด์ ํธ ์์คํ ์ ๋จ๊ณ๋ณ๋ก ๊ตฌ์ถํ๋ ๊ณผ์ ์ ์์ธํ ์๋ดํฉ๋๋ค. ๋ณธ ๊ฐ์ด๋๋ฅผ ๋ฐ๋ผ ์ฐจ๊ทผ์ฐจ๊ทผ ์ค์ตํ๋ฉฐ ์ฌ๋ฌ๋ถ๋ง์ ๊ฐ๋ ฅํ๊ณ ๋ง์ถคํ๋ ์น ๊ฒ์ ์์ด์ ํธ๋ฅผ ๊ฐ๋ฐํด ๋ณด์ธ์.ย ย Agent System ์๋ ์๋ฆฌ ์น ๊ฒ์ AI ์์ด์ ํธ์ ์๋ ๋ฐฉ์์ ๋จผ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์์ด์ ํธ์์คํ ์ ์ฌ์ฉ์์ ์ง๋ฌธ์ ์ ๋ ฅ๋ฐ์ ๊ทธ ์๋๋ฅผ ํ์ ํ๊ณ , ํ์์ ๊ฐ์ฅ ์ ์ ํ ๋๊ตฌ(Tool)๋ฅผ ์ ํํ์ฌ ์คํํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ์ฌ๋ฌ ๋๊ตฌ ์ค ํ์ฌ ์ํฉ์ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ ์ ํํ์ฌ ์ฌ์ฉํ๊ณ , ์ป์ด์ง ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก AI ๋ชจ๋ธ์ด ์์ฐ์ค๋ฌ์ด ์ธ์ด๋ก ์ ๋ฆฌํ์ฌ ์ฌ์ฉ์์๊ฒ ์ต์ข ์๋ต์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ "์ค๋ ์์ธ ๋ ์จ ์๋ ค์ค"๋ผ๊ณ ์ง๋ฌธํ๋ฉด, ์์ด์ ํธ๋ ๊ฒ์ API๋ฅผ ํธ์ถํ์ฌ ์ต์ ๋ ์จ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ ๋ค, ์ด๋ฅผ ๋ฐํ์ผ๋ก ์์ฐ์ค๋ฌ์ด ๋ต๋ณ์ ์์ฑํ๋ ์๋ฆฌ์ ๋๋ค. Quote Toolย :ย AI ๋ชจ๋ธ์ด ์์ฒด์ ์ผ๋ก ์ํํ๊ธฐ ์ด๋ ค์ด ๊ธฐ๋ฅ(์: ์น ๊ฒ์, ๋ฐ์ดํฐ ์กฐํ ๋ฑ)์ ํจ์๋ API ํํ๋ก ํธ์ถํ์ฌ ๋ชจ๋ธ์ ๋ฅ๋ ฅ์ ํ์ฅํ๋ ์๋จ์ ๋๋ค. (์: ๊ฒ์ API) Agent :ย ์ฌ์ฉ์์ ์ง๋ฌธ ์๋๋ฅผ ํ์ ํ๊ณ , ํ์ํ ๋๊ตฌ(Function)๋ฅผ ํ๋จํ์ฌ ์คํํ ๋ค, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ข ํฉํ์ฌ ์์ฐ์ค๋ฌ์ด ์ธ์ด๋ก ์๋ต์ ์์ฑํ๋ ํต์ฌ ์ ์ด ์์คํ ์ ๋๋ค. (์: "์ค์๊ฐ ๋ ์จ ์ ๋ณด ๊ฒ์์ด ํ์ํ๊ฒ ๊ตฐ." โ Tool ํธ์ถ) ChatClovaXย :ย AI ๋ชจ๋ธ๋ก์, ๋๊ตฌ๋ก๋ถํฐ ์ป์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์์ฐ์ค๋ฌ์ด ๋ฌธ์ฅ ํํ์ ๋ต๋ณ์ ์ฌ๊ตฌ์ฑํ์ฌ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค. ย ย LangGraph AI Agent ๊ตฌํ ์์ํ๊ธฐ ์ด์ LangGraph๋ฅผ ์ด์ฉํ์ฌ Tool์ ์ฐ๋ํ AI ์์ด์ ํธ๋ฅผ ์ง์ ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฒ์ API๋ฅผ ๋๊ตฌ๋ก ํ์ฉํ๋ฉด, LLM์ด ์์ฒด ์ง์๋ง์ผ๋ก๋ ๋ต๋ณํ๊ธฐ ์ด๋ ค์ด ์ง๋ฌธ์ ๋ํด์๋ ๋์ฑ ์ ํํ๊ณ ์ ๋ขฐ๋ ๋์ ๋ต๋ณ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ย โ ๊ธฐ๋ณธ ํ๊ฒฝ ์ค์ Quote ๋ฒ์ ์ ๋ณด Python >= 3.13.2, langchain >=ย 0.3.23 ๋ณธ ์ฟก๋ถ์ Jupyter Notebook(.ipynb) ํ๊ฒฝ ๊ธฐ์ค์ผ๋ก ์ค๊ณ๋์ด, ์ ๋จ์๋ก ์ฝ๋ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ย ย ํ์ํ ํจํค์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น LangChain์ AI ์์ด์ ํธ ๊ตฌ์ถ์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์์ฝ๊ฒ ํ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ํ์ด์ฌ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๋จผ์ pip ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ํ์ํ ํจํค์ง๋ค์ ์ค์นํด๋ณด๊ฒ ์ต๋๋ค. %pip install -U langchain langchain-openai langchain-naver langgraph langchain-community langchain-naver-community ย CLOVA Studio API KEY ๋ฐ๊ธ ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ CLOVA Studio ์ด์ฉ ์ ์ฒญ์ ํด์ผ ํฉ๋๋ค. ์ด์ฉ ์ ์ฒญ์ด ์๋ฃ๋๋ฉด, CLOVA Studio ์ฌ์ดํธ์ ๋ก๊ทธ์ธํด API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์์ต๋๋ค. Quote ํด๋ก๋ฐ ์คํ๋์ค ์ด์ฉ ์ ์ฒญ:ย https://www.ncloud.com/product/aiService/clovaStudio ์ฌ์ฉ ๊ฐ์ด๋:ย https://guide.ncloud-docs.com/docs/clovastudio-overview API ๊ฐ์ด๋:ย https://api.ncloud-docs.com/docs/ai-naver-clovastudio-summary API ํค๋ CLOVA Studio์ ๋ก๊ทธ์ธํ ๋ค, 'ํ๋กํ > API ํค > ํ ์คํธ > ํ ์คํธ ์ฑ ๋ฐ๊ธ' ๊ฒฝ๋ก๋ฅผ ํตํด ๋ฐ๊ธํ ์ ์์ต๋๋ค. ๋จ, API ํค๋ ํ ๋ฒ๋ง ํ์ธํ ์ ์์ผ๋ฏ๋ก, ๋ฐ๊ธ ์งํ ๋ฐ๋์ ๋ณต์ฌํ์ฌ ๋ณ๋๋ก ์์ ํ๊ฒ ๋ณด๊ดํด๋์ด์ผ ํฉ๋๋ค. ย CLOVA Studio ํ๊ฒฝ ๋ณ์ ์ค์ HCX-005 ๋ชจ๋ธ์ ์ฌ์ฉํ๊ธฐ ์ํด, CLOVA Studio API ํค๋ฅผ ํ๊ฒฝ ๋ณ์๋ก ๋ฑ๋กํฉ๋๋ค. ์๋ ์ ์ ์คํํ๋ฉด API ํค ์ ๋ ฅ๋์ด ํ์๋ฉ๋๋ค. ์ฌ์ดํธ์์ ๋ฐ๊ธ๋ฐ์ API ํค๋ฅผ ์ ๋ ฅํ์ฌ ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํด ์ฃผ์ธ์. import os import getpass os.environ["CLOVASTUDIO_API_KEY"] = getpass.getpass( "CLOVA Studio API Key ์ ๋ ฅ: " ) ย โก LLM ๋ชจ๋ธ ๊ตฌํ HCX ๋ชจ๋ธ ์ ์ Langchain-naver ChatClovaX๋ฅผ ํตํด HCX-005 ๋ชจ๋ธ์ย ์ด๊ธฐํํฉ๋๋ค.ย Quote ์ฃผ์์ฌํญ ๊ฒ์ API ๋ฑ Tool์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ ์ค max_tokens๋ฅผ ๋ฐ๋์ 1024 ์ด์์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค. ย from langchain_naver import ChatClovaX llm = ChatClovaX( model="HCX-005", max_tokens=1024, # Tool ์ฌ์ฉ์ max_tokens์ 1024์ด์ ํ์ ) ย HCX ๋ชจ๋ธ ํ ์คํธ ๋ชจ๋ธ ์ด๊ธฐํ ์ดํ, "์๋ , ๋๋ ๋๊ตฌ์ผ?"์ ๊ฐ์ ์ ๋ ฅ์ผ๋ก ๊ฐ๋จํ ํ ์คํธ๋ฅผ ์งํํด ์ ์ ์๋ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. llm.invoke("์๋ ,๋๋ ๋๊ตฌ์ผ?") AIMessage(content='์๋ ํ์ธ์! ์ ๋ CLOVA X์ ๋๋ค.\n\n์ฌ์ฉ์๋์ ์์ฐ์ฑ ํฅ์์ ๋์ธ ์ ์๋๋ก ๊ฐ๋ฐ๋ ์ธ๊ณต์ง๋ฅ ์ธ์ด๋ชจ๋ธ๋ก ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ์ํํ ์ ์์ต๋๋ค.\n\n1. ์ง์ ์๋ต: ์ฌ์ฉ์๋์ด ๊ถ๊ธํ์ ๋ด์ฉ์ ์ง๋ฌธํด ์ฃผ์๋ฉด, ์ด์ ๋ํด ํ์ตํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ต๋ํ ์ ํํ๊ณ ์ ์ฉํ ๋ต๋ณ์ ์ ๊ณตํ๋๋ก ๋ ธ๋ ฅํฉ๋๋ค.\n2. ๊ธ์ฐ๊ธฐ ์ง์: ์ด๋ฉ์ผ ์์ฑ์ด๋ ๋ฌธ์ ์ด์์ ์ก์ ๋ ํ์ํ ์์ด๋์ด๋ฅผ ์ ์ํ๊ฑฐ๋ ๋ฌธ์ฅ์ ๋ค๋ฌ์ด ๋๋ฆด ์ ์์ต๋๋ค.\n3. ๋ฒ์ญ: ๋ค์ํ ์ธ์ด๋ก ํ ์คํธ๋ฅผ ๋ฒ์ญํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.\n4. ์์ฝ ๋ฐ ๋ถ์: ์๋ฌธ์ ๊ฐ๋ตํ๊ฒ ์์ฝํ๊ฑฐ๋ ํน์ ์ฃผ์ ์ ๊ด๋ จ๋ ์ฝํ ์ธ ๋ฅผ ๋ถ์ํ์ฌ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.\n\n๊ถ๊ธํ์ ๋ด์ฉ์ด๋ ๋์์ด ํ์ํ์๋ฉด ์ธ์ ๋ ์ง ๋ง์ํด ์ฃผ์ธ์. ์ต์ ์ ๋คํด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค. ', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 164, 'prompt_tokens': 13, 'total_tokens': 177, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_name': 'HCX-005', 'system_fingerprint': None, 'id': '1b6d8c4819b04e70bde29e40d7d2068a', 'finish_reason': 'stop', 'logprobs': None}, id='run-b74541be-2b13-4c4b-b31f-40385f929ec2-0', usage_metadata={'input_tokens': 13, 'output_tokens': 164, 'total_tokens': 177, 'input_token_details': {}, 'output_token_details': {}}) ย โขย Tool ๊ตฌํ ๊ฒ์ ๋๊ตฌ(Tool) API ์ด์ฉ์ ์ฒญ ๊ฒ์ API๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Tavily์์ API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์์ผ ํฉ๋๋ค. Tavily ์น์ฌ์ดํธ์ ๋ก๊ทธ์ธํ๋ฉด ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด API ํค๊ฐ ์๋์ผ๋ก ๋ฐ๊ธ๋ฉ๋๋ค. ๋ฐ๊ธ๋ ํค๋ ์ค๋ฅธ์ชฝ ๋ณต์ฌ ๋ฒํผ(๋นจ๊ฐ์ ๋ฐ์ค)์ ํด๋ฆญํด ์์ ํ๊ฒ ์ ์ฅํด๋์ธ์. ย ๋ค์ํ ๊ฒ์ API ๋๊ตฌ ๋ณธ Cookbook์์๋ Tavily API๋ฅผ ๋๊ตฌ(Tool)๋ก ์ฌ์ฉํ์ง๋ง, ์ด ์ธ์๋ DuckDuckGo, Brave, Jina ๋ฑ ๋ค์ํ ๋ฌด๋ฃ ๊ฒ์ API๊ฐ ์กด์ฌํฉ๋๋ค. ๊ฐ ๊ฒ์ API์ ํน์ง๊ณผ ์ฌ์ฉ ์กฐ๊ฑด์ ์๋ ํ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์. Tool/Toolkit Free/Paid Return Data Bing Search Paid URL, Snippet, Title Brave Search Free URL, Snippet, Title DuckDuckgoSearch Free URL, Snippet, Title Exa Search 1000 free searches/month URL, Author, Title, Published Date Google Search Paid URL, Snippet, Title Google Serper Free URL, Snippet, Title, Search Rank, Site Links Jina Search 1M Response Tokens Free URL, Snippet, Title, Page Content Mojeek Search Paid URL, Snippet, Title SearchApi 100 Free Searches on Sign Up URL, Snippet, Title, Search Rank, Site Links, Authors SearxNG Search Free URL, Snippet, Title, Category SerpAPI 100 Free Searches/Month Answer Tavily Search 1000 free searches/month URL, Content, Title, Images, Answer You.com Search Free for 60 days URL, Title, Page Content ย ๊ฒ์ ๋๊ตฌ(Tool) ํ๊ฒฝ ๋ณ์ ์ค์ ๊ฒ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ API KEY๊ฐ ํ์ํฉ๋๋ค. API KEY๋ฅผ ํ๊ฒฝ ๋ณ์์ ๋ฑ๋กํ์ฌ, ์์ ํ๊ณ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ ์ ์์ต๋๋ค.ย os.environ["TAVILY_API_KEY"] = getpass.getpass( "Tavily API Key ์ ๋ ฅ: " ) ย ๊ฒ์ย ๋๊ตฌ ์ ์ LangChain์์ ์ ๊ณตํ๋ ๊ฒ์ ๋๊ตฌ๋ฅผ ๋ถ๋ฌ์ tool์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ํจ์ ๊ฐ์ฒด๋ฅผ ์ ์ํฉ๋๋ค. ์ด๋ max_results ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด ์ต๋ ๊ฒ์ ๊ฒฐ๊ณผ ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. from langchain_community.tools.tavily_search import TavilySearchResults tool = TavilySearchResults(max_results=5) ย ๊ฒ์ ๋๊ตฌ ํ ์คํธ ๊ฒ์ ๋๊ตฌ๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๋ ค๋ฉด, tool.invoke() ํจ์๋ฅผ ์คํํฉ๋๋ค. tool.invoke("์ ์์ญ") ย Agent ๋๊ตฌ ์ ์ Agent๊ฐ ํ์ฉํ ์ ์๋ ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์ ์ํ ์ ์์ต๋๋ค. Tavily ๊ฒ์ API ์ธ์๋ ๋ค์ํ ์ธ๋ถ API๋ ์ปค์คํ ํจ์๋ฅผ ํจ๊ป ๋ฑ๋กํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ธ์ ์ํฉ์ ๋ฐ๋ผ ๊ฐ์ฅ ์ ์ ํ ๋๊ตฌ๋ฅผ ์๋์ผ๋ก ์ ํํด ํธ์ถํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ณด๋ค ์ ๋ฐํ๊ณ ์ ๋ขฐ๋ ๋์ ์๋ต์ ์์ฑํ ์ ์์ต๋๋ค. ์๋ ์์๋ Tavily ์ธ์ ํ์ฌ ์๊ฐ์ ๋ฐํํ๋ ํจ์๋ฅผ ์ถ๊ฐ ๋๊ตฌ๋ก ๊ตฌ์ฑํ ์ฌ๋ก์ ๋๋ค. tools = [tool] # tools = [tool1, tool2, tool3, etc... ] ์ฌ๋ฌ ๋๊ตฌ(Tool) ์ค์ ๋ฐฉ๋ฒ from datetime import datetime from langchain_core.tools import Tool def get_current_time(dummy: str = "now") -> dict: print("[tool2 ํธ์ถ] ํ์ฌ ์๊ฐ ์กฐํ\n") """ํ์ฌ ์๊ฐ์ ISO 8601 ํ์์ผ๋ก ๋ฐํํฉ๋๋ค.""" return {"current_time": datetime.now().isoformat()} tool2 = Tool.from_function( func=get_current_time, name="get_current_time", description="์ฌ์ฉ์๊ฐ ํ์ฌ ์๊ฐ์ ISO 8601 ํฌ๋งท์ผ๋ก ๋ฐํํฉ๋๋ค. ์ ๋ ฅ์ ๋ฌด์๋ฉ๋๋ค." ) tools = [tool1, tool2] ย โฃ Agent Workflow ๊ตฌ์ถ LangGraph Agent ๊ตฌํ langgraph.prebuilt ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ create_react_agent ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ฐ๋จํ ์ฝ๋ ํ ์ค๋ก ์์ด์ ํธ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ด ํจ์๋ LangGraph์์ ๋ฏธ๋ฆฌ ์ ์ํ REACT ๊ธฐ๋ฐ ์์ด์ ํธ๋ฅผ ์์ฝ๊ฒ ํ์ฉํ ์ ์๋๋ก ์ ๊ณต๋๋ ๊ฐ๋ ฅํ ๋ชจ๋์ ๋๋ค. LLM ํ๋ผ๋ฏธํฐ์๋ ์์ ์ ์ํ ์ธ์ด ๋ชจ๋ธ์, tools ํ๋ผ๋ฏธํฐ์๋ ๊ตฌ์ฑํ ๋๊ตฌ ๋ชฉ๋ก์ ๊ฐ๊ฐ ์ ๋ฌํ์ฌ ์ค์ ํฉ๋๋ค. โป ๋๋ง์ ์ปค์คํ Agentic Workflow๋ฅผ ์ง์ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด, ๋ณธ ๋ฌธ์์ ๋ง์ง๋ง ์ฑํฐ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์. from langgraph.prebuilt import create_react_agent agent_executor = create_react_agent( llm, tools, ) ย Agent ์คํ ํจ์ ์ ์ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์ Agent Executor์ ์ ๋ฌํ๊ณ , ์ฒ๋ฆฌ๋ ์ต์ข ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. def agent_run(query): result = agent_executor.invoke({"messages": [("human", query)]}) return result["messages"][-1].content ย ์์ด์ ํธ ์์คํ ์คํ while True ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ํ agent_run ํจ์๋ฅผ ๋ฐ๋ณต ํธ์ถํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ด์ ํธ ์์คํ ์ด ์ฌ์ฉ์์ ์ ๋ ฅ์ ์ง์์ ์ผ๋ก ๋ฐ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๊ตฌ์ฑํฉ๋๋ค. ๋ํ๋ฅผ ์ข ๋ฃํ๋ ค๋ฉด quit, exit, ๋๋ q๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฃจํ๊ฐ ์ข ๋ฃ๋ฉ๋๋ค. while True: query = input("User: ") print("User: "+query+"\n") if query.lower() in ["quit", "exit", "q"]: print("Goodbye!") break print("Assistant: "+agent_run(query)) ย ๋ญ๊ทธ๋ํ Agent Workflow ์๊ฐํ ์์ด์ ํธ์ ์ํฌํ๋ก์ฐ ๊ตฌ์กฐ๋ Mermaid ํ์์ ๋ค์ด์ด๊ทธ๋จ์ ํตํด ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค. from IPython.display import Image, display display(Image(agent_executor.get_graph().draw_mermaid_png())) ย GUI๋ก ์ฝ๊ฒ ๋๋ง์ ์ปค์คํ Agentic Workflow ๊ตฌํ LangGraph Builder๋ ์ด๋ณด์๋ ์ฝ๊ฒ ์ํฌํ๋ก์ฐ๋ฅผ GUI๋ก ๊ตฌ์ฑํ ์ ์๋๋ก ์ง์ํ๋ ๋๊ตฌ์ ๋๋ค. ์๊ฐ์ ์ผ๋ก ๊ตฌํํ ์ํฌํ๋ก์ฐ๋ ๋ฒํผ ํด๋ฆญ ํ ๋ฒ์ผ๋ก Python ๋๋ TypeScript ์ฝ๋๋ก ๋ณํํ ์ ์์ต๋๋ค. Quote LangGraph Builder ์๋๋ฆฌ์ค ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด, LangGraph Builder๋ฅผ ์ฌ์ฉํ๋ฉด Agentic Workflow๋ฅผ GUI ํ๊ฒฝ์์ ์์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ย LangGraph Builer ๋ช ๋ ์ด LangGraph Builer๋ฅผ ์ด์ฉํ๊ธฐ ์ํ ๋ช ๋ น์ด๋ ์๋๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์. ๋ ธ๋ ์์ฑ:ย โ + ์บ๋ฒ์ค ์๋ฌด ๊ณณ์ด๋ ํด๋ฆญ ์ฃ์ง(์ฐ๊ฒฐ์ ) ์์ฑ:ย ํ ๋ ธ๋์ ์๋์ชฝ์์ ๋ค๋ฅธ ๋ ธ๋์ ์์ชฝ์ผ๋ก ํด๋ฆญ ํ ๋๋๊ทธ ์กฐ๊ฑด๋ถ ์ฃ์ง ์์ฑ:ย ํ๋์ ๋ ธ๋๋ฅผ ์ฌ๋ฌ ๋ ธ๋์ ์ฐ๊ฒฐ ์ฌ์ดํด ์์ฑ:ย ๋ ธ๋์ ์๋์ชฝ์์ ์์ชฝ์ผ๋ก ํด๋ฆญ ํ ๋๋๊ทธ ์ฃ์ง/๋ ธ๋ ์ญ์ :ย ์ฃ์ง ๋๋ ๋ ธ๋๋ฅผ ํด๋ฆญํ๊ณ ๋ฐฑ์คํ์ด์ค ํค ๋๋ฅด๊ธฐ ์ฃ์ง ์์ ์ง์ :ย ์ฃ์ง๋ฅผ ํด๋ฆญํ ํ ์์ ์ ํ๊ธฐ์์ ์ต์ ์ ํ ๊ธฐ๋ณธ ์ ๊ณต๋๋ Templates(ํ ํ๋ฆฟ) ๋ฒํผ์ ํตํด, ๊ฐ๋จํ RAG ํ์ดํ๋ผ์ธ์ด๋ Agent with Tool ๊ตฌ์ฑ์ ๋ฐ๋ก ๋ถ๋ฌ์ ํ์ฉํ ์ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก, ์ฐ์ธก ์๋จ์ 'Generate Code' ๋ฒํผ์ ํด๋ฆญํ๋ฉด, GUI๋ก ๊ตฌ์ฑํ ์ํฌํ๋ก์ฐ๋ฅผ Python ๋๋ TypeScript ์ฝ๋๋ก ์์ฝ๊ฒ ๋ณํํ์ฌ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ย ย ๋ง๋ฌด๋ฆฌ ์ด๋ฒ Cookbook์์๋ LangGraph์ LangChain-naver๋ฅผ ํ์ฉํ์ฌ ์น ๊ฒ์ AI ์์ด์ ํธ๋ฅผ ๊ตฌ์ถํ๋ ์ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์ดํด๋ณด์์ต๋๋ค. LangGraph์ Clova Studio, ๋ค์ํ ๊ฒ์ Tool์ ์กฐํฉํ๋ฉด, ์ค์๊ฐ ์ ๋ณด๋ฅผ ์ดํดํ๊ณ ์๋ตํ ์ ์๋ ๊ฐ๋ ฅํ AI Agent๋ฅผ ๋๊ตฌ๋ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด์ ์ฌ๋ฌ๋ถ์ ์์ด๋์ด์ ์์๋ ฅ์ด ๋ํด์ง ์ฐจ๋ก์ ๋๋ค.ย ๐ ย ย ย ๋งํฌ ๋ณต์ฌ ๋ค๋ฅธ ์ฌ์ดํธ์ ๊ณต์ ํ๊ธฐ More sharing options...
Recommended Posts
๊ฒ์๊ธ ๋ฐ ๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋ก๊ทธ์ธ ํด์ฃผ์ธ์.
๋ก๊ทธ์ธ