(续上节)

工业故障维修问答场景中的 Agentic RAG+MCP 实践

场景概述与需求分析

在工业领域,设备故障的诊断和维修是一项复杂且关键的工作。传统上,维修人员遇到设备异常时,需要查阅技术手册、历史故障记录,或者咨询专家经验,才能确定故障原因和解决措施。这一过程往往耗时较长,对维修人员的经验要求也很高。如果能有一个智能问答系统,在维修人员提出问题时,快速从海量的设备资料和知识库中找到相关信息,并给出具体的排查步骤和解决方案,将大大提高维修效率和准确性。

考虑一个典型场景:某工厂的数控机床在加工过程中出现精度不稳定的故障,操作工向智能系统提问:“数控机床加工精度不稳定的原因可能有哪些?应该如何排查和解决?
我们希望系统不仅能列举可能的原因,还能结合具体设备型号的维修手册,给出针对性的检查步骤和处理建议。此外,如果维修过程中需要计算(例如调整参数时需要计算补偿值)或查询实时数据(例如传感器读数),系统也应该能够提供相应的支持。

针对上述需求,一个可行的方案是构建一个基于 Agentic RAG的工业故障问答系统。该系统利用检索增强生成从设备知识库中获取故障相关信息,并通过智能体决定如何检索和调用工具,最终由大语言模型生成详尽的回答。同时,借助MCP协议,我们可以将专业工具(如故障知识库查询、计算工具、数据库查询等)封装为
MCP Server,供智能体调用,从而扩展系统的能力边界。

下面,我们将详细介绍该系统的架构设计、关键组件实现,以及如何利用 FastMCP开发所需的 MCP Server,最后通过一个端到端的演示来展示系统在实际问题中的表现。

系统架构设计:Agentic RAG + MCP 集成

工业故障维修问答系统的整体架构如下图所示:

系统主要由以下部分构成:

  • 用户接口:维修人员通过对话界面输入故障现象或问题,系统将其传递给智能体模块。
  • 智能体(Agent):这是系统的大脑,负责理解用户问题、规划解决方案步骤,并协调检索和工具调用。智能体内部可以基于一个大型语言模型(如 GPT-4、Claude 等)构建,使其具备自然语言理解和推理能力。同时,智能体被赋予一系列可用的工具列表,这些工具对应于下方的 MCP Server 提供的功能。
  • MCP 客户端:智能体通过 MCP 客户端与各个 MCP Server 通信。每当智能体决定调用某个工具时,MCP 客户端会根据工具对应的 Server 配置,将请求通过网络(或本地管道)发送给相应的 MCP Server,并将返回结果反馈给智能体。
  • MCP Server 集群:这是系统的"工具箱",由多个 MCP Server 组成,每个 Server 提供特定的功能:
    • 知识库检索
      Server
      :连接工业设备的故障知识库(可能是一个向量数据库或全文搜索引擎)。当用户提问涉及故障原因或解决方法时,智能体调用该 Server 的检索工具,从知识库中查找相关的故障案例、维修手册段落等。
    • 计算工具
      Server
      :提供一些工程计算功能,如单位换算、公式计算等。例如,在维修过程中可能需要根据温度变化计算热膨胀量,智能体可以调用该Server 的计算函数获取结果。
    • 实时数据查询 Server:如果工厂有设备监控系统,该 Server 可以连接实时数据库或传感器接口,获取设备当前的运行参数(温度、振动值等)。当用户询问"当前电机温度是多少"时,智能体通过此 Server 取得实时数据并纳入回答。
    • 其他工具 Server:根据需要还可扩展,如维修流程指导 Server(提供标准维修操作流程的检查清单)、备件数据库 Server(查询零件库存和更换信息)等等。
  • 知识库与数据库:存储系统所需的静态知识和动态数据。包括设备的技术文档、历史故障及解决方案、维护手册、实时传感器数据等。这些数据通过相应的 MCP Server 提供给智能体使用。

