语义搜索SQLite服务器

一个内置语义搜索和本地嵌入向量生成的SQLite服务器,提供完整的数据库功能、向量搜索和零API成本,所有操作均在本地运行,保障隐私和速度。

  • by AuraFriday
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 AuraFriday/sqlite_mcp

使用说明

SQLite+语义搜索——人工智能记忆系统

内置语义搜索和本地嵌入向量生成的sqlite MCP服务器

完整的数据库+矢量搜索+零API成本。 一切都在本地运行。一切都是私人的。一切都很快。


好处

1.🧠 内置语义搜索

不仅仅是关键字匹配——实际理解。 按意思查找文档,而不是按精确的单词。“向我展示愤怒的客户电子邮件”可以找到他们,即使他们从不说“愤怒”。这是为ChatGPT的内存提供动力的技术,现在正在你的机器上运行。

2.💰 零成本,无限规模

不收取API费用。永远。 使用包含的Qwen模型在本地生成嵌入。存储数百万矢量。搜索数十亿次。你唯一的成本就是电费。与OpenAI嵌入的每1K代币0.0001美元相比,这个工具在第一个一百万次操作后就能收回成本。

3.🔒 100%私人,100%强大

你的数据永远不会离开你的机器。 全SQL数据库+语义搜索+自动嵌入,全部在本地运行。没有云服务。无数据泄露。没有合规问题。纯粹的私人权力。


为什么这个工具改变了一切

大多数AI工具都不记得。 他们会处理你的请求,然后忘记。每一次对话都是从零开始的。

矢量数据库需要花钱。 松果、Weaviate、Qdrant——都很好,都很贵。每月最低70美元,生产工作负载可扩展到数千美元。

语义搜索需要API。 OpenAI嵌入、Cohere、Anthropic——每次使用都要收费。制造一些流行的东西,看着成本爆炸。

这个工具打破了所有这些限制。

完整的SQLite数据库。矢量相似性搜索。自动嵌入生成。都是当地人。全部免费。全部私人。所有这些都集成到一个优雅的工具中。


真实世界的故事:支持票危机

问题:

一家小型SaaS公司被支持票淹没。每天500+。客户反复问同样的问题。支持团队无法跟上。

他们问:“我们能用人工智能自动响应吗?”。

标准解决方案:矢量数据库(每月200美元)+OpenAI嵌入(API成本每月500美元)+自定义集成(开发周)。

使用此工具:

# One-time setup: Import existing tickets
execute_sql("""
  CREATE TABLE tickets(
    id INTEGER PRIMARY KEY,
    question TEXT,
    answer TEXT,
    embedding BLOB CHECK(vec_length(embedding) == 1024)
  )
""")

execute_sql("""
  INSERT INTO tickets(question, answer, embedding)
  SELECT question, answer, vec_f32(generate_embedding(question))
  FROM imported_tickets
""")

# For each new ticket, find similar solved tickets
execute_sql("""
  SELECT question, answer, 
         vec_distance_cosine(embedding, vec_f32(:new_ticket)) as similarity
  FROM tickets
  WHERE similarity < 0.3
  ORDER BY similarity LIMIT 3
""", bindings={"new_ticket": {"_embedding_text": user_question}})

结果: 70%的票自动解决。支持团队专注于复杂问题。每月零成本。完全隐私。在一个下午部署。

踢球者: 他们现在使用相同的系统进行产品推荐、内容搜索和重复检测。同样的工具,零额外成本。


完整的功能集

核心数据库操作

SQLite的完整功能:

  • 完整的SQL支持(SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER等)
  • 事务、触发器、视图、索引
  • 外键、约束、CHECK子句
  • 通用表表达式(CTE)、窗口函数
  • JSON函数,日期/时间操作
  • PRAGMA性能调优设置

