RAG不好用?试试MCP这个“知识库优化大师”,大模型入门到精通,收藏这篇就足够了!

MCP + 数据库,一种比 RAG 检索效果更好的新方式! 大家好,欢迎来到 code秘密花园,我是 ConardLi。在今天这一期,我们将一起学习一种基于 MCP 提高大模型检索外部知识精度的新思路,实测比 RAG 效果要好很多。 阅读详情

在企业数字化转型浪潮中,如何有效管理和利用内部知识资产已成为关键挑战。随着大型语言模型(LLM)技术的成熟,检索增强生成(RAG)应用正逐渐成为连接企业知识与AI能力的重要桥梁。然而,传统RAG实现常面临检索质量不佳、实时更新困难等痛点问题。

本文将通过实战案例,详细介绍如何基于模型上下文协议(MCP)构建一套高性能企业RAG系统,帮助企业快速打造智能知识库应用。

MCP与传统RAG对比优势

传统RAG方案的局限

传统RAG实现通常采用简单的"Embedding+检索+LLM生成"架构,存在以下限制:

    1. 紧耦合架构:检索逻辑与LLM调用紧密耦合,难以独立优化
    1. 单一检索策略:通常只采用向量检索,缺乏多种检索方式结合
    1. 缺乏标准化接口:各实现间接口差异大,难以实现功能复用
    1. 维护成本高:系统升级需要修改大量底层代码

MCP解决方案的优势

基于MCP的RAG系统通过标准化协议,将知识检索服务解耦为独立模块,带来以下优势:

    1. 标准化工具调用:MCP提供统一接口规范,降低集成成本
    1. 解耦设计:将模型调用与业务逻辑分离,便于独立升级和维护
    1. 灵活扩展:轻松添加新数据源和功能模块,如混合检索、多模态内容等
    1. 工程实践友好:符合软件工程最佳实践,便于团队协作开发
  1. 图片源自 dailydoseofds

项目背景与需求

现代企业面临的知识管理挑战主要表现在以下几个方面:

  • • 知识分散:企业文档分布在多个系统中,缺乏统一检索入口
  • • 检索效率低:传统关键词检索无法理解语义,难以准确找到所需信息
  • • 知识更新慢:知识库更新依赖人工整理,无法及时反映最新情况
  • • 使用门槛高:专业术语和复杂查询语法提高了普通员工使用难度

针对这些问题,我们需要设计一个系统满足以下核心需求:

    1. 智能检索:支持自然语言提问,理解问题意图和上下文
    1. 知识自动化处理:实现文档智能拆分、FAQ自动提取
    1. 灵活扩展:支持多种数据源和模型集成
    1. 易于部署与维护:架构简洁,便于技术团队掌握和迭代

项目目标

本项目旨在构建一个基于MCP的企业RAG系统,实现以下具体目标:

    1. 技术目标
  • • 构建支持MCP协议的知识库服务和客户端
  • • 实现文档智能切分、FAQ自动提取功能
  • • 支持复杂问题的拆解和混合检索策略
    1. 应用目标
  • • 提供统一的知识库管理和检索入口
  • • 显著提升企业内部知识检索准确率(目标90%以上)
  • • 减少70%知识库维护工作量
  • • 支持企业各类文档的智能处理和检索

项目系统设计与实现

本项目系统设计参考自alibabacloud-tablestore-mcp-server[1],由于alibabacloud-tablestore-mcp-server项目使用Tablestore存储和Java实现的MCP Server,不方便于后期扩展和迭代。

本项目改造为Milvus存储和Python实现MCP Server和MCP Client,代码全部重写(cursor帮忙不少)。

以下设计和流程皆为alibabacloud-tablestore-mcp-server内容,在此感谢@xjtushilei 开源的alibabacloud-tablestore-mcp-server。

我们构建的基于MCP的RAG系统主要包含三个核心部分:

    1. 知识库服务(MCP Server):基于Milvus向量数据库实现的后端服务,负责文档存储和检索
    1. 客户端工具(MCP Client):与MCP Server通信的客户端,实现知识库的构建和检索功能
    1. 大模型集成:通过LLM实现文档切分、FAQ提取、问题拆解和回答生成等核心功能

流程图