在上述架构中,智能体遵循 Agentic RAG的思想,采用规划-执行-反思的循环来处理用户的复杂问题:

  1. 解析问题,制定计划:智能体首先将用户的问题进行解析,识别其中的关键信息(如设备类型、故障现象)。然后,它基于内置的推理和对可用工具的了解,制定解决问题的计划。例如,对于"加工精度不稳定"的问题,智能体可能计划:先检索知识库获取可能原因,再根据需要调用计算工具分析,最后汇总建议。
  2. 执行检索与工具操作:智能体按照计划,依次调用相关的 MCP Server 工具。例如,先调用知识库检索工具,传入"数控机床 加工精度不稳定"等关键词,获取若干相关的文档片段。接着,智能体可能检查这些结果中是否有需要进一步验证的数据,比如某条原因提到"丝杠间隙过大",智能体可能决定调用实时数据查询工具获取该机床丝杠间隙的测量值。如果发现间隙确实超标,智能体还可以调用计算工具计算调整垫片的厚度。每一步操作的结果都会被智能体记录下来,作为后续推理的依据。
  3. 生成回答并验证:在收集到足够的信息后,智能体将所有相关内容(用户问题、检索到的知识片段、工具返回的数据等)整合成提示,交由底层的大语言模型生成最终的维修建议。模型可能会给出类似这样的回答:“加工精度不稳定可能由于丝杠间隙过大或伺服参数不当引起。建议首先检查丝杠间隙(当前测量值为Xmm,超出标准Y mm),并调整垫片补偿;同时参考维修手册第3章,重新校准伺服增益参数…”。智能体收到模型的回答后,会检查其是否涵盖了用户问题的所有方面,是否存在明显不合理之处。如果验证通过,则将答案返回给用户;如果发现遗漏或错误(例如模型给出了一个知识库中没有依据的原因),智能体可以决定重新检索或要求模型修正,然后再次生成答案。
  4. 输出结果并学习:最终的答案通过用户接口呈现给维修人员。同时,本次交互的过程和结果可以存储在系统日志中。如果系统具备学习能力,还可以分析用户对答案的反馈,不断优化智能体的决策策略和知识库内容。

通过上述流程,系统能够以接近人类专家的方式逐步排查问题:先利用知识库知其然,再借助工具究其所以然,最后给出有依据、可操作的解决方案。这正是Agentic RAG 结合 MCP 工具调用的威力所在。

智能体 Agent 的设计与实现

智能体是系统的控制核心。我们将使用 LangChain 框架构建一个能够调用 MCPServer 的 Agent。这需要为每个 MCP 工具创建一个 LangChain工具包装器,该包装器负责通过 HTTP 调用 MCP Server。

以下是实现 Agent 的详细代码示例。

import requests
import json
from langchain_core.tools import BaseTool
from langchain.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub

# --- 1. 定义与 MCP Server 交互的工具 ---

# 定义知识库检索工具的输入参数模型
class KnowledgeSearchInput(BaseModel):
    query: str = Field(description="The natural language query to search for in the knowledge base.")

# 创建一个工具类,用于调用知识库检索 MCP Server
class KnowledgeSearchTool(BaseTool):
    name = "knowledge_base_search"
    description = "Useful for searching the equipment maintenance knowledge base for fault causes, solutions, and technical manuals."
    args_schema = KnowledgeSearchInput
    mcp_server_url = "http://localhost:8001"  # MCP Server 的地址

    def _run(self, query: str) -> str:
        """通过 HTTP POST 请求调用 MCP Server 的 tool/search_knowledge 方法"""
        try:
            payload = {
                "jsonrpc": "2.0",
                "id": 1,
                "method": "tool/search_knowledge",
                "params": {"query": query}
            }
            response = requests.post(self.mcp_server_url, json=payload, timeout=10)
            response.raise_for_status()  # 如果 HTTP 状态码不是 2xx,则抛出异常
            result = response.json()
            if "error" in result:
                return f"Error from MCP Server: {result['error']['message']}"
            return json.dumps(result["result"], indent=2, ensure_ascii=False)
        except requests.exceptions.RequestException as e:
            return f"Failed to connect to Knowledge Base MCP Server: {e}"

