新闻详情

新闻详情

首页 / 资讯中心 / 详情

多引擎实时搜索与大模型结合:MiYo.AI开源智能聚合平台解析

发布时间:2026/10/1 17:50:40来源:尧图网络
多引擎实时搜索与大模型结合:MiYo.AI开源智能聚合平台解析
前阵子折腾知识库和资料调研我一直在找一个能真正把“实时搜索”和“智能总结”揉到一起的开源方案。市面上AI搜索工具不少但很多要么需要注册服务、要么闭源、要么搜索源单一导致答案片面。直到看到MiYo.AI米柚AI搜索这个项目一个实时智能搜索聚合平台代码开源思路也干净利落把多个搜索引擎的实时结果聚合起来再用大模型做理解、筛选和总结。这篇文章就围绕这个项目展开聊聊它的核心设计、部署流程、典型问题和可扩展玩法给正在做AI搜索、智能问答或者信息聚合相关项目的朋友一个直接的参考。1. MiYo.AI的定位为什么需要“聚合”而非“单引擎”1.1 单一搜索源的局限性与用户真实痛点我们大多数人用搜索引擎的习惯是在百度里查一遍觉得不满意再切到必应偶尔还要打开搜索看看英文资料。这个过程本身就很低效。更麻烦的是当你需要某个明确答案时搜索结果里往往夹杂大量SEO垃圾、广告和过时内容你需要靠自己“人肉”过滤。如果是技术类问题搜出来的前几页还可能是几年前的旧方案完全没法直接用。大模型虽然有强大的理解能力但知识截止日期决定了它无法回答新问题。比如你问“2026年Q1发布的新款开发板的GPIO规格”一个训练数据停留在去年的模型肯定是胡编的。把实时搜索和LLM结合就是业界常说的RAG检索增强生成落地场景。但RAG有个隐藏问题如果召回的知识源只有单一渠道答案质量就受制于这一个源。MiYo.AI选择把多个搜索引擎的结果做聚合本质上是把“检索召回”这个环节的级联错误风险降到最低——多条独立信息源交叉验证比单一源可靠得多。1.2 项目的核心架构与信息流MiYo.AI的整体设计思路可以用一条链路说清楚多路搜索引擎并行检索 → 结果归一化处理 → 内容去重与重排 → 拼接上下文送入LLM → 生成总结性回答并附上引用来源。拆开来看关键点在于“多路检索”和“LLM生成”之间这块中间层。没有这块中间层直接调用Bing API检索再把前十条网页原文一股脑塞给大模型效果通常很差重复内容太多、无关片段污染上下文、原文格式杂乱导致Markdown解析错乱。MiYo.AI做了一个比较聪明的处理先把每路搜索引擎返回的结果转换成统一的文档结构然后做段落级别的查重和权重打分只保留高价值片段最后按照相关度重排后再拼接。这个前置处理会让最终生成质量明显提升也是它跟所谓“套壳AI搜索”拉开差距的地方。从项目定位来看MiYo.AI更适合这几类人正在做信息聚合类产品的开发者、需要快速搭建企业内部知识问答系统的同学、以及想研究RAG链路如何接入多数据源的算法工程师。它不适合谁呢如果你只是日常查点资料、不想自己部署服务那直接用现成的在线AI搜索产品即可没必要折腾开源部署。2. 核心功能拆解从实时检索到智能生成2.1 实时检索模块多引擎并行与策略配置MiYo.AI默认支持接入多个搜索源。基于开源社区常见方案一般会优先适配那些有免费额度的API同时也支持自建爬虫抓取。实际项目里通常安排的是Bing Web Search API、Brave Search API外加一个可选的SearXNG自托管实例。这里解释下为什么选这几个Bing Web Search API微软的认知服务有免费额度响应快英文和中文结果都说得过去国际市场覆盖比较全。Brave Search API主打隐私和独立索引结果不依赖Google或Bing的索引适合当成“第二路独立信号源”来做交叉验证。SearXNG自托管的元搜索引擎汇总Google、Bing、Reddit等多个来源完全可控且没有API配额限制但需要你自己部署和维护稳定性取决于上游源是否反爬。多路检索不是简简单单发出多个HTTP请求就完了。每路返回的字段结构不同有的有摘要有的只有标题和URL有的页面编码是GBK你得转成UTF-8这些都是编码和归一化坑。之后还需要对相同或高度近似的URL做去重比如同一篇文章被多个搜索源收录URL只是加了跟踪参数内容其实一模一样。去重逻辑可以基于域名路径归一化也可以用SimHash计算文本相似度。配置层面项目通常会有一个类似search_providers的配置项你可以按需开关。我个人的建议是初期至少保留两个差异较大的搜索源比如Bing配Brave而不是Bing配百度——两个源如果索引重叠度高聚合效果接近于无。2.2 LLM理解与RAG问答管线检索结果拿到后如何让大模型真正“读懂”这批网页内容是决定体验的关键。MiYo.AI走的路线是把多个搜索源的结果按段落切分经过相关性评分选出Top-K个段落再组装成prompt上下文让LLM基于这些段落做总结回答。为什么不是直接让LLM读全文因为上下文窗口有限而且整页HTML里导航、广告、相关推荐等内容占比非常大直接丢全文既浪费token又引入大量噪声。在实现中我建议注意一个细节各搜索源的摘要内容和网页正文内容要区分对待。搜索源返回的摘要往往是结构化程度较高的文本适合直接作为候选片段而网页正文需要做正文抽取类似Readability算法。MiYo.AI在这块的处理是给两类来源设置了不同的权重摘要权重略高一些因为搜索源自己已经做过一轮相关性排序。生成环节涉及两个关键参数temperature和max_tokens。这两项项目里的默认值我建议不要直接照抄要根据你自己的场景调整。做总结类回答时temperature设到0.2左右很合适太低容易复读原文太高容易脱离检索内容自由发挥。max_tokens决定了回答的详细程度如果你的用户多倾向于“要一个直接答案”那就控制在500-800中文token如果是写综述类问题可以拉到2000以上。2.3 多模型接入与流式输出智能搜索平台肯定不能绑定死一家模型供应商。MiYo.AI在模型接入层做了抽象兼容OpenAI格式的API是基本盘此外还支持本地的Ollama部署模型。这个设计非常实用——因为AI搜索本身就是高频调用如果用云端商用的GPT接口长对话下来成本非常高。实测中把简单检索总结任务切给本地的小参数模型跑复杂推理任务才走云端大模型成本能降六七成。很多AI搜索开源项目只侧重前端的对话界面流式输出却没做好。MiYo.AI的流式体验给我印象比较深回答是逐字“流”出来的中间还提前插入了引用角标而不是等整段生成完再一次性吐出。流式输出实现的底层逻辑是SSEServer-Sent Events服务端基于fetch流式读取LLM返回再通过WebSocket转发给前端。这一步如果没处理好会出现前端一卡一卡的情况所以要检查缓冲区和心跳机制是否完善。3. 项目部署实操从零到可用的完整过程3.1 环境准备与基础依赖安装MiYo.AI是标准的Node.js React全栈项目。部署它需要准备这些东西项目版本建议说明Node.js18.x 或 20.x LTS低于16会在安装依赖时直接报错pnpm8.x 及以上项目锁定了pnpmnpm装依赖会缺包Docker可选但推荐如果连PostgreSQL和Redis都用容器部署搜索引擎API KeyBing/Brave至少准备1个没有Key搜索链路走不通LLM API KeyOpenAI格式即可也支持配Ollama本地模型走离线模式Node版本这里要特别提醒一句如果你机器上装的是Node 22甚至更新的版本某些原生模块编译可能会失败。我在这次部署中用的就是Node 20.11.1 LTS整个过程没有碰到过编译问题建议没有特殊需要就直接复制这个版本。依赖安装命令很简单但有两个前置事项需要注意。第一项目clone完成后必须执行pnpm install不要手贱用npm。因为项目的workspace结构依赖pnpm的符号链接机制npm装出来的依赖丢失导致运行时报错的情况我见太多了。第二如果你在国内网络环境建议先给pnpm配镜像源再执行安装否则拉依赖的速度会让人崩溃。3.2 环境变量配置的关键细节安装完依赖之后项目根目录下会有一个.env.example环境变量示例文件。你需要复制一份并命名为.env然后逐个填入自己的Key。核心变量大概长这样# 搜索服务配置 BING_SEARCH_API_KEY你的Bing搜索Key BING_SEARCH_ENDPOINThttps://api.bing.microsoft.com/v7.0/search BRAVE_SEARCH_API_KEY你的Brave搜索Key # LLM配置 LLM_API_KEY你的OpenAI兼容Key LLM_BASE_URLhttps://api.openai.com/v1 LLM_MODELgpt-4o-mini # 服务端口 PORT3000有一个经验值得分享.env文件里不要写注释以外的中文特别是不要用带BOM的编码格式保存。之前有读者跟我说启动后配置识别不出来检查到凌晨才发现是Windows记事本保存时把文件搞成了UTF-8 with BOM。直接埋雷。这里推荐一律用VS Code保存成UTF-8 without BOM解析干干净净。Bing搜索Key申请属于常规操作在Azure门户里创建认知服务资源就能拿到。Brave搜索API在它的开发者平台申请免费额度对个人开发和测试是足够的。如果你两个都不想申请还有一个下策项目里集成SearXNG自托管一个实例不依赖任何商业API。代价是检索质量会波动因为签权机制变成依赖目标站点的反爬策略。3.3 启动服务与功能验证配置完环境变量正式启动服务pnpm dev看到控制台输出Server is running on http://localhost:3000就是启动成功了。这时候打开浏览器访问你会看到一个简约的搜索框界面。我的验证路径是先问一个明显需要实时数据的问题比某个今天发布的科技新闻事件摘要看看它会不会引用当时的新闻源并给出带时间戳的回答。如果旧模型数据也能答上来说明实时检索链路没生效回去检查搜索API调用日志。验证过程中还有一个细节仔细看回答末尾给出的引用来源是否多于三个。如果每个问题都只引用同一个域名下的文章说明多源聚合没有真正起作用很可能是其它搜索源的Key失效导致自动降级成了单路检索。4. 常见问题与排查技巧实录4.1 搜索超时与限流多路并行搜索很容易撞上API的速率限制。Bing免费层的限制大约是每秒3次请求Brave则是每月固定配额用完就得等。如果你设计的聚合策略是每轮对话发起4个并发搜索请求稍微多来几个人用后端就会报429限流错误。排查思路打开后端日志看是否集中在search模块报RateLimitError。如果是基本就是并发过高或配额耗尽。解决方案有两个方向一个是给每个搜索源封装一个令牌桶限流器保证每源每秒最多1个请求另一个是引入Redis做全局请求缓存相同或相似查询在10分钟内不重复走搜索API而是直接走缓存。我强烈建议两件事都做效果立竿见影。4.2 同一页面内容被重复调用与markdown渲染异常某次实测中我让MiYo.AI回答“2026年AI编程工具排名”它从四个搜索源返回了十几条结果但里面有一半内容指向的是同一篇榜单文章的不同转载版本。不处理这些重复内容LLM的上下文里就会塞进两篇“同样的废话”导致最终回答变得冗长和车轱辘话。项目自带的去重逻辑处理不了这个情况。我给出的方案是加一层内容级别的指纹去重把每个段落做归一化处理去除空格、标点、转小写用SimHash生成64位指纹然后在全部候选片段里跑Hamming Distance比较距离小于4就视为重复只保留相关性分数最高的那份。这个操作对生成质量提升非常明显而且计算开销并不大纯Python或Node都能轻松跑完。Markdown渲染异常这个问题也很常见。搜索引擎结果里有些页面是学术论文摘要有些是论坛楼层讨论它们的文本里会夹杂大量LaTeX公式、代码块乃至表格。这些原始文本直接拼进promptLLM生成的总结有时会把原文的格式符号也带出来前端渲染就崩了。应对方案是清洗阶段把HTML标签替换为Markdown等效语法并且对LaTeX块用单行内联代码包裹最大程度避免解析歧义。4.3 部署后容器内存占用虚高如果你用Docker部署MiYo.AI可能会发现容器内存占用轻松突破1GB。排查后发现主要是并行检索时Node进程的缓冲区堆积。每路搜索返回的原始HTML可能有好几MB四路并发就是十几MB加上前后处理流程的临时字符串内存自然水涨船高。检查技巧是进入容器内执行node --inspect连上Chrome DevTools看在Memory面板里哪些对象占用最大。正常情况下大头应该是搜索结果数据结构和缓存如果发现异常字符串拼接产生的临时对象很多就要检查代码里是否存在频繁大字符串的写法改成数组push join的方式能省掉将近一半的峰值内存。顺手还可以调低并发数在Docker Compose里限制内存上限防止一台机器跑多个实例时互相挤兑。现象原因排查命令/位置解决建议启动后搜索无结果API Key失效或没查到检查后端日志重新申请Key确认Base URL拼写回答全是过时信息实时搜索链路没生效看请求是否有搜索调用痕迹确认搜索模块被正确配置并启用答案重复内容多去重逻辑不完善打印召回片段文本增加SimHash级别内容去重流式输出卡顿缓冲区和心跳配置不当看WebSocket丢包率调大缓冲区并缩短心跳间隔中文乱码抓取页面编码不规范看原始抓取内容的charset统一按UTF-8解码必要时做编码转码5. 进阶玩法与二次开发方向5.1 接入本地模型降低运营成本MiYo.AI在模型接入层预留了兼容OpenAI格式的接口这意味着你可以把LLM_BASE_URL指向任意一个支持该格式的本地服务比较常用的是Ollama。部署完Ollama后拉一个Qwen2.5-7B之类的模型然后修改环境变量LLM_BASE_URLhttp://localhost:11434/v1 LLM_MODELqwen2.5:7b实测下来7B模型做“归纳总结”这类任务其实够用但遇到需要精准引用原文出处、或者需要多步推理的查询时靠7B模型很难压住“幻觉”。我的建议是设计一个简单的路由策略先用一个分类器判断查询复杂度简单问题走本地模型复杂问题走云端商用模型。这样每月API账单能省下相当可观的费用同时不至于牺牲核心体验。5.2 引入Rerank模型优化召回质量常规的搜索API排序是基于它自己的相关性模型但那个排序不一定适合LLM生成任务。比如搜索“ESLint 9配置示例”搜索引擎可能把官方文档排第一但一个更贴合的Stack Overflow讨论帖排在第五。对用户来说官方文档当然准确但别人踩坑后的实际配置可能更有参考价值。MiYo.AI的聚合层把多个来源混在一起后原始顺序已经不可信了。我试过在中间层接入一个交叉编码器的Rerank模型比如bge-reranker-base把召回回来的Top 50片段重新打分取Top 6送入大模型。效果非常明显回答内容里“正确的废话”明显减少实用性大幅提高。这部分的实现其实不太复杂用sentence-transformers库加载模型对每个查询和候选片段算一个相关度分数排序后截断即可。主要开销在CPU推理预先给模型加好缓存实测一次Rerank大约额外增加300-500毫秒时延属于可接受范围。5.3 打造个人知识库联动最后提一个我很看好的扩展方向把MiYo.AI和本地知识库检索打通。现在的逻辑是“实时搜索互联网”但如果你企业内部有大量文档希望优先从这些文档里找答案搜不到再上网去搜这怎么玩思路很简单在检索链路里先查向量数据库比如用Milvus或Chroma存好的内部文档embedding返回的结果作为“内部知识源”与外部搜索源的结果一起进入聚合层。拼接优先级上内部知识库评分乘以一个加权系数确保它排在外部结果前面。这样等于把你原本的“企业网易搜”升级成了“企业知识优先互联网兜底”的混合检索系统。由于MiYo.AI的聚合层本身就能同时接收多个来源所以这个扩展不是推翻重做只是在现有链条上加一路“数据库检索引擎”而已。我在实践中发现内部文档召回Top 3的片段通常就能解决80%的日常问题外部搜索作为兜底的意义是补充信息时效性部分。这样改造后整个系统的定位就从“通用AI搜索工具”变成了“懂你司内部情况的智能问答助手”非常有落地价值。最后说点实在的体会。折腾完MiYo.AI这一整套我最深的感受是AI搜索项目的难度不在“接到大模型API”而在中间那层“搜索聚合处理”做得到不到位。多路召回、去重、清洗、排序每一步都会影响最终生成质量。越多地沉淀这些中间层逻辑你的项目才越有护城河。这个项目本身提供了一个很好的起点后续往哪个方向做深挖、做到什么深度就全看自己的业务诉求了。如果你正在做信息聚合或智能问答相关的事完全可以拿它当底子开始搞。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Flask + TF-IDF 一天搭建新闻推荐系统:文本向量化与相似度匹配全流程实战 2026/10/1 20:15:22

