releases.shpreview

AI Search gets SDK integrations for Vercel AI SDK, LangChain, and Agents SDK

3 featuresThis release3 featuresNew capabilitiesAI-tallied from the release notes
From the original release noteView original ↗

You can now use AI Search directly from popular agent frameworks, adding grounded retrieval to an existing app instead of calling the REST API by hand. The new Agents section has guides for the Vercel AI SDK, LangChain, and the Cloudflare Agents SDK. The AI SDK integration is a new package, and the LangChain integration is a new retriever in the existing langchain-cloudflare package.

Vercel AI SDK

The ai-search-provider package connects AI Search to the AI SDK, and targets AI SDK v6 (ai@^6). Pass instance.chat() to generateText or streamText to generate a response grounded in your indexed content, with the retrieved chunks returned as sources. You can also expose instance.search() as a tool for agent loops.

<span class="line"><span class="nb-shiki-1itgoe">import</span><span class="nb-shiki-140thh"> { createAISearchNamespace } </span><span class="nb-shiki-1itgoe">from</span><span class="nb-shiki-mdbnqw"> "ai-search-provider"</span><span class="nb-shiki-140thh">;</span></span>
<span class="line"><span class="nb-shiki-1itgoe">import</span><span class="nb-shiki-140thh"> { generateText } </span><span class="nb-shiki-1itgoe">from</span><span class="nb-shiki-mdbnqw"> "ai"</span><span class="nb-shiki-140thh">;</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> aiSearch</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1t8gfj"> createAISearchNamespace</span><span class="nb-shiki-140thh">({ binding: env.</span><span class="nb-shiki-dzsirb">AI_SEARCH</span><span class="nb-shiki-140thh"> });</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-140thh"> { </span><span class="nb-shiki-dzsirb">text</span><span class="nb-shiki-140thh">, </span><span class="nb-shiki-dzsirb">sources</span><span class="nb-shiki-140thh"> } </span><span class="nb-shiki-1itgoe">=</span><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-1t8gfj"> generateText</span><span class="nb-shiki-140thh">({</span></span>
<span class="line"><span class="nb-shiki-140thh">	model: aiSearch.</span><span class="nb-shiki-1t8gfj">get</span><span class="nb-shiki-140thh">(</span><span class="nb-shiki-mdbnqw">"knowledge-base"</span><span class="nb-shiki-140thh">).</span><span class="nb-shiki-1t8gfj">chat</span><span class="nb-shiki-140thh">(),</span></span>
<span class="line"><span class="nb-shiki-140thh">	messages: [{ role: </span><span class="nb-shiki-mdbnqw">"user"</span><span class="nb-shiki-140thh">, content: </span><span class="nb-shiki-mdbnqw">"How does caching work?"</span><span class="nb-shiki-140thh"> }],</span></span>
<span class="line"><span class="nb-shiki-140thh">});</span></span>
<span class="line"><span class="nb-shiki-1itgoe">import</span><span class="nb-shiki-140thh"> { createAISearchNamespace } </span><span class="nb-shiki-1itgoe">from</span><span class="nb-shiki-mdbnqw"> "ai-search-provider"</span><span class="nb-shiki-140thh">;</span></span>
<span class="line"><span class="nb-shiki-1itgoe">import</span><span class="nb-shiki-140thh"> { generateText } </span><span class="nb-shiki-1itgoe">from</span><span class="nb-shiki-mdbnqw"> "ai"</span><span class="nb-shiki-140thh">;</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> aiSearch</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1t8gfj"> createAISearchNamespace</span><span class="nb-shiki-140thh">({ binding: env.</span><span class="nb-shiki-dzsirb">AI_SEARCH</span><span class="nb-shiki-140thh"> });</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-140thh"> { </span><span class="nb-shiki-dzsirb">text</span><span class="nb-shiki-140thh">, </span><span class="nb-shiki-dzsirb">sources</span><span class="nb-shiki-140thh"> } </span><span class="nb-shiki-1itgoe">=</span><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-1t8gfj"> generateText</span><span class="nb-shiki-140thh">({</span></span>
<span class="line"><span class="nb-shiki-140thh">	model: aiSearch.</span><span class="nb-shiki-1t8gfj">get</span><span class="nb-shiki-140thh">(</span><span class="nb-shiki-mdbnqw">"knowledge-base"</span><span class="nb-shiki-140thh">).</span><span class="nb-shiki-1t8gfj">chat</span><span class="nb-shiki-140thh">(),</span></span>
<span class="line"><span class="nb-shiki-140thh">	messages: [{ role: </span><span class="nb-shiki-mdbnqw">"user"</span><span class="nb-shiki-140thh">, content: </span><span class="nb-shiki-mdbnqw">"How does caching work?"</span><span class="nb-shiki-140thh"> }],</span></span>
<span class="line"><span class="nb-shiki-140thh">});</span></span>
LangChain