# 定义计算工具的输入参数模型
class CompensationCalcInput(BaseModel):
    alpha: float = Field(description="Thermal expansion coefficient of the material.")
    delta_T: float = Field(description="Temperature change in Celsius.")
    length: float = Field(description="Original length of the part in mm.")

# 创建一个工具类,用于调用计算工具 MCP Server
class CompensationCalculationTool(BaseTool):
    name = "thermal_compensation_calculator"
    description = "Calculates the thermal expansion compensation for a machine part."
    args_schema = CompensationCalcInput
    mcp_server_url = "http://localhost:8002"

    def _run(self, alpha: float, delta_T: float, length: float) -> str:
        """调用计算工具 MCP Server 的 tool/calculate_compensation 方法"""
        try:
            payload = {
                "jsonrpc": "2.0",
                "id": 1,
                "method": "tool/calculate_compensation",
                "params": {"alpha": alpha, "delta_T": delta_T, "length": length}
            }
            response = requests.post(self.mcp_server_url, json=payload, timeout=5)
            response.raise_for_status()
            result = response.json()
            if "error" in result:
                return f"Error from MCP Server: {result['error']['message']}"
            return f"The calculated compensation is: {result['result']} mm"
        except requests.exceptions.RequestException as e:
            return f"Failed to connect to Calculator MCP Server: {e}"

# --- 2. 配置并创建 Agent ---

# 初始化工具实例
tools = [KnowledgeSearchTool(), CompensationCalculationTool()]

# 设置 LLM
# 请确保设置了 OPENAI_API_KEY 环境变量
llm = ChatOpenAI(model="gpt-4-turbo", temperature=0)

# 从 LangChain Hub 获取 ReAct 类型的 Agent Prompt 模板
prompt = hub.pull("hwchase17/react")

# 创建 Agent
agent = create_react_agent(llm, tools, prompt)

# 创建 Agent 执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# --- 3. 运行 Agent ---

if __name__ == "__main__":
    # 模拟用户提问
    user_question = "我们工厂的数控机床最近加工精度变得不稳定,时好时坏,可能是什么原因?"
    
    # 执行 Agent
    # 注意:运行此代码前,请确保已在 8001 和 8002 端口启动了相应的 MCP Server
    response = agent_executor.invoke({"input": user_question})
    
    print("--- Final Answer ---")
    print(response['output'])

代码讲解

  • 工具定义 (BaseTool):我们为每个 MCP 工具创建了一个继承自BaseTool 的类。这种方式比简单的函数封装更健壮,因为它允许我们使用 Pydantic 定义清晰的输入参数模式 (args_schema)。Agent 会利用工具的namedescription 来决定何时以及如何使用该工具。
  • MCP 调用逻辑 (_run):每个工具的 _run 方法实现了与 MCP Server 的实际交互。它构造一个 JSON-RPC 2.0 格式的请求体,通过 requests.post 发送到指定的 MCP Server URL。代码中还包含了错误处理逻辑,如网络异常 (RequestException) 和 MCP Server 返回的业务错误。
  • Agent 配置:我们选择了 OpenAI 的 gpt-4-turbo 模型,并使用了 LangChain 社区提供的标准 ReAct prompt。create_react_agent 函数将 LLM、工具和提示词组合在一起,构建出 Agent 的核心逻辑。
  • Agent 执行 (AgentExecutor)AgentExecutor 负责执行 Agent 的"思考-行动"循环。设置 verbose=True 可以让我们在控制台看到 Agent 的完整推理过程,包括它决定调用哪个工具、传入什么参数以及从工具得到什么结果,这对于调试非常有用。

MCP Server 的开发与部署

在工业故障问答系统中,我们需要开发多个 MCP Server来提供各种工具能力。这里我们以知识库检索 Server计算工具Server为例,说明如何使用 FastMCP 实现它们,并将其集成到系统中。

