Firebase Genkit

Firebase Genkit là một 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 sử dụng trí tuệ nhân tạo 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 với các mẫu và mô hình quen thuộc. Thư viện này do cùng một nhóm phụ trách Firebase xây dựng, tận dụng kinh nghiệm của chúng tôi về các 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.

Hãy sử dụng Genkit để tạo các ứng dụng tạo nội dung tuỳ chỉnh, sử dụng tính năng tìm kiếm ngữ nghĩa, xử lý dữ liệu đầu vào không có cấu trúc, trả lời câu hỏi bằng dữ liệu doanh nghiệp của bạn, tự đư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) với hỗ trợ Go trong quá trình phát triển đang diễn ra.

Theo dõi quá trình phát triển thư viện 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 sẵn sàng trợ giúp bạn xuyên suốt từng bước trong hành trình phát triển AI, từ khi bắt đầu tạo nguyên mẫu cho đến theo dõi trong quá trình sản xuất — vì vậy, có rất nhiều điều để bạn nói đến.

Để giúp bạn bắt đầu, sau đây là 10 tính năng chính của Genkit mà chúng tôi có thể 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ợ cho phép bạn truy cập ngay vào các mô hình phổ biến và mô hình tóm tắt linh hoạt giúp bạn dễ dàng tích hợp mọi API mô hình cũng như sử dụng các mô hình do cộng đồng duy trì. Việc dùng thử một mô hình mới cũng dễ dàng 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 nhiệm vụ và gửi lại kết quả cho ứng dụng của bạn dưới dạng các đối tượng an toàn về loại 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 phổ biến cho nội dung hỗ trợ kết hợp các loại văn bản, dữ liệu và nội dung nghe nhìn tuỳ ý. Điều này cho phép bạn sử dụng Genkit cho các mô hình thực hiện bất kỳ tác vụ tạo sinh nào (chẳng hạn như tạo hình ảnh), chứ không chỉ các 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ông cụ cho các LLM

Genkit giúp bạn dễ dàng gọi hàm với các LLM thông qua các công cụ. Các công cụ giúp AI 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 thực hiện 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ý lời nhắc bằng Dotprompt

Kỹ thuật đưa ra lời nhắc không chỉ là điều chỉnh văn bản. Mô hình bạn sử dụng, các tham số bạn cung cấp và định dạng bạn yêu cầu đề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 lời nhắc cho phép bạn đặt tất cả vào một tệp duy nhất để kiểm thử và sắp xếp 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 luồng cục bộ

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

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

Việc gỡ lỗi quy trình phức tạp, gồm nhiều bước bằng AI có thể gây khó khăn cho các quy trình bị ẩn và ngẫu nhiên. Genkit cung cấp một trình kiểm tra theo dõi trong giao diện người dùng của 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 quy trình của mình. Công cụ này có thể xem dấu vết từ phiên bản chính thức và thậm chí là kết xuất hình ảnh!

8. Tính mở và có thể mở rộng

Hệ sinh thái AI đang phát triển nhanh hơn bất kỳ đội ngũ nào có thể bắt kịp. Genkit có một mô hình trình bổ trợ mở cung cấp các tính năng tích hợp tạo sẵn với các mô hình, trình truy xuất mới, v.v. Mặc dù nhóm Genkit duy trì một nhóm nhỏ các trình bổ trợ chính thức, nhưng bất kỳ ai cũng có thể tự do xuất bản các trình bổ trợ Genkit của riêng họ lên SSID.

Bạn không tìm thấy trình bổ trợ cho một chế độ tích hợp cụ thể? Không vấn đề gì. Các thành phần trừu tượng của Genkit rất linh hoạt và giúp bạn dễ dàng xây dựng các thành phần tuỳ chỉnh tích hợp vào khung, chẳng hạn 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. Dành cho kênh phát hành công khai

Dễ dàng triển khai luồng của bạn đến 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 để giám sát quá trình 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 dành 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 các dịch vụ của Firebase như Cloud Functions cho Firebase, Firebase Authentication, App Check và Firestore.

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

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

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

Genkit cung cấp các cơ chế để quản lý bối cảnh và chính sách về việc 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ơ, nền tảng đo từ xa, v.v. thông qua hệ thống trình bổ trợ của nó. 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 Claude 3
Mô hình nhúng: Nhúng văn bản Gecko
Trình đánh giá: Đánh giá Vertex AI
ollama Mô hình tạo sinh: Nhiều mô hình cục bộ, bao gồm Gemma, Llama 3, Mistral, v.v.
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 đám mây: Chức năng đám mây, Xác thực Firebase, Kiểm tra ứng dụng
Cơ sở dữ liệu vectơ: Kho lưu trữ vectơ Cloud Firestore
langchain Sử dụng chuỗi LangChain và phần mềm tiện ích trong các quy trình của Genkit

Bắt đầu

Hãy đọc hướng dẫn Bắt đầu sử dụng để tìm hiểu cách cài đặt Genkit và chạy quy trình AI đầu tiên của bạn.