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 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 tính năng AI mạnh mẽ vào ứng dụng của mình với các mẫu và mô hình quen thuộc. API này do cùng một nhóm xây dựng sau Firebase, tận dụng kinh nghiệm của chúng tôi trong việc xây dựng các công cụ mà 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 theo ngữ nghĩa, xử lý thông tin đầu vào phi cấu trúc, trả lời câu hỏi bằng 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ủ bằng JavaScript/TypeScript (Node.js) với tính năng hỗ trợ Go đang trong quá trình phát triển.

Theo dõi quá trình phát triển của công cụ này hoặc tự đóng góp 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ừ giai đoạn bắt đầu xây dựng nguyên mẫu cho đến giám sát trong giai đoạn sản xuất – vì vậy, có rất nhiều điều để nói về.

Để 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ợ cho phép bạn truy cập ngay vào các mô hình phổ biến và bản tóm tắt mô hình linh hoạt giúp bạn dễ dàng tích hợp bất kỳ API mô hình nào cũng như 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ễ 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. Nhờ vậy, bạn có thể 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 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 phổ biến cho nội dung hỗ trợ kết hợp văn bản, dữ liệu và nội dung nghe nhìn tuỳ ý. Việ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ỳ 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á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á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ý 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, 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 đầu ra của bạn. Genkit cung cấp Dotprompt, một định dạng tệp lời nhắc cho phép bạn đưa 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 flow 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à điều cực kỳ quan trọng. Giao diện người dùng cục bộ dành cho nhà phát triển Genkit 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 truy xuất, cũng như kiểm thử toàn bộ các quy trình (bao gồm cả mọi mã tuỳ chỉnh 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 công cụ kiểm tra dấu vết trong giao diện người dùng dành 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à các bước trong luồng của mình. Ứ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. Tính chất 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. Genkit có một mô hình trình bổ trợ mở cung cấp các tiện ích tích hợp 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ỏ trình bổ trợ chính thức, nhưng 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ác giá trị 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. Được thiết kế để phát hành công khai

Dễ dàng triển khai flow 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 hoàn toàn bằng OpenTelemetry và siêu dữ liệu tuỳ chỉnh để 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 các dịch vụ của Firebase 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. Xử lý việc uỷ quyền và bảo mật

Khi xây dựng bất kỳ ứng dụng dành cho người dùng 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 phải thẩm định thêm để đảm bảo rằng mô hình này chỉ truy cập vào dữ liệu cần thiết, các lệnh gọi công cụ chỉ phù hợp với người dùng gọi LLM và quy trình chỉ được gọi bằng 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ơ, nền tảng đo từ xa, 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 âm 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 tại địa phương, trong đó có 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 quy trình AI đầu tiên.