Firebase Genkit

Genkit הוא מסגרת שמיועדת לעזור לכם לפתח אפליקציות ותכונות מבוססות-AI. יש בו ספריות קוד פתוח ל-Node.js ול-Go, וגם כלים למפתחים לבדיקה ולניפוי באגים.

המאמר הזה עוסק ב-Genkit ל-Node.js. אם אתם מפתחים של Go, כדאי לעיין במסמכי התיעוד של Genkit Go.

תוכלו לפרוס ולהריץ ספריות Genkit בכל מקום שבו יש תמיכה ב-Node.js. הוא תוכנן לפעול עם כל ממשק API של מודל AI גנרטיבי או מסד נתונים של וקטורים. אנחנו מציעים שילובים ל-Firebase ול-Google Cloud, אבל אפשר להשתמש ב-Genkit ללא תלות בשירותים של Google.

שנתחיל?

יכולות עיקריות

API מאוחד ליצירת AI להשתמש ב-API אחד כדי ליצור או לשדר תוכן מתוך מודלים שונים של AI. התכונה פועלת עם הגדרות קלט/פלט רב-אופניים והגדרות מודל מותאם אישית.
יצירה מובנית יצירה או שידור של אובייקטים מובנים (כמו JSON) באמצעות אימות מובנה. פשוטת את השילוב עם האפליקציה וממירה נתונים לא מובְנים לפורמט שאפשר להשתמש בו.
התקשרות לכלי מאפשרים למודלים של AI להפעיל את הפונקציות וממשקי ה-API שלכם ככלים להשלמת משימות. המודל מחליט מתי ובאילו כלים להשתמש.
יצירה משופרת של אחזור שילוב הנתונים שלכם יעזור לכם לשפר את הדיוק והרלוונטיות של הפלט שנוצר. ממשקי API פשוטים עוזרים להטמיע, להוסיף לאינדקס ולאחזר מידע ממקורות שונים.
יצירת הנחיות תוכלו ליצור הנחיות יעילות שכוללות תבניות של טקסט עשיר, הגדרות מודלים, תמיכה מרובה מצבים ושילוב כלים – והכול בקובץ הנחיות קומפקטי שניתן להריץ.

דוגמאות הקוד הבאות יכולות לעזור לכם להבין איך להשתמש ביכולות האלה בקוד:

יצירה בסיסית

import { generate } from '@genkit-ai/ai';
import { gemini15Flash, claude3Sonnet, llama31 } from '@genkit-ai/vertexai';
import { gpt4o } from 'genkitx-openai';

// Use the same API to generate content from many models
const result = await generate({
    model: gemini15Flash, // Or use claude3Sonnet, llama31, gpt4o
    prompt: 'What makes you the best LLM out there?',
});

יצירה מובנית

import { generate } from '@genkit-ai/ai';
import { gemini15Flash } from '@genkit-ai/googleai';
import { z } from 'zod';

const result = await generate({
    model: gemini15Flash,
    prompt: 'Create a brief profile for a character in a fantasy video game.',
    // Specify output structure using Zod schema
    output: {
        schema: z.object({
            name: z.string(),
            role: z.enum(['knight', 'mage', 'archer']),
            backstory: z.string(),
            attacks: z.array(z.object({
              name: z.string(),
              damage: z.number().describe('amount of damage, between 2 and 25'),
            })).describe('3 attacks the character can use')
        })
    }
});

קריאה לכלים

import { generate, defineTool } from '@genkit-ai/ai';
import { gemini15Flash } from '@genkit-ai/googleai';
import { z } from 'zod';

// Define tool to get weather data for a given location
const lookupWeather = defineTool({
    name: 'lookupWeather',
    description: 'Get the current weather in a location.',
    // Define input and output schema so the model knows how to use the tool
    inputSchema: z.object({
        location: z.string().describe('The location to get the weather for.'),
    }),
    outputSchema: z.object({
        temperature: z.number().describe('The current temperature in Fahrenheit.'),
        condition: z.string().describe('A brief description of the weather conditions.'),
    }),
    async (input) => {
        // Insert weather lookup API code
    }
});

const result = await generate({
    model: gemini15Flash,
    tools: [lookupWeather], // Give the model a list of tools it can call
    prompt: 'What is the weather like in New York? ',
});

אחזור

import { generate, retrieve } from '@genkit-ai/ai';
import { devLocalRetrieverRef } from '@genkit-ai/dev-local-vectorstore';
import { gemini15Flash } from '@genkit-ai/googleai';

// Sample assumes Genkit documentation has been chunked, stored, and indexed in 
// local vectorstore in previous step.

// Reference to a local vector database storing Genkit documentation
const retriever = devLocalRetrieverRef('genkitQA');

const query = 'How do I retrieve relevant documents in Genkit?'

// Consistent API to retrieve most relevant documents based on semantic similarity to query
const docs = await retrieve({
    retriever: retriever,
    query: query,
    options: { limit: 5 },
});

const result = await generate({
    model: gemini15Flash
    prompt: 'Use the provided context from the Genkit documentation to answer this query: ${query}',
    context: docs // Pass retrieved documents to the model
});

תבנית של הצעה לפעולה

---
model: vertexai/gemini-1.5-flash
config:
  temperature: 0.9
input:
  schema:
    properties:
      location: {type: string}
      style: {type: string}
      name: {type: string}
    required: [location]
  default:
    location: a restaurant
---

You are the most welcoming AI assistant and are currently working at {{location}}.

Greet a guest{{#if name}} named {{name}}{{/if}}{{#if style}} in the style of {{style}}{{/if}}.

כלי פיתוח

Genkit מספק ממשק שורת פקודה (CLI) וממשק משתמש מקומי למפתחים כדי להקל על הבנייה של אפליקציות AI. הכלים האלה יעזרו לכם:

  • ניסוי: אפשר לבדוק ולשפר את הפונקציות, ההנחיות והשאילתות של AI.
  • ניפוי באגים: איתור ותיקון בעיות באמצעות דוחות ביצוע מפורטים.
  • בדיקה: הערכה של התוצאות שנוצרו בכמה תרחישי בדיקה.

טוב להיות בקשר

  • הצטרפות לקהילה: תוכלו להתעדכן, לשאול שאלות ולשתף את העבודה שלכם בשרת Discord שלנו.
  • שליחת משוב: אפשר לדווח על בעיות או להציע תכונות חדשות באמצעות אתר הבעיות שלנו ב-GitHub.

השלבים הבאים

במדריך תחילת העבודה מוסבר איך ליצור את אפליקציית ה-AI הראשונה שלכם באמצעות Genkit.