import os
os.environ["OPENAI_API_KEY"] = "api key ์
๋ ค๋ ฅํ๊ธฐ" # OpenAI API ํค๋ฅผ ํ๊ฒฝ ๋ณ์๋ก ์ค์ (๋ณด์์ ์ค์ ํค๋ 'sk-...' ํํ๋ก ์
๋ ฅํด์ผ ํจ)
from langchain_core.tools import tool # ๋ญ์ฒด์ธ์ธ์์ ํด(๋๊ตฌ)์ ๋ง๋ค๊ธฐ ์ํ ๋ฐ์ฝ๋ ์ดํฐ ์ํฌํธ
from langchain_openai import ChatOpenAI # OpenAI LLM์ ๋ญ์ฒด์ธ์ธ์์ ์ฌ์ฉํ๊ธฐ ์ํ ํด๋์ค
from langchain.agents import initialize_agent, AgentType, Tool # ์์ด์ ํธ ์ด๊ธฐํ ๋ฐ ๋๊ตฌ ๊ตฌ์ฑ์ ํ์ํ ํด๋์ค๋ค
# @tool: ์ผ๋ฐ ํจ์๋ฅผ ๋ญ์ฒด์ธ ๋๊ตฌ๋ก ๋ณํํ๋ ๋ฐ์ฝ๋ ์ดํฐ
# ๊ฐ๋จํ ๋ง์
ํจ์๋ฅผ ์ ์ํ๊ณ ๋ญ์ฒด์ธ ํด๋ก ๋ฑ๋ก
@tool
def add(a: int, b: int) -> int:
"""๋ ์ซ์๋ฅผ ๋ํฉ๋๋ค."""
return a + b
# ๊ฐ๋จํ ๋บ์
ํจ์๋ฅผ ์ ์ํ๊ณ ๋ญ์ฒด์ธ ํด๋ก ๋ฑ๋ก
@tool
def subtract(a: int, b: int) -> int:
"""๋ ์ซ์๋ฅผ ๋บ๋๋ค."""
return a - b
# ์์์ ์ ์ํ ํด๋ค์ ๋ฆฌ์คํธ๋ก ๊ตฌ์ฑ
tools = [add, subtract]
# GPT-4o ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ OpenAI LLM์ ์์ฑ (์จ๋=0์ ์ผ๊ด๋ ์๋ต์ ์ ๋)
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# ๋ญ์ฒด์ธ์ Function Calling ๊ธฐ๋ฐ ์์ด์ ํธ๋ฅผ ์ด๊ธฐํ
# LLM์ด ์ฌ์ฉ์ ์
๋ ฅ์ ๋ถ์ํด ์ ์ ํ ํด(add/subtract)์ ์๋์ผ๋ก ์ ํํด ํธ์ถ
agent = initialize_agent(
tools=tools, # ์ฌ์ฉํ ํด ๋ชฉ๋ก
llm=llm, # ์ฌ์ฉํ LLM (GPT-4o)
agent=AgentType.OPENAI_FUNCTIONS, # Function Calling ๊ธฐ๋ฐ ์์ด์ ํธ ์ฌ์ฉ
verbose=True # ์คํ ๊ณผ์ ์ ์ถ๋ ฅ
)
# ์ฌ์ฉ์ ์ง์ ์
๋ ฅ์ ๋ํดํด ์์ด์ ํธ๊ฐ ์ ์ ํ ํด(subtract)์ ์ ํํ์ฌ ์คํ
response = agent.invoke("17์์ 3์ ๋นผ๋ฉด ์ด๋ป๊ฒ ๋๊ฒ ์๋ฒ ๋ฒ ๋ฒ ใ
ใ
")
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print("์๋ต:", response)
๊ฒฐ๊ณผ
17์์ 3์ ๋นผ๋ฉด 14๊ฐ ๋ฉ๋๋ค!
17์์ 3์ ๋นผ๋ฉด 14์
๋๋ค.
๐ ์ฝ๋ ๋จ๊ณ๋ณ ๋ถ์
1. ํ๊ฒฝ ์ค์
import os
os.environ["OPENAI_API_KEY"] = "sk-proj-..."
- OpenAI API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ธ์ฆ ํค ์ค์
- ๋ณด์ ์ฃผ์: ์ค์ ๋ก๋ ํ๊ฒฝ๋ณ์๋ .env ํ์ผ๋ก ๊ด๋ฆฌํด์ผ ํจ
2. ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType, Tool
- @tool: ์ผ๋ฐ ํจ์๋ฅผ ๋ญ์ฒด์ธ ๋๊ตฌ๋ก ๋ณํํ๋ ๋ฐ์ฝ๋ ์ดํฐ
- ChatOpenAI: OpenAI์ GPT ๋ชจ๋ธ์ ๋ญ์ฒด์ธ์์ ์ฌ์ฉ
- initialize_agent: AI ์์ด์ ํธ๋ฅผ ๋ง๋๋ ํจ์
3. ๋๊ตฌ(Tools) ์ ์
@tool
def add(a: int, b: int) -> int:
"""๋ ์ซ์๋ฅผ ๋ํฉ๋๋ค."""
return a + b
@tool
def subtract(a: int, b: int) -> int:
"""๋ ์ซ์๋ฅผ ๋บ๋๋ค."""
return a - b
๐ ํต์ฌ: @tool ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ์ผ๋ฐ ํจ์๋ฅผ AI๊ฐ ํธ์ถํ ์ ์๋ ๋๊ตฌ๋ก ๋ณํ
4. ์์ด์ ํธ ๊ตฌ์ฑ
tools = [add, subtract]
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True
)
- Agent: AI๊ฐ ์ํฉ์ ๋ง๋ ๋๊ตฌ๋ฅผ ์๋์ผ๋ก ์ ํํ์ฌ ์ฌ์ฉ
- OPENAI_FUNCTIONS: OpenAI์ Function Calling ๊ธฐ๋ฅ ํ์ฉ
- verbose=True: ์คํ ๊ณผ์ ์ ์์ธํ ๋ณด์ฌ์ค
5. ์คํ
response = agent.invoke("17์์ 3์ ๋นผ๋ฉด ์ด๋ป๊ฒ ๋๊ฒ ์๋ฒ ๋ฒ ๋ฒ ใ
ใ
")
๐ค ๋ญ์ฒด์ธ ํด ๋ฑ๋ก์ ์๋ฏธ
์ผ๋ฐ AI ์๋ต vs ๋ญ์ฒด์ธ ์์ด์ ํธ
๊ตฌ๋ถ์ผ๋ฐ AI๋ญ์ฒด์ธ ์์ด์ ํธ
| ์ฒ๋ฆฌ ๋ฐฉ์ | ํ ์คํธ๋ก๋ง ๋ต๋ณ | ์ค์ ํจ์ ์คํ |
| ์ ํ์ฑ | ๊ณ์ฐ ์ค์ ๊ฐ๋ฅ | ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ์ ํ |
| ํ์ฅ์ฑ | ์ ํ์ | ๋ฌดํ ํ์ฅ ๊ฐ๋ฅ |
๐ฏ ์ค์ ์ฐจ์ด์ ์์
์ผ๋ฐ AI ์ง๋ฌธ:
"17์์ 3์ ๋นผ๋ฉด?"
→ AI: "14์
๋๋ค" (ํ
์คํธ ์์ฑ)
๋ญ์ฒด์ธ ์์ด์ ํธ:
"17์์ 3์ ๋นผ๋ฉด?"
→ AI ์ฌ๊ณ : "๋บ์
์ด ํ์ํ๋ค, subtract ํจ์๋ฅผ ์ฌ์ฉํ์"
→ ์ค์ ์คํ: subtract(17, 3)
→ ๊ฒฐ๊ณผ: 14 (์ค์ ๊ณ์ฐ ๊ฒฐ๊ณผ)
๐ ๋ญ์ฒด์ธ ์์ด์ ํธ์ ์ง์ง ์ฅ์
1. ๋ณต์กํ ๋๊ตฌ ์ฐ๊ฒฐ ๊ฐ๋ฅ
@tool
def get_weather(city: str) -> str:
"""๋ ์จ ์ ๋ณด ์กฐํ"""
return weather_api.get(city)
@tool
def send_email(to: str, content: str) -> str:
"""์ด๋ฉ์ผ ๋ฐ์ก"""
return email_service.send(to, content)
์ฌ์ฉ์: "์์ธ ๋ ์จ ํ์ธํ๊ณ ๊ฒฐ๊ณผ๋ฅผ john@email.com์ ๋ณด๋ด์ค" ์์ด์ ํธ:
- get_weather("์์ธ") ์คํ
- send_email("john@email.com", ๋ ์จ๊ฒฐ๊ณผ) ์คํ
2. ์ ํํ ๊ณ์ฐ
# ์ผ๋ฐ AI: "๋๋ต 123.45์ ๋์
๋๋ค" (๋ถ์ ํํ ์ ์์)
# ์์ด์ ํธ: calculate(๋ณต์กํ_์์) → ์ ํํ ๊ฒฐ๊ณผ
3. ์ค์๊ฐ ๋ฐ์ดํฐ ํ์ฉ
@tool
def stock_price(symbol: str) -> float:
"""์ค์๊ฐ ์ฃผ์ ๊ฐ๊ฒฉ"""
return api.get_stock_price(symbol)
# "์ผ์ฑ์ ์ ์ฃผ๊ฐ๊ฐ ์ผ๋ง์ผ?" → ์ค์๊ฐ API ํธ์ถ
๐ก ์ค์ ์คํ ๊ณผ์ (verbose=True)
> Entering new AgentExecutor chain...
๋๋ 17์์ 3์ ๋นผ๋ ๊ณ์ฐ์ ํด์ผ๊ฒ ๋ค.
Action: subtract
Action Input: {"a": 17, "b": 3}
Observation: 14
Thought: ๊ณ์ฐ ์๋ฃ! 17์์ 3์ ๋นผ๋ฉด 14์ด๋ค.
Final Answer: 17์์ 3์ ๋นผ๋ฉด 14์
๋๋ค.
๐ฏ ๊ฒฐ๋ก
๋ญ์ฒด์ธ ๋๊ตฌ ๋ฑ๋ก์ ํต์ฌ ๊ฐ์น:
- ์ ํ์ฑ: ์ค์ ํจ์ ์คํ์ผ๋ก ์ค๋ฅ ๋ฐฉ์ง
- ํ์ฅ์ฑ: ๋ฐ์ดํฐ๋ฒ ์ด์ค, API, ํ์ผ ์์คํ ๋ฑ ์ฐ๊ฒฐ ๊ฐ๋ฅ
- ์๋ํ: AI๊ฐ ์ํฉ์ ๋ง๋ ๋๊ตฌ๋ฅผ ์๋ ์ ํ
- ์ค์๊ฐ์ฑ: ์ต์ ๋ฐ์ดํฐ์ ์ํธ์์ฉ ๊ฐ๋ฅ
๋จ์ ํ ์คํธ ์์ฑ์ ๋์ด์ "AI๊ฐ ์ค์ ๋ก ํ๋ํ ์ ์๋" ์์คํ ์ ๋ง๋๋ ๊ฒ์ด ๋ญ์ฒด์ธ์ ์ง์ง ๋งค๋ ฅ์ ๋๋ค! โจ
#LangChain #OpenAI #AI์์ด์ ํธ #FunctionCalling #Python #AI๊ฐ๋ฐ #GPT4 #๋จธ์ ๋ฌ๋ #์์ฐ์ด์ฒ๋ฆฌ #AI๋๊ตฌ #ํ๋ก๊ทธ๋๋ฐ #๊ฐ๋ฐ์ #AI์ ๋ฌธ #๊ฐ๋ฐํ #ํ ํฌํธ๋ ๋ #์ธ๊ณต์ง๋ฅ #์ฝ๋ฉ #๊ฐ๋ฐ์ผ์ง #ํ ํฌ๋ธ๋ก๊ทธ #๊ฐ๋ฐ๊ณต๋ถ #AIํธ๋ ๋ #ํ๋ก ํธ์๋ #๋ฐฑ์๋ #๋ฐ์ดํฐ์ฌ์ด์ธ์ค