主要分为两部分:知识库构建和检索。

    1. 知识库构建
    1. 文本切段: 对文本进行切段,切段后的内容需要保证文本完整性以及语义完整性。
    1. 提取 FAQ: 根据文本内容提取 FAQ,作为知识库检索的一个补充,以提升检索效果。
    1. 导入知识库: 将文本和 FAQ 导入知识库,并进行 Embedding 后导入向量。
    1. 知识检索(RAG)
    1. 问题拆解: 对输入问题进行拆解和重写,拆解为更原子的子问题。
    1. 检索: 针对每个子问题分别检索相关文本和 FAQ,针对文本采取向量检索,针对 FAQ 采取全文和向量混合检索。
    1. 知识库内容筛选: 针对检索出来的内容进行筛选,保留与问题最相关的内容进行参考回答。

相比传统的 Naive RAG,在知识库构建和检索分别做了一些常见的优化,包括 Chunk 切分优化、提取 FAQ、Query Rewrite、混合检索等。

流程

流程图

本Agent整体架构分为三个部分:

    1. 知识库: 内部包含 Knowledge Store 和 FAQ Store,分别存储文本内容和 FAQ 内容,支持向量和全文的混合检索。
    1. MCP Server: 提供对 Knowledge Store 和 FAQ Store 的读写操作,总共提供 4 个 Tools。
    1. **功能实现部分:**完全通过 Prompt + LLM 来实现对知识库的导入、检索和问答这几个功能。

项目结构

项目结构分为两部分:

    1. milvus-mcp-client: Python 实现的 Client 端,实现了与大模型进行交互,通过 MCP Client 获取 Tools,根据大模型的反馈调用 Tools 等基本能力。通过 Prompt 实现了知识库构建、检索和问答三个主要功能。
    1. ** milvus-mcp-server:** Python 实现的 Server 端,基于 MCP 框架实现的服务,提供了连接 Milvus 向量数据库的接口,支持知识库的存储和检索功能。

项目实战:从零搭建MCP-RAG系统

接下来,我们将从环境搭建、服务部署到功能测试,全面介绍如何搭建一个基于MCP的RAG系统。

环境准备

首先,确保满足以下系统要求:

  • • Docker 和 Docker Compose
  • • 至少 4CPU、4GB内存和20GB磁盘空间
  • • 克隆代码git clone -b rag_0.1.1 https://github.com/FlyAIBox/mcp-in-action.git

部署MCP Server

MCP Server基于Milvus向量数据库,提供了知识库的存储和检索功能。

对于需要进行开发或调试的场景,可以选择本地部署:

# 进入项目目录cd mcp-rag# 先启动Milvus及依赖服务docker compose up -d etcd minio standalone# 创建Python虚拟环境python -m venv env-mcp-ragsource env-mcp-rag/bin/activate  # 安装依赖pip install -r requirements.txt# 启动服务python -m app.main

MCP Server的核心API

MCP Server提供四个核心工具,支持知识库的读写操作:

    1. storeKnowledge:存储文档到知识库
    1. searchKnowledge:在知识库中搜索相似文档
    1. storeFAQ:存储FAQ到FAQ库
    1. searchFAQ:在FAQ库中搜索相似问答对

让我们看看这些API的实际实现原理:

async defstore_knowledge(self, content: str, metadata: Dict[str, Any] = None) -> Dict[str, Any]:    """存储知识内容到Milvus"""    # 确保服务准备就绪    awaitself.ready_for_connections()        try:        knowledge_content = KnowledgeContent(            content=content,            metadata=metadata or {}        )        self.milvus_service.store_knowledge(knowledge_content)        return {"status": "success", "message": "Knowledge stored successfully"}    except Exception as e:        logger.error(f"Error storing knowledge: {e}")        return {"status": "error", "message": str(e)}

这段代码展示了storeKnowledge工具的实现:接收文本内容和元数据,创建知识内容对象,然后通过Milvus服务存储到向量数据库中。

基于MCP Client实现RAG客户端

接下来,我们需要实现一个RAG客户端,通过MCP协议与Server通信,实现知识库的构建和查询功能。

1. 知识库构建
  • • 文本切分:对长文本进行智能切分,保证语义完整性
  • • FAQ提取:从文档自动生成常见问题解答对
  • • 向量化存储:将文本片段和FAQ转换为向量并存入Milvus

文本切分代码示例:

