Bu blogda, bir Taksonomi ve ek taksonomi kullanılarak ürün önerileri için. sürekli kaynak güncellemeleri ile bilgi grafikleri oluşturmak ve sürdürmek kolaylaştırır. knowledge graph CocoIndex Hakkında Ürün kataloglarını mantıksal ve hijerarşik bir yapıda organize etmenin bir yolu; büyük bir ayrıntılı açıklama bulunabilir. Uygulamada, bu karmaşık bir sorun: bir ürün birden fazla kategoriye ait olabilir ve bir kategori birden fazla ebeveyn olabilir. Product taxonomy i burda Ürün açıklamalarından taksonomların bir listesini çıkarmak için LLM'yi kullanacağız. ayrıca, her ürün için tamamlayıcı taksonomların bir listesini oluşturmak için LLM'yi kullanacağız - örneğin, birisi bir not defteri satın aldığında, ek bir ürün olarak bir kalem satın alabilirler. Ürün önerileri veya etiketleme için daha da kullanılabilecek ürünler arasındaki ilişkileri keşfetmek için Bilgi Grafiği kullanacağız. Kaynak kodu mevcuttur . CocoIndex Örnekleri - product_taxonomy Sürekli iyileştirme yapıyoruz ve daha fazla özellik ve örnek yakında geliyor. starring our . GitHub Repo Hakkında GitHub Repo Hakkında Ön koşullar CocoIndex, PostgreSQL'i içsel olarak arttırıcı işlemler için kullanır. Neo4j, bir grafik veritabanı kurun. Alternatif olarak, LLM modellerini yerel olarak çalıştıran Ollama'ya geçebilirsiniz. Belgelendirme Property Graph Targets için resmi CocoIndex Dokümantasyonunu okuyabilirsiniz . burda Bilgi Grafiği oluşturmak için veri akışı genel bakış Nükleer akım yaklaşık . Python kodunun 100 satırları Bir veri akışı ilan edeceğiz Ürün Yorumları (JSON) for each product, parse JSON map & clean up data extract taxonomy from the mapped data verileri toplamak Neo4j'e veri aktarımı Kaynak olarak belgeleri ekle @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)) Burada yaratır a ve . Bu da anahtarın anahtarıdır. flow_builder.add_source Çekiliş filename Data Collectors ekleme Ürün, taksonomi ve ek taksonomi toplamak için kök kapsamına koleksiyoner ekleyin. product_node = data_scope.add_collector() product_taxonomy = data_scope.add_collector() product_complementary_taxonomy = data_scope.add_collector() Her ürünün işlemi Her ürün için JSON dosyasını analiz edeceğiz ve verileri aşağıdaki işleme için ihtiyacımız olan biçime dönüştürüyoruz. Bilgi Haritası @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), ) Burada bir veri haritası işlevini tanımlıyoruz, örneğin, id alanını temizle Etiket arşivi: title Fiyat alanını temizle Tüm alanlara dayanan ürün ayrıntıları için bir markdown dizisi oluşturun (LLM'nin taksonomi ve taksonomi ayrıntılarını çıkarmak için, markdown'un LLM için bağlam olarak en iyi çalıştığını düşünüyoruz). akış Akış içinde, her ürün JSON'u işlemek için veri haritalama dönüşümünü takıyoruz. 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"]) İlk transform() JSON dosyasını analiz eder. İkinci transform() tanımlanmış veri haritasını gerçekleştirir. Neo4j'deki ürün düğmesine ihtiyacımız olan alanları topluyoruz. LLM kullanarak taksonomi ve tamamlayıcı taksonomi çıkarın Ürün Taksonomi Tanımları LLM'yi ürün taksonomisini çıkarmak için kullandığımızdan, ders düzeyinde ayrıntılı bir talimat vermek zorundayız. @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 Ürün Taksonomi Bilgileri Temel olarak, bir ürünün tüm olası taksonomlarını çıkarmak ve mevcut ürünün yanı sıra hangi diğer ürünlerin satın alınması muhtemel olduğunu düşünmek istiyoruz. @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] Her bir ürünün taksonomisi ve taksonomisi hakkında biraz bilgi istiyoruz ve bunu bilgi grafiklerini kullanarak ilgili ürünü bulmak için köprü olarak kullanabiliriz. LLM Ekstraksiyon Son olarak kullanacağız Ürün detayından taksonomi ve ek taksonomi çıkarmak için. 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)) Örneğin, LLM açıklamasını alır Taksonomik olarak ortaya çıkmak için Öte yandan, insanlar satın aldığında Onlar da ilgilenebilir Taksonomik taksim olarak da bilinir. Gelen Pen Gelen Pen Gelen Pen Notebook Hakkında Ve daha sonra taksonomi ve ek taksonomi toplayıcıya toplayacağız. 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"]) Bilgi Grafiği Oluşturma Temel kavramlar Neo4j için tüm düğmelerin iki şeye ihtiyacı vardır: Etiket: Node türü. örneğin, Ürün, Taksonomi. Ana anahtar alanı: Düğmeyi benzersiz olarak tanımlayan alan. örneğin, Ürün düğmeleri için id. CocoIndex prim anahtar alanını kullanır ve düğmeleri eşleştirir ve bunları çifteleştirir. eğer aynı prim anahtarı olan çok sayıda düğmeye sahipseniz, CocoIndex bunlardan yalnızca birini saklar. Düğmeleri haritalamanın iki yolu vardır: Sadece düğmeye ait bir koleksiyoncu olduğunda, onu doğrudan Neo4j'e ihraç edebilirsiniz. örneğin Ürün. Düğmeye bağlanan ilişkiler için bir koleksiyoncu olduğunda, ilişki koleksiyoncusu'nda seçilen alanlardan düğmeleri haritada görebilirsiniz. bir düğme etiketini ve birincil anahtar alanını belirtmeniz gerekir. Örneğin, product_taxonomy.collect(id=cocoindex.GeneratedField.UUID, product_id=data["id"], taxonomy=t["name"]) Bir ilişki topluyor ve ilişkiden taksonomi düğmesi oluşturulur. Neo4j bağlantısı: conn_spec = cocoindex.add_auth_entry( "Neo4jConnection", cocoindex.storages.Neo4jConnection( uri="bolt://localhost:7687", user="neo4j", password="cocoindex", )) ihracat Neo4j Hakkında Ürün Ürün product_node.export( "product_node", cocoindex.storages.Neo4j( connection=conn_spec, mapping=cocoindex.storages.Nodes(label="Product") ), primary_key_fields=["id"], ) Bu, etiketli Neo4j düğmeleri ihraç ediyor O’ndan Bir koleksiyoner. Product product_node Neo4j node etiket ürün ilan eder. prim anahtar alanı olarak id tanımlar. Ürün etiketli Neo4j düğmeleri için product_node collector alanından tüm alanları taşır. ihracat Neo4j Hakkında Taxonomy Taksonomik Açık bir koleksiyoncu yok Cevap: Bunlar birer parçadır ve Toplayıcılar ve alanlar taksonomik ekstraksiyon sırasında toplanır. Taxonomy product_taxonomy product_complementary_taxonomy Bunları Neo4j düğmeleri olarak ihraç etmek için, önce ilan etmeliyiz Nöbetçiler Taxonomy flow_builder.declare( cocoindex.storages.Neo4jDeclaration( connection=conn_spec, nodes_label="Taxonomy", primary_key_fields=["value"], ) ) Sonrasında ise ihracat Neo4j ile ilgili yorumlar 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"], ) Aynı şekilde ihracat yapabiliriz. Neo4j ile ilgili yorumlar 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"], ) ve Neo4j’de ilişkileri haritaya nasıl koyacağınızı açıklıyor. cocoindex.storages.Relationships Bir ilişkide şunlar vardır: Bir kaynak düğmesi ve bir hedef düğmesi. Kaynağı ve hedefi birleştiren bir ilişki. Farklı ilişkilerin aynı kaynağı ve hedefi düğmeleri paylaşabileceğini unutmayın. Bu alanlardan alınan Koleksiyoncu ve yaratıcı Nöbetçiler NodeFromFields entity_relationship Taxonomy Ana fonksiyon Son olarak, akış için ana fonksiyon, CocoIndex akışını başlatır ve çalıştırır. @cocoindex.main_fn() def _run(): pass if __name__ == "__main__": load_dotenv(override=True) _run() indeksleri denetleyin ve test edin Artık hepiniz hazırsınız! 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 Bilgi Grafiği İnceleme Bilgi grafiğini oluşturduktan sonra, Neo4j Browser'da oluşturduğunuz bilgi grafiğini keşfedebilirsiniz. Dev ortamında, Neo4j tarayıcıya kimlik bilgilerini kullanarak bağlanabilirsiniz: Kullanıcı Adı: Neo4j şifre: cocoindex bizim docker compose config.yaml önceden yapılandırılmıştır. Onu açabilirsin , ve tüm ilişkileri almak için aşağıdaki Cypher sorgusunu çalıştırın: http://localhost:7474 MATCH p=()-->() RETURN p Bizi Destek Biz sürekli iyileştirme yapıyoruz ve daha fazla özellik ve örnek yakında geliyor. eğer bu makaleyi seviyorsanız, lütfen bize bir yıldız verin ⭐ Bize büyümemize yardımcı olmak için. GitHub Repo Hakkında Okuduğunuz için teşekkürler!