Large Language Models (LLMs) are pre-trained models that take a text prompt as input and generate a response based on the prompt.All LLM workflow revolved around the following operation:To achieve our desired output, we can do one of two things: Improve the prompt, especially by adding additional context (Retrieval Augmented Generation) Fine-tune the LLMThough, there are prompt construction tricks that achieve better results in practice; the most reliable and most impactful way to improve a prompt is to add more context when it’s available. Fine-tuning is essentially providing this same context through a different API than the prompt.So, in short, the best way to improve your LLM’s systems performance is to feed in data as context! Even with this new ML paradigm, it all comes down to data.
When to use Retrieval-Augmented Generation and when to use Fine-Tuning
There are two ways to make your LLM system better using your private data: Retrieval Augmented Generation and Fine-Tuning. There are a few things to take into consideration, when deciding:
Fine-tuning does not easily “memorize” new information in practice. It often ends up mimicking the style of the content it’s being fine-tuned on. On the other hand, the typical use case of RAG is to use relevant information to help the LLM formulate a better response.
Similar to the reason above, if you’re using contextual information to try to eliminate hallucination, RAG is likely to work better since the information in the query will be heavily weighted. With fine-tuning, unless you’ve used a massive dataset, it’s likely to not memorize information and to still hallucinate.
Fine-tuning requires much more data to achieve desired results. RAG can work with sparse data or small data sets since it only pulls relevant data at inference time.
Depending on the nature of your data, you may be very sensitive to revealing your training data. With fine-tuning, all the data you used has potential to be revealed given the right prompt. On the other hand, with RAG, only the data that you feed into that specific query may be revealed. If you’re using a user’s own data as context, this might not be a problem. RAG dramatically drops the scope of data that may be revealed to simply what’s in the prompt.
We typically see far better results when using RAG. It’s much cleaner and controllable. The only exception is when you are trying to match a writing style. In that case fine-tuning often works much better. For example, if you want to use an LLM to respond to questions on slack, you can fine-tune it on all the answers you’ve given in the past to have it sound like you.So in short: Fine-tuning to match a writing style RAG to inject context/information
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"Featureform","colors":{"primary":"#F7195C","light":"#FF487F","dark":"#F7195C"},"favicon":"/favicon.svg","logo":{"light":"https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/logo.svg?fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=5c92640b0314272fdcf5f4061e3d2ae9","dark":"https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/logo.svg?fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=5c92640b0314272fdcf5f4061e3d2ae9"},"navbar":{"links":[{"label":"Schedule a Demo","href":"https://calendly.com/d/y5h-jpf-gj7/featureform-intro-call-intro-call"}],"primary":{"type":"button","label":"Quickstart","href":"https://docs.featureform.com/"}},"footer":{"socials":{"twitter":"https://twitter.com/FeatureformML","linkedin":"https://www.linkedin.com/company/featureform-ml"}},"navigation":{"global":{"tabs":[{"tab":"Python SDK","href":"https://sdk.featureform.com/"}],"anchors":[{"anchor":"Community","href":"https://join.slack.com/t/featureform-community/shared_invite/zt-xhqp2m4i-JOCaN1vRN2NDXSVif10aQg","icon":"slack"},{"anchor":"Github","href":"https://github.com/featureform","icon":"github"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"featureform","hasAudioNarration":false,"actualSubdomain":"featureform","customDomains":["docs.featureform.com"],"gitSource":{"type":"github","owner":"featureform","repo":"featureform","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21e60d4c43fec466d7927a","collectionId":"2efa229a-a369-473e-ab0d-8a6bc8ff186b","schemaVersion":"v2"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6a21e60d4c43fec466d7927a:success","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Documentation","count":69},{"language":"default","tag":"Supported Infrastructure Providers","count":26},{"language":"default","tag":"Overview","count":13},{"language":"default","tag":"Concepts","count":12},{"language":"default","tag":"Using Featureform","count":10},{"language":"default","tag":"Offline Stores","count":10},{"language":"default","tag":"Featureform Resource Types","count":9},{"language":"default","tag":"Deployment","count":7},{"language":"default","tag":"Inference Stores","count":5},{"language":"default","tag":"Object and File Stores","count":5}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"llms-embeddings-and-vector-databases/llm-workflow-with-featureform","slug":"/llms-embeddings-and-vector-databases/llm-workflow-with-featureform","pageMetadata":{"title":"LLM Workflow","description":null,"href":"/llms-embeddings-and-vector-databases/llm-workflow-with-featureform"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,p:`p`,..._provideComponents(),...props.components},{Heading,OptimizedImage}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`the-llm-workflow-with-featureform`,children:`The LLM Workflow with Featureform`}),`\n`,_jsx(_components.p,{children:`Large Language Models (LLMs) are pre-trained models that take a text prompt as input and generate a response based on the prompt.`}),`\n`,_jsx(_components.p,{children:`All LLM workflow revolved around the following operation:`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/images/llms-embeddings-and-vector-databases/llm-workflow.png?fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=31c19ab6c74897df699b3a7f64b342f4`,alt:`LLM Workflow Explained`,\"data-og-width\":`338`,width:`338`,\"data-og-height\":`477`,height:`477`,\"data-path\":`images/llms-embeddings-and-vector-databases/llm-workflow.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/images/llms-embeddings-and-vector-databases/llm-workflow.png?w=280\u0026fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=45a7090d5a757492c4eacf1dcf22ceaa 280w, https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/images/llms-embeddings-and-vector-databases/llm-workflow.png?w=560\u0026fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=8bcf0bc757f634a1b2e0315205458f10 560w, https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/images/llms-embeddings-and-vector-databases/llm-workflow.png?w=840\u0026fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=128271c26c375631c0f1eadf7068049b 840w, https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/images/llms-embeddings-and-vector-databases/llm-workflow.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=91606f492eb8cdf8349e30db96303cde 1100w, https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/images/llms-embeddings-and-vector-databases/llm-workflow.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=83e8047c941c655ec48a07277c76f2f7 1650w, https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/images/llms-embeddings-and-vector-databases/llm-workflow.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=a6405d7fcb3bfbee84d46c160240cef8 2500w`}),`\n`,_jsx(_components.p,{children:`To achieve our desired output, we can do one of two things: Improve the prompt, especially by adding additional context (Retrieval Augmented Generation) Fine-tune the LLM`}),`\n`,_jsx(_components.p,{children:`Though, there are prompt construction tricks that achieve better results in practice; the most reliable and most impactful way to improve a prompt is to add more context when it’s available. Fine-tuning is essentially providing this same context through a different API than the prompt.`}),`\n`,_jsx(_components.p,{children:`So, in short, the best way to improve your LLM’s systems performance is to feed in data as context! Even with this new ML paradigm, it all comes down to data.`}),`\n`,_jsx(Heading,{level:`3`,id:`when-to-use-retrieval-augmented-generation-and-when-to-use-fine-tuning`,children:`When to use Retrieval-Augmented Generation and when to use Fine-Tuning`}),`\n`,_jsx(_components.p,{children:`There are two ways to make your LLM system better using your private data: Retrieval Augmented Generation and Fine-Tuning. There are a few things to take into consideration, when deciding:`}),`\n`,_jsx(Heading,{level:`4`,id:`mimicking-style-or-using-information`,children:`Mimicking Style or Using Information`}),`\n`,_jsx(_components.p,{children:`Fine-tuning does not easily “memorize” new information in practice. It often ends up mimicking the style of the content it’s being fine-tuned on. On the other hand, the typical use case of RAG is to use relevant information to help the LLM formulate a better response.`}),`\n`,_jsx(Heading,{level:`4`,id:`hallucination-susceptibility`,children:`Hallucination Susceptibility`}),`\n`,_jsx(_components.p,{children:`Similar to the reason above, if you’re using contextual information to try to eliminate hallucination, RAG is likely to work better since the information in the query will be heavily weighted. With fine-tuning, unless you’ve used a massive dataset, it’s likely to not memorize information and to still hallucinate.`}),`\n`,_jsx(Heading,{level:`4`,id:`size-of-data`,children:`Size of Data`}),`\n`,_jsx(_components.p,{children:`Fine-tuning requires much more data to achieve desired results. RAG can work with sparse data or small data sets since it only pulls relevant data at inference time.`}),`\n`,_jsx(Heading,{level:`4`,id:`security-and-governance`,children:`Security and Governance`}),`\n`,_jsx(_components.p,{children:`Depending on the nature of your data, you may be very sensitive to revealing your training data. With fine-tuning, all the data you used has potential to be revealed given the right prompt. On the other hand, with RAG, only the data that you feed into that specific query may be revealed. If you’re using a user’s own data as context, this might not be a problem. RAG dramatically drops the scope of data that may be revealed to simply what’s in the prompt.`}),`\n`,_jsx(Heading,{level:`4`,id:`complexity`,children:`Complexity`}),`\n`,_jsx(_components.p,{children:`RAG is a much more complex workflow than fine-tuning. Though it’s often far better in practice, it adds a lot of moving parts.`}),`\n`,_jsx(Heading,{level:`3`,id:`use-rag-for-information-and-fine-tuning-for-style`,children:`Use RAG for information and fine-tuning for style`}),`\n`,_jsx(_components.p,{children:`We typically see far better results when using RAG. It’s much cleaner and controllable. The only exception is when you are trying to match a writing style. In that case fine-tuning often works much better. For example, if you want to use an LLM to respond to questions on slack, you can fine-tune it on all the answers you’ve given in the past to have it sound like you.`}),`\n`,_jsx(_components.p,{children:`So in short: Fine-tuning to match a writing style RAG to inject context/information`}),`\n`,_jsx(Heading,{level:`2`,id:`where-to-go-from-here`,children:`Where to go from here`}),`\n`,_jsxs(_components.p,{children:[`Check out our `,_jsx(_components.a,{href:`https://github.com/featureform/featureform/blob/main/docs/embeddings/embeddings/building-a-chatbot-with-openai-and-a-vector-database.md`,children:`deep-dive into retrieval augmented generation`}),`!`]}),`\n`,_jsxs(_components.p,{children:[`Or check out a `,_jsx(_components.a,{href:`https://github.com/featureform/Featureform-LLM-Hackathon-Project-Examples/tree/main/projects/Q%26A%20Chatbot`,children:`full project on github`}),`!`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"LLM Workflow","description":null,"href":"/llms-embeddings-and-vector-databases/llm-workflow-with-featureform"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The LLM Workflow with Featureform","slug":"the-llm-workflow-with-featureform","depth":2,"children":[{"title":"When to use Retrieval-Augmented Generation and when to use Fine-Tuning","slug":"when-to-use-retrieval-augmented-generation-and-when-to-use-fine-tuning","depth":3,"children":[]},{"title":"Mimicking Style or Using Information","slug":"mimicking-style-or-using-information","depth":4,"children":[]},{"title":"Hallucination Susceptibility","slug":"hallucination-susceptibility","depth":4,"children":[]},{"title":"Size of Data","slug":"size-of-data","depth":4,"children":[]},{"title":"Security and Governance","slug":"security-and-governance","depth":4,"children":[]},{"title":"Complexity","slug":"complexity","depth":4,"children":[]},{"title":"Use RAG for information and fine-tuning for style","slug":"use-rag-for-information-and-fine-tuning-for-style","depth":3,"children":[]}]},{"title":"Where to go from here","slug":"where-to-go-from-here","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"featureform","siteName":"Featureform","title":"LLM Workflow - Featureform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-06T23:45:40.267Z","originalFileLocation":"llms-embeddings-and-vector-databases/llm-workflow-with-featureform.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Featureform\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"LLM Workflow - Featureform\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Featureform\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://featureform.mintlify.app/_mintlify/api/og/v2?division=LLMs%2C+Embeddings%2C+and+Vector+Databases\u0026amp;title=LLM+Workflow\u0026amp;theme=e5c0967714b515882258126f\u0026amp;signature=f25e2e827e0b1d723ddd09b8accbbfe66d6185857402ed1f54c42a307e00c998\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"LLM Workflow - Featureform\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://featureform.mintlify.app/_mintlify/api/og/v2?division=LLMs%2C+Embeddings%2C+and+Vector+Databases\u0026amp;title=LLM+Workflow\u0026amp;theme=e5c0967714b515882258126f\u0026amp;signature=f25e2e827e0b1d723ddd09b8accbbfe66d6185857402ed1f54c42a307e00c998\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/featureform/v0loGK3GrZwZX3jL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Featureform\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#F7195C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/llms-embeddings-and-vector-databases/llm-workflow-with-featureform.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.featureform.com/#organization\",\"name\":\"Featureform\",\"url\":\"https://docs.featureform.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/featureform/ge8yI-LRr4sD_ybq/logo.svg?fit=max\u0026auto=format\u0026n=ge8yI-LRr4sD_ybq\u0026q=85\u0026s=5c92640b0314272fdcf5f4061e3d2ae9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.featureform.com#website\",\"name\":\"Featureform\",\"url\":\"https://docs.featureform.com\",\"publisher\":{\"@id\":\"https://docs.featureform.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform#webpage\",\"url\":\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform\",\"name\":\"LLM Workflow\",\"dateModified\":\"2026-01-06T23:45:40.267Z\",\"isPartOf\":{\"@id\":\"https://docs.featureform.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Featureform\",\"item\":\"https://docs.featureform.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"LLM Workflow\",\"item\":\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform#article\",\"headline\":\"LLM Workflow\",\"name\":\"LLM Workflow\",\"url\":\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform\",\"mainEntityOfPage\":{\"@id\":\"https://docs.featureform.com/llms-embeddings-and-vector-databases/llm-workflow-with-featureform#webpage\"},\"dateModified\":\"2026-01-06T23:45:40.267Z\",\"publisher\":{\"@id\":\"https://docs.featureform.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.featureform.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Featureform\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Featureform","nav":{"global":{"tabs":[{"tab":"Python SDK","href":"https://sdk.featureform.com/"}],"anchors":[{"anchor":"Community","href":"https://join.slack.com/t/featureform-community/shared_invite/zt-xhqp2m4i-JOCaN1vRN2NDXSVif10aQg","icon":"slack"},{"anchor":"Github","href":"https://github.com/featureform","icon":"github"}]},"anchors":[{"anchor":"Documentation","icon":"book-open","groups":[{"group":"Overview","pages":[{"title":"What is Featureform?","href":"/introduction"},{"title":"Quickstart","href":"/deployment/quickstart-docker"},{"group":"Concepts","pages":[{"title":"Immutability, Lineage, and Directed Acyclic Graphs (DAGs)","href":"/concepts/immutability-lineage-and-dags"},{"title":"Versioning and Variants","href":"/concepts/versioning-and-variants"},{"title":"Setting Custom Tags and Properties","href":"/concepts/tags-and-properties"},{"title":"Streaming Data: Real-time Updates","href":"/concepts/streaming"},{"title":"Exploring Resources with Dataframes","href":"/concepts/dataframes"},{"title":"Dataframe and SQL Transformation Support","href":"/concepts/dataframe-sql-transformation"},{"title":"The LLM Workflow with Featureform","href":"/concepts/rag-vector-db-llms"},{"title":"Calculating On-Demand Features at Request Time","href":"/concepts/on-demand-features-request-time"},{"title":"Search and Discover Features and Transformations","href":"/concepts/search-and-discovery-features"},{"title":"Achieving Point-in-Time Correctness and Handling Historical Features with Time Series Data","href":"/concepts/point-in-time-correctness-historical-features-timeseries-data"},{"title":"Governance and Access Control: Ensuring Compliance","href":"/concepts/governance-and-access-control"},{"title":"Open-Source vs. Enterprise Featureform: What Sets Them Apart","href":"/concepts/enterprise-vs-open-source-feature-store"}]}]},{"group":"Using Featureform","pages":[{"title":"Featureform Workflow","href":"/getting-started/featureform-workflow"},{"title":"Architecture and Components","href":"/getting-started/architecture-and-components"},{"title":"Registering Infrastructure Providers","href":"/getting-started/connecting-your-data-infrastructure"},{"group":"Register, Transform, and Interact with Data Sets","pages":[{"title":"Transforming Data Sets","sidebarTitle":"Overview","href":"/getting-started/registering-transforming-and-interacting-with-data-sets"},{"title":"Scheduling Resources","href":"/getting-started/scheduling-resources"},{"title":"Streaming Data: Real-time Updates","href":"/getting-started/streaming-features"},{"title":"Calculating On-Demand Features at Request Time","href":"/getting-started/on-demand-features-request-time"}]},{"group":"Register and Serve Features and Training Sets","pages":[{"title":"Register and Serve Features, Labels, and Training Sets","sidebarTitle":"Overview","href":"/getting-started/register-and-serve-features-training-sets"},{"title":"Model to Feature Lineage","href":"/getting-started/model-to-feature-lineage"},{"title":"Calculating On-Demand Features at Request Time","href":"/getting-started/on-demand-features-request-time"},{"title":"Streaming Data: Real-time Updates","href":"/getting-started/streaming-features"}]},{"title":"Exploring the Feature Registry","href":"/getting-started/search-monitor-discovery-feature-registry-ui-cli"}]},{"group":"Featureform Resource Types","pages":[{"title":"Abstractions","href":"/abstractions/abstractions"},{"title":"Data Infrastructure Provider","href":"/abstractions/data-infrastructure-providers"},{"title":"Primary Data Sets","href":"/abstractions/primary-data-sets"},{"title":"Transforming Data Sets","href":"/abstractions/transforming-data-sets"},{"title":"Entities","href":"/abstractions/entity"},{"title":"Features","href":"/abstractions/feature"},{"title":"Embeddings","href":"/abstractions/embedding"},{"title":"Labels","href":"/abstractions/label"},{"title":"Training Sets","description":"Models require training, a process that typically involves feeding in a set of [features](/abstractions/feature) with known [labels](/abstractions/label). During training, the model makes inferences based on these features, and the labels are used to adjust the model's weights.","href":"/abstractions/training-set"}]},{"group":"LLMs, Embeddings, and Vector Databases","pages":[{"title":"LLM Workflow","href":"/llms-embeddings-and-vector-databases/llm-workflow-with-featureform"},{"title":"Building a Chatbot with OpenAI and a Vector Database","description":null,"href":"/llms-embeddings-and-vector-databases/building-a-chatbot-with-openai-and-a-vector-database"}]},{"group":"Common Use Cases and Examples","pages":[{"title":"Fraud Detection and Featureform","href":"/use-cases/fraud-detection"},{"title":"Retrieval Augmented Generation (RAG) Workflow for Chatbots with Featureform","href":"/use-cases/llm-chatbot-rag"}]},{"group":"Supported Infrastructure Providers","pages":[{"title":"Overview of Infrastructure Providers","href":"/providers/overview"},{"group":"Offline Stores","pages":[{"title":"Offline Store","sidebarTitle":"Overview","href":"/providers/offline-store"},{"title":"Snowflake","href":"/providers/snowflake"},{"title":"Spark","href":"/providers/spark"},{"title":"Spark with Databricks","href":"/providers/spark_databricks"},{"title":"Spark with EMR","href":"/providers/spark_emr"},{"title":"Kubernetes","href":"/providers/kubernetes"},{"title":"BigQuery","href":"/providers/bigquery"},{"title":"Postgres","href":"/providers/postgres"},{"title":"Redshift","href":"/providers/redshift"},{"title":"ClickHouse","href":"/providers/clickhouse"}]},{"group":"Object and File Stores","pages":[{"title":"Object and File Stores","sidebarTitle":"Overview","href":"/providers/object-and-file-stores"},{"title":"S3","href":"/providers/aws-s3"},{"title":"Azure Blobs","href":"/providers/azure-blob-store"},{"title":"Google Cloud (GCS)","href":"/providers/google-cloud-gcs"},{"title":"HDFS","href":"/providers/hdfs"}]},{"group":"Inference Stores","pages":[{"title":"Cassandra","href":"/inference-online-stores/cassandra"},{"title":"DynamoDB","href":"/inference-online-stores/dynamodb"},{"title":"Firestore","href":"/inference-online-stores/firestore"},{"title":"MongoDB","href":"/inference-online-stores/mongodb"},{"title":"Redis","href":"/inference-online-stores/redis"}]},{"group":"Vector Databases","pages":[{"title":"Vector Database","sidebarTitle":"Overview","href":"/providers/vector-db"},{"title":"Redis","href":"/providers/redis"},{"title":"Pinecone","href":"/providers/pinecone"},{"title":"Weaviate","href":"/providers/weaviate"}]},{"title":"Extending Featureform with Custom Providers and Requesting New Providers","href":"/providers/custom-providers"}]},{"group":"Deployment","pages":[{"title":"Local mode","href":"/deployment/local-mode"},{"title":"Quickstart","href":"/deployment/quickstart-docker"},{"title":"Kubernetes","href":"/deployment/kubernetes"},{"title":"AWS","href":"/deployment/quickstart-aws"},{"title":"Azure","href":"/deployment/quickstart-azure"},{"title":"Google Cloud","href":"/deployment/quickstart-gcp"},{"title":"System Architecture","href":"/system-architecture"},{"title":"Backup and Restore","href":"/deployment/backup-and-restore"}]}]}]},"title":"LLM Workflow - Featureform","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-CVZVK4hN.js","lightbox-handle-r17bVUz3.js"]}