用生成式 AI 增强命令行帮助系统,自动回答开发者的 CLI 查询,提高终端工作效率。
这是 Redis AI Challenge: Beyond the Cache 的参赛作品。
这是一个用 Go (Cobra) 构建的 CLI 工具,它利用 Redis Stack 进行向量存储,并使用 Gemini API(谷歌的 LLM)来进行嵌入和文本生成。
这个 CLI 工具展示了 Redis Stack 如何充当向量数据库,驱动一个智能问答系统 - 完全从终端运行。
与其说 Redis 只是一个缓存或 pub-sub 工具,我用它来存储高维嵌入,并使用向量相似度搜索(KNN+余弦相似度)检索语义相关的结果。
技术栈
Go (Cobra) - CLI 界面
Gemini API - 用于生成嵌入和 LLM 响应
Redis Stack 8.x - 作为向量存储,使用 FT.CREATE、HNSW 和 KNN 检索
传统上,Redis 因其缓存能力而为人所知。我开始学习 Go 时也是从 Redis 缓存开始的。但在这个项目中,Redis Stack 被用于:
存储带有元数据的向量嵌入
输入文本的每个块都通过 Gemini 进行嵌入,并作为包含以下架构的文档存储:
这是我使用以下命令创建的基本架构:
FT.CREATE pesudo_index ON HASH PREFIX 1 doc: SCHEMA \
command TEXT \
os TEXT \
text_chunk TEXT\
embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 3072 \
DISTANCE_METRIC COSINE
这在 Redis 中直接启用了语义搜索 - 无需单独的向量数据库。
通过向量搜索检索相关数据
当用户从命令行应用中运行以下命令时:
$ pesudocli ask "How to install packages on Arch?"
Redis 处理整个检索部分,无需延迟或外部系统。在测试中,向量搜索查询始终在约 150ms 内返回结果,展示了 Redis 即使在高维向量数据上也具有的实时能力。
这是我使用的 Redis 中的向量搜索查询示例:
FT.SEARCH pesudo_index "*=> [KNN 3 @embedding $vec]" \
PARAMS 2 vec <binary_value_of_query>
DIALECT 2
KNN 3:返回最接近的 3 个向量
COSINE:通常用于寻找两个向量之间距离的方法
DIALECT 2:Redis 中向量支持所需的
在底层,Redis 使用 HNSW(分层可导航小世界)算法,该算法减少了蛮力检查以降低延迟,并在高维空间中实现有效的近似最近邻搜索。
由于这是一个 CLI,我在这里附加了示例 ask 命令的图像。
你可以从 github repo 下载并尝试该 CLI:PesudoCLI Release
Redis Stack 对于在此 CLI 中启用向量搜索至关重要。以下是它如何融入流程的:
使用 Redis 8(通过 Redis Stack)存储从输入数据块创建的向量嵌入。
ingest 命令:
ask 命令:
向量嵌入和 KNN 搜索与余弦相似度加上 LLM 的组合使得构建智能 CLI 助手成为可能。
这将给出 CLI 代码的完整演练,并展示整个程序应如何运行。
# Step 1: set config
$ pesudocli config --gemini-api-key <your-key>
# Step 2: Init the index
$ pesudocli init
# Step 3: Ingest data
$ pesudocli ingest
# Step 4 : Ask a question
$pesudocli ask "Explain about podman?"
完成初始 3 个步骤后,我们可以使用 ask 命令提出任意数量的问题。
这个项目始于一个简单的想法:构建一个智能 CLI 助手。但在这个过程中,Redis Stack 被证明远不止是一个缓存 - 它成为了一个语义搜索引擎的核心。
通过结合向量嵌入、KNN 搜索与余弦相似度和 Gemini API,我能够构建一个快速、本地优先且完全基于终端的 AI 助手 - 无需单独的向量数据库或 LLM 后端。
关键亮点
总之,这个项目展示了 Redis Stack 如何解锁一类新的 AI 驱动应用 - 从你的终端。
感谢阅读 - 感谢 Redis 团队和 Dev.to 主办这次挑战!🚀
在 Github 上查看 PesudoCLI 项目以尝试或贡献。
封面图像由 Gemini 生成,其他图像由 napkin.ai 辅助生成,文本通过 AI 进行语法修正