■ BaseTool 클래스를 사용해 도구를 만드는 방법을 보여준다.
▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
import asyncio from pydantic import BaseModel from pydantic import Field from langchain_core.tools import BaseTool from typing import Type from typing import Optional from langchain_core.callbacks import CallbackManagerForToolRun from langchain_core.callbacks import AsyncCallbackManagerForToolRun class CalculatorModel(BaseModel): a : int = Field(description = "first number") b : int = Field(description = "second number") class CalculatorTool(BaseTool): name : str = Field(default = "Calculator" ) description : str = Field(default = "유용한 수학 계산을 수행합니다.") args_schema : Type[BaseModel] = CalculatorModel return_direct : bool = True def _run(self, a : int, b : int, run_manager : Optional[CallbackManagerForToolRun] = None) -> str: """Use the tool.""" return a * b async def _arun(self, a : int, b : int, run_manager : Optional[AsyncCallbackManagerForToolRun] = None) -> str: """Use the tool asynchronously.""" # 계산이 저렴하다면, 아래에 표시된 것처럼 동기화 구현에 위임하면 된다. # 동기화 계산이 비싸다면, _arun 메서드 전체를 삭제해야 한다. # LangChain은 자동으로 더 나은 구현을 제공하여 다른 비동기 코드를 차단하지 않도록 스레드에서 작업을 시작한다. return self._run(a, b, run_manager = run_manager.get_sync()) async def main(): calculatorTool = CalculatorTool() print(calculatorTool.name ) print(calculatorTool.description ) print(calculatorTool.args ) print(calculatorTool.return_direct) print(calculatorTool.invoke({"a" : 2, "b" : 3})) print(await calculatorTool.ainvoke({"a" : 2, "b" : 3})) asyncio.run(main()) """ Calculator 유용한 수학 계산을 수행합니다. {'a': {'description': 'first number', 'title': 'A', 'type': 'integer'}, 'b': {'description': 'second number', 'title': 'B', 'type': 'integer'}} True 6 6 """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
aiohappyeyeballs==2.4.0 aiohttp==3.10.5 aiosignal==1.3.1 annotated-types==0.7.0 anyio==4.4.0 attrs==24.2.0 certifi==2024.8.30 charset-normalizer==3.3.2 frozenlist==1.4.1 greenlet==3.1.0 h11==0.14.0 httpcore==1.0.5 httpx==0.27.2 idna==3.10 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.3.0 langchain-core==0.3.1 langchain-text-splitters==0.3.0 langsmith==0.1.122 multidict==6.1.0 numpy==1.26.4 orjson==3.10.7 packaging==24.1 pydantic==2.9.2 pydantic_core==2.23.4 PyYAML==6.0.2 requests==2.32.3 sniffio==1.3.1 SQLAlchemy==2.0.35 tenacity==8.5.0 typing_extensions==4.12.2 urllib3==2.2.3 yarl==1.11.1 |
※ pip install langchain 명령을 실행했다.