Qwen Code 子代理实战:用 semble 语义代码搜索替代 grep,精准定位实现
代码智能体MCP 服务搜索引擎人工智能【免费下载链接】sembleFast and Accurate Code Search for Agents. Uses 99% fewer tokens than grepread项目地址https://gitcode.com/gh_mirrors/se/semble点击查看免费下载本指南以仓库中为 Qwen Code 准备的子代理配置文档 qwen.md 为核心完整讲解如何让 Qwen Code 通过semble search按语义意图或符号名检索代码、按--content过滤代码/文档/配置、用find-related挖掘相关实现并跨多个仓库一次性搜索。读完本文你将掌握 Qwen Code 子代理中这套命令的每一个参数与底层行为并理解其索引缓存、混合检索与重排原理。为什么让 Qwen Code 用 semble 而非 grep在探索陌生代码库时Agent 的传统做法是grep加全文read_file先猜测关键字再整文件读入上下文。semble 的思路相反——它把每个文件按代码结构切分成语义块chunk查询时只返回命中的小块及其精确行号Agent 直接跳到对应位置即可不必重复搜索或整文件阅读。从源码看这一目标的实现方式是双路混合检索semble.search.search()同时跑语义检索基于 Model2Vec 静态嵌入模型与 BM25 词法检索再用 Reciprocal Rank FusionRRF融合两份分数见 search.py。README 报告其相较 grepread 可节省约 99% 的 token 用量且整个检索过程在 CPU 上毫秒级完成。对 Qwen Code 这类需要频繁找实现、找调用方、理解机制的编码 Agent 而言这是比 grep 更省 token、更快、更精准的探索手段。事实边界说明上述 ~99% token 节省、约 500ms 建索引、NDCG10 0.854 等数据均出自 README.md 的官方说明与 benchmarks 基准本文不作引申。子代理配置frontmatter 逐字段解读qwen.md 是安装器写给 Qwen Code 的专用子代理文件其目标位置为~/.qwen/agents/semble-search.md对应关系见 docs/installation.md 中的表格。文件开头有一段 YAML frontmatter逐字段拆解如下--- name: semble-search description: Code search agent for exploring any codebase. Use for finding code by intent, locating implementations, understanding how something works, or discovering related code. Prefer over run_shell_command/read_file for any semantic or exploratory question. tools: - run_shell_command - read_file ---name: semble-search子代理标识Qwen Code 会在需要代码探索时调用它。description触发条件与能力边界。注意它明确写着Prefer over run_shell_command/read_file for any semantic or exploratory question——即凡属按意图找代码、定位实现、理解机制、发现相关代码这类语义性或探索性问题都应优先交给该子代理而不是直接跑 shell 命令或读文件。tools该子代理可用的工具集。run_shell_command用于执行sembleCLIread_file用于跳转到搜索结果指向的文件位置精读。从 installer/agents.py 可以看到 Qwen Code 的安装目标定义MCP 配置写入~/.qwen/settings.json的mcpServers指令写入~/.qwen/QWEN.md子代理即本文件。也就是说这套配置既可以通过 CLI 子代理方式使用也可以作为 MCP 工具mcp__semble__search/mcp__semble__find_related被直接调用。基础用法semble search的三个典型姿势文档给出的三条核心命令如下它们对应检索的三个常见诉求semble search authentication flow ./my-project --max-snippet-lines 10 # first 10 lines only, concise semble search save_pretrained ./my-project # full chunk content semble search save model to disk ./my-project --top-k 10 # more results第一条用自然语言描述功能意图authentication flow并用--max-snippet-lines 10只取每个结果的前 10 行——正好覆盖函数/类签名加少量函数体足以确认位置又不浪费上下文。第二条直接按符号/标识符save_pretrained检索不带--max-snippet-lines时返回完整 chunk 内容。符号名查询会走符号偏向的排名逻辑见下文自适应加权。第三条--top-k 10增加返回结果数适合需要全面盘点候选实现如接口的所有实现的场景。从 cli.py 可以看到这些参数的默认值path默认[.]当前目录、--top-k默认 5、--max-snippet-lines默认None完整 chunk、--format默认json。--max-snippet-lines 0则只输出文件路径与行号区间、不带任何代码内容适合只要定位不要正文的场合。输出为 JSON 时每个结果包含file_path、start_line、end_line、score以及除非设为 0content字段字段拼装逻辑见 utils.py。文档随后强调Results are cached automatically on first run and invalidated when files change. 这与 cache.py 的实现一致首次检索会构建索引并缓存到系统缓存目录macOS 为~/Library/Caches/semble/、Linux 为~/.cache/semble/可用SEMBLE_CACHE_LOCATION覆盖后续运行通过get_validated_cache()比对文件的mtime_ns清单文件有增删改时缓存失效再次构建时则通过load_previous_for_incremental()复用旧索引只对变化文件做增量重索引见 cache.py而非全量重建。内容类型过滤--content docs / config / all默认只检索代码但当目标内容在文档或配置文件里时就需要显式切换semble search deployment guide ./my-project --content docs semble search database host port ./my-project --content config semble search authentication ./my-project --content all--content docs检索文档与散文markdown、rst 等。--content config检索配置文件yaml、toml 等。--content all同时检索代码、文档与配置。底层由ContentType枚举code/docs/config驱动见 types.py。CLI 层面--content可接受空格分隔的多个值如--content code docs默认code具体解析见 cli.py。不同的内容选择会生成不同的索引变体并分开缓存——cache.py 中缓存目录名会带上内容作用域后缀如index-docs-configMCP 模式下同样按内容选择分别缓存。另有已被弃用的--include-text-files等价于--content all新代码请直接使用--content。相关代码发现semble find-related当一条搜索结果看起来有希望时可把它的file_path和line来自结果中的start_line/end_line区间交给find-related寻找与该位置代码语义相似的其他 chunksemble find-related src/auth.py 42 ./my-project其用途包括找某个接口的全部实现、某函数的全部调用点、某类的全部测试。实现上find-related先用resolve_chunk()把(file_path, line)还原为索引中的 chunk见 utils.py再以该 chunk 的内容作为查询向量在语义索引中检索最相似的 chunk并自动排除种子自身、限定同语言范围见 index/index.py。注意line是 1 起始的行号若该行不在任何已索引 chunk 内命令会报 No chunk found at ... 并退出见 cli.py。多仓库联合搜索把依赖项目一起索引path省略时默认为当前目录同时接受 git URL。当本项目调用了兄弟仓库里定义的服务时可以把多个路径或 URL 一次传给semble search让它们作为一个整体语料被检索semble search invoice endpoint ./service-a ../service-b此时每个索引各自构建、在查询时合并SembleIndex.merge见 index/index.py返回结果的file_path会带上仓库名前缀如service-b/api/invoices.py输出里附带一张repos映射表把前缀对应回原始路径或 URL把带前缀的路径回传给find-related即可从已知位置跨所有仓库继续挖掘相关代码。若path是 git URL以https://、http://、ssh://等开头判定见 utils.pysemble 会按需浅克隆--depth 1默认 60 秒超时可用SEMBLE_CLONE_TIMEOUT调整到临时目录完成索引见 index/index.py。未加入 PATH 时的回退uvx如果semble不在$PATH上用 uvx 按需拉起并附带 MCP 依赖即可所有命令参数保持一致uvx --from semble[mcp] semble search authentication flow ./my-project安装器写入的 MCP 配置与子代理指令同样使用uvx --from semble[mcp]X.Y.Z形式固定版本见 installer/agents.py保证 Agent 调用的是安装时所写指令对应的版本。推荐工作流六步探索法文档末尾给出了 Qwen Code 子代理应该遵循的完整工作流逐条展开如下先用semble search定位相关 chunk。索引首次自动构建并缓存无需手动准备。按内容类型切换检索范围文档用--content docs配置文件用--content config全部内容用--content all。直接跳到返回的文件与行号。不要对同一内容再次搜索或 grep——这正是 token 节省的关键来源。可选用find-related顺藤摸瓜。以某条有希望结果的file_path与line为种子发现相关实现。答案可能在被依赖项目或兄弟仓库时把相关仓库路径一次性传给同一次semble search跨仓库联合检索。仅在确需整仓字面匹配时用 grep。例如重命名函数后要找出全部调用点这类精确字面量全量枚举需求才回归 grep。这套流程的核心理念与 installer/agents.py 中写入的SEMBLE_START/SEMBLE_END指令完全一致搜索返回文件与行号后直接导航精读绝不为同一内容重复 grep。底层原理补充缓存、混合检索与代码感知重排三个值得展开的实现细节帮助你判断命令参数的真实影响1索引缓存与自动失效。semble search每次运行先经 cache.py 的校验路径命中且model_path、content类型、chunk 大小、缓存格式版本都匹配的缓存直接加载本地目录还会逐文件比对mtime_ns任何文件变化都会触发增量重索引而非全量重建。所以文档所说的首次自动缓存、文件变化自动失效并非夸大而是由文件清单比对机制保证的。2混合检索的融合与权重。search.py 中语义与 BM25 两路各取top_k * 5的候选分数分别转为 RRF 分数1/(krank)k60后按alpha加权合并。alpha默认不固定符号型查询如Foo::bar、_private、getUserById自动偏向 BM25alpha0.3自然语言查询则语义与词法均衡alpha0.5判定逻辑见 ranking/boosting.py。这也解释了为什么save_pretrained这种符号查询与save model to disk这种自然语言查询会有不同表现。3代码感知重排rerank。合并分数后若索引包含代码内容还会应用四类信号见 ranking/boosting.py 与 ranking/penalties.py定义符号的 chunk 获得最高约 3 倍的加成NL 查询中嵌入的 camelCase 符号按半强度加成同一文件多个 chunk 命中时提升文件级分数测试文件、compat/、legacy/、示例目录、.d.ts声明桩等按路径模式降权强降权系数 0.3、.d.ts为 0.7同文件多 chunk 还会触发饱和衰减避免结果被单个文件刷屏。检索词与文件名的词干匹配如查parse config能命中parseConfig、ConfigParser、config_parser则由 tokens.py 的 camelCase/snake_case 拆分逻辑支撑。这些行为均有对应测试覆盖例如 tests/test_search.py 验证了 BM25 的选择器过滤、混合检索的跨文件去重、以及默认与自定义模型的加载路径tests/test_ranking.py 则覆盖符号查询加权与路径惩罚逻辑。安装与更多参考资料安装执行uv tool install semble后运行semble install交互式选择 MCP / 指令AGENTS.md/ 子代理三种集成Qwen Code 的子代理文件即本文讲解的 qwen.md完整安装说明见 docs/installation.md。沙箱环境可无人值守安装semble install --agent qwen --type mcp subagent --yes。常用维护命令semble clear index清索引缓存、semble clear savings清 token 节省统计、semble savings查看累计节省检索结果默认 JSON 输出--format text可切换为人类可读格式。若想在 Python 中以库方式调用同样的检索能力SembleIndex.from_path/from_git/merge/search/find_related可参考 index/index.py 与 README.md 的 Library usage 一节SEMBLE_MODEL_NAME环境变量可切换为本地路径或 Hugging Face 仓库中任意 Model2Vec 兼容模型。把以上命令与工作流写进 Qwen Code 的指令后Agent 探索任何代码库的方式将从猜测关键字 整文件读取升级为语义定位 精确跳转这正是该子代理存在的意义。赞分享代码智能体MCP 服务搜索引擎人工智能【免费下载链接】sembleFast and Accurate Code Search for Agents. Uses 99% fewer tokens than grepread项目地址https://gitcode.com/gh_mirrors/se/semble点击查看免费下载相关推荐如何用一句自然语言精准定位代码gortex 语义搜索实战指南如何用一句自然语言精准定位代码gortex 语义搜索实战指南 gortex 是一款面向 AI 编程代理与 IDE 的高性能代码智能引擎支持 257 种语言、mac-setup 指南用 ack 取代 grep 的 macOS 代码搜索实战mac setup 指南用 ack 取代 grep 的 macOS 代码搜索实战 ack 是一款专为程序员设计的代码搜索工具定位为 grep 的高效替代品文档教程开发工具Onyx生态系统概览包管理、文档生成与第三方库推荐Onyx生态系统概览包管理、文档生成与第三方库推荐 Onyx作为一款现代化的编译器和开发者工具链其生态系统围绕包管理、文档生成和丰富的标准库构建为开发者提上一篇Spring项目快速启动终极指南5分钟完成项目初始化下一篇终极指南掌握Antares SQL客户端的10个高效数据库管理技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Kafka异步配置全解析:从Producer到Consumer的线程模型与性能调优