1. 知识库检索 MCP Server

该 Server的功能是从工业设备知识库中检索与查询相关的信息片段。为了简化示例并聚焦在MCP Server,此处我们创建一个模拟的向量数据库类,它在内存中存储一些示例文档,并根据关键词进行简单匹配。在实际应用中,这部分应替换为与真实向量数据库(如FAISS、Pinecone 等)的交互逻辑。

使用 FastMCP 实现该 Server 的代码如下:

from fastmcp import FastMCP

# --- 模拟的向量数据库 ---
class MockVectorDB:
    def __init__(self):
        self.documents = [
            {"content": "加工精度不稳定可能由伺服系统增益设置不当引起,导致跟踪误差过大。", "source": "手册A-Chap3"},
            {"content": "滚珠丝杠副存在间隙或磨损,是造成数控机床运动不平稳和精度不稳定的常见原因。", "source": "手册B-Chap5"},
            {"content": "主轴轴承磨损会导致径向跳动超差,严重影响加工精度。应定期检查主轴状态。", "source": "案例库-045"},
            {"content": "刀具磨损或刀架定位不准也可能造成尺寸波动,建议尝试更换新刀具并校准刀架。", "source": "技术论坛-Q123"}
        ]
        print("Mock VectorDB initialized with sample documents.")

    def similarity_search(self, query: str, top_k: int = 3) -> list[dict]:
        """
        模拟相似性搜索。在真实场景中,这里会使用向量嵌入和余弦相似度计算。
        为简化示例,我们只进行简单的关键词匹配。
        """
        query_keywords = {"精度", "不稳定", "原因", "伺服", "丝杠", "主轴"}
        
        # 简单的基于关键词重叠的评分
        scored_docs = []
        for doc in self.documents:
            score = 0
            for keyword in query_keywords:
                if keyword in doc['content'] or keyword in query:
                    score += 1
            if score > 0:
                scored_docs.append((score, doc))
        
        # 按得分排序并返回 top_k
        scored_docs.sort(key=lambda x: x[0], reverse=True)
        return [doc for score, doc in scored_docs[:top_k]]

# 初始化向量数据库客户端
db = MockVectorDB()

# 创建 MCP Server,名称为 "EquipmentKnowledgeBase"
mcp = FastMCP("EquipmentKnowledgeBase")

@mcp.tool
def search_knowledge(query: str) -> list[dict]:
    """Search the equipment knowledge base for relevant information.
    Args:
        query (str): The question or topic to search for.
    Returns:
        list[dict]: A list of documents, each with 'content' and 'source'.
    """
    print(f"Received knowledge search request with query: {query}")
    results = db.similarity_search(query, top_k=3)
    return results

if __name__ == "__main__":
    print("Starting Equipment Knowledge Base MCP Server on port 8001...")
    mcp.run(transport="http", port=8001)

代码讲解

  • MockVectorDB:这个类模拟了一个简单的知识库。它在初始化时加载了几个关于机床故障的示例文本。其 similarity_search 方法通过简单的关键词匹配来模拟向量搜索,返回最相关的文档。这使得整个示例可以独立运行,而无需配置真实的向量数据库。
  • search_knowledge 工具:这个工具函数接收一个查询字符串,调用 db.similarity_search 方法,并将结果直接返回。FastMCP 会自动将返回的 Python 列表和字典序列化为 JSON 格式。
  • HTTP 部署:我们使用 mcp.run(transport="http", port=8001) 将该 Server 运行在 8001 端口,使其可以通过网络被 Agent 调用。

2. 计算工具 MCP Server (扩展版)

为了展示一个 MCP Server 如何提供多个工具,我们对计算工具 Server进行扩展,在原有热膨胀计算的基础上,增加一个单位换算工具。

from fastmcp import FastMCP
from typing import Literal

mcp = FastMCP("MaintenanceCalculator")

