pgवेक्टर रिट्रीवर टेंप्लेट

अपने रिट्रीवर को लागू करने के लिए, PostgreSQL और pgvector का इस्तेमाल किया जा सकता है. इसका इस्तेमाल करें अपने डेटाबेस के साथ काम करने के लिए, इन उदाहरणों को शुरुआती पॉइंट के तौर पर देखें. स्कीमा चुनें.

हम Postgres सर्वर से कनेक्ट करने के लिए, database/sql का इस्तेमाल करते हैं. हालांकि, आपके पास अपनी पसंद की किसी अन्य क्लाइंट लाइब्रेरी का इस्तेमाल करने का विकल्प भी होता है.

func defineRetriever(db *sql.DB, embedder ai.Embedder) ai.Retriever {
        f
:= func(ctx context.Context, req *ai.RetrieverRequest) (*ai.RetrieverResponse, error) {
                eres
, err := ai.Embed(ctx, embedder, ai.WithEmbedDocs(req.Document))
               
if err != nil {
                       
return nil, err
               
}
                rows
, err := db.QueryContext(ctx, `
                        SELECT episode_id, season_number, chunk as content
                        FROM embeddings
                        WHERE show_id = $1
                        ORDER BY embedding <#> $2
                        LIMIT 2`
,
                        req
.Options, pgv.NewVector(eres.Embeddings[0].Embedding))
               
if err != nil {
                       
return nil, err
               
}
                defer rows
.Close()

                res
:= &ai.RetrieverResponse{}
               
for rows.Next() {
                       
var eid, sn int
                       
var content string
                       
if err := rows.Scan(&eid, &sn, &content); err != nil {
                               
return nil, err
                       
}
                        meta
:= map[string]any{
                               
"episode_id":    eid,
                               
"season_number": sn,
                       
}
                        doc
:= &ai.Document{
                               
Content:  []*ai.Part{ai.NewTextPart(content)},
                               
Metadata: meta,
                       
}
                        res
.Documents = append(res.Documents, doc)
               
}
               
if err := rows.Err(); err != nil {
                       
return nil, err
               
}
               
return res, nil
       
}
       
return ai.DefineRetriever(provider, "shows", f)
}

और यहां बताया गया है कि फ़्लो में रिट्रीवर का इस्तेमाल कैसे किया जाए:

retriever := defineRetriever(db, embedder)

type input
struct {
       
Question string
       
Show     string
}

genkit
.DefineFlow("askQuestion", func(ctx context.Context, in input) (string, error) {
        res
, err := ai.Retrieve(ctx, retriever,
                ai
.WithRetrieverOpts(in.Show),
                ai
.WithRetrieverText(in.Question))
       
if err != nil {
               
return "", err
       
}
       
for _, doc := range res.Documents {
                fmt
.Printf("%+v %q\n", doc.Metadata, doc.Content[0].Text)
       
}
       
// Use documents in RAG prompts.
       
return "", nil
})

Code-first framework for orchestrating, deploying, and monitoring generative AI workflows.

Aug 29, 2024 को अपडेट किया गया

Code-first framework for orchestrating, deploying, and monitoring generative AI workflows.

Nov 6, 2024 को अपडेट किया गया

Code-first framework for orchestrating, deploying, and monitoring generative AI workflows.

Oct 23, 2024 को अपडेट किया गया