پلاگین Pinecon

پلاگین Pinecone پیاده سازی های نمایه ساز و بازیابی را ارائه می دهد که از پایگاه داده برداری ابری Pinecone استفاده می کنند.

پیکربندی

برای استفاده از این افزونه، بسته pinecone را وارد کرده و pinecone.Init() را فراخوانی کنید:

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

این افزونه به کلید Pinecone API شما نیاز دارد. با انجام یکی از موارد زیر، افزونه را برای استفاده از کلید API خود پیکربندی کنید:

  • متغیر محیطی PINECONE_API_KEY را روی کلید API خود تنظیم کنید.

  • هنگامی که افزونه را مقداردهی اولیه می کنید، کلید API را مشخص کنید:

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

    با این حال، کلید API خود را مستقیماً در کد قرار ندهید! از این ویژگی فقط در ارتباط با سرویسی مانند 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() index را فراخوانی کنید و فهرستی از اسنادی را که می خواهید اضافه کنید به آن ارسال کنید:

if err := ai.Index(
	ctx,
	menuIndexer,
	ai.WithIndexerDocs(docChunks...)); 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() retriever را فراخوانی کنید و یک پرس و جوی متنی به آن ارسال کنید:

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

برای بحث کلی در مورد استفاده از نمایه سازها و رتریورها برای RAG، به صفحه تولید افزوده شده بازیابی مراجعه کنید.