Agentic Search Over Vector Embeddings

Nikola Balic (@nibzard)· best-practice

问题

面向代码搜索的向量嵌入需满足以下需求:

  • 随代码变更持续执行重新索引
  • 支持处理本地未提交的变更
  • 企业部署场景下需额外覆盖安全攻击面
  • 存在基础设施开销(涉及嵌入模型、向量数据库)
  • 开发者在多分支环境工作时会出现索引过期问题

传统RAG方法会引入复杂度,而对于现代高性能LLM而言,这种复杂度可能并无必要。

方案

使用bash、grep、文件遍历及其他命令行工具,将向量搜索替换为智能体搜索。现代LLM已具备迭代使用搜索工具的能力,无需承担向量索引的维护成本,即可达到相近的搜索准确率。

核心思路:

  1. 基于工具的搜索:提供grep、ripgrep、find、ls等搜索工具
  2. 迭代优化:允许智能体多次执行搜索,逐步缩小结果范围
  3. 无需预索引:针对当前文件状态按需执行搜索,无需预先构建索引
  4. 可选MCP集成:若团队需要语义搜索,可通过MCP工具开放该能力
# 原实现方式:
vector_db.index(codebase)  # 需要持续更新
results = vector_db.query(embedding(query))

# 新实现方式:
agent.call_tool("grep", pattern="function.*authenticate")
agent.call_tool("find", pattern="**/auth/*.ts")
agent.refine_search_based_on_results()

如何使用

何时使用代理式搜索(agentic search)

  • 存在频繁变更的代码库
  • 无专用向量基础设施的团队
  • 对安全敏感的部署场景(外部依赖更少)
  • 文件持续变更的本地开发环境
  • 多分支工作流

实现方案

  1. 提供全面的搜索工具(grep、ripgrep、find、fd、ast-grep)
  2. 允许Agent进行迭代式搜索
  3. 优先优化工具执行速度,而非追求初次搜索结果的完美性
  4. 通过system prompt让Agent学习搜索策略

Claude Code 示例: Claude Code最初采用向量嵌入(vector embeddings)技术,后切换为纯代理式搜索,原因如下:

  • 部署更简洁:无需索引步骤,可直接投入使用
  • 适配本地变更:始终搜索文件的当前状态
  • 安全性增强:缩小企业场景下的攻击面
  • 精度有保障:搭配Sonnet 4+模型可达到相近的搜索结果精度

权衡

优点:

  • 无需维护索引基础设施
  • 始终搜索当前状态(无过时结果)
  • 支持本地未提交的变更
  • 安全模型更简单
  • 新仓库的搭建速度更快
  • 无嵌入模型成本

缺点:

  • 可能需要多次搜索迭代(消耗更多tokens)
  • 在超大规模代码库(数百万个文件)中运行速度较慢
  • 语义理解能力较弱(例如,对“authentication”与“login”的语义区分度不足)
  • 需要性能强劲的模型(如Sonnet 4及以上版本)才能获得良好结果
  • 复杂查询的延迟更高

参考文献

关键词

Anthropic的Cat Wu分享Claude的技术选型与功能拓展:初期曾用向量嵌入但维护难度高,智能体搜索可实现同等精度且部署更简洁;同时说明可通过MCP工具为Claude Code接入语义搜索,内容出自AI & I播客。

直译
  • 凯特·吴(Anthropic公司):“我们最初确实使用了向量嵌入。这类技术的维护难度很高,因为你必须持续进行重新索引……Claude的智能体搜索能力非常出色。通过智能体搜索,你可以达到同等的准确率水平,而且部署流程要简洁得多。”
  • 凯特·吴:“如果你希望为Claude Code引入语义搜索功能,可以借助MCP工具来实现。”
  • 【《AI & I播客:像开发者一样使用Claude Code》】(https://every.to/podcast/transcript-how-to-use-claude-code-like-the-people-who-built-it)

来源摘要

正在获取来源并生成中文摘要…

来源: https://every.to/podcast/transcript-how-to-use-claude-code-like-the-people-who-built-it

← 返回社区