Firebase Genkit

Genkit 是一種架構,可協助您建構 AI 應用程式和功能。這項服務提供 Node.js 和 Go 適用的開放原始碼程式庫,以及用於測試和偵錯的開發人員工具。

本說明文件將介紹 Node.js 適用的 Genkit。如果您是 Go 開發人員,請參閱 Genkit Go 說明文件

您可以在支援 Node.js 的任何地方部署及執行 Genkit 程式庫。這項服務可搭配任何生成式 AI 模型 API 或向量資料庫使用。雖然我們提供 Firebase 和 Google Cloud 整合功能,但您可以不必使用任何 Google 服務,獨立使用 Genkit。

開始使用

主要功能

統一 AI 產生 API 使用一個 API 即可透過各種 AI 模型產生或串流內容。可搭配多模態輸入/輸出和自訂模型設定使用。
結構化輸出內容 使用內建驗證功能產生或串流傳輸結構化物件 (例如 JSON)。簡化與應用程式的整合作業,並將非結構化資料轉換為可用的格式。
工具呼叫 讓 AI 模型呼叫函式和 API 做為完成工作所需的工具。模型會決定何時使用哪些工具。
Chat Genkit 提供專屬於即時通訊的 API,可協助您與 AI 模型進行多回合的對話,並可提供狀態和持續性。
代理程式 建立智慧型代理程式,使用工具 (包括其他代理程式) 自動執行複雜的工作和工作流程。
資料擷取 整合資料可提高生成輸出的準確度和關聯性。簡易 API 可協助您嵌入、建立索引,以及擷取來自不同來源的資訊。
提示範本 建立有效的提示,其中包含富文字範本、模型設定、多模態支援和工具整合功能,全部都包含在精簡且可執行的提示檔案中。

請參閱下列程式碼範例,瞭解如何在程式碼中使用這些功能:

基本產生

import { genkit } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,  // Set default model
});

// Simple generation
const { text } = await ai.generate('Why is AI awesome?');
console.log(text);

// Streamed generation 
const { stream } = await ai.generateStream('Tell me a story');
for await (const chunk of stream) {
  console.log(chunk.text);
}

結構化輸出內容

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const { output } = await ai.generate({
  prompt: 'Create a brief profile for a character in a fantasy video game.',
  // Specify output structure using Zod schema
  output: {
    format: 'json',  
    schema: z.object({
      name: z.string(),
      role: z.enum(['knight', 'mage', 'archer']),
      backstory: z.string(),
    }),
  },
});

console.log(output);

函式呼叫

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

// Define tool to get current weather for a given location
const getWeather = ai.defineTool(
  {
    name: "getWeather",
    description: "Gets the current weather in a given location",
    inputSchema: z.object({ 
      location: z.string().describe('The location to get the current weather for')
    }),
    outputSchema: z.string(),
  },
  async (input) => {
    // Here, we would typically make an API call or database query. For this
    // example, we just return a fixed value.
    return `The current weather in ${input.location} is 63°F and sunny.`;
  }
);

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

console.log(text);

即時通訊

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const chat = ai.chat({ system: 'Talk like a pirate' });

let response = await chat.send('Hi, my name is Pavel');

response = await chat.send('What is my name?');
console.log(response.text);
// Ahoy there! Your name is Pavel, you scurvy dog

代理程式

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

// Define prompts that represent specialist agents
const reservationAgent = ai.definePrompt(
  {
    name: 'reservationAgent',
    description: 'Reservation Agent can help manage guest reservations',
    tools: [reservationTool, reservationCancelationTool, reservationListTool],

  },
  `{{role "system"}} Help guests make and manage reservations`
);

const menuInfoAgent = ...
const complaintAgent = ...

// Define a triage agent that routes to the proper specialist agent
const triageAgent = ai.definePrompt(
  {
    name: 'triageAgent',
    description: 'Triage Agent',
    tools: [reservationAgent, menuInfoAgent, complaintAgent],
  },
  `{{role "system"}} You are an AI customer service agent for Pavel's Cafe.
  Greet the user and ask them how you can help. If appropriate, transfer to an
  agent that can better handle the request. If you cannot help the customer with
  the available tools, politely explain so.`
);

// Create a chat to enable multi-turn agent interactions
const chat = ai.chat(triageAgent);

chat.send('I want a reservation at Pavel\'s Cafe for noon on Tuesday.' );

資料擷取

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

const ai = genkit({ 
  plugins: [
    googleAI()
    devLocalVectorstore([
      {
        indexName: 'BobFacts',
        embedder: textEmbedding004,
      },
    ]),
  ],
  model: gemini15Flash,
});

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

// Consistent API to retrieve most relevant documents based on semantic similarity to query
const docs = await ai.retrieve(
  retriever: retriever,
  query: 'How old is bob?',
);

const result = await ai.generate({
    prompt: `Use the provided context from the Genkit documentation to answer this query: ${query}`,
    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) 和本機開發人員 UI,方便您建構 AI 應用程式。這些工具可協助您:

  • 實驗:測試並調整 AI 函式、提示和查詢。
  • 偵錯:找出並修正問題,並提供詳細的執行追蹤記錄。
  • 評估:評估多個測試案例產生的結果。

與我們聯絡

  • 加入社群:在我們的 Discord 伺服器上,隨時掌握最新消息、提出問題,並分享您的作品。
  • 提供意見回饋:使用 GitHub Issue Tracker回報問題或提出新功能建議。

後續步驟

請參閱入門指南,瞭解如何使用 Genkit 建構第一個 AI 應用程式。