Плагин Pinecone предоставляет реализации индексатора и средства извлечения, которые используют базу данных облачных векторов Pinecone .
Конфигурация
Чтобы использовать этот плагин, импортируйте пакет pinecone
и вызовите pinecone.Init()
:
import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
return err
}
Для плагина требуется ваш ключ API Pinecone. Настройте плагин для использования вашего ключа API, выполнив одно из следующих действий:
Установите для переменной среды
PINECONE_API_KEY
свой ключ API.Укажите ключ API при инициализации плагина:
if err := pinecone.Init(ctx, pineconeAPIKey); err != nil { return err }
Однако не встраивайте ключ API непосредственно в код! Используйте эту функцию только в сочетании с такой службой, как Cloud Secret Manager или аналогичной.
Использование
Чтобы добавить документы в индекс сосновой шишки, сначала создайте определение индекса, в котором указывается имя индекса и используемая модель внедрения:
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 := 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()
средства извлечения, передав ему текстовый запрос:
resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
Document: ai.DocumentFromText(userInput, nil),
Options: nil,
})
if err != nil {
return err
}
menuInfo := resp.Documents
См. страницу генерации с расширенным поиском для общего обсуждения использования индексаторов и ретриверов для RAG.