
chromem-go
Go 项目内嵌向量数据库,零依赖实现本地语义搜索
项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-08-09 · 当前星标 ★ 1076
技术标签
使用教程
环境要求
- 已安装 Go 工具链,终端可直接执行 go 命令(README 未指定最低版本)
- 使用 OpenAI 嵌入时需准备 OPENAI_API_KEY 环境变量
- 若改用 Ollama 本地嵌入模型,需本地已运行 Ollama 服务
- 无需另行部署 Chroma 或其他外部数据库服务
安装与启动步骤
-
1初始化 Go 模块
为项目创建 go.mod,作为后续拉取依赖的基础;已有模块可跳过此步。
go mod init your-module-name -
2安装 chromem-go
README 给出的唯一安装命令,直接拉取最新版本作为项目依赖。
go get github.com/philippgille/chromem-go@latest -
3配置嵌入密钥
示例中 CreateCollection 传 nil 表示使用 OpenAI 嵌入,必须设置该环境变量。
export OPENAI_API_KEY=sk-xxxxxxxx -
4编写最小示例
把 README 的 minimal 示例保存为 main.go,创建集合、写入文档并查询。
package main import ( "context" "fmt" "runtime" "github.com/philippgille/chromem-go" ) func main() { ctx := context.Background() db := chromem.NewDB() // Passing nil as embedding function leads to OpenAI being used and requires // "OPENAI_API_KEY" env var to be set. Other providers are supported as well. // For example pass `chromem.NewEmbeddingFuncOllama(...)` to use Ollama. c, err := db.CreateCollection("knowledge-base", nil, nil) if err != nil { panic(err) } err = c.AddDocuments(ctx, []chromem.Document{ { ID: "1", Content: "The sky is blue because of Rayleigh scattering.", }, { ID: "2", Content: "Leaves are green because chlorophyll absorbs red and blue light.", }, }, runtime.NumCPU()) if err != nil { panic(err) } res, err := c.Query(ctx, "Why is the sky blue?", 1, nil, nil) if err != nil { panic(err) } fmt.Printf("ID: %v\nSimilarity: %v\nContent: %v\n", res[0].ID, res[0].Similarity, res[0].Content) } -
5运行示例程序
运行后会调用嵌入模型并做相似度检索,首次运行需联网访问嵌入接口。
go run main.go
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
OPENAI_API_KEY | 是 | CreateCollection 传 nil 时使用 OpenAI 嵌入,需该变量鉴权 | sk-xxxxxxxx |
如何确认成功
程序输出 ID: 1、Similarity 约为 0.6833369、Content 为 The sky is blue because of Rayleigh scattering. 即成功。
常见问题
Q:必须用 OpenAI 做嵌入吗?
A:不是。CreateCollection 传 nil 才走 OpenAI;也可以传入 chromem.NewEmbeddingFuncOllama(...) 使用本地 Ollama 嵌入模型,示例代码目录中两种方式都有。
Q:需要像 Chroma 一样单独启动数据库服务吗?
A:不需要。chromem-go 是可嵌入的向量数据库,直接在 Go 进程内使用内存存储,类似用 SQLite 而不是 PostgreSQL。
Q:数据会持久化吗?
A:默认在内存中,项目说明中标注为 in-memory with optional persistence,持久化是可选项,需自行按接口启用。
Q:可以用于生产环境吗?
A:项目处于 beta 且仍在大量开发中,v1.0.0 之前可能引入破坏性变更,变更记录见仓库 CHANGELOG。
注意事项
- 本库定位是简洁与常见场景的性能,不以百万级文档规模或功能数量为目标。
- 官方 README 的基准数据:中端 2020 款 Intel 笔记本 CPU 上查询 1000 条约 0.3 ms,100000 条约 40 ms。
- 它既不是连接 Chroma 的客户端,也不是 Chroma 的 Go 重写,而是一个独立的数据库。
- README 的 minimal 示例需要联网调用嵌入模型,离线场景请改用 Ollama 等本地嵌入函数。
核心亮点
- 零第三方依赖,降低部署和依赖管理复杂度
- API 设计类似 Chroma,上手快,迁移成本低
- 支持内存模式与持久化,灵活适配不同场景
不足之处
- 功能相对精简,缺少高级索引和过滤能力
- 文档和社区生态尚在早期,可参考资源有限
适用场景
- 构建 Go 编写的 AI 聊天机器人,需要本地知识库检索
- 在边缘设备或离线环境中运行向量搜索功能
- 快速原型验证,避免引入重型数据库服务
替代项目
weaviate、qdrant、milvus
下一篇:MyScaleDB
同类项目推荐
doubao2api
开源
把豆包变成 OpenAI 接口,免费多模态调用
Reverse-engineered Doubao (豆包) API → OpenAI-compatible REST service. Free multimo···
clewdr
开源
一个入口统一转发多家大模型 API,高并发低延迟
High Performance LLM Reverse Proxy
agentplay
开源
把编码代理的会话回放成地图和时间线
Replay your coding agent sessions as a map and a timeline
code-on-incus
开源
给每个 AI 代理一个独立沙箱,自动防威胁
Give the agent a machine. Just not yours. Each AI coding agent gets its own isolated···
pyseekdb
开源
用 Python 轻松连接 OceanBase,高效实现向量检索
A unified python SDK supports OceanBase or OceanBase seekdb, more efficient and easy···
persistent-ai-memory
开源
给AI装上本地长期记忆,让对话不再失忆
A persistent local memory for AI, LLMs, or Copilot in VS Code.
mempalace
开源
给 AI 装上永久记忆,告别每次对话都失忆
The best-benchmarked open-source AI memory system. And it's free.
moltstream
开源
让 AI 智能体像真人一样开直播,实时推送内容
Agent-native streaming infrastructure. The streaming runtime built for non-human bro···
gpt-load
开源
把多个 AI 账号聚合成一个入口,自动轮换防封省额度
Self-hosted AI gateway for multi-channel, multi-credential setups — API keys and su···