tool
https://python.langchain.com/v0.2/docs/integrations/tools/
toolkit
https://python.langchain.com/v0.2/docs/integrations/toolkits/
agent executor๋ฅผ ์ฌ์ฉํ์ฌ agent๋ฅผ ๊ตฌ์ถํ๋๋ฐ ๋ค์ ๋ฌธ์๋ฅผ ๋ณด์.
https://python.langchain.com/v0.2/docs/how_to/agent_executor/#jupyter-notebook
์ด ์น์
์์๋ ๋ ๊ฑฐ์ LangChain AgentExecutor๋ฅผ ์ฌ์ฉํ ๊ตฌ์ถ์ ๋ค๋ฃน๋๋ค. ์์ํ๋ ๋ฐ๋ ๊ด์ฐฎ์ง๋ง ํน์ ์ง์ ์ด ์ง๋๋ฉด ์ด ๊ธฐ๋ฅ์ด ์ ๊ณตํ์ง ์๋ ์ ์ฐ์ฑ๊ณผ ์ ์ด ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒ์
๋๋ค. ๊ณ ๊ธ ์์ด์ ํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด LangGraph ์์ด์ ํธ ๋๋ ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ ๊ฑฐ์๋ก ์ฒ๋ฆฌ๋๊ณ ์๋ค. langgraph agent๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ง๋๊ฑฐ๊ฐ์๋ฐ ๊ทธ๋์ ๊ทธ๋ฐ์ง ์ด๊ฑด ๋์ถฉ ๋ด๋๊ณ ๋ฐ๋ก langgraph๋ก ๊ฐ์.
Python REPL
%pip install langchain_experimental
from langchain_core.tools import Tool
from langchain_experimental.utilities import PythonREPL
python_repl = PythonREPL()
python_repl.run("print(1+1)")
# You can create the tool to pass to an agent
repl_tool = Tool(
name="python_repl",
description="ํ์ด์ฌ ์
ธ์
๋๋ค. ํ์ด์ฌ ๋ช
๋ น์ ์คํํ ๋ ์ฌ์ฉํฉ๋๋ค. ์
๋ ฅ์ ์ ํจํ ํ์ด์ฌ ๋ช
๋ น์ด์ด์ผ ํฉ๋๋ค. ๊ฐ์ ์ถ๋ ฅ์ ํ์ธํ๋ ค๋ฉด `print(...)`๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ ฅํด์ผ ํฉ๋๋ค.",
func=python_repl.run,
)
repl_tool.invoke("print(5+5)")
์ฃผ์ ํฐ์ปค ์ฐพ๊ธฐ agent
from dotenv import load_dotenv
load_dotenv()
from typing import Any, Type
from langchain_openai import ChatOpenAI
from langchain.tools import BaseTool
from pydantic import BaseModel, Field
from langchain.agents import initialize_agent, AgentType
llm = ChatOpenAI(temperature=0.1)
from langchain.utilities import DuckDuckGoSearchAPIWrapper
# schema
class StockMarketSymbolSearchToolArgsSchema(BaseModel):
query: str = Field(description="๊ฒ์ํ ์ฟผ๋ฆฌ์
๋๋ค. ์ฟผ๋ฆฌ ์์: Apple ํ์ฌ์ ์ฃผ์ ์์ฅ ์ฌ๋ณผ")
from langchain.utilities import DuckDuckGoSearchAPIWrapper
class StockMarketSymbolSearchTool(BaseTool):
name = "StockMarketSymbolSearchTool"
description = """
์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ์ ์ฃผ์ ์์ฅ ์ฌ๋ณผ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ์ธ์๋ก ์
๋ ฅํฉ๋๋ค.
"""
args_schema: Type[
StockMarketSymbolSearchToolArgsSchema
] = StockMarketSymbolSearchToolArgsSchema
def _run(self, query):
ddg = DuckDuckGoSearchAPIWrapper()
return ddg.run(query)
agent = initialize_agent(
llm=llm,
verbose=True,
agent=AgentType.OPENAI_FUNCTIONS,
handle_parsing_errors=True,
tools=[
StockMarketSymbolSearchTool(),
],
)
prompt = "Cloudflare์ ํฐ์ปค๊ฐ ๋ฌด์์ธ์ง ์๋ ค์ฃผ์ธ์. ํ๊ตญ์ด๋ก ๋ต๋ณํด์ค"
agent.invoke(prompt)
sql agent
https://github.com/lerocha/chinook-database/blob/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite
chinook_sqlite๋ฅผ ์ฌ์ฉํจ
!wget 'https://github.com/lerocha/chinook-database/releases/download/v1.4.2/Chinook_Sqlite.sql'
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
temperature=0.1,
)
from langchain_community.utilities.sql_database import SQLDatabase
db = SQLDatabase.from_uri("sqlite:///db/Chinook.sqlite")
print(db.dialect) #sqlite
print(db.get_usable_table_names())
result = db.run("select * from artist limit 5;")
# db.run("select * from artists limit 5;")
print(type(result))
result
from langchain_community.agent_toolkits import SQLDatabaseToolkit
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
from langchain.agents import create_sql_agent, AgentType
agent_executor = create_sql_agent(
llm=llm,
toolkit=toolkit,
agent_type="openai-tools",
verbose=False,
)
agent_executor.invoke(
"employees๋ ๋ช๋ช
์ด์ผ?"
)
agent_executor.invoke(
"artist ๋ช๋ช
์ด์ผ?"
)
agent_executor.invoke(
"Alanis Morissette ๋
ธ๋๋ง ๋ฝ์์ค?"
)
agent_executor.invoke({"input": "Describe the schema of the playlist table"})
agent_executor.invoke(
{
"input": "๊ตญ๊ฐ๋ณ ์ด ๋งค์ถ์ ๋์ดํฉ๋๋ค. ๊ฐ์ฅ ๋ง์ด ์ง์ถํ ๊ตญ๊ฐ?"
}
)
langgraph
์์ฆ์ langchain agent๋ณด๋ค langgraph๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊ฑฐ๊ฐ์ ๊ฐ์ธ์ ๋๋์ด๋ผ. agent์ชฝ์ ๋ง์ด ๋ณด์ง๋ ์๊ณ langgraph๋ก ๋ฐ๋ก ๋์ด๊ฐ๋ฒ๋ฆด๊น ํฉ๋๋ค.
Agent
์ธ๊ณต์ง๋ฅ Agent๋ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ํ ์ด๋ค ๊ธฐ๋ฅ์ ์ด๋ค ์์๋ก ์คํํ ์ง ๊ฒฐ์ ํ๋ ์ญํ ์ ํฉ๋๋ค. Agent์ ์ฃผ์ ํน์ง๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ชฉํ(์ ์ฑ
) ๊ธฐ๋ฐ ํ๋: ์ฃผ์ด์ง ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ํ๋ํฉ๋๋ค.
์์จ์ฑ: ๋ชฉํ๊ฐ ์ฃผ์ด์ง๋ฉด ์๋์ผ๋ก ์๋ํฉ๋๋ค.
๊ฐ์ง: ์ฃผ๋ณ ํ๊ฒฝ์์ ์ ๋ณด๋ฅผ ์์งํฉ๋๋ค.
Tools๋ Agent๊ฐ ํ ์ ์๋ ์ผ
Input: ์ฌ์ฉ์๊ฐ Agent์๊ฒ ์์
์ ํ ๋นํฉ๋๋ค.
Thought: Agent๊ฐ ์์
์ ์์ํ๊ธฐ ์ํด ๋ฌด์์ ํ ์ง ์๊ฐํฉ๋๋ค.
Action/Action Input: ์ฌ์ฉํ ๋๊ตฌ๋ฅผ ๊ฒฐ์ ํ๊ณ , ๋๊ตฌ์ ์
๋ ฅ(ํจ์์ ์
๋ ฅ๊ฐ)์ ๊ฒฐ์ ํฉ๋๋ค.
Observation: ๋๊ตฌ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๊ด์ฐฐํฉ๋๋ค.
๊ด์ฐฐ ๊ฒฐ๊ณผ ์์
์ ์๋ฃ(Finish)ํ๋ค๋ ํ๋จ์ ๋๋ฌํ ๋๊น์ง 2~4๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
Last updated