Firebase Genkit

Firebase Genkit là khung nguồn mở giúp bạn xây dựng, triển khai và giám sát các ứng dụng dựa trên AI sẵn sàng phát hành công khai.

Biểu trưng của Genkit

Genkit được thiết kế cho các nhà phát triển ứng dụng, để giúp bạn dễ dàng tích hợp các chức năng AI mạnh mẽ vào ứng dụng của bạn với các mẫu và mô hình quen thuộc. API này cũng do cùng một nhóm xây dựng nên Firebase, tận dụng kinh nghiệm của chúng tôi về công cụ xây dựng được hàng triệu nhà phát triển trên toàn thế giới sử dụng.

Dùng Genkit để tạo những ứng dụng tạo nội dung tuỳ chỉnh, tìm kiếm theo ngữ nghĩa, xử lý thông tin đầu vào không có cấu trúc, trả lời câu hỏi về dữ liệu doanh nghiệp, độc lập đưa ra quyết định, sắp xếp các lệnh gọi công cụ và làm nhiều việc khác!

Genkit hiện hỗ trợ phát triển phía máy chủ trong JavaScript/TypeScript (Node.js) có hỗ trợ Go đang trong quá trình phát triển.

Theo dõi quá trình phát triển của sản phẩm hoặc đóng góp của riêng bạn tại Kho lưu trữ GitHub.

Tính năng chính

Genkit luôn sẵn sàng trợ giúp bạn từng bước trong hành trình phát triển AI, từ khi bắt đầu xây dựng nguyên mẫu cho đến theo dõi trong quá trình sản xuất. có rất nhiều điều để nói.

Để giúp bạn bắt đầu, dưới đây là 10 tính năng chính của Genkit mà chúng tôi cho rằng bạn sẽ yêu thích:

1. Nhiều mô hình, một giao diện

Genkit cung cấp các trình bổ trợ giúp bạn truy cập vào các mô hình phổ biến ngay từ đầu và bản tóm tắt mô hình linh hoạt giúp dễ dàng tích hợp mọi API mô hình và sử dụng các mô hình do cộng đồng duy trì. Việc thử một mô hình mới cũng dễ như việc thay đổi một đối số, nhưng mỗi mô hình có thể chỉ định các cấu hình tuỳ chỉnh.

import { geminiPro } from '@genkit-ai/vertexai';
import { ollama } from 'genkitx-ollama';
import { generate } from '@genkit-ai/ai';

function flipACoin(a, b) {
  return Math.random() > 0.5 ? a : b;
}

const result = await generate({
  model: flipACoin(geminiPro, 'ollama/gemma'),
  config: { temperature: 0.3, maxOutputTokens: 200 },
  prompt: 'What makes you the best LLM out there?',
});

console.log(result.text());

2. Kết quả có cấu trúc

Tạo dữ liệu được định kiểu rõ ràng bằng Genkit bằng giản đồ Zod. Điều này có thể giúp bạn phân tích văn bản không có cấu trúc, tạo nội dung sáng tạo, chọn công việc và gửi kết quả trả về ứng dụng của bạn dưới dạng đối tượng an toàn về kiểu có cấu trúc.

import { generate } from "@genkit-ai/ai";
import { geminiPro } from "@genkit-ai/vertexai";
import { z } from "zod";

const CreatureSchema = z.object({
  name: z.string().describe('the name of the creature'),
  hitPoints: z.number().describe('hit points, between 5 and 100'),
  attacks: z.array(z.object({
    name: z.string(),
    damage: z.number().describe('amount of damage, between 2 and 25'),
  })).describe('3 attacks the creature can use')
});

const createCreature = defineFlow({
    name: "createCreature",
    inputSchema: z.string(),
    outputSchema: CreatureSchema,
  },
  (habitat) => {
    const result = await generate({
      model: geminiPro,
      prompt: `You are a brilliant RPG designer. Generate a creature that lives in ${habitat}.`,
      output: {schema: CreatureSchema}
    });
    // strongly typed and ready to go
    return result.output();
  }
)

console.log(await createCreature("a developer conference"));

3. Đa phương thức, đa phương tiện

Genkit cung cấp một định dạng chung cho nội dung hỗ trợ việc kết hợp văn bản, và nội dung nghe nhìn tuỳ ý. Thao tác này cho phép bạn sử dụng Genkit cho các mô hình thực hiện bất kỳ nhiệm vụ tạo sinh (chẳng hạn như tạo hình ảnh), chứ không chỉ các mô hình ngôn ngữ lớn (LLM).

import { imagen2, geminiProVision } from '@genkit-ai/vertexai';
import { generate } from '@genkit-ai/ai';