The langchain-cloudflare package (PyPI ↗, GitHub ↗) provides CloudflareAISearchRetriever, a standard LangChain retriever backed by AI Search. Use it on its own, wrap it with create_retriever_tool to give an agent a search tool, or drop it into a RAG chain. It works with REST credentials or a Worker binding inside a Python Worker.

<span class="line"><span class="nb-shiki-1itgoe">from</span><span class="nb-shiki-140thh"> langchain_cloudflare </span><span class="nb-shiki-1itgoe">import</span><span class="nb-shiki-140thh"> CloudflareAISearchRetriever</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-140thh">retriever </span><span class="nb-shiki-1itgoe">=</span><span class="nb-shiki-140thh"> CloudflareAISearchRetriever(</span></span>
<span class="line"><span class="nb-shiki-1jdh33">    account_id</span><span class="nb-shiki-1itgoe">=</span><span class="nb-shiki-dzsirb">ACCOUNT_ID</span><span class="nb-shiki-140thh">,</span></span>
<span class="line"><span class="nb-shiki-1jdh33">    api_token</span><span class="nb-shiki-1itgoe">=</span><span class="nb-shiki-dzsirb">API_TOKEN</span><span class="nb-shiki-140thh">,</span></span>
<span class="line"><span class="nb-shiki-1jdh33">    instance_name</span><span class="nb-shiki-1itgoe">=</span><span class="nb-shiki-mdbnqw">"knowledge-base"</span><span class="nb-shiki-140thh">,</span></span>
<span class="line"><span class="nb-shiki-1jdh33">    retrieval_type</span><span class="nb-shiki-1itgoe">=</span><span class="nb-shiki-mdbnqw">"hybrid"</span><span class="nb-shiki-140thh">,</span></span>
<span class="line"><span class="nb-shiki-140thh">)</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-140thh">docs </span><span class="nb-shiki-1itgoe">=</span><span class="nb-shiki-140thh"> retriever.invoke(</span><span class="nb-shiki-mdbnqw">"How do I configure Workers AI?"</span><span class="nb-shiki-140thh">)</span></span>
Cloudflare Agents SDK

The Cloudflare Agents SDK could already reach AI Search through the Workers binding. The new guide walks through building a stateful chat agent that provisions its own instance, indexes content, and searches it from a tool.