def _chunk_text(self, text: str) -> List[str]:    """将文本分割成chunk,保证语义完整性"""    chunks = []        # 处理文本小于chunk_size的简单情况    iflen(text) <= self.chunk_size:        chunks.append(text)        return chunks            # 使用重叠策略分割文本    start = 0    while start < len(text):        # 获取chunk结束位置        end = start + self.chunk_size                # 调整结束位置,避免在句子中间切断        if end < len(text):            # 寻找句子边界(句号、问号、感叹号)            sentence_end = max(                text.rfind('. ', start, end),                text.rfind('? ', start, end),                text.rfind('! ', start, end)            )                        # 如果找到句子结束,使用它作为chunk结束            if sentence_end > start:                end = sentence_end + 1# 包含句号                # 添加chunk        chunks.append(text[start:min(end, len(text))])                # 移动开始位置到下一个chunk,考虑重叠        start = end - self.chunk_overlap                # 确保进度        if start >= len(text) or start <= 0:            break                return chunks

FAQ提取,通过LLM实现:

async def_extract_faqs(self, text: str) -> List[Dict[str, str]]:    """从文本中提取FAQ"""    # 对过长文本进行分块处理    iflen(text) > 8000:        chunks = self._chunk_text(text)        faqs = []        for chunk in chunks:            chunk_faqs = awaitself._extract_faqs(chunk)            faqs.extend(chunk_faqs)        return faqs             # FAQ提取的提示模板     system_prompt =         """你是一位专业的知识提取专家。你的任务是从文本中提取可能的常见问题(FAQ)。        这些问题应该是用户可能会问的关于文本内容的自然问题,答案应该能在文本中找到。        提取的FAQ应该覆盖文本中最重要的概念和信息。        请遵循以下规则:        1. 每个FAQ由一个问题和一个答案组成        2. 问题应该简短明了,直接针对主题        3. 答案应该全面但简洁,提供文本中的相关信息        4. 提取的FAQ数量应该基于文本长度和内容丰富度,通常不超过10个        5. 确保提取的FAQ相互之间不重复        6. 按照重要性排序,最重要的问题应该放在前面        输出格式必须是一个JSON数组,每个FAQ是一个包含"question"和"answer"字段的对象,例如:        [          {            "question": "问题1?",            "answer": "答案1"          },          {            "question": "问题2?",            "answer": "答案2"          }        ]        只输出JSON格式,不要有任何其他文本。"""    user_prompt = f"""从以下文本中提取常见问题(FAQ):    ```{text}    ```请提取最相关、最有价值的FAQ,并按JSON格式返回。"""      # 使用LLM提取FAQ   response = self.llm_client.sync_generate(       prompt=text,       system_prompt=system_prompt,       temperature=0.3   )      # 解析LLM响应获取FAQ   # ...
2. 知识检索优化

与传统RAG不同,我们在检索环节引入了问题拆解、混合检索和结果筛选三个优化机制。

  • • 问题拆解:将复杂问题拆解为多个子问题
  • • 混合检索:同时检索文本库和FAQ库,提高召回率
  • • 结果筛选:对检索结果进行排序和筛选,优先保留高质量内容

问题拆解示例:

async def_decompose_question(self, question: str) -> List[str]:    """将复杂问题分解为更简单的子问题"""    system_prompt =     """你是一位问题分析专家。你的任务是将复杂问题分解为更简单的子问题,以便更好地检索相关信息。    请遵循以下规则:    1. 分析用户的问题,识别其中包含的不同方面或概念    2. 将复杂问题拆分成更简单、更具体的子问题    3. 确保子问题覆盖原始问题的所有关键方面    4. 提供2-4个子问题,具体数量取决于原始问题的复杂度    5. 子问题应该是明确的、有针对性的    6. 子问题之间应该尽量避免重复    输出格式必须是一个JSON数组,包含所有子问题的字符串,例如:    ["子问题1", "子问题2", "子问题3"]    如果原始问题已经足够简单,不需要分解,则返回只包含原始问题的JSON数组:    ["原始问题"]    只输出JSON格式,不要有任何其他文本。"""    user_prompt = f"""请将以下问题分解为更简单的子问题以便检索:{question}"""        # 使用LLM生成子问题    response = self.llm_client.sync_generate(        prompt=user_prompt,        system_prompt=system_prompt,        temperature=0.3    )        # 解析响应获取子问题列表    # ...

