Đang tạo nội dung

Firebase Genkit cung cấp một giao diện dễ dàng để tạo nội dung bằng các mô hình ngôn ngữ lớn (LLM).

Mô hình

Các mô hình trong Firebase Genkit là các thư viện và thành phần trừu tượng cấp quyền truy cập vào nhiều LLM của Google và không phải của Google.

Các mô hình được đo lường đầy đủ để có thể quan sát và đi kèm với công cụ các tiện ích tích hợp do giao diện người dùng Nhà phát triển Genkit cung cấp -- bạn có thể thử bất kỳ mô hình nào sử dụng trình chạy mô hình.

Khi làm việc với các mô hình trong Genkit, trước tiên, bạn cần định cấu hình mô hình mình muốn hợp tác. Cấu hình mô hình do hệ thống trình bổ trợ thực hiện. Ngang bằng trong ví dụ này, bạn đang định cấu hình trình bổ trợ Vertex AI, trình bổ trợ này cung cấp các tính năng người mẫu.

import { configureGenkit } from '@genkit-ai/core';
import { firebase } from '@genkit-ai/firebase';
import { vertexAI } from '@genkit-ai/vertexai';

configureGenkit({
  plugins: [vertexAI()],
});

Để sử dụng các mô hình do trình bổ trợ cung cấp, bạn có thể tham chiếu đến các mô hình đó theo tên (ví dụ: 'vertexai/gemini-1.5-flash') hoặc một số đối tượng tham chiếu mô hình xuất trình bổ trợ cung cấp thêm thông tin về loại chức năng và tuỳ chọn của mô hình.

import { gemini15Flash } from '@genkit-ai/vertexai';

Mô hình được hỗ trợ

Genkit hỗ trợ mô hình thông qua hệ thống trình bổ trợ. Các plugin sau được hỗ trợ chính thức:

Trình bổ trợ Mô hình
AI tạo sinh của Google Gemini Pro, Tầm nhìn Gemini Pro
Vertex AI của Google Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2
Ollama Nhiều mô hình địa phương, trong đó có Gemma, Llama 2, Mistral, v.v.

Hãy xem tài liệu của mỗi trình bổ trợ để biết thông tin về cách thiết lập và sử dụng. Ngoài ra còn có rất nhiều mô hình được cộng đồng hỗ trợ mà bạn có thể khám phá bằng cách tìm các gói bắt đầu bằng genkitx- trên npmjs.org.

Cách tạo nội dung

generate là một hàm trợ giúp để làm việc với các mô hình.

Để chỉ gọi mô hình:

import { generate } from '@genkit-ai/ai';
import { gemini15Flash } from '@genkit-ai/vertexai';

(async () => {
  const llmResponse = await generate({
    model: gemini15Flash,
    prompt: 'Tell me a joke.',
  });

  console.log(await llmResponse.text());
})();

Bạn có thể chuyển các tuỳ chọn mô hình khác nhau cho mô hình đó, bao gồm việc chỉ định mô hình tuỳ chỉnh cho các LLM cụ thể.

const response = await generate({
  model: gemini15Flash,
  prompt,
  config: {
    temperature: 1,
    stopSequences: ['abc'],
  },
});

Nếu mô hình này hỗ trợ phương thức nhập đa phương thức, bạn có thể truyền hình ảnh vào dưới dạng dữ liệu đầu vào:

const result = await generate({
  model: gemini15Flash,
  prompt: [
    { text: 'describe the following image:' },
    { media: { url: imageUrl, contentType: 'image/jpeg' } },
  ],
});

Hoặc từ một tệp cục bộ:

const result = await generate({
  model: gemini15Flash,
  prompt: [
    { text: 'describe the following image:' },
    {
      data: {
        url: fs.readFileSync(__dirname + '/image.jpeg', {
          encoding: 'base64',
          flag: 'r',
        }),
        contentType: 'image/jpeg',
      },
    },
  ],
});

Công cụ và phương thức gọi hàm

Model cũng hỗ trợ các công cụ và chức năng gọi hàm. Công cụ hỗ trợ phụ thuộc vào mô hình cụ thể.

const myTool = action(
  {
    name: 'myJoke',
    description: 'useful when you need a joke to tell.',
    inputSchema: z.object({ subject: z.string() }),
    outputSchema: z.string(),
  },
  async (input) => 'haha Just kidding no joke! got you'
);

const llmResponse = await generate({
  model: gemini15Flash,
  prompt: 'Tell me a joke.',
  tools: [myTool],
  config: {
    temperature: 0.5,
  },
});

Thao tác này sẽ tự động gọi các công cụ để hoàn thành lời nhắc của người dùng.

Bạn có thể chỉ định returnToolRequests: true để kiểm soát thủ công lệnh gọi công cụ.

const llmResponse = await generate({
  model: gemini15Flash,
  prompt: 'Tell me a joke.',
  tools: [myTool],
  returnToolRequests: true,
  config: {
    temperature: 0.5,
  },
});

Thêm ngữ cảnh truy xuất

Tài liệu từ trình truy xuất có thể được chuyển trực tiếp đến generate để cung cấp bối cảnh cơ bản:

const docs = await companyPolicyRetriever({ query: question });

await generate({
  model: gemini15Flash,
  prompt: `Answer using the available context from company policy: ${question}`,
  context: docs,
});

Ngữ cảnh tài liệu được tự động thêm vào nội dung của lời nhắc gửi đến mô hình.

Ghi lại nhật ký tin nhắn

Các mô hình Genkit hỗ trợ duy trì nhật ký tin nhắn được gửi đến mô hình và phản hồi của nó để bạn có thể sử dụng để tạo trải nghiệm tương tác, chẳng hạn như chatbot.

Để tạo nhật ký tin nhắn từ một phản hồi của mô hình, hãy gọi toHistory() phương thức:

let response = await generate({
  model: gemini15Flash,
  prompt: "How do you say 'dog' in French?",
});
let history = response.toHistory();

Bạn có thể chuyển đổi tuần tự nhật ký này và lưu trữ trong cơ sở dữ liệu hoặc bộ nhớ phiên. Sau đó, hãy chuyển nhật ký cùng với lời nhắc cho các lệnh gọi trong tương lai đến generate():

response = await generate({
  model: gemini15Flash,
  prompt: 'How about in Spanish?',
  history,
});
history = response.toHistory();

Nếu mô hình bạn đang sử dụng có hỗ trợ vai trò system, bạn có thể sử dụng tên ban đầu để đặt thông báo của hệ thống:

let history: MessageData[] = [
  { role: 'system', content: [{ text: 'Talk like a pirate.' }] },
];
let response = await generate({
  model: gemini15Flash,
  prompt: "How do you say 'dog' in French?",
  history,
});
history = response.toHistory();

Hiện câu trả lời theo thời gian thực

Genkit hỗ trợ truyền trực tuyến các phản hồi của mô hình theo từng phần thông qua phương thức generateStream():

// import { generateStream } from '@genkit-ai/ai';
const { response, stream } = await generateStream({
  model: gemini15Flash,
  prompt: 'Tell a long story about robots and ninjas.',
});

for await (const chunk of stream()) {
  console.log(chunk.text());
}

// you can also await the full response
console.log((await response()).text());