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

Плагин 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.