OpenSource-Hub

knowledge-catalog

その他

GoogleCloudPlatform/knowledge-catalog

AIメタデータ管理のためのGoogle Cloud Knowledge Catalogのツールとサンプル。

概要

このリポジトリは、Google Cloud Knowledge Catalog(旧Dataplex)の機能を紹介するツール、エージェント、およびサンプルを提供します。AIナレッジグラフを活用した、構造化データおよび非構造化データのコンテキスト管理、エンリッチメント、検索ソリューションをユーザーが構築できるよう支援します。

README プレビュー

# Knowledge Catalog\n\n[Knowledge Catalog](https://cloud.google.com/products/knowledge-catalog) (formerly Dataplex), is an AI-powered data catalog and metadata management platform. It provides a dynamic knowledge graph of all your data, structured and unstructured, to provide semantics and business context to AI agents\n\nThis repository features tools, agents, and samples that demonstrate Knowledge Catalog features, and building context management, enrichment and retrieval solutions.\n\n\n## Getting Started\n\n[](https://console.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fknowledge-catalog.git)\n\n\n## Contributing\n\nSee the contributing [instructions](CONTRIBUTING.md) to get started contributed.\n\n\n## License\n\nAll solutions within this repository are provided under the [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) license. Please see [LICENSE](LICENSE.md) for more detailed terms and conditions.\n\n\n## Disclaimer\n\nThis repository and its contents are not an official Google product.\n

FAQ (5)

トラブル対応
`kcmd init` が 403 で失敗した場合でも、終了コード 0 で終了するのはなぜですか?

これは、src/tool/main.ts が commands.init() から返された終了コードを破棄していることが原因です。await commands.init(options); を次のように置き換えてください:

const exitCode = await commands.init(options);
process.exit(exitCode);

これは、pull と push がすでに終了コードを処理している方法と同じです。修正後は、Error: failed to create entry group ...: 403 のような失敗がステータス 1 で終了するため、kcmd init && kcmd push のような CI コマンドは続行せずに停止します。修正を含むリリースに更新するか、上記のパッチを適用してください。

参照 Issue #310
トラブル対応
mdcode のシナリオテストは、`contains` アサーションが間違っていてもパスするのはなぜですか?

tests/libts/scenarios.ts のアサーションランナーは、素の文字列または contains キーを持つオブジェクトしか処理しません。しかし、リストとして記述された YAML エントリは配列としてパースされます(例: [{ contains: "..." }])。配列はオブジェクトのチェックを満たさないため、contains アサーションはスキップされ、fs.existsSync のみが実行されます。

暫定的な回避策: アサーションをリストではなくマッピングとして記述してください。

catalog/e1.yaml:
  contains: "name: e1"

恒久的な修正: tests/libts/scenarios.ts を更新して配列を処理できるようにします。例えば Array.isArray(condition) 分岐を追加し、含まれる各アサーションを実行します。その後、以下を実行します:

npm test

一時的に不可能な期待値を設定して、修正を確認してください。テストは成功するのではなく、失敗するようになるはずです。これらのチェックを有効にすると、既存の誤った期待値も露呈します。たとえば pull_bq.yaml は実際の値が name: p.d/t1 であるのに name: p.d.t1 を期待しています。これらのフィクスチャの期待値は別途修正する必要があります。

参照 Issue #306
トラブル対応
なぜ `kcmd push --validate-only` を実行しても entryGroup、bq-dataset、kb スコープのカタログエントリが書き込まれてしまうのですか?

これは CatalogSync.push のバグが原因です。このメソッドは validateOnly(および force)を受け付けますが、セマンティックモデル以外のスコープではこれらを読み取りません。そのため、kcmd push --validate-only は entryGroup、bq-dataset、kb の各スコープで依然としてエントリを作成・更新し、終了コード 0 で終了します。修正「honor --validate-only in CatalogSync.push on non-semantic scopes」を含むリリースにアップグレードするか、そのパッチを適用してください。影響を受けるバージョンでは、これらのスコープに対して --validate-only を安全なドライランとして扱わないでください。パッチが適用されるまでは、スクラッチカタログまたは読み取り専用の認証情報を使用してください。このフラグは、セマンティックモデルのスコープではすでに正しく動作しています。

参照 Issue #309
トラブル対応
`kcmd push --target` 実行時に発生する "(target ?? DEFAULT_TARGET).toLowerCase is not a function" エラーの修正方法

フラグを単独で使用するのではなく、有効なターゲット値を渡してください:

kcmd push --target <target>

または、--target を省略してデフォルトのターゲットを使用します:

kcmd push

このエラーは、CLI パーサーが値のない --target に対してブール値 true を返し、その後 resolveTargets() がそれに対して .toLowerCase() を呼び出すために発生します。この問題は mdcode issue #311 の PR で修正されています。適切なバリデーション/エラーハンドリングを行うには、その修正を含むリリースにアップグレードしてください。

参照 Issue #311
トラブル対応
OKF viewer で /concepts/b.md のようなバンドル相対の絶対リンクのグラフエッジが欠落する問題を修正するにはどうすればよいですか?

これは、okf/src/reference_agent/viewer/generator.py の _extract_links が、/ で始まるすべてのターゲットをスキップしていることが原因です。こうしたパスはバンドル内の内部相対リンクであるにもかかわらずスキップされます。回避策としては、./b.md のような相対リンクを使用してください。これらは正しくエッジを生成します。ビューアを修正するには、先頭がスラッシュのターゲットをスキップするのをやめ、bundle_root を基準に解決してください:

if "://" in target:
    continue
if target.startswith("/"):
    resolved = (bundle_root / target.lstrip("/")).resolve()
else:
    resolved = (doc_dir / target).resolve()

bundle_root が _extract_links 内で利用できることを確認し、必要に応じて関数に渡してください。"://" のチェックは引き続き外部 URL を除外します。

参照 Issue #274