@mcp.tool
def calculate_compensation(alpha: float, delta_T: float, length: float) -> float:
    """Calculate thermal expansion compensation for a machine part.
    Args:
        alpha (float): Thermal expansion coefficient of the material (per °C).
        delta_T (float): Temperature change (°C).
        length (float): Original length of the part (mm).
    Returns:
        float: The compensation length (mm) that the part expands or contracts.
    """
    print(f"Calculating compensation for alpha={alpha}, delta_T={delta_T}, length={length}")
    compensation = alpha * delta_T * length
    return round(compensation, 4)

@mcp.tool
def convert_pressure(value: float, from_unit: Literal['psi', 'bar'], to_unit: Literal['psi', 'bar']) -> float:
    """Convert pressure units between psi and bar.
    Args:
        value (float): The pressure value to convert.
        from_unit (str): The original unit, either 'psi' or 'bar'.
        to_unit (str): The target unit, either 'psi' or 'bar'.
    Returns:
        float: The converted pressure value.
    """
    print(f"Converting {value} {from_unit} to {to_unit}")
    if from_unit == to_unit:
        return value
    if from_unit == 'psi' and to_unit == 'bar':
        return round(value / 14.5038, 4)
    if from_unit == 'bar' and to_unit == 'psi':
        return round(value * 14.5038, 4)
    # FastMCP 会自动处理无效参数的错误
    raise ValueError("Invalid unit conversion.")

if __name__ == "__main__":
    print("Starting Maintenance Calculator MCP Server on port 8002...")
    mcp.run(transport="http", port=8002)

代码讲解

  • 多工具支持:我们在这个 Server 中定义了两个被 @mcp.tool 装饰的函数:calculate_compensationconvert_pressure。FastMCP 会自动将它们都注册为该 Server 的可用工具。
  • 参数类型提示convert_pressure 工具使用了 typing.Literal 来约束 from_unitto_unit 参数只能是 ‘psi’ 或 ‘bar’。FastMCP 会利用这些类型提示生成精确的工具模式(JSON Schema),供 Agent 理解和校验参数。

3. 部署与配置

开发完 MCP Server后,需要将它们部署到运行环境中。在我们的示例中,我们将两个 Server作为独立的 Python 进程启动:

# 终端1
python knowledge_server.py  # 启动知识库服务器,监听 8001 端口

# 终端2
python calculator_server.py # 启动计算器服务器,监听 8002 端口

在 Agent 一侧,我们已经通过在工具类中硬编码 URL (http://localhost:8001http://localhost:8002) 的方式完成了配置。在生产环境中,这些 URL应该从配置文件或环境变量中读取,以增加灵活性。

当 Agent 运行时,LangChain 的 Agent逻辑会根据用户问题和工具描述,决定调用哪个工具。例如,如果 Agent
的思考过程是"我需要查找数控机床精度不稳定的原因",它会匹配到knowledge_base_search 工具的描述,然后通过其 _run 方法向http://localhost:8001 发送请求。

为了系统的健壮性,还可以为 MCP Server部署设置重试和超时机制。例如,在 Agent 的工具类中,可以使用
requests 库的重试适配器。此外,可以使用容器编排(如 Docker Compose/Kubernetes)来管理这些 Server 的部署,方便扩展和维护。

端到端演示与效果分析

现在,我们通过一个具体的端到端示例来演示上述系统如何工作,并分析其效果。假设维修人员向系统提出了如下问题:

“我们工厂的一台数控机床最近加工精度变得不稳定,时好时坏,可能是什么原因?我该怎么检查和处理?”

步骤 1:智能体接收问题并解析

智能体首先收到用户的提问。通过解析,它识别出关键词:“数控机床”、“加工精度不稳定”、“原因”、“检查和处理”。这表明用户需要了解可能的故障原因以及对应的排查解决步骤。

步骤 2:智能体规划并调用知识库检索

智能体决定首先从知识库中查找与"数控机床精度不稳定"相关的信息。它调用知识库检索 MCP Server 的 search_knowledge工具,传入查询:“数控机床 加工精度 不稳定原因”。假设知识库中包含机床维护手册和故障案例,检索工具返回了几条相关结果,例如:

  • 文档片段1(来源:《XX型数控机床维护手册》):
    “加工精度不稳定可能由以下原因引起:1)伺服进给系统增益设置不当,导致跟踪误差过大;2)滚珠丝杠副存在间隙或磨损,造成运动不平稳;3)机床导轨润滑不良或有异物,导致运动阻力变化…”
  • 文档片段2(来源:故障案例库):
    “案例:某厂一台XX型机床出现精度漂移,经查是主轴轴承磨损导致径向跳动超差,更换主轴轴承后精度恢复正常。”
  • 文档片段3(来源:技术论坛问答):
    “网友提问:数控车床加工尺寸不稳定怎么办?专家回复:可检查刀架定位是否准确、刀具是否磨损,以及系统参数中的反向间隙补偿是否正确设置。”