<span class="line"><span class="nb-shiki-1itgoe">import</span><span class="nb-shiki-140thh"> { tool } </span><span class="nb-shiki-1itgoe">from</span><span class="nb-shiki-mdbnqw"> "ai"</span><span class="nb-shiki-140thh">;</span></span>
<span class="line"><span class="nb-shiki-1itgoe">import</span><span class="nb-shiki-140thh"> { z } </span><span class="nb-shiki-1itgoe">from</span><span class="nb-shiki-mdbnqw"> "zod"</span><span class="nb-shiki-140thh">;</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> instance</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-140thh"> env.</span><span class="nb-shiki-dzsirb">AI_SEARCH</span><span class="nb-shiki-140thh">.</span><span class="nb-shiki-1t8gfj">get</span><span class="nb-shiki-140thh">(</span><span class="nb-shiki-mdbnqw">"knowledge-base"</span><span class="nb-shiki-140thh">);</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-21nrsd">// Expose AI Search to the agent's model as a tool it can call.</span></span>
<span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> searchKnowledgeBase</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1t8gfj"> tool</span><span class="nb-shiki-140thh">({</span></span>
<span class="line"><span class="nb-shiki-140thh">	description: </span><span class="nb-shiki-mdbnqw">"Search the knowledge base for relevant content."</span><span class="nb-shiki-140thh">,</span></span>
<span class="line"><span class="nb-shiki-140thh">	inputSchema: z.</span><span class="nb-shiki-1t8gfj">object</span><span class="nb-shiki-140thh">({ query: z.</span><span class="nb-shiki-1t8gfj">string</span><span class="nb-shiki-140thh">() }),</span></span>
<span class="line"><span class="nb-shiki-1t8gfj">	execute</span><span class="nb-shiki-140thh">: ({ </span><span class="nb-shiki-1jdh33">query</span><span class="nb-shiki-140thh"> }) </span><span class="nb-shiki-1itgoe">=></span><span class="nb-shiki-140thh"> instance.</span><span class="nb-shiki-1t8gfj">search</span><span class="nb-shiki-140thh">({ query }),</span></span>
<span class="line"><span class="nb-shiki-140thh">});</span></span>
<span class="line"><span class="nb-shiki-1itgoe">import</span><span class="nb-shiki-140thh"> { tool } </span><span class="nb-shiki-1itgoe">from</span><span class="nb-shiki-mdbnqw"> "ai"</span><span class="nb-shiki-140thh">;</span></span>
<span class="line"><span class="nb-shiki-1itgoe">import</span><span class="nb-shiki-140thh"> { z } </span><span class="nb-shiki-1itgoe">from</span><span class="nb-shiki-mdbnqw"> "zod"</span><span class="nb-shiki-140thh">;</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> instance</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-140thh"> env.</span><span class="nb-shiki-dzsirb">AI_SEARCH</span><span class="nb-shiki-140thh">.</span><span class="nb-shiki-1t8gfj">get</span><span class="nb-shiki-140thh">(</span><span class="nb-shiki-mdbnqw">"knowledge-base"</span><span class="nb-shiki-140thh">);</span></span>
<span class="line"></span>
<span class="line"><span class="nb-shiki-21nrsd">// Expose AI Search to the agent's model as a tool it can call.</span></span>
<span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> searchKnowledgeBase</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1t8gfj"> tool</span><span class="nb-shiki-140thh">({</span></span>
<span class="line"><span class="nb-shiki-140thh">	description: </span><span class="nb-shiki-mdbnqw">"Search the knowledge base for relevant content."</span><span class="nb-shiki-140thh">,</span></span>
<span class="line"><span class="nb-shiki-140thh">	inputSchema: z.</span><span class="nb-shiki-1t8gfj">object</span><span class="nb-shiki-140thh">({ query: z.</span><span class="nb-shiki-1t8gfj">string</span><span class="nb-shiki-140thh">() }),</span></span>
<span class="line"><span class="nb-shiki-1t8gfj">	execute</span><span class="nb-shiki-140thh">: ({ </span><span class="nb-shiki-1jdh33">query</span><span class="nb-shiki-140thh"> }) </span><span class="nb-shiki-1itgoe">=></span><span class="nb-shiki-140thh"> instance.</span><span class="nb-shiki-1t8gfj">search</span><span class="nb-shiki-140thh">({ query }),</span></span>
<span class="line"><span class="nb-shiki-140thh">});</span></span>

For the full walkthroughs, including creating an instance and indexing content, refer to the Agents guides.

Fetched July 30, 2026