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());