Kafka异步配置全解析:从Producer到Consumer的线程模型与性能调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 2:36:25 阅读更多 →
连续打卡46天:从量变到质变的关键复盘方法

连续打卡46天:从量变到质变的关键复盘方法

D46这个编号我一看就明白,你也在跑一个连续打卡计划,而且已经坚持到第46天了。算一下就知道,从第1天开始,中间不间断地执行了四十五天,这个阶段恰好是习惯从“刻意坚持”向“身体自动反应”过渡的关键拐点。如果你正处…

2026/10/15 2:36:25 阅读更多 →
吉他物理原理:从木材振动到泛音校准的声学工程解析

吉他物理原理:从木材振动到泛音校准的声学工程解析

1. 一把木头与钢弦的物理实验室:为什么“吉他”这个词至今仍能撬动千万人的神经你有没有试过,在深夜拧紧一颗琴颈调节杆,听那细微的金属形变声像心跳一样传到指尖?或者把调音器APP放在琴箱共鸣孔前,看着泛音列里第5个谐…

2026/10/15 2:36:25 阅读更多 →

最新新闻

笑脸与口罩识别的工业级落地:从像素统计到人机意图理解

笑脸与口罩识别的工业级落地:从像素统计到人机意图理解

1. 这不是玩具项目:笑脸与口罩识别背后的真实业务切口“笑脸识别,口罩识别”——光看标题,很多人第一反应是:这不就是个课堂Demo?调用OpenCV读个摄像头,加两行cv2.CascadeClassifier,再套个预训…