这些结果被返回给智能体。智能体阅读后,大致了解了可能的原因范围:包括伺服参数、机械部件磨损、润滑、刀具等方面。

步骤 3:智能体决定调用其他工具

智能体注意到手册中提到了"伺服增益设置不当"和"丝杠间隙"等因素,为了进一步确认,它决定获取一些实际数据:

  • 首先,调用实时数据查询 Server(假设我们还有部署该 Server)获取机床当前的关键参数。例如,询问"当前Y轴丝杠间隙补偿值"和"主轴轴承温度"。假设实时数据返回:Y轴丝杠间隙补偿为0.05mm,主轴轴承温度为65°C(在正常范围内)。
  • 接着,针对"丝杠间隙"这一因素,智能体想到手册中可能给出了标准间隙值。它再次调用知识库检索工具,查询"XX型机床 丝杠间隙标准",结果找到手册中的说明:“新机床丝杠副轴向间隙应≤0.02mm,使用后允许补偿值不超过0.05mm”。当前补偿值0.05mm已接近上限,可能导致精度不稳定。
  • 然后,智能体考虑是否需要计算。例如,如果要调整丝杠螺母预紧力,可能需要根据温度计算膨胀量。它调用计算工具 Server 的 calculate_compensation 工具,假设传入材料热膨胀系数、温度变化等参数,计算得到一个补偿值用于参考。

通过这些工具调用,智能体收集到了更具体的信息:当前丝杠间隙补偿已达上限、伺服增益参数可能需要优化、刀具和刀架也需检查等。

步骤 4:智能体生成并验证回答

现在智能体将所有信息汇总,包括用户的问题、检索到的原因列表、实时数据和计算结果,然后将它们作为上下文提供给大语言模型,要求其生成条理清晰的回答。模型基于这些上下文,组织出如下答复:

针对数控机床加工精度不稳定的问题,可能的原因和处理建议如下:

  • 伺服参数问题:进给伺服系统的增益设置不当可能导致跟踪误差,引起尺寸不稳定。建议参考机床维护手册第5章,重新调整伺服增益参数至推荐值,并观察加工精度是否改善。
  • 机械间隙与磨损:滚珠丝杠副的间隙或磨损是常见原因。当前测得Y轴丝杠间隙补偿值为0.05mm,已接近允许上限(标准≤0.02mm)。这表明丝杠可能存在磨损或松动。处理建议:联系维修人员检查丝杠螺母预紧力,必要时更换滚珠丝杠副;同时检查导轨的润滑和清洁情况,确保运动顺畅。
  • 主轴及刀具问题:主轴轴承磨损会导致旋转精度下降,从而影响加工精度。虽然当前轴承温度正常,但仍建议安排停机检查主轴径向跳动。另外,刀具磨损或刀架定位不准也可能造成尺寸波动,可尝试更换新刀具并校准刀架定位。
  • 其他因素:如机床水平度、环境温度变化等也可能影响精度。请确保机床安装水平,车间温度保持稳定。如果问题持续,建议使用激光干涉仪对机床各轴进行精度校准。

