mcpField
S
semantic-search-cwicr

semantic-search-cwicr

github.com/datadrivenconstructionデータ・データベース375107 回インストール1 週間前に更新
リポジトリ

semantic-search-cwicr について

DDC CWICR の建設コストデータベースから、複数言語に対応したセマンティック検索で関連する施工項目を探すツールです。見積担当者やコスト見積もりワークフローを構築する開発者向けです。

主な機能

  1. 0126 言語でのセマンティック検索
  2. 028 つの国別基準とグローバル基準の検索
  3. 03カテゴリ絞り込みと類似度スコアの確認
  4. 04コスト見積もり用の項目データ取得

活用シーン

  1. 01自然言語で施工項目を検索
  2. 02BIM 要素にコスト項目を照合
  3. 03複数言語版から価格項目を検索

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction --skill semantic-search-cwicr

インストール後、Claude Code で/semantic-search-cwicrを入力して読み込まれたか確認します。

同梱ファイルclaw.jsoninstructions.md

詳細

DDC CWICR データベースのセマンティック検索

ビジネスケース

問題点

建設コストの見積もりでは、大規模なデータベースから関連する作業項目を探す必要があります。従来のキーワード検索では、次のような場合にうまく機能しません。

  • ユーザーが自然言語で作業を説明する
  • 地域や言語によって用語が異なる
  • 類似する作業項目で名称の付け方が異なる
解決策

DDC CWICR には、事前計算済みの埋め込み(BAAI/bge-m3、1024 次元)が用意されており、**8 つの国内データベース(78,228 項目)**に加え、30 市場のグローバルデータベースを対象に、26 言語で多言語セマンティック検索を実行できます。また、各国内データベースには PPP で再価格設定された 48 の市場カタログが含まれます。

ビジネス上の価値
  • 手動検索と比べて、作業項目の検索を90%高速化
  • 多言語対応:アラビア語、ブルガリア語、中国語、クロアチア語、チェコ語、デンマーク語、オランダ語、英語、フィンランド語、フランス語、ドイツ語、ヒンディー語、インドネシア語、イタリア語、日本語、韓国語、モンゴル語、ノルウェー語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、スペイン語、スウェーデン語、タイ語、トルコ語、ベトナム語
  • キーワードの一致だけでなく、意味的に類似する項目を見つけることで精度を向上

データの概要(2026)

国内データベース地域 ID項目数
トルコ(Birim Fiyat)TR_NATIONAL22,704
中国(Beijing Dinge + Bole)ZH_CHINA11,312
ブラジル(SINAPI)BR_NATIONAL9,723
スペイン(BCCA Andalucía)ES_ANDALUCIA6,453
イタリア(Prezzario Toscana)IT_TOSCANA5,836
ベトナム(Dinh Muc)VN_NATIONAL4,299
インドネシア(AHSP)ID_NATIONAL2,784
ギリシャ(GGDE)GR_NATIONAL2,647

各データベースには、95 列の CWICR マスタースキーマ(rate_code、rate_original_name、rate_final_name、rate_unit、total_cost_per_position、分類階層 collection/department/section/subsection/category、is_material/is_machine/is_labor フラグを含む resource_* の構成明細)に加え、26 言語版と 48 個の markets/*.csv カタログが含まれます。

最新のデータリリース:v0.4.0(リリースを参照)。

技術的な実装

前提条件
pip install qdrant-client pandas sentence-transformers
コレクション(2026)

ベクトルストアでは BAAI/bge-m3 を使用します(1 回のフォワードパスで 1024 次元の密ベクトル、スパースベクトル、ColBERT を生成、MIT ライセンス、100 以上の言語に対応)。本番環境のコレクション名は cwicr_{LANG}_v3 です(例:cwicr_tr_v3、cwicr_zh_v3)。VPS 規模のホストでは、ONNX-int8 版(gpahal/bge-m3-onnx-int8、約 700 MB)を使用します。

Python の実装
import pandas as pd
from qdrant_client import QdrantClient
from sentence_transformers import SentenceTransformer

class CWICRSemanticSearch:
    def __init__(self, host="localhost", port=6333, lang="en"):
        self.client = QdrantClient(host=host, port=port)
        self.collection = f"cwicr_{lang}_v3"
        self.model = SentenceTransformer("BAAI/bge-m3")

    def search_work_items(self, query, limit=10):
        vec = self.model.encode(query).tolist()
        hits = self.client.search(
            collection_name=self.collection,
            query_vector=vec,
            limit=limit,
        )
        return pd.DataFrame([{**h.payload, "score": h.score} for h in hits])

    def search_by_category(self, query, category, limit=10):
        vec = self.model.encode(query).tolist()
        hits = self.client.search(
            collection_name=self.collection,
            query_vector=vec,
            query_filter={"must": [{"key": "category", "match": {"value": category}}]},
            limit=limit,
        )
        return pd.DataFrame([{**h.payload, "score": h.score} for h in hits])
OpenConstructionERP 内部での利用

このプラットフォームの costs モジュールでは、すでにセマンティックマッチングが利用できます。

  • POST /api/v1/costs/suggest-for-element — BIM 要素の内容に対して、コスト項目を順位付けします。
  • /qdrant-search — クエリに対して多言語で候補を検索します。
  • SQL フォールバック(GET /api/v1/costs/?q=...)は、Qdrant がなくても動作します。

データベーススキーマ(95 列のマスター)

ペイロードに含まれる主なフィールド:

フィールド型説明
rate_codestring一意の作業項目コード(例:15.115.1008)
rate_original_namestringソース言語の説明
rate_final_namestring表示用または翻訳済みの説明
rate_unitstringm²、m³、m、kg、Ad、Sa…
total_cost_per_positionfloat単位あたりの合計価格
total_resource_cost_per_positionfloatリソースの合計(マークアップ前)
collection_name / department_name / section_name / subsection_namestring分類階層
category_typestring正規化されたカテゴリ(例:CONSTRUCTION WORK)
resource_name / resource_quantity / resource_price_per_unit_current / resource_costmixed構成明細
is_material / is_machine / is_laborbool構成要素の種類を示すフラグ

使用例

基本的な検索
search = CWICRSemanticSearch(lang="tr")

# Natural language query
results = search.search_work_items("tuğla duvar örülmesi")
print(results[["rate_code", "rate_original_name", "total_cost_per_position", "score"]])
コスト見積もり
# Find work items for foundation work
foundation = search.search_work_items("reinforced concrete foundation", limit=20)

# Estimate with quantities (BIM takeoff)
quantities = {"15.115.1008": 150.0}  # m³
total = sum(quantities[c] * row["total_cost_per_position"]
            for _, row in foundation.iterrows() if row["rate_code"] in quantities)
print(f"Estimated: {total:,.2f} TRY")

ベストプラクティス

  1. 具体的なクエリを使用する - 「鉄筋コンクリートスラブ 200mm」は「コンクリート」よりも適切です
  2. カテゴリで絞り込む - 関連する作業種別に結果を絞り込みます
  3. 類似度スコアを確認する - スコアが低い場合は手動で検証する必要があります
  4. QTO と組み合わせる - BIM の数量を使用して見積もりを自動化します
  5. 係数の基準に注意する - ベトナムとインドネシアには価格がありません(単価は 0)。市場価格のリソースシートを使って価格を設定します
  6. ソース列を確認する - rate_original_name にはソースの表記が記録され、翻訳は rate_final_name に記録されています

リソース

コメント