Плагин сосновая шишка

Плагин Pinecone предоставляет реализации индексатора и средства извлечения, которые используют базу данных облачных векторов Pinecone .

Конфигурация

Чтобы использовать этот плагин, импортируйте пакет pinecone и вызовите pinecone.Init() :

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

Для плагина требуется ваш ключ API Pinecone. Настройте плагин для использования вашего ключа API, выполнив одно из следующих действий:

  • Установите для переменной среды PINECONE_API_KEY свой ключ API.

  • Укажите ключ API при инициализации плагина:

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

    Однако не встраивайте ключ API непосредственно в код! Используйте эту функцию только в сочетании с такой службой, как Cloud Secret Manager или аналогичной.

Использование

Чтобы добавить документы в индекс шишки, сначала создайте определение индекса, в котором указывается имя индекса и используемая модель внедрения:

menuIndexer, err := pinecone.DefineIndexer(ctx, g, pinecone.Config{
	IndexID:  "menu_data",                                           // Your Pinecone index
	Embedder: googlegenai.GoogleAIEmbedder(g, "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, g, pinecone.Config{
	IndexID:  "menu_data",                                           // Your Pinecone index
	Embedder: googlegenai.GoogleAIEmbedder(g, "text-embedding-004"), // Embedding model of your choice
})
if err != nil {
	return err
}

Затем вызовите метод Retrieve() средства извлечения, передав ему текстовый запрос:

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

См. страницу генерации с расширенным поиском для общего обсуждения использования индексаторов и ретриверов для RAG.