结果筛选与生成回答的关键代码:

async def_filter_context(self, question: str, context_items: List[Dict[str, Any]]) -> List[Dict[str, Any]]:    """根据问题相关性筛选上下文"""    # 简单筛选:去重和截断    seen_contents = set()    filtered_items = []        # 优先处理FAQ类型    faq_items = [item for item in context_items if item["type"] == "faq"]    knowledge_items = [item for item in context_items if item["type"] == "knowledge"]        # 先处理FAQ项    for item in faq_items:        # 去重处理        # ...        # 再处理知识项    for item in knowledge_items:        # 去重处理        # ...        # 限制上下文项总数    max_context_items = 6    iflen(filtered_items) > max_context_items:        filtered_items = filtered_items[:max_context_items]            return filtered_items

实际效果展示

部署完成后,让我们看看系统的实际运行效果:

1. 知识库构建
python -m app.main build --file test.md --title "RAG基本介绍" --author "企业知识库" --tags "LLM,RAG,知识库"

执行结果:

plaintext
2025-05-11 14:50:16 | INFO | app.knowledge_builder:build_from_text:52 - Split text into 2 chunks2025-05-11 14:50:59 | INFO | app.knowledge_builder:build_from_text:72 - Extracted 8 FAQs from text2025-05-11 14:51:00 | INFO | __main__:build_knowledge_base:48 - Stored 2/2 chunks to knowledge base2025-05-11 14:51:00 | INFO | __main__:build_knowledge_base:50 - Extracted and stored 8 FAQs

借助attu查看知识库构建结果

2. 知识检索问答
python -m app.main query --question "RAG相比企业传统的知识库有什么优势和缺点"

执行结果:

2025-05-11 15:01:46 | INFO | app.knowledge_retriever:query:39 - Decomposed question into 4 sub-questions2025-05-11 15:01:47 | INFO | app.knowledge_retriever:query:67 - Filtered 28 context items to 6================================================================================问题: RAG相比企业传统的知识库有什么优势和缺点--------------------------------------------------------------------------------回答: 检索增强生成(RAG)是一种通过整合训练数据之外的权威知识库来优化大型语言模型(LLM)输出的技术。其核心在于允许LLM在生成响应前动态访问特定领域或组织的内部知识库,例如实时数据源、文档或专业数据库,而无需对模型本身进行重新训练。这种方式通过引入外部信息,显著提升了生成内容的相关性、准确性及实用性,同时保留了LLM的灵活性和泛化能力。================================================================================

知识检索问答

实施建议与最佳实践

根据实际项目经验,我们总结了以下最佳实践:

    1. 文档处理策略
  • • 合理设置文本切分的大小(1000-1500字符)和重叠率(200-300字符)
  • • 根据文档类型调整切分策略,技术文档和叙述性文档要区别对待
  • • 保留文档原始格式信息作为元数据,提升检索精度
    1. 检索优化技巧
  • • 使用混合检索(语义+关键词)提高召回率
  • • 在问题拆解环节设置合理的子问题数量(2-4个)
  • • 限制总上下文数量(5-8个)避免信息过载
    1. 系统集成要点
  • • 选择合适的向量模型
  • • 针对实时更新需求设计增量索引策略
  • • 添加监控和日志记录,及时发现并解决问题

总结与展望

基于MCP实现的RAG系统代表了知识库建设的新方向。通过模型上下文协议,我们不仅解决了传统RAG系统中的诸多痛点,还为企业提供了一种低成本、高效率的知识管理方案。

未来,随着大模型技术的进步和MCP标准的完善,我们可以期待更多创新功能的出现:

  • • 多模态内容的支持(图像、音频、视频等)
  • • 更精准的实时知识更新机制
  • • 基于用户反馈的自适应检索优化

对于企业而言,现在正是开始探索和应用这一技术的最佳时机。通过MCP-RAG,企业可以充分挖掘自身知识资产的价值,为员工和客户提供更智能、更精准的信息服务。

参考资源

    1. 模型上下文协议(MCP)官方文档[2]
    1. Milvus向量数据库可视化客户端Attu[3]
    1. MCP-RAG实战代码仓库[4]