Flask + TF-IDF 一天搭建新闻推荐系统:文本向量化与相似度匹配全流程实战

我先说一个结论:新闻推荐系统,听起来是个很唬人的东西,实际上在算法选择正确的前提下,一天时间真的能搭出一个能用的版本。这个项目我用 Flask 做 Web 层,TF-IDF 做特征提取,走通了“新闻文本 → 向量化 →…

阅读更多 →
SpringBoot + Leaflet 行政区划掩膜高亮可视化实战 2026/10/1 20:15:21

SpringBoot + Leaflet 行政区划掩膜高亮可视化实战

做行政区划类的可视化需求,我猜你迟早会遇到这样一个效果:地图上目标区域高亮显示,周围区域被半透明遮罩压暗,视觉焦点一下子就落到了目标区域上。这个效果在可视化大屏、政务平台、招商系统里非常常见,业内一般叫“掩…

阅读更多 →
WSL安装慢更新失败?换源与离线安装实战指南 2026/10/1 20:15:21

WSL安装慢更新失败?换源与离线安装实战指南

说个真实情况,我最近帮朋友装WSL,连着踩了好几个坑:wsl --install卡在“正在下载”半天不动,wsl --update跑到 40% 就纹丝不动,wsl --list --online直接报“解析失败”。你要是也正在被这几个问题折磨,那这…

阅读更多 →
Function Calling、MCP、Agent Skill 三层架构解析:用 TaoToken 统一 Key 跑通全链路 2026/10/1 20:15:15

Function Calling、MCP、Agent Skill 三层架构解析:用 TaoToken 统一 Key 跑通全链路

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

阅读更多 →
AI生成嵌入式AirUI代码实战验证:TaoToken统一Key打通LuatOS Lua界面开发链路 2026/10/1 20:15:15

AI生成嵌入式AirUI代码实战验证:TaoToken统一Key打通LuatOS Lua界面开发链路

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

阅读更多 →
Intel vs ARM多片一致性架构:从NUMA到缓存一致性协议深度解析 2026/10/1 20:15:15

Intel vs ARM多片一致性架构:从NUMA到缓存一致性协议深度解析

说起多片一致性架构,很多同学的第一反应是“这不就是NUMA吗?”但实际上,只有你在Intel和ARM两套平台上都真刀真枪处理过多路CPU、多Die封装、甚至外部加速器扩展一致性之后,才会发现“NUMA”只是现象,底层那套保证缓存…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