Files
langflow/chat-with-files.html
github-merge-queue[bot] abb6ec69be deploy: 61a323d97d
2025-08-27 18:54:40 +00:00

145 lines
53 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-Tutorials/chat-with-files" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.8.1">
<title data-rh="true">Create a chatbot that can ingest files | 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/chat-with-files"><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 chatbot that can ingest files | Langflow Documentation"><meta data-rh="true" name="description" content="This tutorial shows you how to build a chatbot that can read and answer questions about files you upload, such as meeting notes or job applications."><meta data-rh="true" property="og:description" content="This tutorial shows you how to build a chatbot that can read and answer questions about files you upload, such as meeting notes or job applications."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.langflow.org/chat-with-files"><link data-rh="true" rel="alternate" href="https://docs.langflow.org/chat-with-files" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.langflow.org/chat-with-files" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://UZK6BDPCVY-dsn.algolia.net" crossorigin="anonymous"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Create a chatbot that can ingest files","item":"https://docs.langflow.org/chat-with-files"}]}</script><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">
<script>!function(){var e="analytics",t=window[e]=window[e]||[];if(!t.initialize)if(t.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{t.invoked=!0,t.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"],t.factory=function(n){return function(){if(window[e].initialized)return window[e][n].apply(window[e],arguments);var r=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(n)>-1){var i=document.querySelector("link[rel='canonical']");r.push({__t:"bpc",c:i&&i.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}return r.unshift(n),t.push(r),t}};for(var n=0;n<t.methods.length;n++){var r=t.methods[n];t[r]=t.factory(r)}t.load=function(n,r){var i=document.createElement("script");i.type="text/javascript",i.async=!0,i.setAttribute("data-global-segment-analytics-key",e),i.src="https://cdn.segment.com/analytics.js/v1/"+n+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(i,a),t._loadOptions=r},t._writeKey="60AfGDrVxy8nAGJngo3fCYWG4LvhMAlG",t.SNIPPET_VERSION="5.2.0",t.load("60AfGDrVxy8nAGJngo3fCYWG4LvhMAlG"),t.page()}}()</script>
<script>window.__SCROLL_TRACKING_CONFIG__={selectors:[{selector:"h1, h2, h3, h4, h5, h6",eventName:"Docs.langflow.org - Heading Viewed",properties:{element_type:"heading"}},{selector:".ch-codeblock",eventName:"Docs.langflow.org - Codeblock Viewed",properties:{element_type:"code",language:"helper:codeLanguage"}}]}</script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@550;600&amp;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.40667d1b.css">
<script src="/assets/js/runtime~main.77c6ff16.js" defer="defer"></script>
<script src="/assets/js/main.6b3faa68.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),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="theme-layout-navbar navbar navbar--fixed-top navbarHideable_m1mJ"><div class="navbar__inner"><div class="theme-layout-navbar-left 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="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/langflow-ai/langflow" target="_blank" class="navbar__item navbar__link header-github-link" data-event="Docs.langflow.org - Social Clicked" data-platform="github"></a><a href="https://twitter.com/langflow_ai" target="_blank" class="navbar__item navbar__link header-twitter-link" data-event="Docs.langflow.org - Social Clicked" data-platform="x"></a><a href="https://discord.gg/EqksyE2EX9" target="_blank" class="navbar__item navbar__link header-discord-link" data-event="Docs.langflow.org - Social Clicked" data-platform="discord"></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP 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" aria-hidden="true" class="toggleIcon_g3eP 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><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></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="theme-layout-main 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"><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="/about-langflow">Get started</a></div><ul 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="/about-langflow">About Langflow</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/get-started-installation">Install Langflow</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/get-started-quickstart">Quickstart</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 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" tabindex="0" href="/chat-with-rag">Tutorials</a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/chat-with-rag">Create a vector RAG chatbot</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/chat-with-files">Create a chatbot that can ingest files</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/agent-tutorial">Connect applications to agents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/mcp-tutorial">Connect to MCP servers from your application</a></li></ul></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="/concepts-overview">Flows</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="/agents">Agents</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="/mcp-client">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="/api-keys-and-authentication">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">Deploy</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-components">Components 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="/api-reference-api-examples">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="/contributing-community">Contribute</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="/release-notes">Release notes</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="/troubleshoot">Support</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 sidebar-ad">
<a href="https://www.langflow.org/desktop" target="_blank" class="menu__link">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1645_37)">
<path d="M12 17H20C21.1046 17 22 16.1046 22 15V13M12 17H4C2.89543 17 2 16.1046 2 15V5C2 3.89543 2.89543 3 4 3H10M12 17V21M8 21H12M12 21H16M11.75 10.2917H13.2083L16.125 7.375H17.5833L20.5 4.45833H21.9583M16.125 11.75H17.5833L20.5 8.83333H21.9583M11.75 5.91667H13.2083L16.125 3H17.5833" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_1645_37">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>
<div class="sidebar-ad-text-container">
<span class="sidebar-ad-text">Get started in minutes</span>
<span class="sidebar-ad-text sidebar-ad-text-gradient">Download Langflow Desktop</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"><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">Get started</span></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Tutorials</span></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Create a chatbot that can ingest files</span></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 chatbot that can ingest files</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>This tutorial shows you how to build a chatbot that can read and answer questions about files you upload, such as meeting notes or job applications.</p>
<p>For example, you could upload a contract and ask, “What are the termination clauses in this agreement?” Or upload a resume and ask, “Does this candidate have experience with marketing analytics?”</p>
<p>The main focus of this tutorial is to show you how to provide files as input to a Langflow flow, so your chatbot can use the content of those files in its responses.</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="/get-started-installation">Install and start Langflow</a></li>
<li>Create a <a href="/api-keys-and-authentication">Langflow API key</a></li>
<li>Create an <a href="https://platform.openai.com/api-keys" target="_blank" rel="noopener noreferrer">OpenAI API key</a></li>
</ul>
<p>This tutorial uses an OpenAI LLM. If you want to use a different provider, you need a valid credential for that provider.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="create-a-flow-that-accepts-file-input">Create a flow that accepts file input<a href="#create-a-flow-that-accepts-file-input" class="hash-link" aria-label="Direct link to Create a flow that accepts file input" title="Direct link to Create a flow that accepts file input"></a></h2>
<p>To ingest files, your flow must have a <strong>File</strong> component attached to a component that receives input, such as a <strong>Prompt Template</strong> or <strong>Agent</strong> component.</p>
<p>The following steps modify the <strong>Basic Prompting</strong> template to accept file input:</p>
<ol>
<li>
<p>In Langflow, click <strong>New Flow</strong>, and then select the <strong>Basic Prompting</strong> template.</p>
</li>
<li>
<p>In the <strong>Language Model</strong> component, enter your OpenAI API key.</p>
<p>If you want to use a different provider or model, edit the <strong>Model Provider</strong>, <strong>Model Name</strong>, and <strong>API Key</strong> fields accordingly.</p>
</li>
<li>
<p>To verify that your API key is valid, click <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play" aria-hidden="true"><polygon points="6 3 20 12 6 21 6 3"></polygon></svg> <strong>Playground</strong>, and then ask the LLM a question.
The LLM should respond according to the specifications in the <strong>Prompt Template</strong> component&#x27;s <strong>Template</strong> field.</p>
</li>
<li>
<p>Exit the <strong>Playground</strong>, and then modify the <strong>Prompt Template</strong> component to accept file input in addition to chat input.
To do this, edit the <strong>Template</strong> field, and then replace the default prompt with the following text:</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>ChatInput:</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>{chat-input}</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>File:</span></div></div><div><span class="ch-code-line-number">_<!-- -->10</span><div style="display:inline-block;margin-left:16px"><span>{file}</span></div></div><br></code></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>You can use any string to name your template variables.
These strings become the names of the fields (input ports) on the <strong>Prompt Template</strong> component.</p><p>For this tutorial, the variables are named after the components that connect to them: <strong>chat-input</strong> for the <strong>Chat Input</strong> component and <strong>file</strong> for the <strong>File</strong> component.</p></div></div>
</li>
<li>
<p>Add a <a href="/components-data#file"><strong>File</strong> component</a> to the flow, and then connect the <strong>Raw Content</strong> output port to the <strong>Prompt Template</strong> component&#x27;s <strong>file</strong> input port.
To connect ports, click and drag from one port to the other.</p>
<p>You can add files directly to the <strong>File</strong> component to pre-load input before running the flow, or you can load files at runtime. The next section of this tutorial covers runtime file uploads.</p>
<p>At this point your flow has five components. The <strong>Chat Input</strong> and <strong>File</strong> components are connected to the <strong>Prompt Template</strong> component&#x27;s input ports. Then, the <strong>Prompt Template</strong> component&#x27;s output port is connected to the <strong>Language Model</strong> component&#x27;s input port. Finally, the <strong>Language Model</strong> component&#x27;s output port is connected to the <strong>Chat Output</strong> component, which returns the final response to the user.</p>
<p><img decoding="async" loading="lazy" alt="File loader chat flow" src="/assets/images/tutorial-chat-file-loader-099f2f4c5e4343412557b1a78c4b9209.png" width="4000" height="1564" class="img_ev3q"></p>
</li>
</ol>
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="send-requests-to-your-flow-from-a-python-application">Send requests to your flow from a Python application<a href="#send-requests-to-your-flow-from-a-python-application" class="hash-link" aria-label="Direct link to Send requests to your flow from a Python application" title="Direct link to Send requests to your flow from a Python application"></a></h2>
<p>This section of the tutorial demonstrates how you can send file input to a flow from an application.</p>
<p>To do this, your application must send a <code>POST /run</code> request to your Langflow server with the file you want to upload and a text prompt.
The result includes the outcome of the flow run and the LLM&#x27;s response.</p>
<p>This example uses a local Langflow instance, and it asks the LLM to evaluate a sample resume.
If you don&#x27;t have a resume on hand, you can download <a href="/assets/files/fake-resume-fa337cbdb18306bd29e3168f73409745.txt" target="_blank">fake-resume.txt</a>.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>For help with constructing file upload requests in Python, JavaScript, and curl, see the <a href="https://langflow-file-upload-examples.onrender.com" target="_blank" rel="noopener noreferrer">Langflow File Upload Utility</a>.</p></div></div>
<ol>
<li>
<p>To construct the request, gather the following information:</p>
<ul>
<li><code>LANGFLOW_SERVER_ADDRESS</code>: Your Langflow server&#x27;s domain. The default value is <code>127.0.0.1:7860</code>. You can get this value from the code snippets on your flow&#x27;s <a href="/concepts-publish#api-access"><strong>API access</strong> pane</a>.</li>
<li><code>FLOW_ID</code>: Your flow&#x27;s UUID or custom endpoint name. You can get this value from the code snippets on your flow&#x27;s <a href="/concepts-publish#api-access"><strong>API access</strong> pane</a>.</li>
<li><code>FILE_COMPONENT_ID</code>: The UUID of the <strong>File</strong> component in your flow, such as <code>File-KZP68</code>. To find the component ID, open your flow in Langflow, click the <strong>File</strong> component, and then click <strong>Controls</strong>. The component ID is at the top of the <strong>Controls</strong> pane.</li>
<li><code>CHAT_INPUT</code>: The message you want to send to the Chat Input of your flow, such as <code>Evaluate this resume for a job opening in my Marketing department.</code></li>
<li><code>FILE_NAME</code> and <code>FILE_PATH</code>: The name and path to the local file that you want to send to your flow.</li>
<li><code>LANGFLOW_API_KEY</code>: A valid <a href="/api-keys-and-authentication">Langflow API key</a>.</li>
</ul>
</li>
<li>
<p>Copy the following script into a Python file, and then replace the placeholders with the information you gathered in the previous step:</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">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span># Python example using requests</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>import requests</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>import json</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span># 1. Set the upload URL</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>url = &quot;http://LANGFLOW_SERVER_ADDRESS/api/v2/files/&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span># 2. Prepare the file and payload</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>payload = {}</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>files = [</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> (&#x27;file&#x27;, (&#x27;FILE_PATH&#x27;, open(&#x27;FILE_NAME&#x27;, &#x27;rb&#x27;), &#x27;application/octet-stream&#x27;))</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>]</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>headers = {</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &#x27;Accept&#x27;: &#x27;application/json&#x27;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &#x27;x-api-key&#x27;: &#x27;LANGFLOW_API_KEY&#x27;</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span># 3. Upload the file to Langflow</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>response = requests.request(&quot;POST&quot;, url, headers=headers, data=payload, files=files)</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>print(response.text)</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span># 4. Get the uploaded file path from the response</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>uploaded_data = response.json()</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>uploaded_path = uploaded_data.get(&#x27;path&#x27;)</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span># 5. Call the Langflow run endpoint with the uploaded file path</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>run_url = &quot;http://LANGFLOW_SERVER_ADDRESS/api/v1/run/FLOW_ID&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>run_payload = {</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &quot;input_value&quot;: &quot;CHAT_INPUT&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &quot;output_type&quot;: &quot;chat&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &quot;input_type&quot;: &quot;chat&quot;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &quot;tweaks&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &quot;FILE_COMPONENT_ID&quot;: {</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &quot;path&quot;: uploaded_path</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> }</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>run_headers = {</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &#x27;Content-Type&#x27;: &#x27;application/json&#x27;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &#x27;Accept&#x27;: &#x27;application/json&#x27;,</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> &#x27;x-api-key&#x27;: &#x27;LANGFLOW_API_KEY&#x27;</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>run_response = requests.post(run_url, headers=run_headers, data=json.dumps(run_payload))</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>langflow_data = run_response.json()</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span># Output only the message</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>message = None</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>try:</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> message = langflow_data[&#x27;outputs&#x27;][0][&#x27;outputs&#x27;][0][&#x27;results&#x27;][&#x27;message&#x27;][&#x27;data&#x27;][&#x27;text&#x27;]</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>except (KeyError, IndexError, TypeError):</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span> pass</span></div></div><div><span class="ch-code-line-number">_<!-- -->51</span><div style="display:inline-block;margin-left:16px"><span>print(message)</span></div></div><br></code></div></div>
<p>This script contains two requests.</p>
<p>The first request uploads a file, such as <code>fake-resume.txt</code>, to your Langflow server at the <code>/v2/files</code> endpoint. This request returns a file path that can be referenced in subsequent Langflow requests, such as <code>02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt</code></p>
<p>The second request sends a chat message to the Langflow flow at the <code>/v1/run/</code> endpoint.
The <code>tweaks</code> parameter includes the path to the uploaded file as the variable <code>uploaded_path</code>, and sends this file directly to the <strong>File</strong> component.</p>
</li>
<li>
<p>Save and run the script to send the requests and test the flow.</p>
<p>The initial output contains the JSON response object from the file upload endpoint, including the internal path where Langflow stores the file.
Then, the LLM retrieves the file and evaluates its content, in this case the suitability of the resume for a job position.</p>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Result</summary><div><div class="collapsibleContent_i85q"><p>The following is an example response from this tutorial&#x27;s flow. Due to the nature of LLMs and variations in your inputs, your response might be different.</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">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>{&quot;id&quot;:&quot;793ba3d8-5e7a-4499-8b89-d9a7b6325fee&quot;,&quot;name&quot;:&quot;fake-resume (1)&quot;,&quot;path&quot;:&quot;02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt&quot;,&quot;size&quot;:1779,&quot;provider&quot;:null}</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>The resume for Emily J. Wilson presents a strong candidate for a position in your Marketing department. Here are some key points to consider:</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>### Strengths:</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>1. **Experience**: With over 8 years in marketing, Emily has held progressively responsible positions, culminating in her current role as Marketing Director. This indicates a solid foundation in the field.</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>2. **Quantifiable Achievements**: The resume highlights specific accomplishments, such as a 25% increase in brand recognition and a 30% sales increase after launching new product lines. These metrics demonstrate her ability to drive results.</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>3. **Diverse Skill Set**: Emily&#x27;s skills encompass various aspects of marketing, including strategy development, team management, social media marketing, event planning, and data analysis. This versatility can be beneficial in a dynamic marketing environment.</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>4. **Educational Background**: Her MBA and a Bachelor&#x27;s degree in Marketing provide a strong academic foundation, which is often valued in marketing roles.</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>5. **Certifications**: The Certified Marketing Professional (CMP) and Google Analytics Certification indicate a commitment to professional development and staying current with industry standards.</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>### Areas for Improvement:</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>1. **Specificity in Skills**: While the skills listed are relevant, providing examples of how she has applied these skills in her previous roles could strengthen her resume further.</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>2. **References**: While stating that references are available upon request is standard, including a couple of testimonials or notable endorsements could enhance credibility.</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>3. **Formatting**: Ensure that the resume is visually appealing and easy to read. Clear headings and bullet points help in quickly identifying key information.</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>### Conclusion:</span></div></div><div><span class="ch-code-line-number">_<!-- -->23</span><div style="display:inline-block;margin-left:16px"><span>Overall, Emily J. Wilson&#x27;s resume reflects a well-rounded marketing professional with a proven track record of success. If her experience aligns with the specific needs of your Marketing department, she could be a valuable addition to your team. Consider inviting her for an interview to further assess her fit for the role.</span></div></div><br></code></div></div></div></div></details>
</li>
</ol>
<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="next-steps">Next steps<a href="#next-steps" class="hash-link" aria-label="Direct link to Next steps" title="Direct link to Next steps"></a></h2>
<p>To continue building on this tutorial, try these next steps.</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="process-multiple-files-loaded-at-runtime">Process multiple files loaded at runtime<a href="#process-multiple-files-loaded-at-runtime" class="hash-link" aria-label="Direct link to Process multiple files loaded at runtime" title="Direct link to Process multiple files loaded at runtime"></a></h3>
<p>To process multiple files in a single flow run, add a separate <strong>File</strong> component for each file you want to ingest. Then, modify your script to upload each file, retrieve each returned file path, and then pass a unique file path to each <strong>File</strong> component ID.</p>
<p>For example, you can modify <code>tweaks</code> to accept multiple <strong>File</strong> components.
The following code is just an example; it isn&#x27;t working code:</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">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span>## set multiple file paths</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span>file_paths = {</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span> FILE_COMPONENT_1: uploaded_path_1,</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span> FILE_COMPONENT_2: uploaded_path_2</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span>}</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span></span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span>def chat_with_flow(input_message, file_paths):</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span> &quot;&quot;&quot;Compare the contents of these two files.&quot;&quot;&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span> run_url = f&quot;{LANGFLOW_SERVER_ADDRESS}/api/v1/run/{FLOW_ID}&quot;</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span> # Prepare tweaks with both file paths</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span> tweaks = {}</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span> for component_id, file_path in file_paths.items():</span></div></div><div><span class="ch-code-line-number">_<!-- -->13</span><div style="display:inline-block;margin-left:16px"><span> tweaks[component_id] = {&quot;path&quot;: file_path}</span></div></div><br></code></div></div>
<p>You can also use a <a href="/components-data#directory"><strong>Directory</strong> component</a> to load all files in a directory or pass an archive file to the <strong>File</strong> component.</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="upload-external-files-at-runtime">Upload external files at runtime<a href="#upload-external-files-at-runtime" class="hash-link" aria-label="Direct link to Upload external files at runtime" title="Direct link to Upload external files at runtime"></a></h3>
<p>To upload files from another machine that isn&#x27;t your local environment, your Langflow server must first be accessible over the internet. Then, authenticated users can upload files to your public Langflow server&#x27;s <code>/v2/files/</code> endpoint, as shown in the tutorial. For more information, see <a href="/deployment-overview">Langflow deployment overview</a>.</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="preload-files-outside-the-chat-session">Preload files outside the chat session<a href="#preload-files-outside-the-chat-session" class="hash-link" aria-label="Direct link to Preload files outside the chat session" title="Direct link to Preload files outside the chat session"></a></h3>
<p>You can use the <strong>File</strong> component to load files anywhere in a flow, not just in a chat session.</p>
<p>In the visual editor, you can preload files to the <strong>File</strong> component by selecting them from your local machine or <a href="/concepts-file-management">Langflow file management</a>.</p>
<p>For example, you can preload an instructions file for a prompt template, or you can preload a vector store with documents that you want to query in a Retrieval Augmented Generation (RAG) flow.</p>
<p>For more information about the <strong>File</strong> component and other data loading components, see <a href="/components-data"><strong>Data</strong> components</a>.</p></div></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/chat-with-rag"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Create a vector RAG chatbot</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/agent-tutorial"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Connect applications to agents</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-flow-that-accepts-file-input" class="table-of-contents__link toc-highlight">Create a flow that accepts file input</a></li><li><a href="#send-requests-to-your-flow-from-a-python-application" class="table-of-contents__link toc-highlight">Send requests to your flow from a Python application</a></li><li><a href="#next-steps" class="table-of-contents__link toc-highlight">Next steps</a><ul><li><a href="#process-multiple-files-loaded-at-runtime" class="table-of-contents__link toc-highlight">Process multiple files loaded at runtime</a></li><li><a href="#upload-external-files-at-runtime" class="table-of-contents__link toc-highlight">Upload external files at runtime</a></li><li><a href="#preload-files-outside-the-chat-session" class="table-of-contents__link toc-highlight">Preload files outside the chat session</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column 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"> ·&nbsp; <a href="https://langflow.org/preferences">Manage Privacy Choices</a></span>
</div></li></ul></div></div></div></footer><div style="position:fixed;right:21px;bottom:21px;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>