0

使用我们的 MCP 服务器进行 Vibe Coding RAG

Kacper Łukawski

·

2025 年 3 月 21 日

Vibe Coding RAG with our MCP server

又一个月,又一场网络研讨会!这次 Kacper Łukawski 对一些流行的 AI 编码代理进行了测试。人们对 Cursor、GitHub Copilot、Aider 和 Claude Code 等工具感到非常兴奋,所以我们想看看它们在实现比简单前端应用程序更复杂的东西时表现如何。如果大型语言模型 (LLM) 自己就能进行检索增强生成 (RAG) 编码,那岂不是很棒?

Vibe 编程

Vibe 编程是 Andrej Karpathy 提出的一种开发方法,开发者在这种方法中顺从直觉而非控制。它利用 AI 编码助手进行实现,而开发者则专注于结果。通过语音界面和对 AI 建议的完全信任,该过程优先考虑结果而非代码理解。

There’s a new kind of coding I call “vibe coding”, where you fully give in to the vibes, embrace exponentials, and
forget that the code even exists. It’s possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good.
Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard. I ask for the dumbest things like
“decrease the padding on the sidebar by half” because I’m too lazy to find it. I “Accept All” always, I don’t read the
diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code
grows beyond my usual comprehension, I’d have to really read through it for a while. Sometimes the LLMs can’t fix a bug
so I just work around it or ask for random changes until it goes away. It’s not too bad for throwaway weekend projects,
but still quite amusing. I’m building a project or webapp, but it’s not really coding - I just see stuff, say stuff, run
stuff, and copy paste stuff, and it mostly works.

这听起来很吸引人,因为代码可能由技术水平较低的人编写,而这正是我们在直播 Vibe 编程会话中想要验证的,看看是否真有那么容易。

免责声明:我们无法保证应用程序在网络研讨会结束时一定能运行,但我们还是试了试!会话时长不到一小时,即使在这段时间内能有一个勉强能用的演示就已经算是一个巨大的成功了。

了解模型上下文协议 (MCP)

在深入了解这些工具之前,理解驱动我们方法的原理很重要。模型上下文协议 (MCP) 是一种开放协议,可以实现大型语言模型应用程序与外部数据源和工具之间的无缝集成。无论您是构建 AI 驱动的 IDE、增强聊天界面,还是创建自定义 AI 工作流,MCP 都提供了一种标准化的方式来连接 LLM 与其所需的上下文。

我们的 mcp-server-qdrant 实现充当了基于 Qdrant 之上的语义记忆层。这种组合使 AI 代理能够

  1. 存储和检索记忆(代码片段、文档等)
  2. 在您的代码库中执行语义搜索
  3. 找到生成新代码所需的最相关上下文

服务器提供两个主要工具

  • qdrant-store:将信息(包含可选元数据)存储到 Qdrant 数据库中
  • qdrant-find:使用语义搜索检索相关信息

这种架构使 AI 编码代理能够在整个开发过程中保持上下文感知。

AI 编码助手

目前没有明显的 AI 编码工具优胜者,选择取决于您的偏好和需求。我们进行了一些初步研究,并决定测试以下工具

Cursor

最近 Cursor 引起了很大的轰动,这是有原因的。它是一个功能强大的集成到 IDE 中的工具,基于 Visual Studio Code 构建,有望改变我们在 AI 协助下的编码方式。但是,对于那些像我一样与 VS Code 关系有些复杂的人来说,可能更喜欢坚持使用您最熟悉的、效率最高的工具,例如 JetBrains IDEs。Cursor 的一个巨大优势在于它可以与 MCP 服务器集成,例如 mcp-server-qdrant,这使您可以向 AI 模型提供自己的上下文。

GitHub Copilot

GitHub Copilot 对您来说可能是一个有趣的选择,特别是如果您是开源贡献者并符合免费获得 Pro 计划的条件。这非常有吸引力,因为 Pro 计划没有任何使用限制。这是相对于 Cursor 的一个显著优势,Cursor 确实有一些使用限制。从纯经济角度来看,如果 Copilot 能够提供类似的结果,那它将非常有意义。

Aider

我们考虑的另一个竞争者是 Aider - 一个基于终端的编码代理。它是一个基于终端的工具,直接与您的 git 仓库协同工作,可以在多个文件中进行编辑。特别引人注目的是它的灵活性 - 您可以将其连接到几乎任何您选择的 LLM,包括本地模型(如果您担心隐私或离线工作)。而且它是完全开源的,这可能是一个巨大的优势!

Claude Code

最后但同样重要的是,我们有 Claude Code - 另一个终端 AI 编码助手,但它是唯一一个与特定模型家族(Anthropic 的 Claude 模型)紧密集成的工具。由于它是由创建模型的同一团队开发的,它可能是最适合这项任务的。该工具仍处于测试预览阶段,但内置对模型上下文协议的支持是一个巨大的优势,我们最终决定在我们的 Vibe 编程会话中使用它!

构建项目

Vibe 编程背后的理念是让 AI 完成繁重的工作,而您专注于结果。然而,真正的软件开发不仅仅是编写代码。它关乎理解问题、设计解决方案以及选择正确的工具和库。我们不希望模型使用可能基于过时版本的库进行训练,因此我们需要向它提供正确的上下文。这就是为什么为 AI 编码代理构建一个内联 RAG(检索增强生成)可以将其提升到新的水平,因为它可以在模型需要时提供上下文。