智能路径处理:

  • :memory: --共享临时数据库(持续到服务器重新启动)
  • @user_data/db.sqlite --主存储(Windows域上的同步)
  • @user_local/db.sqlite --特定于机器(从不同步)
  • @user_cache/db.sqlite --临时(系统可能会清除)
  • @user_config/db.sqlite --设置/配置
  • @site_data/db.sqlite --多用户共享(需要提升)
  • @temp/db.sqlite --系统温度(重新启动时清除)
  • ~/databases/app.db --主目录扩展
  • %APPDATA%\app.db --Windows环境变量
  • /absolute/path/app.db --全路径在任何地方都有效

向量相似性搜索

创建启用矢量的表:

CREATE TABLE documents(
  id INTEGER PRIMARY KEY,
  title TEXT,
  content TEXT,
  embedding BLOB CHECK(
    typeof(embedding) == 'blob'
    AND vec_length(embedding) == 1024  -- Qwen embeddings are 1024-dimensional
  )
);

自动嵌入生成:

方法1:SQL函数(推荐)

-- Insert with automatic embedding
INSERT INTO documents(title, content, embedding)
VALUES (
  'User Guide',
  'How to use the application...',
  vec_f32(generate_embedding('How to use the application...'))
);

-- Bulk update missing embeddings
UPDATE documents
SET embedding = vec_f32(generate_embedding(content))
WHERE embedding IS NULL;

方法2:绑定引用(当文本在数据库中时)

execute_sql(
    "INSERT INTO docs(text, embedding) VALUES (:text, vec_f32(:emb))",
    bindings={
        "text": "Document content here",
        "emb": {"_embedding_col": "text"}  # Embeds the :text value
    }
)

方法3:直接文本(当文本未存储时)

execute_sql(
    "INSERT INTO metadata(category, embedding) VALUES (:cat, vec_f32(:emb))",
    bindings={
        "cat": "technical",
        "emb": {"_embedding_text": "Technical documentation category"}
    }
)

相似性搜索:

-- Find similar documents
SELECT 
  title, 
  content,
  vec_distance_cosine(embedding, vec_f32(:query)) as similarity
FROM documents
WHERE vec_distance_cosine(embedding, vec_f32(:query)) < 0.5
ORDER BY similarity
LIMIT 10;

距离函数:

  • vec_distance_cosine(v1, v2) → 0-1 (较低=更相似,最适合文本)
  • vec_distance_L2(v1, v2) → 0-∞ (欧几里德距离)
  • vec_distance_L1(v1, v2) → 0-∞ (曼哈顿距离)

身份验证集成

内置用户上下文:

-- Automatically includes authenticated username
SELECT * FROM user_documents 
WHERE owner = :authenticated_user;

-- Audit trail with automatic user tracking
INSERT INTO actions (user, action, timestamp)
VALUES (:authenticated_user, :action, datetime('now'));

为什么这很重要: 无需到处传递用户名。该工具知道是谁在调用它,并自动提供上下文。

点命令(便利功能)

无需编写SQL即可快速检查数据库:

  • .databases --列出所有包含大小和日期的.db文件
  • .tables --显示当前数据库中的所有表
  • .schema [table] --显示表架构
  • .indexes [table] --显示索引
  • .fullschema --完整的数据库架构
  • .dbinfo --数据库统计
  • .status --当前设置
  • .pragma --所有PRAGMA值
  • .foreign_keys --外键状态

注: 标准SQL更适合用于生产环境。点命令用于快速探索。

PRAGMA支持

完全控制SQLite行为:

PRAGMA foreign_keys = ON;      -- Enable referential integrity
PRAGMA journal_mode = WAL;     -- Write-Ahead Logging for concurrency
PRAGMA synchronous = NORMAL;   -- Balance safety and speed
PRAGMA cache_size = -2000;     -- 2MB cache
PRAGMA page_size;              -- Query page size
PRAGMA encoding;               -- Database encoding

高级用例

语义重复检测

-- Find potential duplicates
WITH candidates AS (
  SELECT 
    d1.id as id1, 
    d2.id as id2,
    d1.title as title1,
    d2.title as title2,
    vec_distance_cosine(d1.embedding, d2.embedding) as similarity
  FROM documents d1
  JOIN documents d2 ON d1.id < d2.id
  WHERE similarity < 0.1  -- Very similar
)
SELECT * FROM candidates
ORDER BY similarity;

