基于MCP协议的文档智能搜索工具:让AI助手精准查阅技术文档

news2026/5/6 1:31:02
1. 项目概述一个为开发者打造的文档智能搜索工具最近在折腾一个项目需要频繁查阅各种框架和库的官方文档每次都得打开浏览器、输入网址、在导航栏里翻找效率低得让人抓狂。相信很多开发者都有同感尤其是在处理复杂技术栈或进行深度调试时快速、精准地定位到文档中的关键信息是提升开发效率的关键一环。正是在这种背景下我注意到了mostafa-ghaith/search_docs_mcp这个项目。它不是一个普通的搜索引擎而是一个专门为开发者设计的、能够深度理解和搜索本地或远程技术文档的工具。简单来说search_docs_mcp是一个基于 MCPModel Context Protocol协议的服务器实现。它的核心目标是让 AI 助手比如 Claude Desktop、Cursor 等能够“读懂”你项目所依赖的技术文档并直接在你的 IDE 或聊天界面中为你提供上下文精准的答案。想象一下你在写代码时遇到一个模糊的 API 用法不用切屏直接在编辑器里问你的 AI 伙伴“FastAPI 里怎么处理文件上传的依赖注入”它就能立刻从 FastAPI 的官方文档中提取出最相关的示例和说明给你。这不仅仅是搜索更是将文档知识无缝集成到了你的开发工作流中。这个项目适合所有被海量技术文档困扰的开发者无论是前端工程师需要查 React Hooks 的细节还是后端开发要确认数据库 ORM 的某个配置参数亦或是 DevOps 工程师翻阅基础设施工具的 CLI 手册。它尤其适合那些深度使用 AI 编程助手的开发者能将 AI 的代码生成和问题解答能力与准确、权威的文档知识结合起来避免 AI“胡编乱造”的情况。接下来我将深入拆解这个项目的设计思路、核心实现并分享如何将它部署集成到你的日常开发环境中让它成为你的“随身高阶技术文档顾问”。2. 核心架构与 MCP 协议解析2.1 什么是 MCP它为何是连接 AI 与工具的桥梁要理解search_docs_mcp必须先搞懂 MCP。MCP 全称是 Model Context Protocol你可以把它想象成 AI 世界里的“USB 协议”或“驱动标准”。在 AI 应用生态中存在一个核心矛盾大语言模型LLM本身能力虽强但它是“与世隔绝”的无法直接访问外部数据、工具或系统。传统的做法是为每个 AI 应用如某个聊天机器人单独编写插件或集成代码这导致了大量的重复劳动和生态碎片化。MCP 协议的目标就是解决这个问题。它定义了一套标准化的通信方式让任何符合 MCP 标准的“服务器”Server都能向任何符合 MCP 标准的“客户端”Client提供一组“工具”Tools和“资源”Resources。在这里客户端Client通常是 AI 应用本身比如 Claude Desktop、Cursor 的 AI 聊天界面或者任何集成了 MCP 库的应用。它负责接收用户请求并决定调用哪个工具。服务器Server就是像search_docs_mcp这样的具体实现。它将自己提供的功能如“搜索文档”包装成标准的工具并等待客户端调用。工具Tools服务器暴露的可执行函数。例如search_docs_mcp可能提供一个叫search_documentation的工具接收查询关键词和文档源作为参数。资源Resources服务器提供的可读数据源。例如它可以将一个已加载的文档集合定义为一个资源客户端可以直接读取其内容或元数据。这种架构的美妙之处在于解耦。作为工具开发者你只需要按照 MCP 规范实现一个服务器任何支持 MCP 的 AI 客户端就都能使用你的工具无需为每个客户端单独适配。search_docs_mcp正是这样一个 MCP 服务器它专门提供“文档搜索”这项工具从而让 Claude 等 AI 助手获得了查阅指定技术文档的能力。2.2 search_docs_mcp 的总体设计思路了解了 MCP 的基础我们再来看search_docs_mcp的具体设计。它的工作流程可以概括为“加载-索引-查询-返回”四个核心阶段但其设计巧妙之处在于对开发者工作流的深度贴合。首先它支持文档源的灵活配置。文档可以来自多种渠道本地目录你 clone 到本地的某个框架的文档仓库如docs/文件夹。远程 Git 仓库直接指定一个 Git 仓库的 URL工具会自动拉取最新文档。在线文档站点通过爬虫或直接处理已发布的 HTML 站点地图sitemap来获取内容。 这种多源支持意味着无论是离线开发、追踪最新main分支的文档还是查阅已发布的稳定版文档都能覆盖。其次它的核心在于构建高效的搜索索引。它不会在每次查询时都去暴力扫描所有文档文件那样速度太慢。相反它会在初始化加载文档后立即为所有文本内容构建一个本地索引。这个索引通常基于倒排索引Inverted Index等技术类似于一个小型的本地 Elasticsearch。它会记录每个关键词经过分词处理出现在哪些文档的哪些位置。这样当用户发起搜索时系统能在毫秒级内找到最相关的文档片段。最后它通过MCP 协议暴露搜索接口。构建好的搜索能力被包装成一个或多个标准的 MCP 工具。当你在 Claude Desktop 中提问时Claude作为客户端会识别出你的问题可能需要查阅文档于是通过 MCP 协议调用search_docs_mcp服务器提供的工具。服务器执行搜索将结果通常是包含代码片段、说明和源链接的格式化文本返回给客户端客户端再整合这些上下文信息生成最终的回答呈现给你。整个过程对用户是透明的你感觉就像是 AI 自己“知道”了文档内容。3. 核心功能拆解与实现细节3.1 文档加载与预处理流程工具再好喂给它的“粮食”——文档数据——的质量是关键第一步。search_docs_mcp在文档加载和预处理上做了不少细致的工作以确保后续搜索的准确性和相关性。文档源获取与更新策略 对于远程 Git 源工具通常会使用git clone首次和git pull后续更新来同步文档。一个实用的设计是支持定时或手动触发更新确保索引的文档不是过时的版本。对于在线网站它可能需要配置爬虫规则或解析sitemap.xml只抓取有效的文档页面避免将网站导航、页脚等无关内容编入索引。内容提取与清洗 原始文档可能是 Markdown、HTML、PDF 甚至代码注释。工具需要从中提取出纯文本内容。以 Markdown 和 HTML 为例Markdown提取标题#、正文段落、代码块尤其是标注了语言类型的如python、列表项等。代码块的内容对于开发者查询 API 示例至关重要需要被特殊对待和索引。HTML需要使用类似BeautifulSoup的库来解析通常只提取main、article或特定 class 标签内的内容剔除导航栏、广告、侧边栏等噪音。 提取后还需要进行文本清洗比如统一 Unicode 字符、去除多余的空白符、处理特殊转义字符等。关键元数据保留 单纯的文本搜索是不够的。为了在返回结果时提供上下文和可追溯性工具必须保留重要的元数据文档路径/URL结果的来源方便用户直接点击查看原文。标题层级捕获H1,H2,H3等标题这有助于理解片段在文档结构中的位置。代码语言类型标记提取出的代码片段属于何种编程语言便于结果展示时语法高亮。锚点Anchor对于 HTML 文档保留章节的 ID 锚点可以生成直达具体章节的深链接。这些预处理步骤的输出是一系列结构化的文档对象包含了纯净的内容和丰富的元数据为下一步的索引构建打下了坚实的基础。3.2 搜索索引的构建与优化构建搜索索引是search_docs_mcp的核心技术环节直接决定了搜索的速度和精度。它很可能采用了基于词袋Bag-of-Words模型结合 TF-IDF词频-逆文档频率或更现代的向量搜索技术。分词Tokenization与文本处理 首先是对预处理后的文本进行分词。对于英文这相对简单按空格和标点分割即可。但对于技术文档需要特殊处理保留技术术语像useState、getElementById、docker-compose.yml这样的驼峰命名、连字符词或带后缀的文件名需要被识别为一个完整的词元Token而不是被拆散。处理代码标识符代码中的变量名、函数名如fetchUserData也需要被合理分词和索引这对搜索 API 名称至关重要。语言处理虽然项目可能主要面向英文文档但好的分词器也应能处理其他语言或者至少能平滑处理混合了英文术语的多语言文档。倒排索引构建 分词后系统会构建一个倒排索引。简单来说这是一个“从词到文档”的映射表。例如词“authentication”- [文档A的第5段 文档B的第12段 文档C的第3段...]词“middleware”- [文档D的第8段 文档A的第7段...] 同时索引还会记录每个词在对应文档片段中出现的位置和频率。相关性排序算法 当用户搜索“Flask error handling”时系统会分别查找包含“Flask”、“error”、“handling”的文档片段。应用排序算法如 BM25它是 TF-IDF 的改进版计算每个片段的相关性得分。BM25 会考虑词频TF一个词在片段中出现的次数越多得分越高但会有上限防止过度堆砌。逆文档频率IDF像“handling”这样的常见词其区分度低权重会降低而像“Flask”这样的专有名词权重会很高。片段长度归一化过长的片段会被惩罚鼓励返回精炼、匹配度高的内容。根据综合得分对结果进行排序返回最相关的几个片段。向量搜索的潜在应用 对于一些更高级的实现可能会引入向量搜索Embedding Search。即将文档片段和查询语句都通过一个嵌入模型如text-embedding-3-small转换为高维向量。搜索时计算查询向量与所有文档片段向量的余弦相似度返回相似度最高的结果。这种方法对于语义搜索例如搜索“如何让服务器在出错时继续运行”即使不包含“容错”这个词更有优势。search_docs_mcp可能结合了传统关键词搜索和向量搜索以兼顾精确匹配和语义理解。3.3 MCP 工具接口的定义与调用这是search_docs_mcp作为 MCP 服务器的对外表现层。它必须严格遵循 MCP 协议来定义和暴露工具。工具定义Server Capabilities 在服务器启动时它会向客户端宣告自己的能力。这通常在一个 JSON 结构的配置中完成。对于search_docs_mcp它可能暴露的主要工具是{ tools: [ { name: search_docs, description: Search within the loaded technical documentation for relevant information., inputSchema: { type: object, properties: { query: { type: string, description: The search query string. }, source_filter: { type: string, description: Optional. Filter results to a specific documentation source (e.g., react-docs, python-api). }, max_results: { type: integer, description: Optional. Maximum number of results to return. Default is 5. } }, required: [query] } } ] }工具调用与响应 当用户在 Claude 中输入“How do I useuseMemoin React?”Claude客户端会判断需要调用search_docs工具。它会通过 MCP 协议发送一个类似以下的请求给search_docs_mcp服务器{ jsonrpc: 2.0, method: tools/call, params: { toolName: search_docs, arguments: { query: useMemo hook example React, source_filter: react-docs, max_results: 3 } } }服务器收到请求后调用内部的搜索函数执行查询并将结果格式化为 MCP 协议规定的响应格式返回{ jsonrpc: 2.0, result: { content: [ { type: text, text: Found relevant information about useMemo in the React documentation:\n\n**1. From: hooks-reference.md#usememo**\n useMemo will only recompute the memoized value when one of the dependencies has changed. This optimization helps to avoid expensive calculations on every render.\n\n**Example:**\njsx\nconst memoizedValue useMemo(() computeExpensiveValue(a, b), [a, b]);\n\n\n**2. From: faq-performance.md#how-to-memoize-calculations**\n Use useMemo for caching expensive calculations that depend on specific props or state. Avoid using it for everything, as it comes with its own overhead.\n } ] } }客户端Claude接收到这个结构化的结果后将其作为额外的上下文与自身的知识结合生成一个最终的回答“useMemo是 React 的一个 Hook用于性能优化... 根据 React 文档它的主要作用是... 示例代码如下...”。这样回答的准确性和权威性就得到了文档的直接支撑。4. 实战部署与集成指南4.1 环境准备与服务器部署理论讲完了我们来动手把它用起来。假设你使用的是 macOS 或 Linux 系统Windows 可通过 WSL 获得类似体验以下是部署search_docs_mcp的典型步骤。第一步基础环境检查确保你的系统已安装Python 3.8该项目很可能用 Python 编写。通过python3 --version检查。Git用于拉取文档源和项目本身。通过git --version检查。PipPython 包管理器。通常随 Python 安装。第二步获取 search_docs_mcp由于它是开源项目我们可以从代码仓库克隆git clone https://github.com/mostafa-ghaith/search_docs_mcp.git cd search_docs_mcp第三步安装依赖项目根目录下应该会有requirements.txt或pyproject.toml文件。# 使用虚拟环境是推荐做法避免污染系统Python python3 -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows (CMD/PowerShell) # 安装依赖 pip install -r requirements.txt # 或者如果使用 poetry # pip install poetry # poetry install第四步配置文档源这是最关键的一步。你需要创建一个配置文件例如config.yaml告诉服务器你要索引哪些文档。# config.yaml 示例 sources: - name: react-docs type: git url: https://github.com/reactjs/react.dev.git path: content/ # 指定仓库内文档所在的子目录 branch: main - name: fastapi-docs type: git url: https://github.com/tiangolo/fastapi.git path: docs/en/docs/ branch: master - name: python-requests type: web url: https://docs.python-requests.org/en/latest/ # 可能需要指定爬虫规则或sitemap你可以根据需求添加任意多个源。首次运行时会自动克隆仓库这可能需要一些时间。第五步运行 MCP 服务器根据项目的 README启动服务器。通常命令如下python -m search_docs_mcp.server --config config.yaml服务器启动后会监听一个本地端口如3000并等待 MCP 客户端的连接。它会自动加载配置中的文档源并开始构建索引。你可以在日志中看到索引构建的进度。4.2 与 Claude Desktop 集成search_docs_mcp发挥价值的舞台是 AI 客户端。这里以 Anthropic 的 Claude Desktop 为例展示如何集成。第一步定位 Claude Desktop 配置Claude Desktop 的配置通常位于macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.jsonLinux:~/.config/Claude/claude_desktop_config.json在修改前请先关闭 Claude Desktop 应用。第二步编辑配置文件打开上述配置文件你需要添加一个mcpServers字段。如果该字段已存在就在其中添加新的服务器配置如果不存在就创建它。{ // ... 其他现有配置 ... mcpServers: { search-docs: { command: /absolute/path/to/your/search_docs_mcp/.venv/bin/python, args: [ -m, search_docs_mcp.server, --config, /absolute/path/to/your/search_docs_mcp/config.yaml ] } } }关键提示command必须是你虚拟环境中 Python 解释器的绝对路径。使用which python在激活的虚拟环境中命令来获取。args是传递给 Python 模块的参数列表确保--config后的配置文件路径也是绝对路径。search-docs是这个服务器实例的名称可以自定义。第三步重启与验证保存配置文件然后重新启动 Claude Desktop。如果配置正确Claude Desktop 会在启动时自动运行你指定的命令启动search_docs_mcp服务器并与之建立连接。验证是否成功打开 Claude Desktop新建一个对话。尝试问一个与你配置的文档源相关的问题例如“Show me an example of using theuseEffectcleanup function in React.”观察 Claude 的回答。如果集成成功Claude 的回答会基于 React 官方文档并且很可能会在回答中引用来源例如“According to the React documentation...”或者你可以看到它调用了“Search docs”工具的痕迹取决于客户端UI设计。4.3 配置技巧与性能调优部署成功后一些进阶配置和调优能让体验更好。索引性能优化增量更新确保工具支持增量索引。每次启动时它应该检查 Git 源是否有更新只索引变动的文件而不是全部重建。排除无关文件在配置中增加exclude模式忽略图片、字体、测试文件等减少索引体积和构建时间。例如exclude: [**/*.png, **/*.jpg, **/test_*.md]。内存与磁盘权衡索引可以完全放在内存中以获得极速搜索但会消耗较多 RAM。也可以使用磁盘存储的索引库如 SQLite。根据你的文档库大小和硬件条件在配置中选择合适的后端。搜索质量调优调整分词器如果发现某些技术术语如Next.js被错误拆分可以研究项目是否支持自定义分词规则或停用词列表。配置结果排序权重高级配置可能允许你调整不同元数据的权重。例如让标题h1中匹配的得分远高于正文中匹配的得分让代码块中的匹配获得额外权重等。源过滤器source_filter的有效使用在向 AI 提问时可以尝试在问题中隐含源信息或者未来如果客户端支持可以直接指定源。这能避免从错误的文档库中返回结果比如在问 React 问题时不会搜到 Vue 的内容。多项目/多语言文档管理 如果你同时进行多个技术栈的项目可以为每个项目创建一个独立的配置文件里面只包含该项目相关的文档源例如一个前端项目配 React、Vite、Tailwind CSS 的文档一个后端项目配 FastAPI、SQLAlchemy、Pydantic 的文档。然后通过不同的配置启动不同的服务器实例并在 Claude Desktop 配置中给它们起不同的名字如search-docs-frontend,search-docs-backend。虽然客户端可能需要手动切换连接的服务器但这保持了索引的专注和高效。5. 常见问题与故障排除在实际使用中你可能会遇到一些问题。下面是一些常见情况的排查思路和解决方法。5.1 服务器启动与连接失败问题按照步骤配置后Claude Desktop 启动时报错或者无法调用搜索功能。检查点 1路径与命令症状Claude Desktop 启动时报“Cannot find module”或“Command failed”。排查这是最常见的问题。务必确认claude_desktop_config.json中的command和args里的路径都是绝对路径并且指向正确的虚拟环境。在终端中手动执行一遍配置中的完整命令看是否能成功启动服务器。解决使用pwd命令获取当前目录的绝对路径使用which python在激活的虚拟环境中获取 Python 的绝对路径。检查点 2端口冲突症状服务器启动失败提示地址已在使用。排查search_docs_mcp默认可能使用特定端口如 3000。查看服务器代码或日志确认端口号。使用lsof -i :3000macOS/Linux或netstat -ano | findstr :3000Windows检查该端口是否被其他程序占用。解决在启动命令的args中增加端口参数如--port 3001来指定另一个端口并确保客户端配置如果可配与之对应。检查点 3权限问题症状无法克隆 Git 仓库或写入索引文件。排查确保运行 Claude Desktop 的用户有对项目目录和配置中指定缓存目录的读写权限。解决检查目录权限必要时使用chmod或更改目录所有权。5.2 搜索无结果或结果不相关问题AI 助手似乎没有调用搜索或者返回的结果与问题完全无关。检查点 1索引是否构建成功症状服务器启动日志飞快结束没有显示索引构建过程。排查查看服务器启动时的详细日志。确认它是否成功拉取或访问了配置的文档源并显示了“Indexing X files...”或类似信息。解决检查网络连接对于远程源检查 Git 仓库 URL 或本地路径是否正确。尝试将日志级别调至 DEBUG如果支持查看更详细的信息。检查点 2查询方式问题症状AI 没有触发搜索工具调用。排查MCP 工具的调用由客户端Claude的 AI 模型决定。模型需要判断用户问题是否需要查阅文档。尝试更明确地提问例如“Search the React docs for how to handle forms with controlled components.” 而不是笼统的“How to handle forms in React?”解决有些 MCP 客户端允许用户手动触发工具。检查 Claude Desktop 的界面看是否有触发工具的按钮或指令。检查点 3搜索关键词过于宽泛或特殊症状返回了结果但排名第一的并不相关。排查技术文档搜索和网页搜索不同。“如何优化性能”这种问题可能匹配太多页面。而像“useCallbackvsuseMemo”这样的具体对比效果更好。解决尝试使用更具体的技术术语、函数名、错误代码作为关键词。如果项目支持在配置中调整搜索算法的权重如提升标题匹配的权重。5.3 资源占用与性能问题问题服务器运行一段时间后内存占用高或者搜索响应变慢。检查点 1索引大小症状内存占用持续增长尤其是加载了多个大型文档库如整个 MDN Web Docs。排查检查索引的数据结构是否全部常驻内存。使用系统监控工具如htop观察进程内存。解决考虑只索引你当前项目最核心的文档。或者寻找并使用支持磁盘混合索引的后端选项牺牲一点速度换取更低的内存占用。检查点 2索引更新策略症状每次启动服务器都要花费很长时间构建索引。排查确认工具是否支持增量索引。查看其文档或代码看索引数据是否持久化到了磁盘如.index文件夹下次启动时直接加载。解决如果工具本身不支持增量更新可以考虑定期如每天一次手动更新索引而不是每次启动都更新。或者对于非常稳定的文档源如特定版本的手册可以一次性构建索引后就不再更新。检查点 3客户端超时症状AI 助手提示“工具调用超时”或长时间无响应。排查首次搜索或复杂查询可能较慢。查看服务器日志看搜索操作耗时。解决在客户端配置中增加超时时间如果支持。优化文档源排除不必要的文件。如果使用向量搜索确保嵌入模型在本地运行或使用的 API 响应迅速。5.4 维护与更新建议任何工具都需要维护才能保持最佳状态。定期更新文档源技术文档更新频繁。建议在配置中设置 Git 源使用main或latest分支并确保服务器有定期拉取更新的机制如定时任务重启或工具内置的定时更新。审查索引内容偶尔检查一下搜索返回的片段质量。如果发现某个文档源格式变化导致索引了大量无用文本如广告、导航需要调整预处理规则或排除模式。关注 MCP 生态与项目更新MCP 协议和 Claude 等客户端都在快速发展。关注search_docs_mcp项目的 Releases 页面及时更新以获得新功能如更多文档格式支持、更好的搜索算法和错误修复。同时关注是否有其他更优秀的文档搜索 MCP 服务器出现保持工具链的先进性。通过以上步骤你应该能够顺利部署并驾驭search_docs_mcp这个强大的工具。它将外部文档知识变成了 AI 助手可即时调用的“内存”极大地缩小了“想到问题”和“找到权威答案”之间的鸿沟。这种深度集成的工作流代表了一种未来人机协作的高效范式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2586752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…