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) 和一个本地开发者界面,以便更轻松地构建 AI 应用。这些工具可帮助您:

  • 实验:测试和优化 AI 函数、提示和查询。
  • 调试:使用详细的执行轨迹查找和解决问题。
  • 评估:评估针对多个测试用例生成的结果。

与我们联系

  • 加入社区:在我们的 Discord 服务器上了解最新动态、提问和分享您的作品。
  • 提供反馈:使用我们的 GitHub 问题跟踪器报告问题或建议新功能。

后续步骤

如需了解如何使用 Genkit 构建您的首个 AI 应用,请参阅我们的入门指南。