多字段语义搜索

-- Search across title and content with different weights
WITH query_emb AS (
  SELECT vec_f32(generate_embedding(:query)) as emb
)
SELECT 
  title,
  content,
  (
    0.7 * vec_distance_cosine(title_embedding, query_emb.emb) +
    0.3 * vec_distance_cosine(content_embedding, query_emb.emb)
  ) as weighted_similarity
FROM documents, query_emb
WHERE weighted_similarity < 0.5
ORDER BY weighted_similarity
LIMIT 20;

层次相似性(查找相似之处)

-- Find documents similar to documents similar to a query
WITH first_pass AS (
  SELECT id, embedding
  FROM documents
  WHERE vec_distance_cosine(embedding, vec_f32(:query)) < 0.3
  LIMIT 10
)
SELECT DISTINCT d.id, d.title
FROM documents d
JOIN first_pass fp 
  ON vec_distance_cosine(d.embedding, fp.embedding) < 0.4
WHERE d.id NOT IN (SELECT id FROM first_pass)
ORDER BY vec_distance_cosine(d.embedding, vec_f32(:query))
LIMIT 20;

时间加权语义搜索

-- Prioritize recent + relevant
SELECT 
  title,
  created_at,
  vec_distance_cosine(embedding, vec_f32(:query)) as relevance,
  (julianday('now') - julianday(created_at)) as age_days,
  (
    0.7 * vec_distance_cosine(embedding, vec_f32(:query)) +
    0.3 * (1.0 / (1.0 + (julianday('now') - julianday(created_at)) / 365.0))
  ) as score
FROM documents
WHERE relevance < 0.5
ORDER BY score
LIMIT 10;

使用示例

基本SQL查询

{
  "input": {
    "sql": "SELECT * FROM users WHERE age > :min_age",
    "database": "myapp.db",
    "bindings": {"min_age": 18},
    "tool_unlock_token": "YOUR_TOKEN"
  }
}

用户特定查询

{
  "input": {
    "sql": "SELECT * FROM documents WHERE owner = :authenticated_user",
    "database": "@user_data/docs.db",
    "tool_unlock_token": "YOUR_TOKEN"
  }
}

语义搜索

{
  "input": {
    "sql": "SELECT title, vec_distance_cosine(embedding, vec_f32(:query)) as sim FROM docs WHERE sim < 0.5 ORDER BY sim LIMIT 5",
    "database": "knowledge.db",
    "bindings": {
      "query": {"_embedding_text": "How do I reset my password?"}
    },
    "tool_unlock_token": "YOUR_TOKEN"
  }
}

批量嵌入生成

{
  "input": {
    "sql": "UPDATE articles SET embedding = vec_f32(generate_embedding(content)) WHERE embedding IS NULL",
    "database": "@user_data/articles.db",
    "tool_unlock_token": "YOUR_TOKEN"
  }
}

返回格式

{
  "operation_was_successful": true,
  "error_message_if_operation_failed": null,
  "rows_modified_by_operation": 5,
  "column_names_in_result_set": ["id", "title", "similarity"],
  "data_rows_from_result_set": [
    {"id": 1, "title": "Getting Started", "similarity": 0.12},
    {"id": 5, "title": "Quick Start Guide", "similarity": 0.18},
    ...
  ]
}

关键字段:

  • operation_was_successful --布尔成功指示符
  • error_message_if_operation_failed --成功时为空,失败时为错误字符串
  • rows_modified_by_operation --对于INSERT/UPDATE/DELETE,SELECT为null
  • column_names_in_result_set --列名数组,非SELECT为null
  • data_rows_from_result_set --行对象数组,非SELECT为null

技术架构

内存数据库(:memory:)

共享单例模式:

  • 所有操作共享单个连接
  • 带锁紧机构的螺纹安全
  • WAL(预写日志)模式已启用
  • 持续整个服务器生命周期
  • 在所有AI实例中共享