2026/10/15 3:08:36 阅读更多 →
2026,程序员的时代拐点到了

2026,程序员的时代拐点到了

1. 引言 2026 年,注定是程序员职业生涯中一个无法回避的坐标点。这一年,AI 编程助手从「玩具」变成了「同事」,大模型从「聊天机器人」变成了「需求分析师」,而程序员这个职业本身,也站在了前所未有的十字路口。有人焦…

2026/10/15 3:08:36 阅读更多 →
TensorFlow Lite集成实战:从模型转换、量化到端侧推理加速

TensorFlow Lite集成实战:从模型转换、量化到端侧推理加速

到这里,前几章我们讲了模型怎么训、怎么调,该轮到最“落地”的一步了:TensorFlow Lite集成。这章我想用一次完整的实操视角,把从训练好的模型到真正跑在端侧设备上的全流程讲透——包括模型转换、量化、Delegate加速、端侧推理API…

2026/10/15 3:08:36 阅读更多 →
Rope 免费换脸教程:从安装到导出第一条视频的 10 分钟路径

Rope 免费换脸教程:从安装到导出第一条视频的 10 分钟路径

Rope 免费换脸教程:从安装到导出第一条视频的 10 分钟路径 【免费下载链接】Rope GUI-focused roop 项目地址: https://gitcode.com/GitHub_Trending/ro/Rope Rope 是一款免费的图形化人脸交换工具,基于 insightface 的 inswapper_128&#xff08…

2026/10/15 3:08:36 阅读更多 →
金蝶Cloud销售模块参数配置全攻略:从流程打通到信用风控

金蝶Cloud销售模块参数配置全攻略:从流程打通到信用风控

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:08:36 阅读更多 →
免费广告拦截插件 uBlock Origin:默认 5 份过滤列表,请求发出前就拦下

免费广告拦截插件 uBlock Origin:默认 5 份过滤列表,请求发出前就拦下

免费广告拦截插件 uBlock Origin:默认 5 份过滤列表,请求发出前就拦下 【免费下载链接】uBlock uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean. 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock 很多…

2026/10/15 3:07:36 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →