STUDY/AI Agent

[AI Agent] AI Agent์™€ ToolCalling1

seoyn 2026. 7. 13. 08:30

1. AI Agent ๊ฐœ์š”

 • AI Agent

 : LLM์„ ์ถ”๋ก &์˜์‚ฌ๊ฒฐ์ • ์ค‘์‹ฌ์œผ๋กœ ์‚ฌ์šฉํ•ด '๊ณ„ํš ์ˆ˜๋ฆฝ → ์‹คํ–‰ → ๊ด€์ฐฐ → ํŒ๋‹จ' ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ž์œจ์ ์œผ๋กœ ๋ชฉํ‘œ ๋‹ฌ์„ฑํ•˜๋Š” ์‹œ์Šคํ…œ

 

 • Workflow vs Agent

  - Workflow : ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ์ ˆ์ฐจ๋Œ€๋กœ ์‹คํ–‰(๋ฐ˜๋ณต์ ·์ •ํ˜•ํ™”๋œ ์ž‘์—…์— ์ ํ•ฉ)

  - Agent : ์ƒํ™ฉ์— ๋”ฐ๋ผ ์Šค์Šค๋กœ ํŒ๋‹จํ•ด ๋„๊ตฌ·ํ–‰๋™ ์„ ํƒ(์ค‘๊ฐ„ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ํ๋ฆ„ ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ์— ์ ํ•ฉ)

 

 • ์ฃผ์š” ํŠน์ง•

 โž€ ์ž์œจ์„ฑ : LLM ์ถ”๋ก  ์Šค์Šค๋กœ ํŒ๋‹จ(๊ทœ์น™ ๊ธฐ๋ฐ˜ X)

 โž ๋ชฉํ‘œ ์ง€ํ–ฅ์„ฑ : "์ด ํ–‰๋™์ด ๋ชฉํ‘œ ๋‹ฌ์„ฑ์— ๋„์›€์ด ๋˜๋Š”๊ฐ€" ๊ธฐ์ค€ ํŒ๋‹จ

 โž‚ ๋„๊ตฌ ํ™œ์šฉ : ์™ธ๋ถ€ API·๋„๊ตฌ๋กœ ์‹ค์ œ ์ž‘์—… ์ˆ˜ํ–‰

 โžƒ ์ธ๊ฐ„ ๊ฐœ์ž… ์ตœ์†Œํ™” : ์‚ฌ๋žŒ์€ ์ดˆ๊ธฐ ๋ชฉํ‘œ ์ œ์‹œ&์ตœ์ข… ์Šน์ธ ์ •๋„๋งŒ ๊ฐœ์ž…

 

2. ์‹ฑ๊ธ€ ์—์ด์ „ํŠธ vs ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ

 • ์‹ฑ๊ธ€ ์—์ด์ „ํŠธ  : ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ ์•ˆ์—์„œ ์ธ์‹-์ถ”๋ก -ํ–‰๋™-๊ด€์ฐฐ ๋ชจ๋‘ ์ฒ˜๋ฆฌ

  - ์žฅ์  : ๋‹จ์ˆœ, ์ €์ง€์—ฐ, ์ €๋น„์šฉ, ์ถ”์  ์šฉ์ด

  - ํ•œ๊ณ„ : ์ปจํ…์ŠคํŠธ ํ•œ๊ณ„, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€

 • ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ : ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ(์Šˆํผ๋ฐ”์ด์ €)๊ฐ€ ์ž‘์—… ๋ถ„ํ•ดํ•ด ์›Œ์ปค ์—์ด์ „ํŠธ๋“ค์—๊ฒŒ ์œ„์ž„, ๊ฒฐ๊ณผ ์ข…ํ•ฉ

  - ๊ตฌ์„ฑ ํŒจํ„ด : ์Šˆํผ๋ฐ”์ด์ €-์›Œ์ปค, ์ˆœ์ฐจ ํŒŒ์ดํ”„๋ผ์ธ, ์ˆ˜ํ‰์  ํ˜‘์—…

  - ๋น„์šฉ / ์œ„ํ—˜ : ์กฐ์œจ ๋น„์œจ ๋ฐœ์ƒ, ํ† ํฐ ์†Œ๋น„ ๊ธ‰์ฆ

Anthropic ๋ฆฌ์„œ์น˜ ์‚ฌ๋ก€ : ๋ฆฌ๋“œ(Opus) + ์„œ๋ธŒ(Sonnet) ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ๊ฐ€ ๋‹จ์ผ Opus ๋Œ€๋น„ ์•ฝ 90% ์ด์ƒ ๋†’์€ ์„ฑ๋Šฅ
→ ์ฃผ๋กœ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ ๋ณ‘๋ ฌ ์ปจํ…์ŠคํŠธ ๋ถ„์‚ฐ ๋•๋ถ„

 

3. ReAct ํŒจํ„ด

 : Reasoning + Acting ๊ฒฐํ•ฉํ•œ ํ”„๋กฌํ”„ํŒ… ํŒจํ„ด

 • ๋™์ž‘ : ์งˆ๋ฌธ ์ž…๋ ฅ → ์‚ฌ๊ณ (Thought) → ํ–‰๋™(Action, ๋„๊ตฌ ํ˜ธ์ถœ) → ๊ด€์ฐฐ(Observation) → ๋ฐ˜๋ณต ๋˜๋Š” ์ข…๋ฃŒ

 • ์žฅ์  : ํˆฌ๋ช…์„ฑ(๋””๋ฒ„๊น… ์šฉ์ด), ์ •ํ™•์„ฑ(ํ™˜๊ฐ ๊ฐ์†Œ), ์œ ์—ฐ์„ฑ, ํ•ด์„ ๊ฐ€๋Šฅ์„ฑ

 