为什么这很重要: 多个AI代理可以使用相同的内存数据库进行协作。非常适合会话状态、临时计算或代理间通信。

文件数据库

每个操作连接:

  • 每个操作的新连接
  • 每个数据库的自动连接缓存
  • 自动创建父目录
  • 操作前验证写入权限
  • 支持所有路径扩展类型

螺纹安全:

  • SQLite连接是线程本地的
  • 一次只能有一个编写器(SQLite限制)
  • 读卡器可以与WAL模式同时运行

嵌入式系统

Qwen3-Embedded-0.6B模型:

  • 1024维向量
  • 首次使用时自动下载(约250MB)
  • 完全在本地运行(没有API调用)
  • 自动缓存相同的文本
  • 注册为SQLite用户定义函数(UDF)

演出

  • 现代CPU上每次嵌入约50ms
  • GPU上每次嵌入约5ms(如果可用)
  • 批量操作已优化
  • 缓存点击是即时的

行处理

字典式访问:

# Access by column name
row['title']
row['created_at']

# Or by index
row[0]
row[1]

# Iterate over columns
for key in row.keys():
    print(f"{key}: {row[key]}")

用途 sqlite3.Row 工厂提供最大的灵活性。


性能优化

索引向量列

-- Create index on vector column for faster similarity search
CREATE INDEX idx_doc_embedding ON documents(embedding);

-- Partial index for active documents only
CREATE INDEX idx_active_embedding 
ON documents(embedding) 
WHERE status = 'active';

查询优化

-- Use CTE to avoid recalculating query embedding
WITH query_vec AS (
  SELECT vec_f32(generate_embedding(:query)) as emb
)
SELECT title, vec_distance_cosine(embedding, query_vec.emb) as sim
FROM documents, query_vec
WHERE sim < 0.5
ORDER BY sim;

批量操作

-- Batch insert with single embedding generation per unique text
INSERT INTO documents(title, content, embedding)
SELECT 
  title,
  content,
  vec_f32(generate_embedding(content))
FROM staging_documents;

并发的WAL模式

-- Enable Write-Ahead Logging
PRAGMA journal_mode = WAL;

-- Allows concurrent reads during writes
-- Significantly improves multi-user performance

可排序二进制编码函数(BES19)

问题

SQLite将数字存储为TEXT或本机INTEGER/REAL类型。但如果你需要:

  • 将数字存储在BLOB中以实现紧凑的二进制存储?
  • 让这些BLOB正确排序 ORDER BY?
  • 获取按时间顺序排序的微秒精度时间戳?

标准二进制编码(小字节序甚至大字节序)排序不正确:

  • 带符号整数:-1将在+1之后排序(错误!)
  • 浮点数:负数相对于正数排序不正确

解决方案:BES19功能

19个内置函数,使用将数字编码为BLOB 可排序大端序 格式。当你 ORDER BY 这些BLOB,它们使用原始字节比较按正确的数字顺序排序。

运作原理

对于无符号整数: 简单的大端编码(最高有效字节优先)。

对于有符号整数: 符号位翻转的大端序。这将转换排序顺序:

  • 原始:0x8000…(最负)排序在0x7FFF之后。..(最积极)
  • 已转换:0x0000…(最负)在0xFFFF之前排序。..(最积极)

对于IEEE 754浮点数: 巧妙的转变:

  • 正浮点数:翻转符号位(0→1),使其按负数排序
  • 负浮点数:翻转所有位,这样更多的负值会排在更少的负值之前

对于时间戳: 以带符号的64位整数表示的纪元微秒,给出:

  • 范围:Unix时代前后约292000年
  • 精度:1微秒
  • 可排序性:保证按时间顺序排序

函数参考

编码函数(数字→ 可排序BLOB)

