자연어 처리와 대화형 AI 모델을 통해 복잡한 문제를 해결하려면, 단순히 언어를 이해하는 것을 넘어서 다양한 툴을 활용할 필요가 있습니다. LangChain은 이러한 필요성을 충족시킬 수 있는 프레임워크로, 특히 Tool Calling 기능을 통해 외부 데이터와의 상호작용을 쉽게 만들어 줍니다. 이 글에서는 LangChain을 활용한 Tool Calling의 작동 원리와 실제 사용 방법을 구체적인 예제를 통해 소개하겠습니다.
LangChain이란?
LangChain은 자연어 처리 모델을 좀 더 강력하고 유연하게 사용할 수 있게 도와주는 Python 기반의 오픈소스 프레임워크입니다. 이 프레임워크는 AI 모델과 다양한 외부 도구를 연결하는 데 초점을 맞추고 있어, AI 모델이 API 호출, 데이터베이스 쿼리, 계산 작업 등을 직접 수행하도록 할 수 있습니다. Tool Calling은 이러한 외부 툴들과의 상호작용을 통해 문제를 해결하는 데 사용되는 LangChain의 핵심 기능 중 하나입니다. LangChain에 대한 추가적인 정보는 블로그의 이전 포스트를 참고해주세요.
Tool Calling의 개념
Tool Calling은 말 그대로 특정 작업을 수행할 수 있는 툴을 호출하는 것을 의미합니다. 예를 들어, AI가 날씨 정보를 제공해야 할 때, AI가 직접 날씨 API를 호출하여 사용자가 원하는 정보를 전달하는 방식입니다. LangChain을 통해 LLM(Large Language Model)이 직접 툴을 호출하고, 그 결과를 사용하여 사용자에게 답변을 제공할 수 있습니다. Tool Calling에 대한 추가적인 정보는 블로그의 이전 포스트를 참고해주세요.
How to: use built-in tools and toolkits
LangChain에는 다양한 서드 파티 도구가 있습니다.
Search 도구
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 |
Code 인터프리터 (Code Interpreter)
Tool/Toolkit | Supported Languages | Sandbox Lifetime | Supports File Uploads | Return Types | Supports Self-Hosting |
Azure Container Apps dynamic sessions | Python | 1 Hour | ✅ | Text, Images | ❌ |
Bearly Code Interpreter | Python | Resets on Execution | ✅ | Text | ❌ |
E2B Data Analysis | Python. In beta: JavaScript, R, Java | 24 Hours | ✅ | Text, Images, Videos | ✅ |
Riza Code Interpreter | Python, JavaScript, PHP, Ruby | Resets on Execution | ✅ | Text | ✅ |
생산성 (Productivity)
Tool/Toolkit | Pricing |
Github Toolkit | Free |
Gitlab Toolkit | Free for personal project |
Gmail Toolkit | Free, with limit of 250 quota units per user per second |
Infobip Tool | Free trial, with variable pricing after |
Jira Toolkit | Free, with rate limits |
Office365 Toolkit | Free with Office365, includes rate limits |
Slack Toolkit | Free |
Twilio Tool | Free trial, with pay-as-you-go pricing after |
웹 브라우징 (Web browsing)
Tool/Toolkit | Pricing | Supports Interacting with the Browser |
MultiOn Toolkit | 40 free requests/day | ✅ |
PlayWright Browser Toolkit | Free | ✅ |
Requests Toolkit | Free | ❌ |
데이터베이스 (database)
Tool/Toolkit | Allowed Operations |
Cassandra Database Toolkit | SELECT and schema introspection |
SQLDatabase Toolkit | Any SQL operation |
Spark SQL Toolkit | Any SQL operation |
이 외의 다양한 Tool
Tool/Tollkit | Description |
AINetwork Toolkit | AI Network은 대규모 AI 모델과 애플리케이션을 지원하기 위해 설계된 레이어 1 블록체인입니다. |
Alpha Vantage | Alpha Vantage는 실시간 및 과거 금융 데이터를 제공합니다. |
Amadeus Toolkit | 이 노트북은 LangChain을 Amadeus 툴킷에 연결하는 방법을 설명합니다. |
ArXiv | 이 노트북은 ArXiv 툴을 에이전트와 함께 사용하는 방법을 설명합니다. |
AskNews | AskNews는 최신 글로벌 뉴스(또는 과거 뉴스)를 LLM에 주입합니다. |
AWS Lambda | Amazon AWS Lambda는 서버리스 컴퓨팅 서비스입니다. |
Azure AI Services Toolkit | 이 툴킷은 Azure AI Services API와 상호작용하기 위해 사용됩니다. |
Azure Cognitive Services Toolkit | 이 툴킷은 Azure Cognitive Services API와 상호작용하기 위해 사용됩니다. |
Azure Container Apps dynamic sessions | Azure Container Apps는 보안적이고 확장 가능한 환경을 제공합니다. |
Shell (bash) | 에이전트에 셸 접근을 허용하는 것은 강력하지만, 외부 사용에는 위험이 있을 수 있습니다. |
Bearly Code Interpreter | Bearly Code Interpreter는 원격 코드 실행을 가능하게 합니다. |
CDP | CDP Agentkit 툴킷에는 LLM 에이전트가 상호작용할 수 있는 도구가 포함되어 있습니다. |
ClickUp Toolkit | ClickUp은 중소기업 및 개인을 위한 생산성 플랫폼입니다. |
Cogniswitch Toolkit | CogniSwitch는 프로덕션 수준의 애플리케이션을 구축할 수 있게 합니다. |
Connery Toolkit and Tools | Connery 툴킷과 도구를 사용하여 Connery Action을 통합할 수 있습니다. |
Dall-E Image Generator | OpenAI Dall-E는 텍스트에서 이미지를 생성하는 모델입니다. |
Databricks Unity Catalog (UC) | 이 노트북은 LangChain 툴로 UC 기능을 사용하는 방법을 보여줍니다. |
DataForSEO | DataForSeo는 종합적인 SEO 및 디지털 마케팅 데이터를 제공합니다. |
Dataherald | 이 노트북은 dataherald 구성 요소를 사용하는 방법을 설명합니다. |
Eden AI | 이 Jupyter 노트북은 Eden AI 도구를 AI 에이전트와 함께 사용하는 방법을 설명합니다. |
Eleven Labs Text2Speech | 이 노트북은 ElevenLabs API를 사용하여 텍스트를 음성으로 변환하는 방법을 보여줍니다. |
File System | LangChain은 로컬 파일 시스템과 상호작용하기 위한 도구를 제공합니다. |
Golden Query | Golden은 자연어 API를 통해 데이터를 쿼리하고 풍부하게 만드는 도구를 제공합니다. |
Google Books | Google Books 사용 방법 개요 |
Google Cloud Text-to-Speech | Google Cloud Text-to-Speech는 자연스러운 음성을 합성하는 기능을 제공합니다. |
Gradio | Hugging Face Spaces에는 수천 개의 Gradio 앱이 있습니다. 이 라이브러리를 통해 접근 가능합니다. |
GraphQL | GraphQL은 API를 쿼리하기 위한 언어이자 실행 런타임입니다. |
Human as a tool | 인간은 AGI이기 때문에 AI를 돕기 위한 도구로 사용될 수 있습니다. |
IFTTT WebHooks | 이 노트북은 IFTTT Webhooks를 사용하는 방법을 설명합니다. |
Ionic Shopping Tool | Ionic은 AI 어시스턴트를 위한 전자상거래 마켓플레이스를 제공합니다. |
Lemon Agent | Lemon Agent는 강력한 AI 어시스턴트를 몇 분 안에 구축하고 자동화할 수 있게 돕습니다. |
Memorize | 비지도 학습을 통해 LLM 자체를 미세 조정하여 정보를 암기하는 방법을 설명합니다. |
NASA Toolkit | 이 노트북은 NASA 툴킷과 상호작용하는 방법을 설명합니다. |
Nuclia Understanding | Nuclia는 비정형 데이터를 자동으로 인덱싱하여 내부 데이터베이스에서 검색할 수 있게 합니다. |
NVIDIA Riva: ASR and TTS | NVIDIA Riva는 자동 음성 인식 및 음성 합성 기능을 제공합니다. |
OpenAPI Toolkit | 임의의 API를 소비할 수 있는 에이전트를 구축할 수 있습니다. 이 경우 API는 OpenAPI 규격을 따릅니다. |
Natural Language API Toolkits | Natural Language API Toolkits(NLAToolkits)는 LangChain 에이전트가 자연어 API와 상호작용할 수 있도록 합니다. |
Oracle AI Vector Search: Generate Summary | Oracle AI Vector Search는 AI 애플리케이션을 위한 벡터 검색 솔루션입니다. |
Passio NutritionAI | NutritionAI는 AI 어시스턴트에 음식 영양 정보를 추가할 수 있는 도구입니다. |
Polygon IO Toolkit and Tools | 이 노트북은 Polygon IO와 상호작용하는 방법을 설명합니다. |
PowerBI Toolkit | 이 노트북은 Power BI 데이터셋과 상호작용하는 방법을 보여줍니다. |
PubMed | PubMed®는 생물 의학 문헌에 대한 3500만 개 이상의 인용을 제공합니다. |
Robocorp Toolkit | 이 노트북은 Robocorp Action Server와 시작하는 방법을 설명합니다. |
SceneXplain | SceneXplain은 이미지 설명 서비스를 제공합니다. |
Semantic Scholar API Tool | 이 노트북은 Semantic Scholar 도구를 에이전트와 함께 사용하는 방법을 보여줍니다. |
StackExchange | Stack Exchange는 질문과 답변 형식의 웹사이트 네트워크입니다. |
Steam Toolkit | Steam은 비디오 게임 디지털 배포 서비스입니다. |
Upstage | 이 노트북은 Upstage 기반의 검사 툴을 사용하는 방법을 설명합니다. |
Wikidata | Wikidata는 자유롭고 개방된 지식 베이스로 읽기 및 편집이 가능합니다. |
Wikipedia | Wikipedia는 다국어의 자유 온라인 백과사전입니다. |
Wolfram Alpha | 이 노트북은 Wolfram Alpha 구성 요소를 사용하는 방법을 설명합니다. |
Yahoo Finance News | 이 노트북은 Yahoo Finance News 툴을 사용하는 방법을 설명합니다. |
YouTube | YouTube Search 패키지를 사용하여 YouTube 비디오를 검색하는 방법을 설명합니다. |
ZenGuard AI | ZenGuard AI를 Langchain에 빠르게 설정하는 방법을 설명하는 도구입니다. |
Example: Wikipedia
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
api_wrapper = WikipediaAPIWrapper(top_k_results=1, doc_content_chars_max=100)
tool = WikipediaQueryRun(api_wrapper=api_wrapper)
print(tool.invoke({"query": "langchain"}))
해당 도구에는 다음과 같은 기본값이 연결되어 있습니다.
print(f"Name: {tool.name}")
print(f"Description: {tool.description}")
print(f"args schema: {tool.args}")
print(f"returns directly?: {tool.return_direct}")
기본 Tools를 커스터마이징 하기
인수의 내장된 이름, 설명 및 JSON 스키마를 수정할 수도 있습니다. 인수의 JSON 스키마를 정의할 때 입력은 함수와 동일하게 유지해야 하므로 변경해서는 안 됩니다. 하지만 각 입력에 대한 사용자 정의 설명을 쉽게 정의할 수 있습니다.
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
from pydantic import BaseModel, Field
class WikiInputs(BaseModel):
"""Inputs to the wikipedia tool."""
query: str = Field(
description="query to look up in Wikipedia, should be 3 or less words"
)
tool = WikipediaQueryRun(
name="wiki-tool",
description="look up things in wikipedia",
args_schema=WikiInputs,
api_wrapper=api_wrapper,
return_direct=True,
)
print(tool.run("langchain"))
print(f"Name: {tool.name}")
print(f"Description: {tool.description}")
print(f"args schema: {tool.args}")
print(f"returns directly?: {tool.return_direct}")
빌트인 toolkits 사용하기
툴킷은 특정 작업에 함께 사용하도록 설계된 도구 모음입니다.
모든 툴킷은 도구 목록을 반환하는 get_tools 메서드를 노출합니다. 일반적으로 다음과 같은 방식으로 사용해야 합니다.
# Initialize a toolkit
toolkit = ExampleTookit(...)
# Get list of tools
tools = toolkit.get_tools()
'AI > 어플리케이션 개발' 카테고리의 다른 글
LangChain을 활용한 Tool Calling # 4 (3) | 2024.11.29 |
---|---|
LangChain을 활용한 Tool Calling # 3 (0) | 2024.11.29 |
LangChain을 활용한 Tool Calling # 1 (2) | 2024.11.29 |
LLM 어플리케이션에서의 Tool Calling: AI가 더 똑똑해지는 방법 (0) | 2024.11.29 |
LLM 애플리케이션 개발 훑어보기 - LangChain #3 Model I/O (1) | 2024.01.23 |