ウェブサイトをグラフ知識ベースとAIコパイロットに変える方法:実践的なステップバイステップガイド ウェブサイトのコンテンツをグラフ知識ベースとAIコパイロットに変換する手順を解説します。 ビジネスは膨大な情報を保有していますが、特定の答えを探すのはしばしば面倒で非効率的です。この問題を解決するために、ウェブサイトのコンテンツを構造化し、ユーザーとの対話に適したAIコパイロットを構築する方法を紹介します。本チュートリアルでは、オープンソースツールを使用して、任意のウェブサイトのコンテンツをグラフ知識ベースとAIコパイロットに変換する手順を詳しく解説します。 ウェブサイトからコンテンツをスクレイピング Crawl4aiを使用して、ウェブサイトから構造化された商品情報を抽出します。 BFS(幅優先探索)を使用して、全ページから一貫して情報を収集します。 グラフ知識ベースを構築 抽出されたデータをR2R(Reason to Retrieve)に取り込み、知識グラフを自動生成します。 R2RのCo-Pilot UIを使用して、データをインタラクティブにクエリできます。 実際のコード例と解説 Crawl4aiの設定とスクレイピングの手順を詳細に説明します。 R2Rのインストールと使用方法を解説します。 結果の確認 抽出されたデータのJSONファイルを作成し、その内容を確認します。 R2Rを使用して、エンティティとリレーションシップをリストします。 このガイドにより、ウェブサイトの静的なコンテンツを動的な、クエリ可能なグラフ知識ベースに変換し、顧客サポートチャットボットや内部知識管理システムなど、さまざまな用途で活用できるようになります。
静的ウェブサイトのコンテンツをグラフベースのKnowledge BaseとCo-Pilotに変換する手法 現代のビジネスにおいて、情報を効率的に提供することは非常に重要です。しかしながら、大量の情報を持つウェブサイトから特定の答えを見つけ出すことは、多くの場合、困難で非効率的です。このような課題を解決するために、「グラフ知識ベース」(Graph Knowledge Base)と「Co-Pilot UI」を組み合わせて利用することができます。本記事では、既存の静的ウェブサイトのコンテンツを、使いやすいAI Co-Pilotに変換する手順を解説します。 使用するツール 1. Crawl4ai Crawl4aiは、AIワークフローのために特化して設計されたオープンソースのウェブクローリングおよびスクレイピングフレームワークです。従来のスクレイパとは異なり、大規模言語モデル(LLM)が効率的に使用できるように、ウェブサイトのコンテンツを抽出・構造化することができます。重要な特徴として、深さ制御、URLパターンフィルタリング、コンテンツ処理などが挙げられます。 2. R2R: Reason to Retrieve R2Rは、高度な生産可能なAIリトリィバルプラットフォームで、Agentic Retrieval-Augmented Generation (RAG) を提供します。RESTful APIを採用しているため、多種多様なコンテンツ(テキスト、PDF、JSON、画像、音声など)を取り扱うことができます。また、ハイブリッド検索機能、設定可能なGraphRAG、ユーザー/ドキュメント管理機能を備えています。直感的なUIにより、ドキュメントの取り込み、管理、Chat形式での問い合わせを行うことができる包括的なシステムです。 アーキテクチャ概要 1. ウェブサイトからのコンテンツ抽出 最初のステップは、Crawl4aiを使用してウェブサイトから構造化されたコンテンツを抽出することです。この例では、「Books to Scrape」というスクレイピング練習用のウェブサイトから製品詳細(書籍名、価格、カテゴリなど)を抽出します。Breadth-First Search (BFS) クロール戦略を用することで、ウェブサイトの階層をシステマティックに遍歴し、個々の製品詳細を一页ずつ取得します。 2. 構造化されたコンテンツのJSON保存 抽出・構造化されたデータをリスト形式で保管し、最終的にJSONファイルに保存します。これにより、グラフ知識ベースへの取り込みが容易になります。 ```python import getpass import os import asyncio from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, BrowserConfig, CacheMode, LLMConfig from crawl4ai.content_scraping_strategy import LXMLWebScrapingStrategy from crawl4ai.deep_crawling import BFSDeepCrawlStrategy from crawl4ai.deep_crawling.filters import FilterChain, URLPatternFilter, ContentTypeFilter from pydantic import BaseModel from crawl4ai.extraction_strategy import LLMExtractionStrategy import json from dotenv import load_dotenv load_dotenv() def _set_env(var: str): if not os.environ.get(var): os.environ[var] = getpass.getpass(f"{var}: ") _set_env("OPENAI_API_KEY") _set_env("GROQ_API_KEY") class ProductDetails(BaseModel): upc: str type: str price: str inventory_count: int class Product(BaseModel): title: str description: str details: ProductDetails extraction_strategy = LLMExtractionStrategy( llm_config = LLMConfig(provider="groq/deepseek-r1-distill-llama-70b", api_token=os.getenv('GROQ_API_KEY')), schema=Product.model_json_schema(), extraction_type="schema", instruction="Extract all product objects specified in the schema from the text.", chunk_token_threshold=1200, overlap_rate=0.1, apply_chunking=True, input_format="html", extra_args={"temperature": 0.1, "max_tokens": 1000}, verbose=True ) filter_chain = FilterChain([ URLPatternFilter(patterns=["catalogue"], reverse=False), URLPatternFilter(patterns=["category", "/books/"], reverse=True), ContentTypeFilter(allowed_types=["text/html"]) ]) config = CrawlerRunConfig( deep_crawl_strategy=BFSDeepCrawlStrategy(max_depth=2, include_external=False, max_pages=2, filter_chain=filter_chain), cache_mode=CacheMode.BYPASS, extraction_strategy=extraction_strategy, scraping_strategy=LXMLWebScrapingStrategy(), verbose=True ) async def run_advanced_crawler(): outputs = [] browser_cfg = BrowserConfig(headless=True) async with AsyncWebCrawler(config=browser_cfg) as crawler: results = await crawler.arun("https://books.toscrape.com/index.html", config=config) for result in results: if result.success: url = result.url try: data = json.loads(result.extracted_content) if isinstance(data, list) and len(data) > 0: if any(item.get('error', False) for item in data if isinstance(item, dict)): error_items = [item for item in data if isinstance(item, dict) and item.get('error', False)] error_content = error_items[0].get('content', 'Unknown error') if error_items else 'Unknown error' print(f"Error in extracted data from {url}: {error_content}") continue # Skip to the next URL print(f"Successfully extracted data from {url}") extraction_strategy.show_usage() for item in data: if isinstance(item, dict): item['source_url'] = url outputs.extend(data) except json.JSONDecodeError: print(f"Error decoding JSON from {url}: {result.extracted_content}") else: print(f"Error crawling {url}: {result.error_message}") if outputs: output_file = "extracted_products.json" with open(output_file, 'w', encoding='utf-8') as f: json.dump(outputs, f, indent=4, ensure_ascii=False) print(f"Data for {len(outputs)} products saved to {output_file}") if name == "main": asyncio.run(run_advanced_crawler()) ``` このスクリプトでは、Crawl4aiを用いてBooks to Scrapeから製品情報を抽出し、それをJSON形式で保存します。 3. グラフ知識ベースの生成 次に、抽出されたデータをR2R(Reason to Retrieve)に取り込み、グラフ知識ベースとInteractive Co-Pilot UIを生成します。R2Rの公式インストールガイドに従い、Dockerを使用してフルインストールを行います。インストールが完了後、生成されたJSONデータをR2Rダッシュボードにアップロードします。R2Rは以下のようにエンティティとリレーションシップを抽出し、ベクトル埋め込みを作成します。 ```python from r2r import R2RClient client = R2RClient(base_url="http://localhost:7272") client.documents.create(file_path='./extracted_products.json') client.documents.list() ``` R2RのChat機能は、ウェブサイトからの情報を基に具体的な質問に答えることができます。たとえば、「A Light in the Attic の在庫数は?」と問い合わせたら、「22冊あります」と正確に回答します。 4. エンティティとリレーションシップのリスト化 R2Rを通じて、ドキュメントのIDを指定することでエンティティとリレーションシップのリストを見ることができます。これにより、ウェブサイトの内容に対する複雑なマルチホップ推論が可能になります。 python client.documents.list_entities(id='20021630-fe05-5c69-9b70-18a59bcd5a47') client.documents.list_relationships(id='20021630-fe05-5c69-9b70-18a59bcd5a47') これらのコマンドにより、各エンティティの詳細情報や関連性を確認できます。 結論 本記事では、既存の静的ウェブサイトのコンテンツをダイナミックで問い合わせ可能なグラフ知識ベースとAI Co-Pilotに変換する方法を示しました。Crawl4aiを使用して効率的に情報をスクレイピングし、R2Rによって自動的にグラフ知識ベースを生成することで、単純なキーワード検索を超えた複雑な推理が可能になりました。これにより、顧客サポートチャットボットや内部知識管理システムなどの高度なアプリケーションを構築できます。 業界関係者のコメント 「このアプローチにより、企業のウェブサイトから得られる情報を最大限に活用することが可能となりました。R2Rの高度な検索機能とCrawl4aiの柔軟なデータ抽出が、AIチャットボットの効果的な導入を支援します」と業界の専門家は述べています。 会社概要 Crawl4aiは、オープンソースコミュニティによって開発され、様々なウェブサイトからの構造化データ抽出を得意としています。R2Rは、Lightllmとの統合により強力なLLMへの接続を提供しており、生産に耐える堅牢なシステムです。