功能 输入 输出 说明
to_u16bes(n) 0到65535 2字节BLOB 无符号16位
to_u32bes(n) 0到4294967295 4字节BLOB 无符号32位
to_u64bes(n) 0到184467440737009551615 8字节BLOB 无符号64位
to_i16bes(n) -32768到32767 2字节BLOB 16位签名
to_i32bes(n) -2147483648到2147483647 4字节BLOB 32位签名
to_i64bes(n) 完整的64位签名范围 8字节BLOB 64位签名
to_f16bes(n) IEEE 754半精度 2字节BLOB 16位浮点
to_f32bes(n) IEEE 754单精度 4字节BLOB 32位浮点
to_f64bes(n) IEEE 754双精度 8字节BLOB 64位浮点
to_t64bes() (无参数) 8字节BLOB 当前历元微秒

解码函数(BLOB→ 编号)

功能 输入 输出 说明
from_u16bes(b) 2字节BLOB 整数 无符号16位
from_u32bes(b) 4字节BLOB 整数 无符号32位
from_u64bes(b) 8字节BLOB 整数 无符号64位
from_i16bes(b) 2字节BLOB 整数 16位签名
from_i32bes(b) 4字节BLOB 整数 签名32位
from_i64bes(b) 8字节BLOB 整数 带符号64位
from_f16bes(b) 2字节BLOB 实数 16位浮点数
from_f32bes(b) 4字节BLOB 实数 32位浮点数
from_f64bes(b) 8字节BLOB 实数 64位浮点数

使用示例

基本往返

-- Encode and decode
SELECT from_i64bes(to_i64bes(-12345));  -- Returns: -12345
SELECT from_f64bes(to_f64bes(3.14159)); -- Returns: 3.14159
SELECT from_i64bes(to_t64bes());        -- Returns: current epoch microseconds

可排序时间戳

-- Create table with sortable timestamp
CREATE TABLE events (
  id INTEGER PRIMARY KEY,
  created_at BLOB NOT NULL,  -- Stores to_t64bes()
  event_type TEXT,
  data TEXT
);

-- Insert with automatic timestamp
INSERT INTO events (created_at, event_type, data)
VALUES (to_t64bes(), 'user_login', '{"user_id": 123}');

-- Query in chronological order (BLOB comparison = time order!)
SELECT 
  id,
  from_i64bes(created_at) as epoch_us,
  datetime(from_i64bes(created_at) / 1000000, 'unixepoch') as human_time,
  event_type
FROM events
ORDER BY created_at;  -- Sorts chronologically!

-- Range query (last hour)
SELECT * FROM events
WHERE created_at > to_i64bes((strftime('%s', 'now') - 3600) * 1000000);

紧凑型数字存储

-- Store sensor readings compactly
CREATE TABLE sensor_data (
  sensor_id INTEGER,
  timestamp BLOB,      -- 8 bytes (to_t64bes)
  temperature BLOB,    -- 4 bytes (to_f32bes) 
  humidity BLOB,       -- 2 bytes (to_u16bes, 0-65535 = 0.00-655.35%)
  PRIMARY KEY (sensor_id, timestamp)
);

-- Insert reading
INSERT INTO sensor_data VALUES (
  1,
  to_t64bes(),
  to_f32bes(23.5),
  to_u16bes(6520)  -- 65.20%
);

-- Query with decoded values
SELECT 
  sensor_id,
  from_i64bes(timestamp) as ts,
  from_f32bes(temperature) as temp_c,
  from_u16bes(humidity) / 100.0 as humidity_pct
FROM sensor_data
WHERE sensor_id = 1
ORDER BY timestamp DESC
LIMIT 100;

带符号整数排序证明

-- Demonstrate correct sorting of signed integers
CREATE TABLE signed_test (val BLOB);
INSERT INTO signed_test VALUES 
  (to_i64bes(-1000)),
  (to_i64bes(-1)),
  (to_i64bes(0)),
  (to_i64bes(1)),
  (to_i64bes(1000));

-- ORDER BY BLOB gives correct numerical order!
SELECT from_i64bes(val) as decoded FROM signed_test ORDER BY val;
-- Returns: -1000, -1, 0, 1, 1000 (correct!)

浮点排序证明