const imageResult = await generate({
  model: imagen2,
  prompt: 'Generate an image of a very specific historical time and place.',
});
const generatedImage = imageResult.media();

const descriptionResult = await generate({
  model: geminiProVision,
  prompt: [
    {
      text: 'What is the historical time and place represented in this picture?',
    },
    { media: generatedImage },
  ],
});
console.log(descriptionResult.text());

4. Cung cấp các công cụ cho các mô hình ngôn ngữ lớn (LLM)

Genkit giúp bạn dễ dàng thực hiện lệnh gọi chức năng bằng các mô hình ngôn ngữ lớn (LLM) thông qua các công cụ. Công cụ giúp AI có thể tìm nạp dữ liệu, hiển thị giao diện người dùng, ghi vào cơ sở dữ liệu hoặc lấy bất kỳ hành động nào khác mà bạn có thể lập trình.

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

const createReminder = defineTool(
  {
    name: 'createReminder',
    description: 'Use this to create reminders for things in the future',
    inputSchema: z.object({
      time: z
        .string()
        .describe('ISO timestamp string, e.g. 2024-04-03T12:23:00Z'),
      reminder: z.string().describe('the content of the reminder'),
    }),
    outputSchema: z.number().describe('the ID of the created reminder'),
  },
  (reminder) => db.reminders.create(reminder)
);

const searchNotes = defineTool(
  {
    name: 'searchNotes',
    description: "Use this to search the user's notes for people or phrases",
    inputSchema: z.string().describe('the search query'),
    outputSchema: z.object({ notes: z.array(NoteSchema) }),
  },
  (query) => db.notes.search(query)
);

const result = await generate({
  model: geminiPro,
  tools: [createReminder, searchNotes],
  prompt: `
  You are a note-taking assistant. Using the tools available, try to answer the provided query.
  If you create a reminder, describe in text the reminder you created as a response.

  Query: I took a note about a meeting with Anna - can you set a reminder for the time?
  `,
});
console.log(result.text());

5. Quản lý câu lệnh bằng Dotprompt

Kỹ thuật nhắc nhở không chỉ là tinh chỉnh văn bản. Mô hình bạn sử dụng, các thông số bạn cung cấp và định dạng bạn yêu cầu, tất cả đều ảnh hưởng đến chất lượng của đầu ra. Genkit cung cấp Dotprompt, một định dạng tệp câu lệnh cho phép bạn sử dụng tất cả vào một tệp duy nhất để thử nghiệm và tổ chức dễ dàng hơn.

---
model: vertexai/gemini-1.0-pro
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 world's 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}}.

6. Chạy flow cục bộ

AI tạo sinh có rất nhiều kết quả khác nhau, nên việc thử nghiệm là vô cùng quan trọng rất quan trọng. Giao diện người dùng cục bộ của Nhà phát triển Genkit cho phép bạn tương tác với các tính năng AI thiết yếu các thành phần như mô hình và bộ truy xuất, cũng như kiểm tra toàn bộ bao gồm mọi mã tuỳ chỉnh mà bạn đã viết.

7. Kiểm tra dấu vết

Việc gỡ lỗi các quy trình công việc phức tạp, gồm nhiều bước bằng AI có thể khó khăn do tính ngẫu nhiên và các quy trình ẩn. Genkit cung cấp một trình kiểm tra theo dõi trong giao diện người dùng cho nhà phát triển cho phép bạn kiểm tra dấu vết cho từng lệnh gọi mô hình và bước trong luồng. Ứng dụng này có thể xem dấu vết trong môi trường thực tế và thậm chí là kết xuất hình ảnh!

8. Mở và có thể mở rộng

Hệ sinh thái AI đang phát triển nhanh hơn bất cứ nhóm nào khác có thể bắt kịp. Bộ công cụ tạo tài khoản có mô hình trình bổ trợ mở cung cấp tính năng tích hợp sẵn với các mô hình mới, chó săn tha mồi và nhiều loài khác. Mặc dù nhóm Genkit duy trì một nhóm nhỏ bất kỳ ai cũng có thể thoải mái xuất bản trình bổ trợ Genkit của riêng họ lên TLD.

Không thể tìm thấy trình bổ trợ cho một tích hợp cụ thể mà bạn muốn? Không vấn đề gì. của Genkit trừu tượng rất linh hoạt và giúp dễ dàng tạo các thành phần tuỳ chỉnh tích hợp vào khung, giống như trình truy xuất Firestore tuỳ chỉnh sau đây:

import { embed } from '@genkit-ai/ai/embedder';
import { Document, defineRetriever } from '@genkit-ai/ai/retriever';
import { textEmbeddingGecko } from '@genkit-ai/vertexai';
import {
  FieldValue,
  VectorQuery,
  VectorQuerySnapshot,
} from '@google-cloud/firestore';
import { Firestore } from 'firebase-admin/firestore';
import * as z from 'zod';
import { augmentedPrompt } from './prompt';

