IFC数据提取与分析工具

IFC-MCP服务是一个用于从建筑信息模型(BIM)中的工业基础类(IFC)模型中提取和聚合数据的工具包,支持开发者和分析师以结构化方式访问、筛选和分析建筑元素及其属性。

  • by ekkodale
  • Python
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 ekkodale/IFC-MCP

使用说明

引言

IFC-MCP服务是一个工具包,用于从建筑信息建模(BIM)中使用的行业基础类(IFC)模型中提取和聚合数据。它为MCP提供了LLM可以使用的工具。它使用户能够以结构化的方式访问、过滤和分析建筑元素及其属性。该服务旨在支持开发人员和分析师使用BIM数据,使其更容易在复杂的建筑模型上执行数据驱动的任务。

建筑师和其他建筑专业人员经常需要从建筑计划中检索特定信息来支持他们的工作。例如,建筑师可能想知道一栋建筑有多少扇窗户、门、烟囱或坡道;玻璃清洁公司可能需要有关最大窗户的详细信息来选择合适的设备;建筑工人可能对一定高度以上的墙壁数量感兴趣,以确定要带哪些梯子;油漆工需要总墙面积来估算所需的油漆量。目前,这类信息只能通过手动分析复杂且非人类可读的IFC文件或使用IFC查看器工具的组合来获得,这些工具通常无法在一个地方提供所有所需的数据。这使得该过程对建筑行业的专家来说既耗时又低效。

建议的解决方案是实现一个MCP,该MCP与大型语言模型(LLM)无缝集成,用户可以通过OpenWebUI访问。这种方法允许用户用自然语言询问有关建筑工地的任何问题,而不需要技术专长或熟悉专业工具。该系统提供便捷的访问,并为各种查询提供答案,自动处理信息检索,并以清晰、人类可读的格式呈现结果。

此时,查询可以包括有关总体建筑库存、特定实体类型的数量、基于属性的过滤以及聚合(如属性的总和或最大值和最小值)的问题。

入门指南

要开始使用IFC-MCP服务,请按照以下步骤操作:

软件依赖关系

确保已安装以下内容:

  • Node.js(v16或更高版本)
  • npm(v7或更高版本)
  • Docker(可选,用于容器化部署)
  • 当地开发:pip&uvicorn

在本地运行项目

  • 确保为Python运行虚拟环境

    • VS代码:
      • 创建虚拟环境: python -m venv .venv
      • 激活虚拟环境 .venv\Scripts\acitvate (在Windows上)
  • 安装依赖项:

    pip install -r requirements.txt
    
  • 运行:

    python .\app\main.py
    
  • 更新需求.txt

    pip freeze > requirements.txt 
    

在VS代码中使用Python调试器运行

将以下配置添加到 launch.json 文件在 .vscode:

 {
     "name": "Python: Run FastMCP",
      "type": "debugpy",
      "request": "launch",
      "program": "${workspaceFolder}/app/main.py",
      "console": "integratedTerminal",
      "env": {
        "PYTHONPATH": "${workspaceFolder}/app"
      }
    }

使用VS代码副本作为客户端

创建一个 mcp.json 文件在 .vscode 文件夹。并添加以下内容:

{
  "servers": {
    "ifc-mcp": {
      "url": "http://0.0.0.0:8000/mcp/"
    }
  }
}

使用Python调试器运行服务器或

fastmcp run app/main.py:mcp

通过选择启动MCP 代理 在VS Code Copilot中选择模式,并确保选择 ifc-mcp 单击工具图标。

MCP工具

  • get_entity_types
    检索IFC文件中存在的所有实体类型,允许用户查看可用于分析的元素类型。

  • get_entities
    从IFC文件中检索特定类型的实体,可选择按属性过滤,从而对墙、楼板或家具等元素进行有针对性的查询。

  • get_entity_info
    提供IFC文件中特定实体的详细信息,支持给定元素的基本和递归数据提取。

  • get_property_sets
    返回特定实体的属性集或指定属性的子集,帮助用户访问单个元素的详细属性数据。

  • get_property_names
    列出特定实体类型可用的属性名称,以便更容易理解可以查询或筛选哪些数据。

  • get_entities_with_properties
    检索特定类型的实体,可选择按属性和特性进行筛选,并包括指定的属性数据和统计信息以进行高级分析。

  • analyze_building_inventory
    生成IFC文件中所有建筑元素的全面清单,为每种实体类型提供计数和基本统计数据以支持

测试

测试数据

从以下位置检索测试数据: buildingSMART:示例测试文件

单元测试

  • 在虚拟环境中的Service目录中运行。
pytest .\tests\
  • -s:禁用此输出捕获,允许您在测试运行期间直接在控制台中查看打印语句和其他输出。
  • -v:增加pytest输出的详细程度,提供有关每个测试的更详细信息,包括测试名称及其结果

测试用例生成器

要验证MCP的结果,您可以通过以下方式计算给定IFC文件和给定指令的任何结果:

  1. 将IFC文件添加到 ifcs 文件夹
  2. 添加指令 instructions.json
  3. 通过以下方式运行脚本:
    1. 确保巨蟒=/app: $env:PYTHONPATH="{path_to_project}\IfcMCP\app"
    2. python .\tests\build_test_cases.py 或
    3. 通过添加配置使用Python调试器
{
      "name": "Python Debugger: Current File",
      "type": "debugpy",
      "request": "launch",
      "program": "${workspaceFolder}/tests/build_test_cases.py",
      "console": "integratedTerminal",
      "env": {
        "PYTHONPATH": "${workspaceFolder}/app"
      }
    },