-- Demonstrate correct sorting of floats (including negatives)
CREATE TABLE float_test (val BLOB);
INSERT INTO float_test VALUES 
  (to_f64bes(-1000.5)),
  (to_f64bes(-0.001)),
  (to_f64bes(0.0)),
  (to_f64bes(0.001)),
  (to_f64bes(1000.5));

-- ORDER BY BLOB gives correct numerical order!
SELECT from_f64bes(val) as decoded FROM float_test ORDER BY val;
-- Returns: -1000.5, -0.001, 0.0, 0.001, 1000.5 (correct!)

为什么要使用BES19?

  1. 压缩存储:一个BLOB列 to_i32bes() 与可变长度TEXT相比,每行使用4个字节。

  2. 无需解码即可排序: ORDER BY blob_column 无需调用解码函数即可正常工作。

  3. 索引友好:在BLOB列上创建索引;他们会正确排序。

  4. 微秒时间戳: to_t64bes() 为您提供SQLite的亚毫秒精度 datetime() 无法匹配。

  5. 交叉平台的:在Windows、Linux和macOS上工作相同。

  6. 无需扩展:内置于SQLite二进制文件中——始终可用。

局限性

  • NaN处理:不能保证正确排序(但常规数字可以很好地工作)
  • 正/负零:可能无法区分(在实践中很少重要)
  • 溢出:传递超出类型范围的值会产生未定义的结果

技术细节

编码是 独立于端点--C代码以正确的顺序显式构造字节,而不管主机CPU的本机字节顺序如何。这确保了数据库在不同架构之间的可移植性。


常见模式

全文搜索+语义搜索

-- Combine keyword matching with semantic similarity
SELECT 
  d.title,
  d.content,
  vec_distance_cosine(d.embedding, vec_f32(:query)) as semantic_sim,
  (d.title LIKE '%' || :keyword || '%' OR d.content LIKE '%' || :keyword || '%') as keyword_match
FROM documents d
WHERE semantic_sim < 0.5 OR keyword_match = 1
ORDER BY 
  keyword_match DESC,  -- Exact matches first
  semantic_sim ASC     -- Then by semantic similarity
LIMIT 20;

分面语义搜索

-- Search within category with semantic ranking
SELECT 
  title,
  category,
  vec_distance_cosine(embedding, vec_f32(:query)) as relevance
FROM documents
WHERE 
  category = :category
  AND relevance < 0.5
ORDER BY relevance
LIMIT 10;

语义聚类

-- Find clusters of similar documents
WITH similarities AS (
  SELECT 
    d1.id as id1,
    d2.id as id2,
    vec_distance_cosine(d1.embedding, d2.embedding) as distance
  FROM documents d1
  CROSS JOIN documents d2
  WHERE d1.id < d2.id
    AND distance < 0.2
)
SELECT id1, id2, distance
FROM similarities
ORDER BY distance;

错误处理

常见错误

“CHECK约束失败”

Cause: Missing vec_f32() wrapper in SQL
Fix: Always use vec_f32() for vector parameters

“找不到引用的列”

Cause: Binding name doesn't match SQL parameter
Fix: Ensure :param_name matches bindings key

“生成嵌入失败”

Cause: Model loading issue (first use) or memory pressure
Fix: Usually auto-resolves on retry. Check available RAM.

“数据库已锁定”

Cause: Concurrent write attempts
Fix: Use WAL mode or implement retry logic

最佳实践

  1. 始终使用参数化查询 --从不将用户输入连接到SQL中
  2. 对所有向量操作使用vec_f32() --sqlite-vec扩展需要
  3. 为文件数据库启用WAL模式 --更好的并发性
  4. 索引向量列 --更快的相似性搜索
  5. 批量嵌入生成 --比一次一个更有效率
  6. 用途:内存:用于临时数据 --比文件数据库更快
  7. 杠杆:已认证用户 --自动用户上下文

限制和注意事项

线程安全

  • SQLite连接是线程本地的(除了 :memory: 带锁)
  • 一次只能有一个编写器(SQLite限制)
  • 在写入过程中对并发读取器使用WAL模式

