Files
lancedb/docs/web/integrations/ai/agno.mdx
Jack YeandBrendan Clement 47b7babc08 docs: bring the open-source documentation into this repository (#4122)
Move the public website pages into `docs/web` beside the SDK, with
shared navigation and executable example sources in `docs/web-tests`.
The combined website is assembled by
[lancedb/docs#355](https://github.com/lancedb/docs/pull/355), with six
Enterprise replacements from
[lancedb/sophon#7681](https://github.com/lancedb/sophon/pull/7681).

This includes Function guidance, runnable Quickstarts, regenerated
snippets, production contact/demo fixes, the legacy SQL route, and the
LeRobot redirect. LeRobot remains attributed to Geneva; all 34 Geneva
pages remain in the docs repository until Function officially launches.

Materialized-view guidance follows the full rebuild refresh introduced
by #4373: local refresh writes the complete result, has no `full`
argument, supports `source_version`, and no longer requires stable row
IDs. Deployment SQL refresh options and stable-ID setup are qualified by
version/configuration. Function input guidance distinguishes ordinary
stored columns from computed inputs supported by newer deployments.

**Validation:** independently accepted local checks include 95 Python
tests (real Enterprise excluded), eight TypeScript tests, Rust
Quickstart, snippet parity, typos, deterministic assembly, Mint
validation and links/anchors/redirects. The combined baseline retains
all 181 production routes and 17 legacy redirects. Examples ran locally
against source-built Python SDK 0.40.0b13; existing GitHub workflows do
not run `docs/web-tests`. New main at `069b2f7d` is 0.41.0b0 and adds
computed Function inputs; that SDK was not exercised by the accepted
tests. Latest prose corrections receive focused site validation.

**Merge/rollout:** merge this and #7681 before #355's combined CI, which
reads producer `main`. This is migration infrastructure: section
overlays, source-owned skills and automatic versioned paired releases
remain follow-ups. The current manual publisher is transitional. Hosted
validation, a supported SDK/Enterprise release pair and a real
Enterprise walkthrough remain pending.

Production Mintlify watches `lancedb/docs:deploy-freeze`, directory
`docs`; preserve that source through review. The separate SDK GitHub
Pages reference workflow rebuilds on main merges.

**Updated-head CI (9a50f8db):**
[Typos](https://github.com/lancedb/lancedb/actions/runs/37654185443/job/112904990558),
[PR
title](https://github.com/lancedb/lancedb/actions/runs/37654179507/job/112904974595)
and
[Aikido](https://app.aikido.dev/featurebranch/scan/215386145?groupId=74229)
pass. Critical findings in the example lockfiles were patched: all Sharp
copies use 0.35.5, protobufjs 7.6.6, tar 7.5.22, quinn-proto 0.11.19,
zerovec 0.11.8 and zerovec-derive 0.11.6. The SDK's product dependencies
are unchanged. The revised lockfiles pass eight TypeScript examples,
HuggingFace decode/resize/crop/rescale/normalize plus AVIF roundtrip,
and Rust Quickstart. Aikido passing does not mean every advisory is
cleared; npm still reports 29 high and five moderate advisories in the
example dependency graph. No scanner bypass or suppression was added.

The Function prose correction passes combined/standalone Mint,
deterministic assembly, routes and assets. The revised 325-file site
checksum is
`175bec06864abb400dd292e667ba93448c0479b8359fd7bf6146afabf9040647`. This
PR remains open for independent review; further merges are on hold.

---------

Co-authored-by: Brendan Clement <brendan.clement@lancedb.com>
2026-10-07 11:15:00 -07:00

152 lines
9.7 KiB
Plaintext

---
title: "Agno"
sidebarTitle: "Agno"
description: "Build a search assistant using the Agno agent framework with LanceDB as the knowledge backend."
---
import {
PyFrameworksAgnoAgent,
PyFrameworksAgnoCliChat,
PyFrameworksAgnoIngestYoutube,
PyFrameworksAgnoSetup,
} from '/snippets/integrations.mdx';
[Agno](https://docs.agno.com/introduction) is a framework for building agentic AI applications.
It supports LanceDB as a knowledge backend, allowing you to easily ingest and retrieve external content for your agents.
When you pair Agno's `Knowledge` system with LanceDB, you get a clean Agentic RAG setup.
We'll walk through the steps below to build a YouTube transcript-aware Agno assistant that can:
- Ingest a transcript from a YouTube video via the YouTube API
- Store embeddings and metadata in LanceDB
- Retrieve context during responses with hybrid search
- Ask questions about the video content in a CLI chat loop
## Prerequisites {#prerequisites}
Install dependencies:
<CodeGroup>
```bash pip icon="terminal"
pip install -U agno openai lancedb youtube-transcript-api beautifulsoup4
```
```bash uv icon="terminal"
uv add agno openai lancedb youtube-transcript-api beautifulsoup4
```
</CodeGroup>
## Step 1: Configure LanceDB-backed knowledge {#step-1-configure-lancedb-backed-knowledge}
First, you can initialize the core `Knowledge` object that your agent will use for retrieval.
It configures LanceDB as the vector store, enables hybrid search with native LanceDB FTS, and sets the embedding model.
<CodeBlock filename="Python" language="Python" icon="python">
{PyFrameworksAgnoSetup}
</CodeBlock>
## Step 2: Fetch and ingest the YouTube transcript {#step-2-fetch-and-ingest-the-youtube-transcript}
Next, extract a YouTube video ID, fetch the full transcript, and flatten it into text for indexing.
The snippet shown below then inserts that transcript text into the Agno knowledge base, which writes vectors and metadata to LanceDB.
<CodeBlock filename="Python" language="Python" icon="python">
{PyFrameworksAgnoIngestYoutube}
</CodeBlock>
<Info>
This path explicitly fetches the transcript first, then inserts transcript text into LanceDB through Agno.
</Info>
## Step 3: Create an Agno agent with knowledge search {#step-3-create-an-agno-agent-with-knowledge-search}
The next step is to construct an Agno `Agent` and attach the knowledge base you just populated.
With `search_knowledge=True`, the agent performs retrieval before answering, so responses stay grounded in transcript context.
In Agno, retrieval is exposed as a tool call that the model can invoke at runtime.
When `search_knowledge=True`, Agno makes a knowledge-search tool (shown in output as `search_knowledge_base(...)`) available to the model; the model decides when to call it, Agno executes the tool, and the returned context is fed back into the final answer.
<CodeBlock filename="Python" language="Python" icon="python">
{PyFrameworksAgnoAgent}
</CodeBlock>
## Step 4: Start a CLI chat loop {#step-4-start-a-cli-chat-loop}
You can now ask an initial question and then start an interactive loop for follow-up queries.
Each prompt runs through the same retrieval pipeline, so you can iteratively inspect what the transcript contains.
<CodeBlock filename="Python" language="Python" icon="python">
{PyFrameworksAgnoCliChat}
</CodeBlock>
<Info>
Want local-first inference? Replace OpenAI model/embedder classes with Agno's Ollama providers. See Agno's Ollama knowledge examples: [docs.agno.com/examples/models/ollama/chat/knowledge](https://docs.agno.com/examples/models/ollama/chat/knowledge).
</Info>
### Question 1 {#question-1}
The following question is asked in the CLI chat loop:
```
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ Q: What kinds of data can LanceDB handle? ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Tool Calls ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ • search_knowledge_base(query=What kinds of data can LanceDB handle?) ┃
┃ • search_knowledge_base(query=LanceDB images audio video handle kinds of data ┃
┃ can handle 'LanceDB can handle' 'kinds of data' 'images audio video' transcript) ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (19.1s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ┃
┃ • Images, audio, video — i.e., multimodal AI data and “all manners of things ┃
┃ you don't put into traditional databases” (per the transcript). ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
```
We get the response based on the transcript's contents as expected.
### Question 2 {#question-2}
Let's ask a more specific question about the CEO of LanceDB, which is also in the transcript:
```
You: What is the name of the CEO of LanceDB?
INFO Found 10 documents
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ What is the name of the CEO of LanceDB? ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Tool Calls ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ • search_knowledge_base(query=CEO of LanceDB) ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (16.7s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ┃
┃ • According to the retrieved YouTube transcript/title, the CEO of LanceDB is ┃
┃ Chang She. ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
```
We get the response based on the transcript's contents and title as expected.
## Why this works well {#why-this-works-well}
To start, LanceDB OSS can run from a local directory, so transcript data can stay on your machine when you are using the OSS stack.
- You do not need to maintain a separate transcript parser in your application code.
- You do not need to hand-roll chunking and retrieval orchestration across multiple modules.
- One explicit Agno `Knowledge` object, backed by LanceDB, defines both ingestion and search behavior in one place.
- Fewer moving parts means the tutorial stays readable and the same pattern is easier to carry into production code.
As your application needs grow, you can migrate to LanceDB [Enterprise](/enterprise) for
convenience features like automatic compaction and reindexing and the ability to scale to
really large datasets.