Hướng dẫn này minh hoạ cách truy cập vào Gemini API cho Node.js bằng cách sử dụng SDK JavaScript AI của Google.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách thực hiện những việc sau:
- Thiết lập dự án, bao gồm cả khoá API
- Tạo văn bản từ dữ liệu nhập chỉ có văn bản
- Tạo văn bản bằng cách nhập văn bản và hình ảnh (đa phương thức)
- Tạo cuộc trò chuyện nhiều lượt (trò chuyện)
- Sử dụng tính năng truyền trực tuyến để tương tác nhanh hơn
Ngoài ra, hướng dẫn này bao gồm các phần về các trường hợp sử dụng nâng cao (như Nhúng và đếm mã thông báo) cũng như các tuỳ chọn cho kiểm soát việc tạo nội dung.
Điều kiện tiên quyết
Hướng dẫn này giả định rằng bạn đã quen thuộc với việc xây dựng ứng dụng bằng Node.js.
Để hoàn thành hướng dẫn này, hãy đảm bảo rằng môi trường phát triển của bạn đáp ứng các yêu cầu sau:
- Node.js phiên bản 18 trở lên
- npm
Thiết lập dự án
Trước khi gọi Gemini API, bạn cần thiết lập dự án của mình, bao gồm thiết lập khoá API, cài đặt gói SDK và khởi chạy mô hình.
Thiết lập khoá API
Để sử dụng Gemini API, bạn sẽ cần có khoá API. Nếu chưa có tài khoản, tạo một khoá trong Google AI Studio.
Bảo mật khoá API của bạn
Bạn không nên kiểm tra khoá API trong phiên bản của mình hệ thống kiểm soát. Thay vào đó, bạn nên sử dụng kho bí mật cho khoá API.
Tất cả đoạn mã trong hướng dẫn này đều giả định rằng bạn đang truy cập khoá API như biến môi trường.
Cài đặt gói SDK
Để sử dụng Gemini API trong ứng dụng của riêng mình, bạn cần cài đặt
Gói GoogleGenerativeAI
cho Node.js:
npm install @google/generative-ai
Khởi chạy mô hình tạo sinh
Để có thể thực hiện lệnh gọi API, bạn cần nhập và khởi chạy mô hình tạo sinh.
const { GoogleGenerativeAI } = require("@google/generative-ai");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
// ...
// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});
// ...
Khi chỉ định một mô hình, hãy lưu ý những điều sau:
Sử dụng một mô hình cụ thể cho trường hợp sử dụng của bạn (ví dụ:
gemini-1.5-flash
dành cho phương thức nhập đa phương thức). Trong hướng dẫn này, hướng dẫn cho từng liệt kê mô hình triển khai được đề xuất cho từng trường hợp sử dụng.
Triển khai các trường hợp sử dụng phổ biến
Bây giờ, dự án của bạn đã được thiết lập, bạn có thể khám phá việc sử dụng Gemini API để triển khai các trường hợp sử dụng khác nhau:
- Tạo văn bản từ dữ liệu nhập chỉ có văn bản
- Tạo văn bản bằng cách nhập văn bản và hình ảnh (đa phương thức)
- Tạo cuộc trò chuyện nhiều lượt (trò chuyện)
- Sử dụng tính năng truyền trực tuyến để tương tác nhanh hơn
Trong phần trường hợp sử dụng nâng cao, bạn có thể tìm thấy thông tin về Gemini API và video nhúng.
Tạo văn bản từ dữ liệu đầu vào chỉ có văn bản
Khi câu lệnh nhập chỉ bao gồm văn bản, hãy sử dụng mô hình Gemini 1.5 có generateContent
để tạo đầu ra văn bản:
const { GoogleGenerativeAI } = require("@google/generative-ai");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
async function run() {
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});
const prompt = "Write a story about a magic backpack."
const result = await model.generateContent(prompt);
const response = await result.response;
const text = response.text();
console.log(text);
}
run();
Tạo văn bản bằng cách nhập văn bản và hình ảnh (đa phương thức)
Gemini 1.5 Flash và 1.5 Pro có thể xử lý phương thức nhập đa phương thức cho phép bạn nhập cả hai văn bản này và hình ảnh. Hãy nhớ xem lại các yêu cầu về hình ảnh đối với câu lệnh.
Khi câu lệnh nhập bao gồm cả văn bản và hình ảnh, hãy sử dụng các mô hình Gemini 1.5 có
phương thức generateContent
để tạo đầu ra văn bản:
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
// Converts local file information to a GoogleGenerativeAI.Part object.
function fileToGenerativePart(path, mimeType) {
return {
inlineData: {
data: Buffer.from(fs.readFileSync(path)).toString("base64"),
mimeType
},
};
}
async function run() {
// The Gemini 1.5 models are versatile and work with both text-only and multimodal prompts
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "What's different between these pictures?";
const imageParts = [
fileToGenerativePart("image1.png", "image/png"),
fileToGenerativePart("image2.jpeg", "image/jpeg"),
];
const result = await model.generateContent([prompt, ...imageParts]);
const response = await result.response;
const text = response.text();
console.log(text);
}
run();
Xây dựng cuộc trò chuyện nhiều lượt
Khi sử dụng Gemini, bạn có thể tạo các cuộc trò chuyện dạng tự do ở nhiều chặng. Chiến lược phát hành đĩa đơn
SDK đơn giản hoá quy trình bằng cách quản lý trạng thái của cuộc trò chuyện, vì vậy, không giống như
với generateContent
, bạn không cần lưu trữ nhật ký trò chuyện
chính bạn.
Để tạo một cuộc trò chuyện nhiều lượt (chẳng hạn như trò chuyện), hãy sử dụng mô hình Gemini 1.5 hoặc
Mô hình Gemini 1.0 Pro và bắt đầu cuộc trò chuyện bằng cách gọi startChat()
.
Sau đó, sử dụng sendMessage()
để gửi thông báo cho người dùng mới. Việc này cũng sẽ thêm thông báo
tin nhắn và câu trả lời trong nhật ký trò chuyện.
Có hai lựa chọn cho role
được liên kết với nội dung trong một
cuộc trò chuyện:
user
: vai trò đưa ra lời nhắc. Đây là giá trị mặc định chosendMessage
cuộc gọi.model
: vai trò đưa ra câu trả lời. Vai trò này có thể được dùng khi gọistartChat()
bằnghistory
hiện có.
const { GoogleGenerativeAI } = require("@google/generative-ai");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
async function run() {
// The Gemini 1.5 models are versatile and work with multi-turn conversations (like chat)
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});
const chat = model.startChat({
history: [
{
role: "user",
parts: [{ text: "Hello, I have 2 dogs in my house." }],
},
{
role: "model",
parts: [{ text: "Great to meet you. What would you like to know?" }],
},
],
generationConfig: {
maxOutputTokens: 100,
},
});
const msg = "How many paws are in my house?";
const result = await chat.sendMessage(msg);
const response = await result.response;
const text = response.text();
console.log(text);
}
run();
Sử dụng tính năng phát trực tuyến để tương tác nhanh hơn
Theo mặc định, mô hình này trả về một phản hồi sau khi hoàn tất toàn bộ quá trình tạo của chúng tôi. Bạn có thể đạt được các tương tác nhanh hơn bằng cách không phải đợi toàn bộ kết quả và thay vào đó hãy sử dụng luồng để xử lý một phần kết quả.
Ví dụ sau đây trình bày cách triển khai tính năng truyền trực tuyến bằng
Phương thức generateContentStream
để tạo văn bản qua phương thức nhập văn bản và hình ảnh
.
//...
const result = await model.generateContentStream([prompt, ...imageParts]);
let text = '';
for await (const chunk of result.stream) {
const chunkText = chunk.text();
console.log(chunkText);
text += chunkText;
}
//...
Bạn có thể sử dụng phương pháp tương tự cho các trường hợp sử dụng chỉ nhập văn bản và trò chuyện.
// Use streaming with text-only input
const result = await model.generateContentStream(prompt);
Xem ví dụ về cuộc trò chuyện ở trên để biết cách tạo thực thể
chat
.
// Use streaming with multi-turn conversations (like chat)
const result = await chat.sendMessageStream(msg);
Triển khai các trường hợp sử dụng nâng cao
Các trường hợp sử dụng phổ biến được mô tả trong phần trước của trợ giúp hướng dẫn này bạn cảm thấy thoải mái khi sử dụng Gemini API. Phần này mô tả một số các trường hợp sử dụng có thể được xem là nâng cao hơn.
Dùng tính năng nhúng
Nhúng là một kỹ thuật dùng để trình bày thông tin dưới dạng danh sách các số có dấu phẩy động trong một mảng. Với Gemini, bạn có thể đại diện cho văn bản (từ, câu và khối văn bản) ở dạng vectơ hoá, khiến nội dung đó dễ dàng so sánh và đối chiếu các mục nhúng. Ví dụ: hai văn bản có cùng một chủ đề hoặc tình cảm tương tự nên có các thành phần nhúng tương tự, có thể được xác định thông qua kỹ thuật so sánh toán học như tính tương đồng về cosin.
Sử dụng mô hình embedding-001
với phương thức embedContent
(hoặc phương thức
batchEmbedContent
) để tạo các mục nhúng. Ví dụ sau đây
tạo một mục nhúng cho một chuỗi đơn:
const { GoogleGenerativeAI } = require("@google/generative-ai");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
async function run() {
// For embeddings, use the embedding-001 model
const model = genAI.getGenerativeModel({ model: "embedding-001"});
const text = "The quick brown fox jumps over the lazy dog."
const result = await model.embedContent(text);
const embedding = result.embedding;
console.log(embedding.values);
}
run();
Gọi hàm
Lệnh gọi hàm giúp bạn dễ dàng nhận kết quả đầu ra dữ liệu có cấu trúc các mô hình tạo sinh. Sau đó, bạn có thể sử dụng những dữ liệu đầu ra này để gọi các API khác và trả về dữ liệu phản hồi phù hợp cho mô hình. Nói cách khác, lệnh gọi hàm giúp bạn kết nối các mô hình tạo sinh với hệ thống bên ngoài để nội dung được tạo bao gồm thông tin chính xác và mới nhất. Tìm hiểu thêm trong hướng dẫn gọi hàm.
Đếm mã
Khi sử dụng các câu lệnh dài, có thể bạn nên đếm mã thông báo trước khi gửi bất cứ mã nào
vào mô hình. Các ví dụ sau đây minh hoạ cách sử dụng countTokens()
cho nhiều trường hợp sử dụng:
// For text-only input
const { totalTokens } = await model.countTokens(prompt);
// For text-and-image input (multimodal)
const { totalTokens } = await model.countTokens([prompt, ...imageParts]);
// For multi-turn conversations (like chat)
const history = await chat.getHistory();
const msgContent = { role: "user", parts: [{ text: msg }] };
const contents = [...history, msgContent];
const { totalTokens } = await model.countTokens({ contents });
Các tuỳ chọn kiểm soát việc tạo nội dung
Bạn có thể kiểm soát việc tạo nội dung bằng cách định cấu hình các thông số của mô hình và bằng cách sử dụng cài đặt an toàn.
Lưu ý rằng việc truyền generationConfig
hoặc safetySettings
đến một yêu cầu mô hình
phương thức (như generateContent
) sẽ ghi đè hoàn toàn đối tượng cấu hình
có cùng tên được truyền vào getGenerativeModel
.
Định cấu hình tham số của mô hình
Mỗi câu lệnh bạn gửi đến mô hình đều có các giá trị thông số kiểm soát cách mô hình sẽ tạo một phản hồi. Mô hình đó có thể tạo ra các kết quả khác nhau cho các giá trị thông số khác nhau. Tìm hiểu thêm về Thông số mô hình.
const generationConfig = {
stopSequences: ["red"],
maxOutputTokens: 200,
temperature: 0.9,
topP: 0.1,
topK: 16,
};
// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", generationConfig });
Sử dụng chế độ cài đặt an toàn
Bạn có thể sử dụng chế độ cài đặt an toàn để điều chỉnh khả năng nhận được câu trả lời có thể bị coi là gây hại. Theo mặc định, chế độ cài đặt an toàn sẽ chặn nội dung có mức trung bình và/hoặc có khả năng cao là nội dung không an toàn trên tất cả phương diện. Học tập tìm hiểu thêm về Cài đặt an toàn.
Dưới đây là cách đặt một chế độ cài đặt an toàn:
import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";
// ...
const safetySettings = [
{
category: HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
];
// The Gemini 1.5 models are versatile and work with most use cases
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", safetySettings });
Bạn cũng có thể đặt nhiều chế độ cài đặt an toàn:
const safetySettings = [
{
category: HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
{
category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
},
];
Các bước tiếp theo
Thiết kế câu lệnh là quá trình tạo câu lệnh đáp ứng yêu cầu phản hồi từ các mô hình ngôn ngữ. Viết câu lệnh có cấu trúc hợp lý là điều thiết yếu để đảm bảo các câu trả lời chính xác, có chất lượng cao từ một mô hình ngôn ngữ. Tìm hiểu các phương pháp hay nhất để viết câu lệnh.
Gemini cung cấp một số biến thể mô hình để đáp ứng nhu cầu sử dụng khác nhau trường hợp, chẳng hạn như loại dữ liệu đầu vào và độ phức tạp, các cách triển khai cho cuộc trò chuyện hoặc các tác vụ ngôn ngữ của hộp thoại và giới hạn kích thước. Tìm hiểu về các mô hình Gemini hiện có.