المكوّن الإضافي Pinecone

يوفر المكوّن الإضافي Pinecone عمليات تنفيذ لكل من أداة الفهرسة والاسترداد التي تستخدم قاعدة بيانات متّجه السحابة الإلكترونية Pinecone.

الإعداد

لاستخدام هذا المكون الإضافي، قم باستيراد حزمة pinecone واستدعِ pinecone.Init():

import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
    return err
}

يتطلب المكوّن الإضافي مفتاح واجهة برمجة التطبيقات Pinecone. يمكنك ضبط المكوّن الإضافي لاستخدام مفتاح واجهة برمجة التطبيقات من خلال تنفيذ أحد الإجراءات التالية:

  • اضبط متغيّر بيئة PINECONE_API_KEY على مفتاح واجهة برمجة التطبيقات.

  • حدد مفتاح واجهة برمجة التطبيقات عند تهيئة المكون الإضافي:

    if err := pinecone.Init(ctx, pineconeAPIKey); err != nil {
      return err
    }
    

    مع ذلك، لا تضمِّن مفتاح واجهة برمجة التطبيقات مباشرةً في الرمز. استخدام هذه الميزة فقط مع خدمة مثل Cloud Secret Manager أو ما شابه ذلك.

الاستخدام

لإضافة مستندات إلى فهرس Pinecone، أنشئ أولاً تعريف فهرس اسم الفهرس ونموذج التضمين الذي تستخدمه:

menuIndexer, err := pinecone.DefineIndexer(ctx, pinecone.Config{
    IndexID:  "menu_data",                             // Your Pinecone index
    Embedder: googleai.Embedder("text-embedding-004"), // Embedding model of your choice
})
if err != nil {
    return err
}

يمكنك أيضًا اختياريًا تحديد المفتاح الذي يستخدمه Pinecone لبيانات المستند. (_content تلقائيًا).

بعد ذلك، يمكنك استدعاء طريقة Index() للفهرس، وتمريرها قائمة بالمستندات التي تريد إضافة:

if err := menuIndexer.Index(
    ctx,
    &ai.IndexerRequest{Documents: docChunks, Options: nil},
); err != nil {
    return err
}

وبالمثل، لاسترداد المستندات من فهرس، عليك أولاً إنشاء برنامج استرداد التعريف:

menuRetriever, err := pinecone.DefineRetriever(ctx, pinecone.Config{
    IndexID:  "menu_data",                             // Your Pinecone index
    Embedder: googleai.Embedder("text-embedding-004"), // Embedding model of your choice
})
if err != nil {
    return err
}

بعد ذلك، يمكنك استدعاء طريقة Retrieve() الخاصة بالمسترد، مع تمريره كاستعلام نصي:

resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
    Document: ai.DocumentFromText(userInput, nil),
    Options:  nil,
})
if err != nil {
    return err
}
menuInfo := resp.Documents

يمكنك الاطّلاع على صفحة الجيل المعزَّز من الاسترجاع للحصول على معلومات عامة. والمناقشة حول استخدام المفهرسات والمستردات لـ RAG.