欢迎感兴趣的开发者访问项目仓库,体验和改进这一开源解决方案: https://github.com/FlyAIBox/mcp-in-action/tree/rag_0.1.1/mcp-rag

想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年 AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享!

👇👇扫码免费领取全部内容👇👇

​

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势

想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI:

1. 100+本大模型方向电子书

在这里插入图片描述

2. 26 份行业研究报告:覆盖多领域实践与趋势

报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

  • 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
  • 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
  • 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
  • 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。

3. 600+套技术大会 PPT:听行业大咖讲实战

PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

在这里插入图片描述

  • 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
  • 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
  • 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
  • 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。

二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走

想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位

面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析:

2. 102 道 AI 大模型真题:直击大模型核心考点

针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题

专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:


三、路线必明: AI 大模型学习路线图,1 张图理清核心内容

刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

在这里插入图片描述

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

img

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

img

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

img

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

img

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

img

L5阶段:专题集丨特训篇 【录播课】

img
四、资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

​

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!

一次实时数据链路丢数排查:从 MQTT 队列积压到 SQL 统计开销 本文通过一次实时数据链路压测,排查了从MQTT到ClickHouse的端到端数据丢失问题。核心方法是为每条消息添加序号,建立独立观察点(MQTT订阅端、Kafka消费者),结合转发服务阶段统计与线程栈分析,定位到下游处理速度不足源于Druid SQL合并统计的高开销。优化措施包括关闭SQL合并、扩容代理队列、增强生产侧失败处理,并验证15分钟内实现全链路对账一致,显著缓解积压与丢包。关键收获:数据可对账、明确各阶段“成功”定义、关注客户端队列状态。 阅读详情

相关推荐

mall 电商项目完整部署---实战

mall 后端 SpringBoot,mall‑admin‑web 后台管理 Vue 前端,mall‑app‑sc 移动端 uni‑app 前端;修改数据库、redis、minio、logstash 地址,容器之间 link 别名:mysql 容器别名。🔔排坑:登录报跨域 / 接口报错,检查 prod.env.js 地址,确认 8080 后端服务正常运行。能打开页面,接口列表展示出来,后端部署完成。,所以打包的时候会自动构建镜像,很慢而且你暂时不需要。,容器数据持久化,删除容器数据不会丢失。

qq_63196465的博客 329

RAG不好用?试试MCP这个“知识库优化大师”

在企业数字化转型浪潮中,如何有效管理和利用内部知识资产已成为关键挑战。随着大型语言模型(LLM)技术的成熟,检索增强生成(RAG)应用正逐渐成为连接企业知识与AI能力的重要桥梁。然而,传统RAG实现常面临检索质量不佳、实时更新困难等痛点问题。

m0_59235945的博客 1170

从转发时钟到嵌入式时钟:CDR、CTLE与DFE在高速串行链路中的协同演进

本文深入探讨了高速串行链路中CDR、CTLE与DFE技术的协同演进。从转发时钟到嵌入式时钟的转变,详细分析了CDR的工作原理与实现架构,以及CTLE和DFE在信道损耗补偿和ISI干扰消除中的关键作用。通过实战案例展示了这些技术在28Gbps至112Gbps SerDes设计中的优化策略与性能提升。

weixin_42539414的博客 294

RAG不好用?试试MCP这个“知识库优化大师”,真的很香!!

在企业数字化转型浪潮中,如何有效管理和利用内部知识资产已成为关键挑战。随着大型语言模型(LLM)技术的成熟,检索增强生成(RAG)应用正逐渐成为连接企业知识与AI能力的重要桥梁。然而,传统RAG实现常面临检索质量不佳、实时更新困难等痛点问题。本文将通过实战案例,详细介绍如何基于模型上下文协议(MCP)构建一套高性能企业RAG系统,帮助企业快速打造智能知识库应用。基于MCP实现的RAG系统代表了知识库建设的新方向。

HJS123456780的博客 998

Android Geckoview实战:5分钟搞定JS与原生交互(附完整Demo代码)

本文详细介绍了在Android应用中使用GeckoView替代系统WebView,构建稳定高效的JavaScript与原生代码交互桥梁的实战方法。通过WebExtension架构,文章提供了从环境配置、扩展开发到Android端集成的完整步骤,并附有可运行的Demo代码,帮助开发者快速解决混合应用中的兼容性问题。