const QueryOptions = z.object({
  k: z.number().optional(),
});

const firestoreArtifactsRetriever = defineRetriever(
  {
    name: 'firestore/artifacts',
    configSchema: QueryOptions,
  },
  async (input, options) => {
    const embedding = await embed({
      embedder: textEmbeddingGecko,
      content: input,
    });

    const db = new Firestore();
    const coll = db.collection('vectors' /* your collection name */);

    const vectorQuery: VectorQuery = coll.findNearest(
      'embedding' /* the name of the field that contains the vector */,
      FieldValue.vector(embedding),
      {
        limit: options.k ?? 3,
        distanceMeasure: 'COSINE',
      }
    );

    const vectorQuerySnapshot: VectorQuerySnapshot = await vectorQuery.get();
    return {
      documents: vectorQuerySnapshot.docs.map((doc) =>
        // doc.data() represents the Firestore document. You may process
        // it as needed to generate a Genkit document object, depending on your
        // storage format.
        Document.fromText(doc.data().content.text)
      ),
    };
  }
);

9. Được thiết kế để phát hành công khai

Dễ dàng triển khai luồng của bạn cho bất kỳ nền tảng nào có thể phân phát ứng dụng Express.js. Genkit được đo lường đầy đủ bằng OpenTelemetry và siêu dữ liệu tuỳ chỉnh cho giám sát hoạt động sản xuất cấp doanh nghiệp.

Ngoài ra, còn có các trình bổ trợ chính thức cho Google Cloud và Firebase để giúp bạn xuất dữ liệu sang bộ công cụ vận hành của Google Cloud và tích hợp với Firebase các dịch vụ như Cloud Functions cho Firebase, Xác thực Firebase, Kiểm tra ứng dụng, và Firestore.

Ảnh chụp màn hình Cloud Trace

10. Uỷ quyền và xử lý bảo mật

Khi xây dựng bất kỳ ứng dụng công khai nào, điều quan trọng là phải bảo vệ dữ liệu được lưu trữ trong hệ thống của bạn. Các LLM cần phải được nghiên cứu kỹ lưỡng hơn để đảm bảo rằng mô hình chỉ truy cập dữ liệu cần thiết, các lệnh gọi công cụ được thực hiện đúng cách phạm vi người dùng gọi LLM và luồng chỉ được gọi bằng trên các ứng dụng khách đã xác minh.

Genkit cung cấp các cơ chế để quản lý ngữ cảnh và chính sách uỷ quyền.

import { defineFlow, runFlow } from '@genkit-ai/flow';

export const selfSummaryFlow = defineFlow(
  {
    name: 'selfSummaryFlow',
    inputSchema: z.object({uid: z.string()}),
    outputSchema: z.string(),
    authPolicy: (auth, input) => {
      if (!auth) {
        throw new Error('Authorization required.');
      }
      if (input.uid !== auth.uid) {
        throw new Error('You may only summarize your own profile data.');
      }
    }
  },
  async (input) => { ... });

Các công cụ tích hợp

Genkit cung cấp khả năng tích hợp với các mô hình AI, cơ sở dữ liệu vectơ và dữ liệu đo từ xa nền tảng, v.v. thông qua hệ thống trình bổ trợ của mình. Các trình bổ trợ sau đây do nhóm Genkit duy trì:

Trình bổ trợ chính thức
googleai Mô hình tạo sinh: Gemini Pro, Gemini 1.5 Pro, Gemini Pro Vision
Mô hình nhúng: Nhúng văn bản Gecko
vertexai Mô hình tạo sinh: Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2, Anthropic call 3
Mô hình nhúng: Nhúng văn bản Gecko
Evaluator: Hoạt động đánh giá Vertex AI
ollama Mô hình tạo sinh: Nhiều mô hình tại địa phương, chẳng hạn như Gemma, Llama 3, Mistral và nhiều mô hình khác
chroma Cơ sở dữ liệu vectơ: ChromaDB
pinecone Cơ sở dữ liệu vectơ: Pinecone
google-cloud Công cụ giám sát: Google Cloud Trace, Google Cloud Logging
firebase Triển khai trên đám mây: Cloud Functions, Xác thực Firebase, Kiểm tra ứng dụng
Cơ sở dữ liệu vectơ: Kho lưu trữ vectơ trên Cloud Firestore
langchain Sử dụng chuỗi LangChain và phần mềm tiện ích trong quy trình Genkit

Bắt đầu

Hãy đọc hướng dẫn Bắt đầu để tìm hiểu cách cài đặt Genkit và chạy luồng AI đầu tiên.