mirror of
https://github.com/lancedb/lancedb.git
synced 2026-10-13 07:12:27 +00:00
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>
292 lines
10 KiB
Plaintext
292 lines
10 KiB
Plaintext
---
|
|
title: "Agentic skills"
|
|
sidebarTitle: "Agentic Skills"
|
|
description: "Give a coding agent a current, maintained reference for the LanceDB APIs."
|
|
icon: robot
|
|
keywords: ["agents", "plugin", "claude code", "codex", "cursor", "copilot"]
|
|
---
|
|
|
|
import {
|
|
PyCamelotSchema,
|
|
PyCamelotBatches,
|
|
PyCamelotOssIngestion,
|
|
} from '/snippets/build_with_ai_agents.mdx';
|
|
|
|
A coding agent writing LanceDB code from memory writes whatever was in its
|
|
training data -- often an older API, sometimes one that never existed. The
|
|
LanceDB agent plugin fixes that by supplying the current reference at the point
|
|
the agent needs it.
|
|
|
|
## The plugin {#plugin}
|
|
|
|
It ships as the `lancedb` plugin in
|
|
the [lancedb-agent-plugins](https://github.com/lancedb/lancedb-agent-plugins)
|
|
repository, which is also a plugin marketplace. Install it with your agent's
|
|
plugin manager:
|
|
|
|
<CodeGroup>
|
|
```text Claude Code
|
|
/plugin marketplace add lancedb/lancedb-agent-plugins
|
|
/plugin install lancedb@lancedb
|
|
```
|
|
|
|
```bash Codex icon="terminal"
|
|
codex plugin marketplace add lancedb/lancedb-agent-plugins
|
|
codex plugin add lancedb@lancedb
|
|
```
|
|
|
|
```bash Other agents icon="terminal"
|
|
npx plugins add lancedb/lancedb-agent-plugins
|
|
```
|
|
</CodeGroup>
|
|
|
|
The [`plugins`](https://www.npmjs.com/package/plugins) installer shown under
|
|
**Other agents** is a cross-tool option. It detects which agent CLIs are on your
|
|
`PATH` — Cursor, GitHub Copilot CLI, VS Code, Grok Build, and Kimi Code, as well
|
|
as Claude Code and Codex — and installs through each one's native plugin system.
|
|
|
|
The plugin supplements the agent's training data with current LanceDB
|
|
instructions. To pick up later revisions, refresh the marketplace:
|
|
|
|
<CodeGroup>
|
|
```text Claude Code
|
|
/plugin marketplace update lancedb
|
|
```
|
|
|
|
```bash Codex icon="terminal"
|
|
codex plugin marketplace upgrade
|
|
```
|
|
|
|
```bash Other agents icon="terminal"
|
|
npx plugins add lancedb/lancedb-agent-plugins
|
|
```
|
|
</CodeGroup>
|
|
|
|
<Accordion title="Where the plugin gets installed">
|
|
Each plugin manager clones the repository, reads its marketplace manifest to find
|
|
the `lancedb` plugin, and hands the plugin to the agent's own plugin store rather
|
|
than copying files into your project. Claude Code and Codex keep it under
|
|
`~/.claude/plugins` and `~/.codex/plugins` respectively, so the plugin is available
|
|
in every project on the machine.
|
|
|
|
The `npx plugins` installer defaults to the same user-wide scope. Pass
|
|
`--scope project` to record the plugin in the current repository instead, so that
|
|
everyone working in it gets the same plugin, or `-t <target>` to install for a
|
|
single agent rather than every one it detects:
|
|
|
|
```bash
|
|
npx plugins add lancedb/lancedb-agent-plugins --scope project -t cursor
|
|
```
|
|
|
|
Not every agent supports project scope; `npx plugins targets` lists what it
|
|
found and what each target supports.
|
|
</Accordion>
|
|
|
|
### Get started with the LanceDB agent plugin {#get-started-with-the-lancedb-agent-plugin}
|
|
|
|
This tutorial uses the Camelot dataset from the [quickstart](/quickstart), with
|
|
a portrait added for each character. Each LanceDB row contains validated
|
|
metadata and raw JPEG bytes. Text, images, and any embeddings you add later
|
|
remain in the same table.
|
|
|
|
### 1\. Download the multimodal dataset {#1-download-the-multimodal-dataset}
|
|
|
|
From a new project directory, download the JSON file and portraits:
|
|
|
|
```bash
|
|
mkdir -p data/img
|
|
|
|
BASE_URL="https://docs.lancedb.com/static/assets/tutorials/build-with-ai-agents/camelot/data"
|
|
curl -fsSL "$BASE_URL/camelot.json" -o data/camelot.json
|
|
|
|
for image in \
|
|
arthur.jpg \
|
|
guinevere.jpg \
|
|
merlin.jpg \
|
|
mordred.jpg \
|
|
sir_galahad.jpg \
|
|
sir_gawain.jpg \
|
|
sir_lancelot.jpg \
|
|
sir_percival.jpg
|
|
do
|
|
curl -fsSL "$BASE_URL/img/$image" -o "data/img/$image"
|
|
done
|
|
```
|
|
|
|
Each JSON record has this shape:
|
|
|
|
```json
|
|
{
|
|
"id": 2,
|
|
"name": "Merlin",
|
|
"role": "Wizard and Advisor",
|
|
"description": "A powerful wizard and prophet who mentors Arthur.",
|
|
"stats": {
|
|
"strength": 2,
|
|
"courage": 4,
|
|
"magic": 5,
|
|
"wisdom": 5
|
|
},
|
|
"img": "data/img/merlin.jpg"
|
|
}
|
|
```
|
|
|
|
JSON input may have missing fields, unexpected fields, or values of the wrong
|
|
type. The LanceDB plugin tells the agent to validate each record with strict
|
|
Pydantic models before writing it.
|
|
|
|
After the agent writes the pipeline, inspect the schema, batching, and write
|
|
path rather than assuming it followed the plugin's guidance correctly.
|
|
|
|
### 2\. Prompt your agent to build the pipeline {#2-prompt-your-agent-to-build-the-pipeline}
|
|
|
|
Install the Python packages used by the example:
|
|
|
|
```bash icon="terminal"
|
|
uv init
|
|
uv add lancedb pyarrow pydantic
|
|
```
|
|
|
|
If you're using LanceDB Enterprise, ask the agent to ingest into an Enterprise table,
|
|
provide the relevant environment variables for connecting to your Enterprise deployment
|
|
in a local `.env` file, and point the agent to it.
|
|
|
|
```text .env
|
|
LANCEDB_URI=db://your_project_name
|
|
LANCEDB_API_KEY=your_api_key_here
|
|
LANCEDB_REGION=us-east-1
|
|
LANCEDB_HOST_OVERRIDE=https://your-enterprise-endpoint.com
|
|
```
|
|
|
|
If you're using LanceDB OSS, no connection settings are required, as it runs as an
|
|
embedded retrieval library. A simple prompt like this should work:
|
|
|
|
```text Agent prompt
|
|
# If using OSS
|
|
Use the lancedb plugin to ingest the dataset in `data/` into a LanceDB
|
|
OSS table.
|
|
|
|
# If using enterprise
|
|
Use the lancedb plugin to ingest the dataset in `data/` into a LanceDB
|
|
Enterprise table using the connection information in `.env`.
|
|
```
|
|
|
|
Because the plugin is registered with the agent's own plugin system, the agent
|
|
should pick it up on its own once you restart the session. If it does not,
|
|
simply ask it to use the `lancedb` plugin in the prompt, as shown above.
|
|
|
|
That should be enough! The agent will create `ingest_multimodal.py`, or similar.
|
|
The following sections inspect the script to verify that it follows the plugin's guidance.
|
|
|
|
#### Data validation {#data-validation}
|
|
|
|
The plugin encourages the agent to validate each record with Pydantic before writing it.
|
|
The agent should ideally define a schema for the table and a nested schema for the
|
|
`stats` field.
|
|
|
|
<CodeBlock filename="ingest_multimodal.py" language="Python" icon="python">
|
|
{PyCamelotSchema}
|
|
</CodeBlock>
|
|
|
|
In this case, our agent correctly defined `Character` and `Stats` Pydantic models
|
|
and validated the JSON before adding it to the table.
|
|
|
|
#### Batched ingestion {#batched-ingestion}
|
|
|
|
Naively calling `table.add()` once per row is slow, and is considered an anti-pattern
|
|
in LanceDB. The plugin encourages the agent to collect incoming rows into batches and
|
|
write them with a single `table.add()` call. When you use the plugin, the agent should
|
|
produce something like this:
|
|
|
|
<CodeBlock filename="ingest_multimodal.py" language="Python" icon="python">
|
|
{PyCamelotBatches}
|
|
</CodeBlock>
|
|
|
|
The script calls `Character.model_validate(...)` before adding a record to the
|
|
batch. If validation fails, that batch is never written. The function yields up
|
|
to `batch_size` rows at a time, providing an iterable of batches for the ingestion step,
|
|
shown next.
|
|
|
|
#### Table maintenance {#table-maintenance}
|
|
For LanceDB OSS, the plugin instructs the agent to call
|
|
`table.optimize()` after the ingestion loop. This compacts small fragments, cleans up
|
|
old versions according to the retention policy, and incorporates new data into indexes.
|
|
|
|
<CodeBlock filename="ingest_multimodal.py" language="Python" icon="python">
|
|
{PyCamelotOssIngestion}
|
|
</CodeBlock>
|
|
|
|
If you're using LanceDB Enterprise, the plugin mentions that this step is not needed
|
|
because LanceDB Enterprise handles maintenance automatically.
|
|
|
|
|
|
<Note>
|
|
This example dataset has only eight rows, so the default batch size writes it in
|
|
one call. Larger inputs should still avoid single-row write commits.
|
|
</Note>
|
|
|
|
### 3\. Run the OSS pipeline {#3-run-the-oss-pipeline}
|
|
|
|
```bash
|
|
uv run python ingest_multimodal.py
|
|
```
|
|
|
|
The table now contains the validated character records and their JPEG bytes.
|
|
Here are the first three rows:
|
|
|
|
| Image | Character | Role |
|
|
| --- | --- | --- |
|
|
| <img src="/static/assets/tutorials/build-with-ai-agents/camelot/data/img/arthur.jpg" alt="King Arthur" width="128" height="128" /> | King Arthur | King of Camelot |
|
|
| <img src="/static/assets/tutorials/build-with-ai-agents/camelot/data/img/merlin.jpg" alt="Merlin" width="128" height="128" /> | Merlin | Wizard and Advisor |
|
|
| <img src="/static/assets/tutorials/build-with-ai-agents/camelot/data/img/guinevere.jpg" alt="Queen Guinevere" width="128" height="128" /> | Queen Guinevere | Queen of Camelot |
|
|
|
|
Once your pipeline works, you can [run experiments on branches](/agent-branch-experiments)
|
|
to try new embedding models, parsers, or search settings without touching `main`.
|
|
|
|
### Takeaways {#takeaways}
|
|
|
|
The example in this tutorial was small, but similar ideas apply to other workflows, too.
|
|
Give the agent the data source, the constraints it must respect, and the
|
|
artifacts it should return.
|
|
|
|
The plugin supplies LanceDB-specific guidance, but it's the user's responsibility to
|
|
ensure the output makes sense for the application.
|
|
|
|
### Try the plugin with your own dataset {#try-the-plugin-with-your-own-dataset}
|
|
|
|
The plugin shown in this tutorial should generalize reasonably well to other use cases.
|
|
If you find any issues, open [an issue](https://github.com/lancedb/lancedb-agent-plugins/issues)
|
|
on GitHub, clearly describing the intended behavior.
|
|
|
|
You can choose OSS or Enterprise based on how the work will run:
|
|
|
|
Start with [LanceDB OSS](/quickstart) during the early stages of a project
|
|
when an agent is helping you prototype,
|
|
explore a dataset, or run small workflows on a subset of the data. The application owns
|
|
the storage and lifecycle work, so ask the agent to validate inputs, write in
|
|
batches, and it will include table maintenance operations such as `optimize()`
|
|
where appropriate.
|
|
|
|
Choose [LanceDB Enterprise](/enterprise) when the resulting table becomes
|
|
shared production infrastructure, and the workload needs distributed capacity,
|
|
private deployment, or platform-managed operations. The underlying data format and table
|
|
API stay the same, so the pipeline does not need to be redesigned. The agent
|
|
instead connects to a remote `db://` table and lets the cluster handle
|
|
maintenance and background work.
|
|
|
|
## What agents are good at here {#workflows}
|
|
|
|
The walkthrough above is one pattern. The other has its own tutorial.
|
|
|
|
<Columns cols={2}>
|
|
<Card title="Run experiments on branches" icon="flask" href="/agent-branch-experiments">
|
|
Isolate agent-driven experiments on a branch, evaluate them on a fixed test
|
|
set, and promote only the winner.
|
|
</Card>
|
|
</Columns>
|
|
|
|
It is the more interesting pattern. [Branches](/management/table#versioning)
|
|
give an agent somewhere to be wrong safely: it can rewrite a schema, recompute a
|
|
column, or try three embedding models without touching `main`, and you keep only
|
|
what measured better.
|