u5v6w7的博客 935

北京途游游戏后端开发面经

北京途游游戏后端开发面经 我面试岗位是基于Python的后端开发工程师,主要是搞游戏的服务器开发。面试一共分了两轮,之后说是看看其他的候选人再定,感觉凉凉~~ 由于受到此次新型冠状病毒疫情的影响,本次面试采用视频面试的方式,下面是面试的时候面试官提的问题,python的基础知识还是问的比较多的。  一面:(32分钟微信视频)  简单做下自我介绍,   1.说一下你开发过的项目,挑一个说下你都做了...

weixin_45603043的博客 2126

收藏备用|RAG不好用?试试MCP这个“知识库优化大师”(小白/程序员实战版)

基于MCP实现的RAG系统代表了知识库建设的新方向。通过模型上下文协议,我们不仅解决了传统RAG系统中的诸多痛点,还为企业提供了一种低成本、高效率的知识管理方案。• 多模态内容的支持(图像、音频、视频等)• 更精准的实时知识更新机制• 基于用户反馈的自适应检索优化对于企业而言,现在正是开始探索和应用这一技术的最佳时机。通过MCP-RAG,企业可以充分挖掘自身知识资产的价值,为员工和客户提供更智能、更精准的信息服务。

xxue345678的博客 891

利用featureCounts实现高效转录本定量:从比对到下游分析

本文详细介绍了利用featureCounts工具进行RNA-seq转录本定量的完整流程。从软件安装、输入文件准备,到核心命令参数解析与批量样本处理,再到将生成的计数矩阵无缝衔接至DESeq2进行差异表达分析,提供了从比对到下游分析的一站式实战指南。文章重点阐述了featureCounts在效率与易用性上的优势,并分享了常见问题排查与性能优化技巧,帮助研究者高效完成转录本定量这一关键步骤。

weixin_29069131的博客 318

Flink 学习日志 03:自定义一个SourceFunction,完成对Redis中数据的读取

本文介绍了在Flink中自定义SourceFunction读取Redis数据的完整流程:通过Jedis客户端连接WSL2中的Redis服务,编写RedisSource实现循环读取所有Key-value并逐条输出,结合Thread.sleep()实现每秒一条的流式效果。关键步骤包括环境准备、添加Jedis依赖、配置IDEA运行时加载provided依赖,并注意生产环境中应避免使用阻塞的keys *,改用scan命令。最终实现动态读取、实时打印,验证了Flink与Redis的数据集成能力。

木木的学习笔记 421

Windows 11 安装 JDK 21:下载、安装、配置环境变量、验证

本文详细介绍了在 Windows 11 系统中安装 JDK 21 的完整流程,包括从 Oracle 官网下载压缩包、解压至自定义目录、配置 JAVA_HOME 与 Path 环境变量,并验证安装是否成功。文章推荐使用 ZIP 压缩包而非安装程序,以实现绿色便携、多版本共存等优势,并通过一个包含 Java 21 新特性的示例程序进行功能验证,适合开发者快速上手。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2519

瑞芯微RK3588/RK3576平台采集BT1120(fpga)驱动调试记录

本文介绍了在RK3576/RK3588平台上采集FPGA传输的BT1120数据的方法。主要内容包括:1)硬件连接需确认管脚复用和图像格式(通常为uyvy_2x8);2)设备树配置要点,如I2C总线设置、BT1120模式指定等;3)驱动适配注意事项,包括时钟极性、分辨率格式等关键参数;4)测试方法,通过media-ctl和v4l2-ctl工具验证数据采集。文中特别指出RK3576和RK3588配置的通用性,并提供了常见问题的排查思路。

bingdund的博客 916

Day3 - Flink 窗口与时间语义:从滚动窗口到迟到数据处理

水位线是一个特殊的时间戳,代表"小于这个时间戳的数据都已经到齐了比如水位线推进到 10:00:05,就告诉 Flink:10:00:05 之前的数据应该都到了,如果还有晚于这个时间到达但时间戳小于 10:00:05 的数据,就是"迟到数据"。窗口大小固定,窗口之间不重叠,数据只属于一个窗口。时间线: 0 10 20 30 40 50 60窗口1: [--------)窗口2: [--------)窗口3: [--------)窗口4: [--------)

YEEMOLY的博客 249