内存数据库

  • :memory: 在服务器生命周期内持续存在
  • 在所有AI实例中共享
  • 服务器重启时丢失
  • 不适合永久储存

文件数据库

  • 存储在用户数据目录中的简单文件名
  • 对特定位置使用完整路径或@前缀
  • 自动创建目录,但不能优雅地处理权限错误

嵌入生成

  • 使用本地Qwen型号(自动下载~250MB)
  • CPU上每次嵌入约50ms
  • 嵌入是1024维的
  • 缓存有助于处理重复文本

向量运算

  • 始终使用 vec_f32() SQL中的包装器
  • 距离计算是CPU密集型的
  • 索引向量列以获得更好的性能
  • 在距离计算之前考虑预过滤

为什么这个工具是无与伦比的

1.零供应商锁定
标准SQLite格式。随时出口。在任何地方使用。没有专有格式。

2.零持续成本
无每次操作费用。没有每月订阅。不出所料的账单。

3.完全隐私
你的数据永远不会离开你的机器。没有云服务。没有数据共享。

4.完整的SQL功能
不是受限的查询语言。具有所有功能的完整SQL。交易、触发器、视图,一切。

5.包括语义搜索
不是附加组件。不是单独的服务。内置、集成、无缝。

6.自动嵌入
没有手动API调用。没有批处理作业。只需使用 generate_embedding() 在SQL中。

7.跨平台路径
智能路径解析。在Windows、Mac、Linux上都是一样的。

8.内置用户身份验证
自动用户上下文。无需到处传递用户名。

9.生产准备就绪
不是玩具。不是演示。经过实战测试的SQLite+经过验证的矢量搜索。

10.规模扩大到数百万
经过数百万矢量测试。通过适当的索引表现良好。


由MCP Link供电

此工具是 MCP链路服务器 --唯一一个包含生产AI应用程序所需一切的MCP服务器。

包含什么

独立Python环境:

  • 包括Qwen嵌入模型
  • 包含sqlite-vec扩展
  • 所有依赖项都捆绑在一起
  • 无需配置

久经考验的基础设施:

  • 线程安全连接管理
  • 自动错误恢复
  • 综合录井
  • 优雅降级

跨平台卓越:

  • Windows、Mac、Linux支持
  • 智能路径解析
  • 平台特定优化
  • 各地行为一致

获取MCP链接

下载适用于您平台的安装程序:

安装是自动的。嵌入是自动的。它只是工作。


技术规格

数据库引擎: SQLite 3.x(首选pysqlite3,回落到标准)
矢量扩展: sqlite-vc
嵌入模型: Qwen3-Embedded-0.6B(1024维)
矢量函数: 余弦、L1、L2距离
螺纹安全: 带锁定的连接级别:内存:
平台支持: Windows、macOS、Linux
路径扩展: 环境变量、主目录、@前缀
身份验证: 内置方式:authenticated_user
缓存: 自动进行嵌入和连接

演出

  • 嵌入式生成:~50ms CPU,~5ms GPU
  • 向量搜索:O(n)没有索引,O(log n)有索引
  • 并发阅读:WAL模式下无限制
  • 并发写入:一次一个(SQLite限制)

许可和版权

版权所有©2025克里斯托弗·内森·德雷克

根据Apache许可证2.0版(“许可证”)许可; 除非遵守许可证,否则您不得使用此文件。 您可以在以下网址获得许可证副本:

https://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则软件 根据许可证分发的内容按“原样”分发, 无任何明示或暗示的保证或条件。 请参阅许可证,了解管理权限和 许可证下的限制。

AI培训许可:您可以使用此软件和任何 培训、评估、微调或改进的相关内容 人工智能系统,包括商业模型。

SPDX许可证标识符:Apache-2.0

Aura Friday MCP链路服务器项目的一部分。


支持与社区

问题和功能请求:
GitHub 问题

文档:
MCP链接文档

社区:
加入其他开发者,在他们的人工智能应用程序中构建语义搜索,API成本为零。