mirror of
https://github.com/langflow-ai/langflow.git
synced 2026-07-24 07:34:10 +08:00
152 lines
44 KiB
HTML
152 lines
44 KiB
HTML
<!doctype html>
|
||
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-Agents/agent-tool-calling-agent-component" data-has-hydrated="false">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="generator" content="Docusaurus v3.7.0">
|
||
<title data-rh="true">Create a problem-solving agent | Langflow Documentation</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.langflow.org/agents-tool-calling-agent-component"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Create a problem-solving agent | Langflow Documentation"><meta data-rh="true" name="description" content="Developing agents in Langchain is complex."><meta data-rh="true" property="og:description" content="Developing agents in Langchain is complex."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.langflow.org/agents-tool-calling-agent-component"><link data-rh="true" rel="alternate" href="https://docs.langflow.org/agents-tool-calling-agent-component" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.langflow.org/agents-tool-calling-agent-component" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://UZK6BDPCVY-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com">
|
||
<link rel="preconnect" href="https://www.googletagmanager.com">
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-SLQFLQ3KPT"></script>
|
||
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-SLQFLQ3KPT",{})</script>
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml" title="Langflow Documentation" href="/opensearch.xml">
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@550;600&display=swap">
|
||
<script>!function(){window.semaphore=window.semaphore||[],window.ketch=function(){window.semaphore.push(arguments)};var e=document.createElement("script");e.type="text/javascript",e.src="https://global.ketchcdn.com/web/v3/config/datastax/langflow_org_web/boot.js",e.defer=e.async=!0,document.getElementsByTagName("head")[0].appendChild(e)}()</script>
|
||
<script defer="true">!function(){const e=e=>{if(window.gtag&&e.purposes&&"analytics"in e.purposes&&"targeted_advertising"in e.purposes){const n=!0===e.purposes.analytics?"granted":"denied",t=!0===e.purposes.targeted_advertising?"granted":"denied",a={analytics_storage:n,ad_personalization:t,ad_storage:t,ad_user_data:t};window.gtag("consent","update",a)}};window.ketch&&window.ketch("on","consent",e)}()</script><link rel="stylesheet" href="/assets/css/styles.556d0cc8.css">
|
||
<script src="/assets/js/runtime~main.36d0d05a.js" defer="defer"></script>
|
||
<script src="/assets/js/main.01cab6af.js" defer="defer"></script>
|
||
</head>
|
||
<body class="navigation-with-keyboard">
|
||
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();null!==e?t(e):window.matchMedia("(prefers-color-scheme: dark)").matches?t("dark"):(window.matchMedia("(prefers-color-scheme: light)").matches,t("light"))}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbarHideable_m1mJ"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/lf-docs-light.svg" alt="Langflow" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/lf-docs-dark.svg" alt="Langflow" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div></a></div><div class="navbar__items navbar__items--right"><a href="https://github.com/langflow-ai/langflow" target="_blank" class="navbar__item navbar__link header-github-link"></a><a href="https://twitter.com/langflow_ai" target="_blank" class="navbar__item navbar__link header-twitter-link"></a><a href="https://discord.gg/EqksyE2EX9" target="_blank" class="navbar__item navbar__link header-discord-link"></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite" aria-pressed="false"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Command+K)"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd sidebarWithHideableNavbar_wUlq"><a tabindex="-1" class="sidebarLogo_isFc" href="/"><img src="/img/lf-docs-light.svg" alt="Langflow" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/lf-docs-dark.svg" alt="Langflow" class="themedComponent_mlkZ themedComponent--dark_xIcU"></a><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/">Welcome to Langflow</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/get-started-installation">Get started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/basic-prompting">Templates</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/concepts-overview">Concepts</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/components-agents">Components</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/agents-overview">Agents</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/agents-overview">Agents overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/agents-tool-calling-agent-component">Create a problem-solving agent</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/mcp-server">Model Context Protocol (MCP)</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/configuration-api-keys">Configuration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/develop-overview">Develop</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/deployment-overview">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/api">API reference</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/integrations-apify">Integrations</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/contributing-community">Contributing</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a href="https://github.com/langflow-ai/langflow/releases/latest" target="_blank" rel="noopener noreferrer" class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false">Changelog</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/luna-for-langflow">Support</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 sidebar-ad">
|
||
<a href="https://astra.datastax.com/signup?type=langflow" target="_blank" class="menu__link">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cloud"><path d="M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"/></svg>
|
||
<div class="sidebar-ad-text-container">
|
||
<span class="sidebar-ad-text">Use Langflow in the cloud</span>
|
||
<span class="sidebar-ad-text sidebar-ad-text-gradient">Sign up for DataStax Langflow</span>
|
||
</div>
|
||
</a>
|
||
</li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Agents</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Create a problem-solving agent</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Create a problem-solving agent</h1></header><style>[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }</style>
|
||
<p>Developing <strong>agents</strong> in Langchain is complex.</p>
|
||
<p>The <code>AgentComponent</code> is a component for easily creating an AI agent capable of analyzing tasks using tools you provide.</p>
|
||
<p>The component contains all of the elements you'll need for creating an agent. Instead of managing LLM models and providers, pick your model and enter your API key. Instead of connecting a <strong>Prompt</strong> component, enter instructions in the component's <strong>Agent Instruction</strong> fields.</p>
|
||
<p><img decoding="async" loading="lazy" alt="Tool calling agent component" src="/assets/images/tool-calling-agent-component-05bf4384404781510bc02454d867c342.png" width="864" height="1728" class="img_ev3q"></p>
|
||
<p>Learn how to build a flow starting with the <strong>Tool calling agent</strong> component, and see how it can help you solve problems.</p>
|
||
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="prerequisites">Prerequisites<a href="#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites"></a></h2>
|
||
<ul>
|
||
<li><a href="https://platform.openai.com/" target="_blank" rel="noopener noreferrer">An OpenAI API key</a></li>
|
||
<li><a href="https://www.searchapi.io/" target="_blank" rel="noopener noreferrer">A Search API key</a></li>
|
||
</ul>
|
||
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="create-a-problem-solving-agent-with-the-agent-component">Create a problem-solving agent with the Agent component<a href="#create-a-problem-solving-agent-with-the-agent-component" class="hash-link" aria-label="Direct link to Create a problem-solving agent with the Agent component" title="Direct link to Create a problem-solving agent with the Agent component"></a></h2>
|
||
<p>Create a problem-solving agent in Langflow, starting with the <strong>Tool calling agent</strong>.</p>
|
||
<ol>
|
||
<li>Click <strong>New Flow</strong>, and then click <strong>Blank Flow</strong>.</li>
|
||
<li>Click and drag an <strong>Agent</strong> component to your workspace.
|
||
The default settings are acceptable for now, so this guide assumes you're using <strong>Open AI</strong> for the LLM.</li>
|
||
<li>Add your <strong>Open AI API Key</strong> to the <strong>Agent</strong> component.</li>
|
||
<li>Add <strong>Chat input</strong> and <strong>Chat output</strong> components to your flow, and connect them to the tool calling agent.</li>
|
||
</ol>
|
||
<p><img decoding="async" loading="lazy" alt="Chat with agent component" src="/assets/images/tool-calling-agent-add-chat-add13631186c9475f8e74bdcb9b0446e.png" width="2266" height="1620" class="img_ev3q"></p>
|
||
<p>This basic flow enables you to chat with the agent with the <strong>Playground</strong> after you've connected some <strong>Tools</strong>.</p>
|
||
<ol start="5">
|
||
<li>Connect the <strong>Search API</strong> tool component to your agent.</li>
|
||
<li>Add your <strong>Search API key</strong> to the component.
|
||
Your agent can now query the Search API for information.</li>
|
||
<li>Connect a <strong>Calculator</strong> tool for solving basic math problems.</li>
|
||
<li>Connect an <strong>API Request</strong> component to the agent.
|
||
This component is not in the <strong>Tools</strong> category, but the agent can still use it as a tool by enabling <strong>Tool Mode</strong>.
|
||
<strong>Tool Mode</strong> makes a component into a tool by adding a <strong>Toolset</strong> port that can be connected to an agent's <strong>Tools</strong> port.
|
||
To enable <strong>Tool Mode</strong> on the component, click <strong>Tool Mode</strong>.
|
||
The component's fields change dynamically based on the mode it's in.</li>
|
||
</ol>
|
||
<p><img decoding="async" loading="lazy" alt="Chat with agent component" src="/assets/images/tool-calling-agent-add-tools-c6a8fb643df51ff62d1da858d583d15b.png" width="1786" height="1664" class="img_ev3q"></p>
|
||
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="solve-problems-with-the-agent">Solve problems with the agent<a href="#solve-problems-with-the-agent" class="hash-link" aria-label="Direct link to Solve problems with the agent" title="Direct link to Solve problems with the agent"></a></h2>
|
||
<p>Your agent now has tools for performing a web search, doing basic math, and performing API requests. You can solve many problems with just these capabilities.</p>
|
||
<ul>
|
||
<li>Your tabletop game group cancelled, and you're stuck at home.
|
||
Point <strong>API Request</strong> to an online rules document, tell your agent <code>You are a fun game organizer who uses the tools at your disposal</code>, and play a game.</li>
|
||
<li>You need to learn a new software language quickly.
|
||
Point <strong>API Request</strong> to some docs, tell your agent <code>You are a knowledgeable software developer who uses the tools at your disposal</code>, and start learning.</li>
|
||
</ul>
|
||
<p>See what problems you can solve with this flow. As your problem becomes more specialized, add more tools. For example, add a Python REPL component to solve math problems that are too challenging for the calculator.</p>
|
||
<h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="edit-a-tools-metadata">Edit a tool's metadata<a href="#edit-a-tools-metadata" class="hash-link" aria-label="Direct link to Edit a tool's metadata" title="Direct link to Edit a tool's metadata"></a></h3>
|
||
<p>To edit a tool's metadata, click the <strong>Edit Tools</strong> button in the tool to modify its <code>name</code>, <code>description</code>, or <code>enabled</code> metadata. These fields help connected agents understand how to use the tool, without having to modify the agent's prompt instructions.</p>
|
||
<p>For example, the <a href="/components-data#url">URL</a> component has three tools available when <strong>Tool Mode</strong> is enabled.</p>
|
||
<table><thead><tr><th>Tool Name</th><th>Description</th><th>Enabled</th></tr></thead><tbody><tr><td><code>URL-fetch_content</code></td><td>Use this tool to fetch and retrieve raw content from a URL, including HTML and other structured data. The full response content is returned.</td><td>true</td></tr><tr><td><code>URL-fetch_content_text</code></td><td>Use this tool to fetch and extract clean, readable text content from a webpage. Only plain text content is returned.</td><td>true</td></tr><tr><td><code>URL-as_dataframe</code></td><td>Use this tool to fetch structured data from a URL and convert it into a tabular format. Data is returned in a structured DataFrame table format.</td><td>true</td></tr></tbody></table>
|
||
<p>A connected agent will have a clear idea of each tool's capabilities based on the <code>name</code> and <code>description</code> metadata. The <code>enabled</code> boolean controls the tool's availability to the agent. If you think an agent is using a tool incorrectly, edit a tool's metadata to help the agent better understand the tool.</p>
|
||
<p>Tool names and descriptions can be edited, but the default tool identifiers cannot be changed. If you want to change the tool identifier, create a custom component.</p>
|
||
<p>To see which tools the agent is using and how it's using them, ask the agent, <code>What tools are you using to answer my questions?</code></p>
|
||
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="use-an-agent-as-a-tool">Use an agent as a tool<a href="#use-an-agent-as-a-tool" class="hash-link" aria-label="Direct link to Use an agent as a tool" title="Direct link to Use an agent as a tool"></a></h2>
|
||
<p>The agent component itself also supports <strong>Tool Mode</strong> for creating multi-agent flows.</p>
|
||
<p>Add an agent to your problem-solving flow that uses a different OpenAI model for more specialized problem solving.</p>
|
||
<ol>
|
||
<li>Click and drag an <strong>Agent</strong> component to your workspace.</li>
|
||
<li>Add your <strong>Open AI API Key</strong> to the <strong>Agent</strong> component.</li>
|
||
<li>In the <strong>Model Name</strong> field, select <code>gpt-4o</code>.</li>
|
||
<li>Click <strong>Tool Mode</strong> to use this new agent as a tool.</li>
|
||
<li>Connect the new agent's <strong>Toolset</strong> port to the previously created agent's <strong>Tools</strong> port.</li>
|
||
<li>Connect <strong>Search API</strong> and <strong>API Request</strong> to the new agent.
|
||
The new agent will use <code>gpt-4o</code> for the larger tasks of scraping and searching information that requires large context windows.
|
||
The problem-solving agent will now use this agent as a tool, with its unique LLM and toolset.</li>
|
||
</ol>
|
||
<p><img decoding="async" loading="lazy" alt="The tool calling agent as a tool" src="/assets/images/tool-calling-agent-as-tool-c3ad685e87943112803cf97992cb17b2.png" width="2498" height="1504" class="img_ev3q"></p>
|
||
<ol start="7">
|
||
<li>The new agent's metadata can be edited to help the problem-solving agent understand how to use it.
|
||
Click <strong>Edit Tools</strong> to modify the new agent's <code>name</code> or <code>description</code> metadata so its usage is clear to the problem-solving agent.
|
||
For example, the default tool name is <code>Agent</code>. Edit the name to <code>Agent-gpt-4o</code>, and edit the description to <code>Use the gpt-4o model for complex problem solving</code>. The problem-solving agent will understand that this is the <code>gpt-4o</code> agent, and will use it for tasks requiring a larger context window.</li>
|
||
</ol>
|
||
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="components-as-tools">Add custom components as tools<a href="#components-as-tools" class="hash-link" aria-label="Direct link to Add custom components as tools" title="Direct link to Add custom components as tools"></a></h2>
|
||
<p>An agent can use custom components as tools.</p>
|
||
<ol>
|
||
<li>
|
||
<p>To add a custom component to the problem-solving agent flow, click <strong>New Custom Component</strong>.</p>
|
||
</li>
|
||
<li>
|
||
<p>Add custom Python code to the custom component.
|
||
Here's an example text analyzer for sentiment analysis.</p>
|
||
</li>
|
||
</ol>
|
||
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span>from langflow.custom import Component</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span>from langflow.io import MessageTextInput, Output</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span>from langflow.schema import Data</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span>import re</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span>class TextAnalyzerComponent(Component):</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> display_name = "Text Analyzer"</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> description = "Analyzes and transforms input text."</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> documentation: str = "http://docs.langflow.org/components/custom"</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> icon = "chart-bar"</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> name = "TextAnalyzerComponent"</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> inputs = [</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> MessageTextInput(</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> name="input_text",</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> display_name="Input Text",</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> info="Enter text to analyze",</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> value="Hello, World!",</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> tool_mode=True,</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> ),</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> ]</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> outputs = [</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> Output(display_name="Analysis Result", name="output", method="analyze_text"),</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> ]</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> def analyze_text(self) -> Data:</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> text = self.input_text</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> </span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> # Perform text analysis</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> word_count = len(text.split())</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> char_count = len(text)</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> sentence_count = len(re.findall(r'\w+[.!?]', text))</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> </span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> # Transform text</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> reversed_text = text[::-1]</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> uppercase_text = text.upper()</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> </span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> analysis_result = {</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> "original_text": text,</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> "word_count": word_count,</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> "character_count": char_count,</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> "sentence_count": sentence_count,</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> "reversed_text": reversed_text,</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> "uppercase_text": uppercase_text</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> </span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> data = Data(value=analysis_result)</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> self.status = data</span></div></div><div><span class="ch-code-line-number">_<!-- -->50</span><div style="display:inline-block;margin-left:16px"><span> return data</span></div></div><br></code></div></div>
|
||
<ol start="3">
|
||
<li>To enable the custom component as a tool, click <strong>Tool Mode</strong>.</li>
|
||
<li>Connect the tool output to the agent's tools input.</li>
|
||
<li>Ask the agent, <code>What tools are you using to answer my questions?</code>
|
||
Your response will be similar to the following, and will include your custom component.</li>
|
||
</ol>
|
||
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>I have access to several tools that assist me in answering your questions, including:</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Search API: This allows me to search for recent information or results on the web.</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>HTTP Requests: I can make HTTP requests to various URLs to retrieve data or interact with APIs.</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Calculator: I can evaluate basic arithmetic expressions.</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Text Analyzer: I can analyze and transform input text.</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>Current Date and Time: I can retrieve the current date and time in various time zones.</span></div></div><br></code></div></div>
|
||
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="make-any-component-a-tool">Make any component a tool<a href="#make-any-component-a-tool" class="hash-link" aria-label="Direct link to Make any component a tool" title="Direct link to Make any component a tool"></a></h2>
|
||
<p>If the component you want to use as a tool doesn't have a <strong>Tool Mode</strong> button, add <code>tool_mode=True</code> to one of the component's inputs, and connect the new <strong>Toolset</strong> output to the agent's <strong>Tools</strong> input.</p>
|
||
<p>Langflow supports <strong>Tool Mode</strong> for the following data types:</p>
|
||
<ul>
|
||
<li><code>DataInput</code></li>
|
||
<li><code>DataFrameInput</code></li>
|
||
<li><code>PromptInput</code></li>
|
||
<li><code>MessageTextInput</code></li>
|
||
<li><code>MultilineInput</code></li>
|
||
<li><code>DropdownInput</code></li>
|
||
</ul>
|
||
<p>For example, the <a href="#components-as-tools">components as tools</a> example above adds <code>tool_mode=True</code> to the <code>MessageTextInput</code> input so the custom component can be used as a tool.</p>
|
||
<div class="ch-codeblock not-prose" data-ch-theme="github-dark"><div class="ch-code-wrapper ch-code" data-ch-measured="false"><code class="ch-code-scroll-parent"><br><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>inputs = [</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span> MessageTextInput(</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span> name="input_text",</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span> display_name="Input Text",</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span> info="Enter text to analyze",</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span> value="Hello, World!",</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span> tool_mode=True,</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span> ),</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>]</span></div></div><br></code></div></div>
|
||
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="use-the-run-flow-component-as-a-tool">Use the Run Flow component as a tool<a href="#use-the-run-flow-component-as-a-tool" class="hash-link" aria-label="Direct link to Use the Run Flow component as a tool" title="Direct link to Use the Run Flow component as a tool"></a></h2>
|
||
<p>An agent can use flows that are saved in your workspace as tools with the <a href="/components-logic#run-flow">Run flow</a> component.</p>
|
||
<ol>
|
||
<li>To add a <strong>Run flow</strong> component, click and drag a <strong>Run flow</strong> component to your workspace.</li>
|
||
<li>Select the flow you want the agent to use as a tool.</li>
|
||
<li>Enable <strong>Tool Mode</strong> in the component.</li>
|
||
<li>Connect the tool output to the agent's tools input.</li>
|
||
<li>To enable tool mode, select a <strong>Flow</strong> in the <strong>Run flow</strong> component, and then click <strong>Tool Mode</strong>.</li>
|
||
<li>Ask the agent, <code>What tools are you using to answer my questions?</code>
|
||
Your flow should be visible in the response as a tool.</li>
|
||
</ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/agents-overview"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Agents overview</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/mcp-server"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Use Langflow as an MCP server</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#prerequisites" class="table-of-contents__link toc-highlight">Prerequisites</a></li><li><a href="#create-a-problem-solving-agent-with-the-agent-component" class="table-of-contents__link toc-highlight">Create a problem-solving agent with the Agent component</a></li><li><a href="#solve-problems-with-the-agent" class="table-of-contents__link toc-highlight">Solve problems with the agent</a><ul><li><a href="#edit-a-tools-metadata" class="table-of-contents__link toc-highlight">Edit a tool's metadata</a></li></ul></li><li><a href="#use-an-agent-as-a-tool" class="table-of-contents__link toc-highlight">Use an agent as a tool</a></li><li><a href="#components-as-tools" class="table-of-contents__link toc-highlight">Add custom components as tools</a></li><li><a href="#make-any-component-a-tool" class="table-of-contents__link toc-highlight">Make any component a tool</a></li><li><a href="#use-the-run-flow-component-as-a-tool" class="table-of-contents__link toc-highlight">Use the Run Flow component as a tool</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title"></div><ul class="footer__items clean-list"><li class="footer__item"><div class="footer-links">
|
||
<span>© 2025 Langflow</span>
|
||
<span id="preferenceCenterContainer"> · <a href="https://langflow.org/preferences">Manage Privacy Choices</a></span>
|
||
</div></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/lf-docs-light.svg" alt="Langflow" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width="160" height="40"><img src="/img/lf-docs-dark.svg" alt="Langflow" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width="160" height="40"></div></div></div></footer><div style="position:fixed;right:20px;bottom:20px;z-index:100;display:flex;align-items:center;gap:10px;cursor:pointer"><div style="background-color:#f6f6f6;border-radius:50%;width:48px;height:48px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px rgba(0,0,0,0.1)"><img src="/img/langflow-icon-black-transparent.svg" style="width:40px" alt="Search"></div></div></div>
|
||
</body>
|
||
</html> |