uniapp [全端兼容] - 实现接入使用天地图及卫星视图切换功能,在国家天地图上自由切换地图显示类型(卫星视图/地形视图/卫星混合/地形混合/普通视图)天地图切换视图显示改成卫星风格,切换地图图层

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,天地图,视图,卫星,地图类型切换,uniAPP天地图,改成卫星视角,在线地图切换,来回切换卫星图,天地图如何实现来回切换卫星图,地形图,卫星视图,VUE3引入天地图卫星版,详细教程示例源码代码,天地图切换卫星用什么api,卫星视角API方法,vue3卫星天地图,能改地图的显示方式,vue3中使用天地图自定义样式切换地图图层,切换报错,加载出错,卫星图太卡,地图图层更换,vue3安装集成天地图详细示例源

🏆 前端领域优质创作者 1万+

智能问诊的流程

本文介绍基于FastAPI构建的医疗多Agent系统MediAgent,通过症状分析、诊断推理与治疗建议等模块协同,实现从问诊到报告生成的完整工作流。系统采用前后端分离架构,结合MySQL、RabbitMQ与Docker实现工程化部署,支持异步化验结果接入。虽当前状态暂存于内存,但已具备可扩展性,未来可通过Redis持久化、消息队列联动及医疗安全机制完善,应用于慢病管理、辅助决策等场景,推动AI在医疗流程中的落地应用。

Joey 的工作空间~ 774

KEPServerEX 6 之 EX 6.11.718.0 发布说明

KEPServerEX 6.11.718.0 发布说明

-雲飛兄-博客 2882

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

行业研究报告采购避坑指南:从需求拆解到机构选型的实操逻辑

先说结论:买行业研究报告这件事,坑不在“哪家便宜”,而在“你拿到的数据能不能回答你的问题”。作为一个经常帮企业做采购决策的顾问,我见过太多花了几万块买回一堆PDF却用不上的案例。这篇文章把采购流程拆成五步,每一步告诉你该看什么、该避什么,尽量帮你少交学费。

2601_96585642的博客 224

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

大数据与审计专业哪些证书企业比较认可?

大数据与审计专业选证书,首先要明确就业方向:是进入会计师事务所做财务审计,还是进入企业从事内部审计、风险控制,或向数据审计、信息系统审计发展。不同岗位看重的专业能力不同,证书的价值也应放在具体招聘要求中判断。面向2027年的求职与备考规划,值得重点考虑的有六类:初级会计专业技术资格、注册会计师、审计专业技术资格、CDA数据分析师、国际注册内部审计师和国际注册信息系统审计师。选择时,宜采用“财审基础+数据能力+岗位专长”的组合,而不是单纯追求持证数量。

YangYang9YangYan的博客 295

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深入浅出聊聊 Linux 的 PageCache 与系统极致性能

本文深入浅出解析了 Linux PageCache 的核心机制,揭示其如何通过“延迟写、预读读”提升系统性能。以监控告警为切入点,阐明 free -h 中 buff/cache 并非真正占用,真正可用内存由 available 决定。结合 Kafka、Elasticsearch、MySQL 等实战场景,说明中间件如何依赖 PageCache 实现极致性能。强调不可手动清理缓存,并建议合理调优脏页参数,避免卡顿。最终指出:内存满≠危机,而是系统高效运行的体现。

小小默:进无止境 483

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 336

Elasticsearch:稠密向量字段类型

dense_vector字段用于存储稠密向量,支持k近邻搜索(kNN),默认启用索引并使用余弦相似度。可接受浮点数数组或Base64编码字符串输入,支持自动量化(如int8、int4、bbq)以降低内存占用。通过index_options配置索引类型(如hnsw、bbq_disk),并可启用过采样与重新评分提升精度。向量默认不存储于_source中以节省空间,可通过fields或_source.exclude_vectors显式返回。支持bit向量及GPU加速索引,适用于高维向量场景。

Elastic 中国社区官方博客 288
上一篇: 2025年AI Agent岗位市场调研:基于101个职位的数据分析,大模型入门到精通,收藏这篇就足够了!
下一篇: 从0开始搭建AI知识库,亲手让知识“活”起来,大模型入门到精通,收藏这篇就足够了!
AI_小站
博客等级 码龄3年 6255粉丝 1152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值