في هذا المقال سنقوم بإنشاء لتوصيات المنتجات باستخدام التعديلات والتعديلات التكاملية. يجعل من السهل إنشاء وتعزيز الخرائط المعرفة مع تحديثات مصدر مستمر. knowledge graph CocoIndex طريقة لتنظيم قوائم المنتجات في هيكل منطقي ومتعدد؛ يمكن العثور على تفسير مفصل للغاية في الممارسة، إنها مشكلة معقدة: يمكن أن يكون المنتج جزءًا من فئة متعددة، ويمكن أن يكون فئة من الأبوين متعددة. Product taxonomy i هنا وسوف نستخدم LLM لإزالة قائمة التعديلات من وصفات المنتج. وسوف نستخدم أيضًا LLM لإنتاج قائمة التعديلات التكاملية لكل منتج - على سبيل المثال، عندما يشتري شخص ما نصيحة، قد يشتري أيضًا نصيب كمنتج كمنتج التكامل. يتم توفير رمز المصدر في . CocoIndex أمثلة - product_taxonomy نحن نتحسن دائمًا، ونقدم المزيد من الميزات والموضوعات قريبًا. starring our . GitHub Repo GitHub Repo متطلبات تثبيت PostgreSQL. CocoIndex يستخدم PostgreSQL داخليًا لتشخيص متزايد. تثبيت Neo4j، قاعدة بيانات الخرائط. إعداد مفتاح OpenAI API الخاص بك. بدلاً من ذلك، يمكنك التبديل إلى Ollama، الذي يقوم بتشغيل نموذج LLM على المستوى المحلي. الوثائق يمكنك قراءة وثيقة CocoIndex الرسمية لأهداف جدول العقارات . هنا تدفق البيانات لإنشاء جدول المعرفة نظرة عامة The core flow is about . 100 صفحة من الكود Python سوف نقوم بإعلان تدفق البيانات إنشاء منتجات (في JSON) for each product, parse JSON map & clean up data extract taxonomy from the mapped data جمع البيانات إرسال البيانات إلى neo4j إدخال الملفات كمصدر @cocoindex.flow_def(name="StoreProduct") def store_product_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope): data_scope["products"] = flow_builder.add_source( cocoindex.sources.LocalFile(path="products", included_patterns=["*.json"]), refresh_interval=datetime.timedelta(seconds=5)) هنا إنشاء A . . وهذا هو المفتاح لـ KTable. flow_builder.add_source كتيبة filename إضافة جمعيات البيانات Add collectors at the root scope to collect the product, taxonomy and complementary taxonomy. product_node = data_scope.add_collector() product_taxonomy = data_scope.add_collector() product_complementary_taxonomy = data_scope.add_collector() عملية كل منتج سنقوم بتحليل ملف JSON لكل منتج، ونعمل على تحويل البيانات إلى النماذج التي نحتاجها لإجراءها في النهاية. مكتبة البيانات @cocoindex.op.function(behavior_version=2) def extract_product_info(product: cocoindex.typing.Json, filename: str) -> ProductInfo: return ProductInfo( id=f"{filename.removesuffix('.json')}", url=product["source"], title=product["title"], price=float(product["price"].lstrip("$").replace(",", "")), detail=Template(PRODUCT_TEMPLATE).render(**product), ) هنا نحن نحدد وظيفة لتعديل البيانات، على سبيل المثال، إزالة المجال ID الصفحة الرئيسية -> عنوان إزالة مساحة السعر إنتاج سلسلة تقييم لبيانات المنتج بناء على جميع المجالات (لماذا LLM استخراج التقييم والتقييم التكميلي التكميلي، ونحن نجد أن التقييم يعمل بشكل أفضل كناية ل LLM). Flow داخل تدفق ، نحن نلجأ إلى تحويل خرائط البيانات لإجراء كل منتج JSON. with data_scope["products"].row() as product: data = (product["content"] .transform(cocoindex.functions.ParseJson(), language="json") .transform(extract_product_info, filename=product["filename"])) product_node.collect(id=data["id"], url=data["url"], title=data["title"], price=data["price"]) يتم تحويل() إلى ملف JSON. التغيير الثاني() يقوم بتحليل البيانات المحددة. We collect the fields we need for the product node in Neo4j. استخراج السياسات والسياسات التكاملية باستخدام LLM تعريف التصنيف المنتج نظرًا لأننا نستخدم LLM لإخراج تصنيف المنتج، ونحن بحاجة إلى توفير تعليم مفصل على مستوى الفصل الدراسي. @dataclasses.dataclass class ProductTaxonomy: """ Taxonomy for the product. A taxonomy is a concise noun (or short noun phrase), based on its core functionality, without specific details such as branding, style, etc. Always use the most common words in US English. Use lowercase without punctuation, unless it's a proper noun or acronym. A product may have multiple taxonomies. Avoid large categories like "office supplies" or "electronics". Use specific ones, like "pen" or "printer". """ name: str تحديد معلومات التكتيك المنتج في الأساس ، نريد استخراج جميع التعديلات المحتملة للمنتج ، وتفكير في ما هي المنتجات الأخرى التي من المرجح شراء مع المنتج الحالي. @dataclasses.dataclass class ProductTaxonomyInfo: """ Taxonomy information for the product. Fields: - taxonomies: Taxonomies for the current product. - complementary_taxonomies: Think about when customers buy this product, what else they might need as complementary products. Put labels for these complentary products. """ taxonomies: list[ProductTaxonomy] complementary_taxonomies: list[ProductTaxonomy] بالنسبة إلى كل منتج ، نريد بعض النظرة على التعديلات والتعديلات التكاملية ، ويمكننا استخدام ذلك كبوحة لتحديد المنتج ذات الصلة باستخدام شاشة المعرفة. LLM استخراج وفي النهاية سوف نستخدم إزالة التعديلات والتعديلات التكاملية من التفاصيل على المنتج. cocoindex.functions.ExtractByLlm taxonomy = data["detail"].transform(cocoindex.functions.ExtractByLlm( llm_spec=cocoindex.LlmSpec( api_type=cocoindex.LlmApiType.OPENAI, model="gpt-4.1"), output_type=ProductTaxonomyInfo)) على سبيل المثال، LLM يأخذ وصف ، وتختار التعديلات التكتيكية لتكون وفي الوقت نفسه، فإنّه يشير إلى أنّ الناس يشتريون قد تكون مهتمًا أيضاً كما هو الحال مع التعديلات الضريبية. كيلوب Pen كيلوب Pen كيلوب Pen الكتب وسيتم جمع التعديلات والتعديلات المشتركة إلى المشترك. with taxonomy['taxonomies'].row() as t: product_taxonomy.collect(id=cocoindex.GeneratedField.UUID, product_id=data["id"], taxonomy=t["name"]) with taxonomy['complementary_taxonomies'].row() as t: product_complementary_taxonomy.collect(id=cocoindex.GeneratedField.UUID, product_id=data["id"], taxonomy=t["name"]) بناء المعرفة Graph الفكرة الأساسية كل القنوات ل Neo4j تحتاج إلى اثنين من الأشياء: العلامة التجارية: العلامة التجارية: العلامة التجارية: العلامة التجارية: العلامة التجارية: العلامة التجارية: العلامة التجارية مجلد مفتاح الرئيسي: المجلد الذي يحدد بوضوح الضوء، على سبيل المثال، ID للضوء المنتج. يستخدم CocoIndex مجال المفتاح الرئيسي للتوافق على المفاتيح وتقسيمها.إذا كان لديك عدة المفاتيح مع نفس المفتاح الرئيسي، يحافظ CocoIndex على واحد فقط منه. هناك طرق ثانية لتحديد الأقراص: عندما يكون لديك مجموعات فقط للطرف، يمكنك تصديرها مباشرة إلى Neo4j. على سبيل المثال المنتج. عندما يكون لديك مجموعة من العلاقات التي تتصل إلى القفص، يمكنك كتابة القفص من المجالات المختارة في مجموعة العلاقات. مثلاً ، product_taxonomy.collect(id=cocoindex.GeneratedField.UUID, product_id=data["id"], taxonomy=t["name"]) يتم جمع علاقة ، ويتم إنشاء ناقل التعديلات من علاقة. تحديث Neo4j: conn_spec = cocoindex.add_auth_entry( "Neo4jConnection", cocoindex.storages.Neo4jConnection( uri="bolt://localhost:7687", user="neo4j", password="cocoindex", )) التصدير أندرويد Neo4J Product المنتج product_node.export( "product_node", cocoindex.storages.Neo4j( connection=conn_spec, mapping=cocoindex.storages.Nodes(label="Product") ), primary_key_fields=["id"], ) هذا يتصدى لنظام Neo4j مع العلامة من من جمعية Product product_node ويقول Neo4j Node label Product. يحدد id كقطرة مفتاح الرئيسي. يتم نقل جميع المجالات من product_node collector إلى Neo4j القنوات مع علامة المنتج. التصدير أندرويد Neo4J Taxonomy Taxonomy ليس لدينا جمعيات صريحة لل الأوراق: هي جزء من و يتم جمع المشترين والمناطق أثناء استخراج التعديلات. Taxonomy product_taxonomy product_complementary_taxonomy لتصديرها كأنماط Neo4j ، يجب أن نقول أولاً نانسي Taxonomy flow_builder.declare( cocoindex.storages.Neo4jDeclaration( connection=conn_spec, nodes_label="Taxonomy", primary_key_fields=["value"], ) ) وبالتالي، سيتم إنتاج كيفية التعامل مع Neo4j product_taxonomy product_taxonomy.export( "product_taxonomy", cocoindex.storages.Neo4j( connection=conn_spec, mapping=cocoindex.storages.Relationships( rel_type="PRODUCT_TAXONOMY", source=cocoindex.storages.NodeFromFields( label="Product", fields=[ cocoindex.storages.TargetFieldMapping( source="product_id", target="id"), ] ), target=cocoindex.storages.NodeFromFields( label="Taxonomy", fields=[ cocoindex.storages.TargetFieldMapping( source="taxonomy", target="value"), ] ), ), ), primary_key_fields=["id"], ) وبالتالي، يمكننا استيراد كيفية التعامل مع Neo4j product_complementary_taxonomy product_complementary_taxonomy.export( "product_complementary_taxonomy", cocoindex.storages.Neo4j( connection=conn_spec, mapping=cocoindex.storages.Relationships( rel_type="PRODUCT_COMPLEMENTARY_TAXONOMY", source=cocoindex.storages.NodeFromFields( label="Product", fields=[ cocoindex.storages.TargetFieldMapping( source="product_id", target="id"), ] ), target=cocoindex.storages.NodeFromFields( label="Taxonomy", fields=[ cocoindex.storages.TargetFieldMapping( source="taxonomy", target="value"), ] ), ), ), primary_key_fields=["id"], ) ذاك تعريف كيفية تشكيل علاقات في Neo4j. cocoindex.storages.Relationships في علاقة ، هناك: نقطة مصدر و نقطة الهدف. العلاقة التي تتواصل مع مصدر وهدف. يرجى ملاحظة أن العلاقات المختلفة قد تشترك في نفس مصدر وهدف. أضف إلى هذه الأماكن من الكاتبة والإنتاجية نانسي NodeFromFields entity_relationship Taxonomy الوظيفة الرئيسية في النهاية ، يقوم الوظيفة الرئيسيّة لتدفق إعادة تشكيل تدفق CocoIndex وتشغيلها. @cocoindex.main_fn() def _run(): pass if __name__ == "__main__": load_dotenv(override=True) _run() البحث والتحقق من مؤشرك الآن أنت جاهز! Install the dependencies: pip install -e . Run following commands to setup and update the index. python main.py cocoindex setup python main.py cocoindex update You'll see the index updates state in the terminal. For example, you'll see the following output: documents: 9 added, 0 removed, 0 updated (Optional) I used CocoInsight to troubleshoot the index generation and understand the data lineage of the pipeline. It is in free beta now, you can give it a try. Run following command to start CocoInsight: python3 main.py cocoindex server -c https://cocoindex.io And then open the url . It just connects to your local CocoIndex server, with Zero pipeline data retention. https://cocoindex.io/cocoinsight انقر على Graph of Knowledge بعد إنشاء جدول المعرفة ، يمكنك استكشاف جدول المعرفة الذي تم إنشاؤه في Neo4j Browser. بالنسبة للبيئة التطويرية، يمكنك الانضمام إلى متصفح Neo4j باستخدام الوثائق: اسم المستخدم: Neo4j كلمة المرور: cocoindex التي يتم تحديدها مسبقًا في أندرويد لدينا compig.yaml. يمكنك فتحها في ، وبدء الاستفسار التالي Cypher للحصول على جميع العلاقات: http://localhost:7474 MATCH p=()-->() RETURN p دعمنا نحن نغير دائمًا، وأكثر الميزات والمثلات ستأتي قريبًا.إذا كنت تحب هذا المقال، يرجى إعطاءنا نجمة ⭐ في لمساعدتنا على النمو. GitHub Repo شكرا على القراءة!