4. Tool๊ณผ Toll Calling

 • Tool์ด ํ•„์š”ํ•œ ์ด์œ  - LLM์˜ ํ•œ๊ณ„

LLM ํ•œ๊ณ„ ๋ถ„๋ฅ˜ Tool ๋Œ€์‘ ์˜ˆ์‹œ
Knowledge Cutoff Read ์ตœ์‹  ์ •๋ณด ์กฐํšŒ Web Search, News API
์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ฏธ์ ‘๊ทผ Read ํ˜„์žฌ ๋ฐ์ดํ„ฐ ์กฐํšŒ DB Query, Weather API
๊ฐœ์ธ·์กฐ์ง ๋ฐ์ดํ„ฐ ๋ฏธ์ ‘๊ทผ Read ํŒŒ์ผ·๋ฌธ์„œ ์ ‘๊ทผ File Reader
์—ฐ์‚ฐ ๋ถ€์ •ํ™• / ์ฝ”๋“œ ์‹คํ–‰ ๋ถˆ๊ฐ€ Execute ๊ณ„์‚ฐ·์ฝ”๋“œ ์‹คํ–‰ ์œ„์ž„ Calculator, Python REPL
์‹œ์Šคํ…œ ์—ฐ๋™ ๋ถˆ๊ฐ€ Execute ์™ธ๋ถ€ ์•ก์…˜ REST API, ๋ฉ”์‹œ์ง€ ์ „์†ก

 

 • Tool Calling 3๋‹จ๊ณ„

 โž€ Tool Binding(model.bind_tools([...]) → โž LLM ํ•„์š” ์‹œ tool_calls ๋ฐ˜ํ™˜ โž‚ tool ์‹คํ–‰ ํ›„ ๊ฒฐ๊ณผ(ToolMessage)๋ฅผ ๋‹ค์‹œ LLM์— ์ „๋‹ฌ

 

5. LangChain Built-in Tools

 • TavilySearch(langchain-tavily) : ํ‚ค์›Œ๋“œ/์ถœ์ฒ˜ ๊ธฐ๋ฐ˜, ์ธ์šฉ์— ๊ฐ•ํ•จ(์›” 1000ํšŒ ๋ฌด๋ฃŒ)

 • ExaSearchResults / ExaFindSimilarResults(langchain-exa) : ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜ ์˜๋ฏธ ๊ฒ€์ƒ‰(neural / keyword / auto), livecrawl ์˜ต์…˜ ์ œ๊ณต. ์ž์—ฐ์–ด ์„ค๋ช…๋งŒ์œผ๋กœ ๊ด€๋ จ ํŽ˜์ด์ง€ ํƒ์ƒ‰์— ๊ฐ•ํ•จ

 

6. LLM Tool Calling ํ๋ฆ„

โž€ Tool Binding

model = ChatOpenAI(model="gpt-5.4-mini")
tool_model = model.bind_tools(tools=[exa_search])

 • ์‘๋‹ต์˜ content์™€ tool_calls ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ’ ์กด์žฌ(tool ํ˜ธ์ถœ ํ•„์š” ์‹œ content๋Š” ๋นˆ ๋ฌธ์ž์—ด, tool_calls์— ์ •๋ณด)

 

โž Tool ํ˜ธ์ถœ

search_result1 = exa_search.invoke(result3.tool_calls[0]) # ๋‹จ๊ฑด
search_result = exa_search.batch(result3.tool_calls)      # ๋ณต์ˆ˜(batch)

 • ๋ฐ˜ํ™˜ ํƒ€์ž… : ToolMessage

 

โž‚ Tool ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ LLM์— ์ „๋‹ฌ

 • ํ”„๋กฌํ”„ํŠธ ์ˆœ์„œ : system/humantool_calls ๋‹ด๊ธด AIMessageToolMessage

 • MessagesPlaceholder(variable_name="tool_messages", optional=True)๋กœ ํ”„๋กฌํ”„ํŠธ์— ์‚ฝ์ž…

@chain
def web_agent(query: str) -> tuple[str, list]:
    messages = []
    ai_message = tool_model_chain.invoke(query)
    while ai_message.tool_calls:
        for tool_call in ai_message.tool_calls:
            if tool_call["name"] == tavily_search_name:
                messages.append(tavily_search.invoke(tool_call))
            elif tool_call["name"] == exa_search_name:
                messages.append(exa_search.invoke(tool_call))
        messages = [ai_message] + messages
        ai_message = tool_model_chain.invoke({"query": query, "tool_messages": messages})
    messages.append(ai_message)
    return ai_message.content, messages

- ์ด ํŒจํ„ด์ด ๊ณง ReAct ๋ฃจํ”„(Thought → Action → Observation ๋ฐ˜๋ณต) ์ฝ”๋“œ ๊ตฌํ˜„

 

'STUDY > AI Agent' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[AI Agent] LangGraph1  (0) 2026.07.16
[AI Agent] AI Agent์™€ ToolCalling2  (0) 2026.07.14