总结:建议按上述顺序逐一排查。在调整伺服参数或机械部件后,可加工测试件验证精度是否恢复。如有需要,可参考《XX型数控机床维护手册》第3章"精度调整"部分或联系设备供应商获取进一步支持。

智能体收到模型生成的答案后,对其进行验证:检查是否有遗漏的原因(参考了手册列出的主要点)、建议是否具体可行(有对应的检查和调整步骤)、以及是否引用了知识库内容作为依据(如提到手册章节)。验证通过后,智能体认为这个答案是可靠的。

步骤 5:用户获得答案并反馈

最终,上述回答通过用户界面呈现给维修人员。维修人员可以按照建议逐步检查设备。例如,他可能先调整了伺服增益参数,但发现效果不明显;接着检查丝杠间隙,确认需要更换丝杠副;更换后重新加工测试,精度恢复正常。维修人员对系统给出的有条理的排查流程表示满意,认为节省了他大量查阅资料的时间。

如果维修人员后续还有追问,比如"更换丝杠副的具体步骤是什么?",系统可以继续通过智能体与知识库的交互来回答,形成多轮对话支持。

效果分析:通过本案例可以看到,基于 Agentic RAG 和 MCP
的智能问答系统在工业故障维修场景中表现出了显著优势:

  • 答案的准确性和有据性:系统的回答并非凭空生成,而是建立在检索到的真实资料和实时数据基础上。例如,提到的标准间隙值、手册章节等都有出处,提高了可信度。这避免了纯LLM可能出现的胡编乱造,使回答更具专业性。
  • 问题解决的完整性:智能体能够综合多个来源的信息,给出全面的原因分析和解决方案。相比人工可能只考虑某一两个常见原因,系统列举了伺服、机械、刀具等多方面因素,确保没有遗漏主要可能性。
  • 实时性和针对性:借助 MCP 工具,系统获取了设备当前的参数(如间隙补偿值),并据此给出针对性建议(如间隙已到上限需更换部件)。这种结合实时状态的回答是传统静态知识库问答无法实现的,体现了 Agentic RAG 动态获取信息的能力。
  • 交互体验:用户以自然语言提问,系统返回详细且易于理解的步骤建议,仿佛身边有一位经验丰富的维修专家在指导。这种友好的交互降低了对用户专业水平的要求,普通操作工也能在系统帮助下排查较复杂的故障。
  • 持续改进:系统记录的每次问答和工具调用数据,都可以用于后续的优化。例如,如果发现某类问题知识库中资料不足,管理员可以补充相关文档;如果智能体在某步骤决策不佳,开发人员可以调整其提示或策略。随着使用,系统将变得越来越"聪明"。

当然,该系统也有一些可以改进的地方。例如,目前知识库检索结果的质量依赖于向量数据库的索引和相似度算法,可能需要引入更智能的检索排序或问答模型来提高相关性判断。另外,对于非常专业的计算,可能需要更复杂的工程软件支持,这时候可以通过MCP连接外部仿真软件或专家系统来扩展能力。此外,在多智能体协作方面,也可以考虑引入一个"诊断规划智能体"和一个"执行反馈智能体",前者负责统筹诊断流程,后者负责与现场设备交互获取反馈,两者通过MCP 通信,共同完成更复杂的诊断任务。

本实践展示了 Agentic RAG 与 MCP结合的强大威力。通过智能体自主规划大模型生成MCP工具赋能,我们成功构建了一个能够处理工业复杂问题的问答系统。它不仅能够回答一般性的知识问答,还能在需要时调用工具获取实时数据、执行计算,从而给出切实可行的解决方案。这一方案可以推广到其他领域,如医疗诊断、金融分析等,只要存在需要结合外部知识和操作的问答场景,Agentic RAG + MCP 都能提供一个通用的解决框架。

请访问我的微信公众号“大模型RAG和Agent技术实践”,有更丰富的内容。

Logo

更多推荐