在我们的案例中,我们确实想使用 DaisyUI(一个 Tailwind CSS 组件库),以便在 CSS 中使用语义类名。最新版本(截至网络研讨会时为 5.0.6)是首选版本,但我们使用的所有 LLM 更多是基于较旧的 4.x 版本生成代码。试想一下,LLM 不会从头开始生成代码,而是会在我们的知识库中搜索最相关的示例,并根据提取的示例生成代码,甚至可能重用代码片段。这就是为什么我们决定使用 MCP 服务器来为 AI 编码助手提供上下文。

设置 MCP 服务器

Qdrant MCP 服务器充当语义记忆层,可以

  • 使用 qdrant-store 工具存储代码片段、文档和实现细节
  • 使用 qdrant-find 工具根据自然语言查询检索最相关信息

在我们的直播编码会话中,我们配置了 Claude Code 来与这个 MCP 服务器协同工作。当 Claude 需要生成代码时,它可以自动在我们的代码库中搜索相关示例,并根据提取的示例创建新代码。此外,当助手完成代码生成后,它还可以将其存储到 Qdrant 中供将来参考。如果配置正确,它只会在我们接受更改时这样做。

mcp-server-qdrant 的最新版本允许为 AI 代理指定指令,这样它就能理解何时使用哪个工具。通过这种方式,MCP 服务器不仅可以用于编码,还可以用于几乎所有上下文至关重要的语义搜索任务。我们在网络研讨会中就是这样做的

export TOOL_FIND_DESCRIPTION="Use this tool ALWAYS before generating any FRONTEND code. \
It lets you search for relevant code snippets based on natural language descriptions. \
The 'query' parameter should describe what you're looking for, and the tool will return the most relevant code \
snippets. If this tool finds something similar, then create your code so it is consistent. Reuse existing code \
as much as you can."

export TOOL_STORE_DESCRIPTION="Store reusable FRONTEND code snippets for later retrieval. \
The 'information' parameter should contain a natural language description of what the code does, while the actual \
code should be included in the 'metadata' parameter as a 'code' property. The value of 'metadata' is a Python \
dictionary with strings as keys. Use this always when you generate some code to store it for further reference."

这两个描述都可以在运行服务器时进行配置

claude mcp add qdrant-code-search \
  -e QDRANT_URL="http://localhost:6333" \
  -e COLLECTION_NAME="mcp-server-qdrant-knowledge-base" \
  -e TOOL_FIND_DESCRIPTION="$TOOL_FIND_DESCRIPTION" \
  -e TOOL_STORE_DESCRIPTION="$TOOL_STORE_DESCRIPTION" \
  -- uvx mcp-server-qdrant

MCP 服务器的配置主要通过环境变量完成。对于想要设置自己的实例的用户,以下是关键的配置选项

名称描述默认值
QDRANT_URLQdrant 服务器的 URL
QDRANT_API_KEYQdrant 服务器的 API 密钥
COLLECTION_NAME要使用的集合名称必需
QDRANT_LOCAL_PATH本地 Qdrant 数据库的路径(QDRANT_URL 的替代选项)
EMBEDDING_PROVIDER要使用的嵌入提供程序fastembed
EMBEDDING_MODEL要使用的嵌入模型名称sentence-transformers/all-MiniLM-L6-v2

默认情况下,服务器使用 FastEmbedsentence-transformers/all-MiniLM-L6-v2 嵌入模型来编码记忆,该模型在性能和准确性之间提供了良好的平衡。

构建 DaisyUI 组件知识库

DaisyUI 包含一系列组件,并且其文档对 LLM 很友好,因为它提供了包含所有组件列表的 llms.txt 文件。

DaisyUI

这使得在 Vibe 编程一个应用程序时,可以非常容易地提取所有代码片段及其相应含义并进行存储以供参考。使用 LLM 进行这种提取过程很容易,但我们暂时跳过这部分。Qdrant 快照包含了我们在网络研讨会中使用的知识库,因此您可以直接将其导入到您的 Qdrant 实例中并立即开始使用。

学习新技能时,YouTube 视频是一个很好的资源。然而,深度内容通常很长,并可能假定您没有先验知识。如果您能有一个智能助手来帮助您浏览视频并找到您确切需要的内容呢?本项目旨在创建一个视频内容搜索引擎,帮助您快速浏览并专注于对您特别重要的内容。

您想重现我们的 Vibe 编程项目吗?该仓库包含了所有必要的说明和代码,帮助您入门。

Vibe 编程会话

如果您有兴趣了解 Claude Code 的实际表现如何,可以在下方观看完整的网络研讨会录像

无论您是构建 MVP,还是想借助 AI 构建更复杂的应用程序,为您的代理提供可靠的信息源都至关重要。这就是我们构建 MCP 服务器的原因,这样您就可以轻松地将您的文档和代码库连接到 Claude Code、Cursor、Windsurf 或任何其他支持模型上下文协议的 AI 代理。

免费开始使用 Qdrant

开始使用