359 قراءة٪ s
359 قراءة٪ s

بناء متجر ذكي: تمنح GPT علامات المنتجات الخاصة بك وتوقع ما سيبيع في المستقبل

بواسطة LJ11m2025/05/08
Read on Terminal Reader

طويل جدا؛ ليقرأ

CocoIndex يجعل من السهل إنشاء وتبني ورقات المعرفة مع تحديثات مصدر مستمر.تصنيف المنتجات هو وسيلة لتنظيم قوائم المنتجات في هيكل منطقي ومتعدد.تصنيف المعرفة يكتشف العلاقات بين المنتجات التي يمكن استخدامه بشكل متزايد لتوصيات المنتجات أو الإدماج.
featured image - بناء متجر ذكي: تمنح GPT علامات المنتجات الخاصة بك وتوقع ما سيبيع في المستقبل
LJ HackerNoon profile picture
0-item
1-item

في هذا المقال سنقوم بإنشاءknowledge graphلتوصيات المنتجات باستخدام التعديلات والتعديلات التكاملية.CocoIndexيجعل من السهل إنشاء وتعزيز الخرائط المعرفة مع تحديثات مصدر مستمر.


Product taxonomy iطريقة لتنظيم قوائم المنتجات في هيكل منطقي ومتعدد؛ يمكن العثور على تفسير مفصل للغايةهنافي الممارسة، إنها مشكلة معقدة: يمكن أن يكون المنتج جزءًا من فئة متعددة، ويمكن أن يكون فئة من الأبوين متعددة.


وسوف نستخدم LLM لإزالة قائمة التعديلات من وصفات المنتج. وسوف نستخدم أيضًا LLM لإنتاج قائمة التعديلات التكاملية لكل منتج - على سبيل المثال، عندما يشتري شخص ما نصيحة، قد يشتري أيضًا نصيب كمنتج كمنتج التكامل.


يتم توفير رمز المصدر فيCocoIndex أمثلة - product_taxonomy.


نحن نتحسن دائمًا، ونقدم المزيد من الميزات والموضوعات قريبًا.starringour GitHub Repo.

GitHub Repo

متطلبات

  • تثبيت PostgreSQL. CocoIndex يستخدم PostgreSQL داخليًا لتشخيص متزايد.
  • تثبيت Neo4j، قاعدة بيانات الخرائط.
  • إعداد مفتاح OpenAI API الخاص بك. بدلاً من ذلك، يمكنك التبديل إلى Ollama، الذي يقوم بتشغيل نموذج LLM على المستوى المحلي.

الوثائق

يمكنك قراءة وثيقة CocoIndex الرسمية لأهداف جدول العقاراتهنا.

تدفق البيانات لإنشاء جدول المعرفة

نظرة عامة

The core flow is about 100 صفحة من الكود Python.


سوف نقوم بإعلان تدفق البيانات

  1. إنشاء منتجات (في JSON)
  2. for each product,
    • parse JSON
    • map & clean up data
    • extract taxonomy from the mapped data
  3. جمع البيانات
  4. إرسال البيانات إلى 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))

هناflow_builder.add_sourceإنشاء Aكتيبة. .filenameوهذا هو المفتاح لـ KTable.


data ingestion

إضافة جمعيات البيانات

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"])
  1. يتم تحويل() إلى ملف JSON.
  2. التغيير الثاني() يقوم بتحليل البيانات المحددة.
  3. We collect the fields we need for the product node in Neo4j.


data mapping


استخراج السياسات والسياسات التكاملية باستخدام 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]


taxonomy and complementary taxonomy


بالنسبة إلى كل منتج ، نريد بعض النظرة على التعديلات والتعديلات التكاملية ، ويمكننا استخدام ذلك كبوحة لتحديد المنتج ذات الصلة باستخدام شاشة المعرفة.

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))


Taxonomy extraction


على سبيل المثال، 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 تحتاج إلى اثنين من الأشياء:

  1. العلامة التجارية: العلامة التجارية: العلامة التجارية: العلامة التجارية: العلامة التجارية: العلامة التجارية: العلامة التجارية
  2. مجلد مفتاح الرئيسي: المجلد الذي يحدد بوضوح الضوء، على سبيل المثال، ID للضوء المنتج.


يستخدم CocoIndex مجال المفتاح الرئيسي للتوافق على المفاتيح وتقسيمها.إذا كان لديك عدة المفاتيح مع نفس المفتاح الرئيسي، يحافظ CocoIndex على واحد فقط منه.



هناك طرق ثانية لتحديد الأقراص:

  1. عندما يكون لديك مجموعات فقط للطرف، يمكنك تصديرها مباشرة إلى Neo4j. على سبيل المثال المنتج.
  2. عندما يكون لديك مجموعة من العلاقات التي تتصل إلى القفص، يمكنك كتابة القفص من المجالات المختارة في مجموعة العلاقات.


مثلاً ،

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",
))

التصديرProductأندرويد Neo4J

المنتج
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 القنوات مع علامة المنتج.


التصديرTaxonomyأندرويد Neo4J

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"],
    )
)


وبالتالي، سيتم إنتاجproduct_taxonomyكيفية التعامل مع Neo4j

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"],
)


Export taxonomy


وبالتالي، يمكننا استيرادproduct_complementary_taxonomyكيفية التعامل مع Neo4j

    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"],
    )


Export comlementary taxonomy



ذاكcocoindex.storages.Relationshipsتعريف كيفية تشكيل علاقات في Neo4j.


في علاقة ، هناك:

  1. نقطة مصدر و نقطة الهدف.
  2. العلاقة التي تتواصل مع مصدر وهدف. يرجى ملاحظة أن العلاقات المختلفة قد تشترك في نفس مصدر وهدف.


NodeFromFieldsأضف إلى هذه الأماكن منentity_relationshipالكاتبة والإنتاجيةTaxonomyنانسي

الوظيفة الرئيسية

في النهاية ، يقوم الوظيفة الرئيسيّة لتدفق إعادة تشكيل تدفق CocoIndex وتشغيلها.

 @cocoindex.main_fn()
def _run():
    pass

if __name__ == "__main__":
    load_dotenv(override=True)
    _run()

البحث والتحقق من مؤشرك

الآن أنت جاهز!

  1. Install the dependencies:

    pip install -e .
    
  2. 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
    
  3. (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
    


  4. And then open the url https://cocoindex.io/cocoinsight. It just connects to your local CocoIndex server, with Zero pipeline data retention.


CocoInsight


انقر على Graph of Knowledge

بعد إنشاء جدول المعرفة ، يمكنك استكشاف جدول المعرفة الذي تم إنشاؤه في Neo4j Browser.


بالنسبة للبيئة التطويرية، يمكنك الانضمام إلى متصفح Neo4j باستخدام الوثائق:

  • اسم المستخدم: Neo4j
  • كلمة المرور: cocoindex التي يتم تحديدها مسبقًا في أندرويد لدينا compig.yaml.


يمكنك فتحها فيhttp://localhost:7474، وبدء الاستفسار التالي Cypher للحصول على جميع العلاقات:

MATCH p=()-->() RETURN p


Knowledge Graph


دعمنا

نحن نغير دائمًا، وأكثر الميزات والمثلات ستأتي قريبًا.إذا كنت تحب هذا المقال، يرجى إعطاءنا نجمة ⭐ فيGitHub Repoلمساعدتنا على النمو.


شكرا على القراءة!

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks