Hướng dẫn: Làm quen với API Gemini


Xem trên AI của Google Chạy trong Google Colab Xem nguồn trên GitHub

Hướng dẫn nhanh này minh hoạ cách sử dụng SDK Python cho API Gemini, giúp bạn truy cập vào các mô hình ngôn ngữ lớn Gemini của Google. Trong phần hướng dẫn bắt đầu nhanh này, bạn sẽ tìm hiểu cách:

  1. Thiết lập môi trường phát triển và quyền truy cập API để sử dụng Gemini.
  2. Tạo phản hồi bằng văn bản từ nội dung nhập bằng văn bản.
  3. Tạo phản hồi bằng văn bản từ dữ liệu đầu vào đa phương thức (văn bản và hình ảnh).
  4. Sử dụng Gemini cho các cuộc trò chuyện nhiều lượt (trò chuyện).
  5. Sử dụng tính năng nhúng cho các mô hình ngôn ngữ lớn.

Điều kiện tiên quyết

Bạn có thể chạy hướng dẫn bắt đầu nhanh này trong Google Colab để chạy sổ tay này ngay trong trình duyệt mà không yêu cầu cấu hình môi trường bổ sung.

Ngoài ra, để hoàn tất quy trình bắt đầu nhanh này trên thiết bị, hãy đảm bảo môi trường phát triển của bạn đáp ứng các yêu cầu sau:

  • Python 3.9 trở lên
  • Cài đặt jupyter để chạy sổ tay.

Thiết lập

Cài đặt SDK Python

SDK Python cho API Gemini nằm trong gói google-generativeai. Cài đặt phần phụ thuộc bằng pip:

pip install -q -U google-generativeai

Nhập gói

Nhập các gói cần thiết.

import pathlib
import textwrap

import google.generativeai as genai

from IPython.display import display
from IPython.display import Markdown


def to_markdown(text):
  text = text.replace('•', '  *')
  return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
# Used to securely store your API key
from google.colab import userdata

Thiết lập khoá API

Để có thể sử dụng API Gemini, trước tiên, bạn phải có được khoá API. Nếu bạn chưa có khoá, hãy tạo khoá chỉ bằng một lần nhấp trong Google AI Studio.

Lấy khoá API

Trong Colab, hãy thêm khoá vào trình quản lý khoá bí mật trong mục "🔑" trên bảng điều khiển bên trái. Đặt tên cho GOOGLE_API_KEY.

Sau khi bạn có khoá API, hãy truyền khoá đó vào SDK. Bạn có thể làm điều này theo hai cách:

  • Đặt khoá vào biến môi trường GOOGLE_API_KEY (SDK sẽ tự động nhận khoá từ đó).
  • Truyền khoá đến genai.configure(api_key=...)
# Or use `os.getenv('GOOGLE_API_KEY')` to fetch an environment variable.
GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY')

genai.configure(api_key=GOOGLE_API_KEY)

Mô hình danh sách

Bây giờ, bạn đã sẵn sàng gọi API Gemini. Sử dụng list_models để xem các mô hình Gemini hiện có:

  • gemini-pro: được tối ưu hoá cho những lời nhắc chỉ có văn bản.
  • gemini-pro-vision: được tối ưu hoá cho những lời nhắc dạng văn bản và hình ảnh.
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

Gói genai cũng hỗ trợ bộ mô hình PaLM, nhưng chỉ các mô hình Gemini mới hỗ trợ các tính năng chung, đa phương thức của phương thức generateContent.

Tạo văn bản từ mục nhập văn bản

Đối với những câu lệnh chỉ có văn bản, hãy sử dụng mô hình Gemini 1.5 hoặc mô hình Gemini 1.0 Pro:

model = genai.GenerativeModel('gemini-1.5-flash')

Phương thức generate_content có thể xử lý nhiều trường hợp sử dụng, bao gồm cả cuộc trò chuyện nhiều lượt và phương thức nhập đa phương thức, tuỳ thuộc vào nội dung mà mô hình cơ bản hỗ trợ. Các mô hình có sẵn chỉ hỗ trợ văn bản và hình ảnh làm dữ liệu đầu vào và văn bản làm dữ liệu đầu ra.

Trong trường hợp đơn giản nhất, bạn có thể chuyển một chuỗi lời nhắc vào phương thức GenerativeModel.generate_content:

%%time
response = model.generate_content("What is the meaning of life?")
CPU times: user 110 ms, sys: 12.3 ms, total: 123 ms
Wall time: 8.25 s

Trong các trường hợp đơn giản, bạn chỉ cần trình truy cập response.text. Để hiển thị văn bản Markdown đã định dạng, hãy dùng hàm to_markdown:

to_markdown(response.text)

Cụm từ tìm kiếm về mục đích của cuộc sống đã làm mọi người bối rối ở nhiều thế kỷ, các nền văn hoá và lục địa. Mặc dù không có câu trả lời nào được công nhận trên toàn cầu, nhưng có nhiều ý tưởng đã được đưa ra và câu trả lời thường phụ thuộc vào các ý tưởng, niềm tin và trải nghiệm cuộc sống của từng cá nhân.

  1. Hạnh phúc và hạnh phúc: Nhiều cá nhân tin rằng mục tiêu của cuộc sống là đạt được hạnh phúc và hạnh phúc cá nhân. Điều này có thể bao gồm việc xác định những hoạt động mang lại niềm vui, kết nối quan trọng, chăm sóc sức khoẻ thể chất và tinh thần, cũng như theo đuổi các mục tiêu và mối quan tâm cá nhân.

  2. Đóng góp ý nghĩa: Một số người tin rằng mục đích của cuộc sống là đóng góp có ý nghĩa cho thế giới. Điều này có thể bao gồm việc theo đuổi một nghề nghiệp có lợi cho người khác, tham gia các hoạt động tình nguyện hoặc từ thiện, sáng tạo ra tác phẩm nghệ thuật hoặc văn học hoặc sáng chế.

  3. Phát triển bản thân và phát triển cá nhân: Theo đuổi mục tiêu đạt được bản thân và phát triển cá nhân là một mục tiêu phổ biến khác trong cuộc sống. Mục tiêu này có thể đòi hỏi bạn học những kỹ năng mới, vượt qua ranh giới của bản thân, vượt qua trở ngại cá nhân và phát triển bản thân.

  4. Hành vi có đạo đức và đạo đức: Một số người tin rằng mục tiêu của cuộc sống là hành động có đạo đức và có đạo đức. Điều này có thể đòi hỏi họ phải tuân thủ các nguyên tắc đạo đức, làm việc đúng đắn ngay cả khi khó khăn và cố gắng làm cho thế giới trở nên tốt đẹp hơn.

  5. Thoả mãn tâm linh: Đối với một số người, mục đích sống gắn liền với niềm tin tâm linh hoặc tôn giáo. Điều này có thể kéo theo việc tìm kiếm mối quan hệ với một quyền lực cao hơn, thực hành các nghi lễ tôn giáo hoặc tuân theo các giáo lý tâm linh.

  6. Trải nghiệm cuộc sống trọn vẹn: Một số người tin rằng mục tiêu của cuộc sống là trải nghiệm tất cả những gì có thể cho cuộc sống. Điều này có thể bao gồm việc đi du lịch, thử nghiệm những điều mới, chấp nhận rủi ro và trải nghiệm những cuộc phiêu lưu mới.

  7. Cũ và tác động: Những người khác tin rằng mục đích của cuộc sống là để lại di sản và tác động lâu dài trên thế giới. Điều này có thể dẫn đến việc bạn đạt được điều gì đó đáng chú ý, được ghi nhớ về những đóng góp của mình hoặc truyền cảm hứng và động viên người khác.

  8. Tìm kiếm sự cân bằng và hài hoà: Mục đích của cuộc sống là tìm được sự cân bằng và hài hoà về mọi mặt trong cuộc sống. Điều này có thể kéo theo các nghĩa vụ cá nhân, công việc và xã hội, tìm kiếm sự bình yên và hài lòng trong tâm hồn, cũng như sống một cuộc sống phù hợp với các giá trị và tín ngưỡng của mỗi người.

Sau cùng, ý nghĩa của cuộc sống là một hành trình cá nhân và mỗi cá nhân có thể khám phá mục đích riêng thông qua trải nghiệm, suy ngẫm và tương tác với thế giới xung quanh.

Nếu API không trả về được kết quả, hãy sử dụng GenerateContentResponse.prompt_feedback để xem liệu API có bị chặn do vấn đề về an toàn liên quan đến lời nhắc hay không.

response.prompt_feedback
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}

Gemini có thể tạo nhiều câu trả lời cho một câu lệnh duy nhất. Những câu trả lời có thể có này được gọi là candidates và bạn có thể xem xét chúng để chọn ra câu trả lời phù hợp nhất làm câu trả lời.

Xem các đề xuất trả lời bằng GenerateContentResponse.candidates:

response.candidates
[content {
  parts {
    text: "The query of life\'s purpose has perplexed people across centuries, cultures, and continents. While there is no universally recognized response, many ideas have been put forth, and the response is frequently dependent on individual ideas, beliefs, and life experiences.\n\n1. **Happiness and Well-being:** Many individuals believe that the goal of life is to attain personal happiness and well-being. This might entail locating pursuits that provide joy, establishing significant connections, caring for one\'s physical and mental health, and pursuing personal goals and interests.\n\n2. **Meaningful Contribution:** Some believe that the purpose of life is to make a meaningful contribution to the world. This might entail pursuing a profession that benefits others, engaging in volunteer or charitable activities, generating art or literature, or inventing.\n\n3. **Self-realization and Personal Growth:** The pursuit of self-realization and personal development is another common goal in life. This might entail learning new skills, pushing one\'s boundaries, confronting personal obstacles, and evolving as a person.\n\n4. **Ethical and Moral Behavior:** Some believe that the goal of life is to act ethically and morally. This might entail adhering to one\'s moral principles, doing the right thing even when it is difficult, and attempting to make the world a better place.\n\n5. **Spiritual Fulfillment:** For some, the purpose of life is connected to spiritual or religious beliefs. This might entail seeking a connection with a higher power, practicing religious rituals, or following spiritual teachings.\n\n6. **Experiencing Life to the Fullest:** Some individuals believe that the goal of life is to experience all that it has to offer. This might entail traveling, trying new things, taking risks, and embracing new encounters.\n\n7. **Legacy and Impact:** Others believe that the purpose of life is to leave a lasting legacy and impact on the world. This might entail accomplishing something noteworthy, being remembered for one\'s contributions, or inspiring and motivating others.\n\n8. **Finding Balance and Harmony:** For some, the purpose of life is to find balance and harmony in all aspects of their lives. This might entail juggling personal, professional, and social obligations, seeking inner peace and contentment, and living a life that is in accordance with one\'s values and beliefs.\n\nUltimately, the meaning of life is a personal journey, and different individuals may discover their own unique purpose through their experiences, reflections, and interactions with the world around them."
  }
  role: "model"
}
finish_reason: STOP
index: 0
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}
]

Theo mặc định, mô hình này sẽ trả về một phản hồi sau khi hoàn tất toàn bộ quá trình tạo. Bạn cũng có thể tạo câu trả lời theo thời gian thực và mô hình này sẽ trả về các đoạn của phản hồi ngay khi được tạo.

Để tạo câu trả lời theo thời gian thực, hãy dùng GenerativeModel.generate_content(..., stream=True).

%%time
response = model.generate_content("What is the meaning of life?", stream=True)
CPU times: user 102 ms, sys: 25.1 ms, total: 128 ms
Wall time: 7.94 s
for chunk in response:
  print(chunk.text)
  print("_"*80)
The query of life's purpose has perplexed people across centuries, cultures, and
________________________________________________________________________________
 continents. While there is no universally recognized response, many ideas have been put forth, and the response is frequently dependent on individual ideas, beliefs, and life experiences
________________________________________________________________________________
.

1. **Happiness and Well-being:** Many individuals believe that the goal of life is to attain personal happiness and well-being. This might entail locating pursuits that provide joy, establishing significant connections, caring for one's physical and mental health, and pursuing personal goals and aspirations.

2. **Meaning
________________________________________________________________________________
ful Contribution:** Some believe that the purpose of life is to make a meaningful contribution to the world. This might entail pursuing a profession that benefits others, engaging in volunteer or charitable activities, generating art or literature, or inventing.

3. **Self-realization and Personal Growth:** The pursuit of self-realization and personal development is another common goal in life. This might entail learning new skills, exploring one's interests and abilities, overcoming obstacles, and becoming the best version of oneself.

4. **Connection and Relationships:** For many individuals, the purpose of life is found in their relationships with others. This might entail building
________________________________________________________________________________
 strong bonds with family and friends, fostering a sense of community, and contributing to the well-being of those around them.

5. **Spiritual Fulfillment:** For those with religious or spiritual beliefs, the purpose of life may be centered on seeking spiritual fulfillment or enlightenment. This might entail following religious teachings, engaging in spiritual practices, or seeking a deeper understanding of the divine.

6. **Experiencing the Journey:** Some believe that the purpose of life is simply to experience the journey itself, with all its joys and sorrows. This perspective emphasizes embracing the present moment, appreciating life's experiences, and finding meaning in the act of living itself.

7. **Legacy and Impact:** For others, the goal of life is to leave a lasting legacy or impact on the world. This might entail making a significant contribution to a particular field, leaving a positive mark on future generations, or creating something that will be remembered and cherished long after one's lifetime.

Ultimately, the meaning of life is a personal and subjective question, and there is no single, universally accepted answer. It is about discovering what brings you fulfillment, purpose, and meaning in your own life, and living in accordance with those values.
________________________________________________________________________________

Khi truyền trực tuyến, một số thuộc tính phản hồi sẽ không xuất hiện cho đến khi bạn lặp lại tất cả các đoạn phản hồi. Điều này được minh hoạ dưới đây:

response = model.generate_content("What is the meaning of life?", stream=True)

Thuộc tính prompt_feedback hoạt động:

response.prompt_feedback
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}

Nhưng các thuộc tính như text thì không:

try:
  response.text
except Exception as e:
  print(f'{type(e).__name__}: {e}')
IncompleteIterationError: Please let the response complete iteration before accessing the final accumulated
attributes (or call `response.resolve()`)

Tạo văn bản bằng hình ảnh và văn bản đầu vào

Gemini cung cấp nhiều mô hình có thể xử lý phương thức nhập đa phương thức (mô hình Gemini 1.5 và Gemini 1.0 Pro Vision) để bạn có thể nhập cả văn bản 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 dữ liệu đầu vào của lời nhắc bao gồm cả văn bản và hình ảnh, hãy sử dụng mô hình Gemini 1.5 hoặc mô hình Gemini 1.0 Pro Vision với phương thức GenerativeModel.generate_content để tạo đầu ra văn bản:

Hãy thêm một hình ảnh:

curl -o image.jpg https://t0.gstatic.com/licensed-image?q=tbn:ANd9GcQ_Kevbk21QBRy-PgB4kQpS79brbmmEG7m3VOTShAn4PecDU5H5UxrJxE3Dw1JiaG17V88QIol19-3TM2wCHw
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  405k  100  405k    0     0  6982k      0 --:--:-- --:--:-- --:--:-- 7106k
import PIL.Image

img = PIL.Image.open('image.jpg')
img

png

Sử dụng mô hình Gemini 1.5 và truyền hình ảnh vào mô hình bằng generate_content.

model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(img)

to_markdown(response.text)

Món ăn chuẩn bị món gà sốt teriyaki với cơm nâu, bông cải xanh nướng và ớt chuông.

Để cung cấp cả văn bản và hình ảnh trong một câu lệnh, hãy chuyển một danh sách chứa các chuỗi và hình ảnh:

response = model.generate_content(["Write a short, engaging blog post based on this picture. It should include a description of the meal in the photo and talk about my journey meal prepping.", img], stream=True)
response.resolve()
to_markdown(response.text)

Chuẩn bị bữa ăn là một cách tuyệt vời để tiết kiệm thời gian, tiền bạc và cũng có thể giúp bạn ăn uống lành mạnh hơn. Bữa ăn này là một ví dụ tuyệt vời về một bữa ăn lành mạnh và ngon miệng có thể dễ dàng chuẩn bị trước.

Bữa ăn này gồm cơm nâu, rau củ nướng và sốt teriyaki từ gà. Gạo lứt là loại ngũ cốc nguyên hạt có nhiều chất xơ và chất dinh dưỡng. Các loại rau củ nướng là một cách tuyệt vời để nhận được lượng vitamin và khoáng chất hằng ngày. Còn món teriyaki từ gà là nguồn đạm lành mạnh với hương vị đậm đà.

Bữa ăn này dễ chuẩn bị trước. Bạn chỉ cần nấu cơm nâu, rang rau và nấu sốt teriyaki gà. Sau đó, chia thức ăn thành từng hộp riêng rồi bảo quản trong tủ lạnh. Khi đã sẵn sàng ăn, bạn chỉ cần lấy hộp đựng ra và hâm nóng.

Bữa ăn này là một lựa chọn tuyệt vời cho những người bận rộn đang tìm cách ăn uống lành mạnh và ngon miệng. Đây cũng là một bữa ăn tuyệt vời cho những người đang cố gắng giảm cân hoặc duy trì cân nặng khỏe mạnh.

Nếu bạn đang tìm một bữa ăn lành mạnh và ngon miệng có thể dễ dàng chuẩn bị trước, thì bữa ăn này là lựa chọn tuyệt vời. Hãy dùng thử ngay hôm nay!

Số cuộc trò chuyện

Gemini giúp bạn có các cuộc trò chuyện dạng tự do qua nhiều lượt. Lớp ChatSession đơn giản hoá quá 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ư generate_content, bạn không phải lưu trữ nhật ký cuộc trò chuyện dưới dạng danh sách.

Khởi động cuộc trò chuyện:

model = genai.GenerativeModel('gemini-1.5-flash')
chat = model.start_chat(history=[])
chat
<google.generativeai.generative_models.ChatSession at 0x7b7b68250100>

Phương thức ChatSession.send_message trả về cùng một loại GenerateContentResponse như GenerativeModel.generate_content. Thao tác này cũng thêm tin nhắn của bạn và câu trả lời vào lịch sử trò chuyện:

response = chat.send_message("In one sentence, explain how a computer works to a young child.")
to_markdown(response.text)

Máy tính giống như một cỗ máy rất thông minh, có thể hiểu và làm theo hướng dẫn của chúng ta, giúp chúng ta công việc và thậm chí là chơi trò chơi cùng chúng ta!

chat.history
[parts {
   text: "In one sentence, explain how a computer works to a young child."
 }
 role: "user",
 parts {
   text: "A computer is like a very smart machine that can understand and follow our instructions, help us with our work, and even play games with us!"
 }
 role: "model"]

Bạn có thể tiếp tục gửi tin nhắn để tiếp tục cuộc trò chuyện. Sử dụng đối số stream=True để truyền trực tuyến cuộc trò chuyện:

response = chat.send_message("Okay, how about a more detailed explanation to a high schooler?", stream=True)

for chunk in response:
  print(chunk.text)
  print("_"*80)
A computer works by following instructions, called a program, which tells it what to
________________________________________________________________________________
 do. These instructions are written in a special language that the computer can understand, and they are stored in the computer's memory. The computer's processor
________________________________________________________________________________
, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program's logic. The results of these calculations and decisions are then displayed on the computer's screen or stored in memory for later use.

To give you a simple analogy, imagine a computer as a
________________________________________________________________________________
 chef following a recipe. The recipe is like the program, and the chef's actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).

In summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results.
________________________________________________________________________________

Đối tượng glm.Content chứa danh sách đối tượng glm.Part, mỗi đối tượng chứa một văn bản (chuỗi) hoặc dữ liệu cùng dòng (glm.Blob), trong đó một blob chứa dữ liệu nhị phân và mime_type. Nhật ký trò chuyện được cung cấp dưới dạng danh sách đối tượng glm.Content trong ChatSession.history:

for message in chat.history:
  display(to_markdown(f'**{message.role}**: {message.parts[0].text}'))

người dùng: Trong một câu, hãy giải thích cách máy tính hoạt động đối với trẻ nhỏ.

model: Máy tính giống như một cỗ máy rất thông minh có thể hiểu và làm theo hướng dẫn của chúng ta, giúp chúng ta công việc và thậm chí là chơi trò chơi cùng chúng ta!

user: Được rồi, vậy giải thích chi tiết hơn cho học sinh trung học được không?

model: Máy tính hoạt động bằng cách làm theo các hướng dẫn, được gọi là chương trình, cho máy tính biết việc cần làm. Những hướng dẫn này được viết bằng ngôn ngữ đặc biệt mà máy tính có thể hiểu và được lưu trữ trong bộ nhớ máy tính. Bộ xử lý của máy tính (hay CPU) đọc hướng dẫn từ bộ nhớ và thực hiện chúng, thực hiện phép tính và đưa ra quyết định dựa trên logic của chương trình. Sau đó, kết quả của những tính toán và quyết định này được hiển thị trên màn hình của máy tính hoặc được lưu trữ trong bộ nhớ để sử dụng sau này.

Để có ví dụ đơn giản, hãy tưởng tượng một chiếc máy tính như một đầu bếp đang làm theo công thức. Công thức này giống như chương trình và hành động của đầu bếp giống như hướng dẫn mà máy tính làm theo. Người đầu bếp đọc công thức nấu ăn (chương trình) và thực hiện các thao tác như tập hợp nguyên liệu (tìm nạp dữ liệu từ bộ nhớ), trộn chúng với nhau (thực hiện phép tính) và nấu nướng (xử lý dữ liệu). Sau đó, món ăn cuối cùng (đầu ra) sẽ được trình bày trên một đĩa (màn hình máy tính).

Tóm lại, máy tính hoạt động bằng cách thực thi một loạt lệnh, được lưu trữ trong bộ nhớ của máy tính, để thực hiện các phép tính, đưa ra quyết định và hiển thị hoặc lưu trữ kết quả.

Số lượng mã thông báo

Mô hình ngôn ngữ lớn có cửa sổ ngữ cảnh và độ dài ngữ cảnh thường được đo bằng số mã thông báo. Với API Gemini, bạn có thể xác định số lượng mã thông báo cho mỗi đối tượng glm.Content bất kỳ. Trong trường hợp đơn giản nhất, bạn có thể chuyển một chuỗi truy vấn đến phương thức GenerativeModel.count_tokens như sau:

model.count_tokens("What is the meaning of life?")
total_tokens: 7

Tương tự, bạn có thể kiểm tra token_count cho ChatSession:

model.count_tokens(chat.history)
total_tokens: 501

Sử dụng tính năng nhúng

Nhúng là kỹ thuật dùng để biểu thị thông tin dưới dạng danh sách các số dấu phẩy động trong một mảng. Với Gemini, bạn có thể trình bày văn bản (từ, câu và khối văn bản) dưới dạng vectơ hoá, giúp bạn dễ dàng so sánh và đối chiếu các tệp nhúng. Ví dụ: hai văn bản có chung một chủ đề hoặc tình cảm nên có các nhúng tương tự nhau. Có thể xác định những nội dung tương tự thông qua các kỹ thuật so sánh toán học, chẳng hạn như tính tương đồng về cosin. Để biết thêm về cách thức và lý do bạn nên sử dụng tính năng nhúng, hãy tham khảo Hướng dẫn về tính năng nhúng.

Sử dụng phương thức embed_content để tạo các video nhúng. Phương thức này xử lý việc nhúng cho các tác vụ sau (task_type):

Loại việc cần làm Nội dung mô tả
RETRIEVAL_QUERY Chỉ định văn bản đã cho là truy vấn trong cài đặt tìm kiếm/truy xuất.
RETRIEVAL_DOCUMENT Chỉ định văn bản đã cho là một tài liệu trong cài đặt tìm kiếm/truy xuất. Để sử dụng loại tác vụ này, bạn cần có title.
SEMANTIC_SIMILARITY Chỉ định văn bản đã cho sẽ được dùng cho tính tương đồng về mặt ngữ nghĩa (STS).
PHÂN LOẠI Chỉ định việc các nội dung nhúng sẽ được dùng để phân loại.
CỤM Chỉ định việc các nội dung nhúng sẽ được dùng để phân cụm.

Thao tác sau đây sẽ tạo tệp nhúng cho một chuỗi để truy xuất tài liệu:

result = genai.embed_content(
    model="models/embedding-001",
    content="What is the meaning of life?",
    task_type="retrieval_document",
    title="Embedding of single string")

# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED]')
[-0.003216741, -0.013358698, -0.017649598, -0.0091 ... TRIMMED]

Để xử lý các lô chuỗi, hãy chuyển danh sách chuỗi trong content:

result = genai.embed_content(
    model="models/embedding-001",
    content=[
      'What is the meaning of life?',
      'How much wood would a woodchuck chuck?',
      'How does the brain work?'],
    task_type="retrieval_document",
    title="Embedding of list of strings")

# A list of inputs > A list of vectors output
for v in result['embedding']:
  print(str(v)[:50], '... TRIMMED ...')
[0.0040260437, 0.004124458, -0.014209415, -0.00183 ... TRIMMED ...
[-0.004049845, -0.0075574904, -0.0073463684, -0.03 ... TRIMMED ...
[0.025310587, -0.0080734305, -0.029902633, 0.01160 ... TRIMMED ...

Tuy hàm genai.embed_content chấp nhận các chuỗi hoặc danh sách chuỗi đơn giản, nhưng thực ra hàm này được xây dựng xung quanh loại glm.Content (chẳng hạn như GenerativeModel.generate_content). Các đối tượng glm.Content là đơn vị cuộc trò chuyện chính trong API.

Mặc dù đối tượng glm.Content là đa phương thức, phương thức embed_content chỉ hỗ trợ nhúng văn bản. Thiết kế này giúp API có thể mở rộng sang nhúng đa phương thức.

response.candidates[0].content
parts {
  text: "A computer works by following instructions, called a program, which tells it what to do. These instructions are written in a special language that the computer can understand, and they are stored in the computer\'s memory. The computer\'s processor, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program\'s logic. The results of these calculations and decisions are then displayed on the computer\'s screen or stored in memory for later use.\n\nTo give you a simple analogy, imagine a computer as a chef following a recipe. The recipe is like the program, and the chef\'s actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).\n\nIn summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results."
}
role: "model"
result = genai.embed_content(
    model = 'models/embedding-001',
    content = response.candidates[0].content)

# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED ...')
[-0.013921871, -0.03504407, -0.0051786783, 0.03113 ... TRIMMED ...

Tương tự, nhật ký trò chuyện chứa một danh sách các đối tượng glm.Content mà bạn có thể truyền trực tiếp đến hàm embed_content:

chat.history
[parts {
   text: "In one sentence, explain how a computer works to a young child."
 }
 role: "user",
 parts {
   text: "A computer is like a very smart machine that can understand and follow our instructions, help us with our work, and even play games with us!"
 }
 role: "model",
 parts {
   text: "Okay, how about a more detailed explanation to a high schooler?"
 }
 role: "user",
 parts {
   text: "A computer works by following instructions, called a program, which tells it what to do. These instructions are written in a special language that the computer can understand, and they are stored in the computer\'s memory. The computer\'s processor, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program\'s logic. The results of these calculations and decisions are then displayed on the computer\'s screen or stored in memory for later use.\n\nTo give you a simple analogy, imagine a computer as a chef following a recipe. The recipe is like the program, and the chef\'s actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).\n\nIn summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results."
 }
 role: "model"]
result = genai.embed_content(
    model = 'models/embedding-001',
    content = chat.history)

# 1 input > 1 vector output
for i,v in enumerate(result['embedding']):
  print(str(v)[:50], '... TRIMMED...')
[-0.014632266, -0.042202696, -0.015757175, 0.01548 ... TRIMMED...
[-0.010979066, -0.024494737, 0.0092659835, 0.00803 ... TRIMMED...
[-0.010055617, -0.07208932, -0.00011750793, -0.023 ... TRIMMED...
[-0.013921871, -0.03504407, -0.0051786783, 0.03113 ... TRIMMED...

Các trường hợp sử dụng nâng cao

Các phần sau đây thảo luận về các trường hợp sử dụng nâng cao và thông tin chi tiết về cấp thấp hơn của SDK Python cho API Gemini.

Cài đặt an toàn

Đối số safety_settings cho phép bạn định cấu hình những gì mô hình chặn và cho phép trong cả lời nhắc và phản hồi. Theo mặc định, các chế độ cài đặt an toàn sẽ chặn nội dung có xác suất là nội dung không an toàn trên tất cả các phương diện ở mức trung bình và/hoặc cao. Tìm hiểu thêm về Chế độ cài đặt an toàn.

Nhập một câu lệnh có vấn đề rồi chạy mô hình với chế độ cài đặt an toàn mặc định. Thao tác này sẽ không trả về bất kỳ đề xuất nào:

response = model.generate_content('[Questionable prompt here]')
response.candidates
[content {
  parts {
    text: "I\'m sorry, but this prompt involves a sensitive topic and I\'m not allowed to generate responses that are potentially harmful or inappropriate."
  }
  role: "model"
}
finish_reason: STOP
index: 0
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}
]

prompt_feedback sẽ cho bạn biết bộ lọc an toàn nào đã chặn lời nhắc:

response.prompt_feedback
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}

Bây giờ, hãy cung cấp cùng một lời nhắc cho mô hình với các chế độ cài đặt an toàn mới được thiết lập để có thể bạn sẽ nhận được phản hồi.

response = model.generate_content('[Questionable prompt here]',
                                  safety_settings={'HARASSMENT':'block_none'})
response.text

Ngoài ra, xin lưu ý rằng mỗi đề xuất đều có safety_ratings riêng, trong trường hợp lời nhắc vượt qua nhưng từng câu trả lời không vượt qua được quy trình kiểm tra an toàn.

Mã hoá thông báo

Các phần trước dựa vào SDK để giúp bạn dễ dàng gửi lời nhắc đến API. Phần này cung cấp kiểu đầy đủ tương đương với ví dụ trước, nhờ đó, bạn có thể hiểu rõ hơn các thông tin chi tiết ở cấp thấp hơn về cách SDK mã hoá thông báo.

Nền tảng của SDK Python là thư viện ứng dụng google.ai.generativelanguage:

import google.ai.generativelanguage as glm

SDK cố gắng chuyển đổi thông báo của bạn thành đối tượng glm.Content. Đối tượng này chứa danh sách các đối tượng glm.Part, trong đó mỗi đối tượng chứa:

  1. text (chuỗi)
  2. inline_data (glm.Blob), trong đó một blob chứa data nhị phân và mime_type.

Bạn cũng có thể chuyển bất kỳ lớp nào trong số này dưới dạng từ điển tương đương.

Vì vậy, đối tượng được nhập đầy đủ tương đương với ví dụ trước là:

model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(
    glm.Content(
        parts = [
            glm.Part(text="Write a short, engaging blog post based on this picture."),
            glm.Part(
                inline_data=glm.Blob(
                    mime_type='image/jpeg',
                    data=pathlib.Path('image.jpg').read_bytes()
                )
            ),
        ],
    ),
    stream=True)
response.resolve()

to_markdown(response.text[:100] + "... [TRIMMED] ...")

Chuẩn bị bữa ăn là một cách tuyệt vời để tiết kiệm thời gian, tiền bạc và cũng có thể giúp bạn ăn uống lành mạnh hơn. Bởi ... [TRIMMED] ...

Cuộc trò chuyện nhiều lượt

Mặc dù lớp genai.ChatSession trình bày trước đó có thể xử lý nhiều trường hợp sử dụng, nhưng lớp này có đưa ra một số giả định. Nếu trường hợp sử dụng của bạn không phù hợp với cách triển khai cuộc trò chuyện này, bạn nên nhớ rằng genai.ChatSession chỉ là một trình bao bọc xung quanh GenerativeModel.generate_content. Ngoài các yêu cầu một lần, API này còn có thể xử lý các cuộc trò chuyện nhiều lượt.

Các thông báo riêng lẻ là đối tượng glm.Content hoặc từ điển tương thích, như đã thấy trong các phần trước. Theo từ điển, thông báo yêu cầu khoá roleparts. role trong cuộc trò chuyện có thể là user (cung cấp câu lệnh) hoặc model (cung cấp câu trả lời).

Truyền danh sách đối tượng glm.Content và danh sách đó sẽ được coi là cuộc trò chuyện nhiều lượt:

model = genai.GenerativeModel('gemini-1.5-flash')

messages = [
    {'role':'user',
     'parts': ["Briefly explain how a computer works to a young child."]}
]
response = model.generate_content(messages)

to_markdown(response.text)

Hãy hình dung máy tính là một người bạn thực sự thông minh có thể giúp bạn nhiều việc. Giống như bộ não của bạn để suy nghĩ và học hỏi, máy tính cũng có bộ não, được gọi là bộ xử lý. Nó giống như ông chủ của máy tính, cho nó biết việc cần làm.

Bên trong máy tính có một nơi đặc biệt tên là bộ nhớ, giống như một hộp lưu trữ lớn. Trợ lý ghi nhớ tất cả mọi việc bạn yêu cầu Trợ lý thực hiện, chẳng hạn như mở trò chơi hoặc phát video.

Khi nhấn các nút trên bàn phím hoặc dùng chuột nhấp vào các mục trên màn hình, bạn đang gửi tin nhắn tới máy tính. Các thông điệp này di chuyển qua các dây đặc biệt, hay còn gọi là cáp, đến bộ xử lý.

Bộ xử lý sẽ đọc các tin nhắn và cho máy tính biết việc cần làm. Bộ xử lý có thể mở các chương trình, hiển thị cho bạn ảnh hoặc thậm chí phát nhạc cho bạn.

Tất cả những thứ bạn nhìn thấy trên màn hình đều do thẻ đồ hoạ tạo ra, giống như một nghệ sĩ thần kỳ bên trong chiếc máy tính. Công nghệ này sẽ nhận hướng dẫn của người xử lý và biến chúng thành những hình ảnh và video đầy màu sắc.

Để lưu các trò chơi, video hoặc hình ảnh yêu thích của bạn, máy tính sử dụng một không gian lưu trữ đặc biệt có tên là ổ đĩa cứng. Nó giống như một thư viện khổng lồ nơi máy tính có thể lưu giữ an toàn tất cả những thứ quý giá của bạn.

Còn khi bạn muốn kết nối với Internet để chơi trò chơi với bạn bè hoặc xem các video vui nhộn, máy tính sử dụng một thứ gọi là thẻ mạng để gửi và nhận tin nhắn thông qua cáp Internet hoặc tín hiệu Wi-Fi.

Vì vậy, giống như bộ não của bạn giúp bạn học tập và giải trí, bộ xử lý, bộ nhớ, thẻ đồ hoạ, ổ đĩa cứng và thẻ mạng của máy tính đều phối hợp hoạt động để biến máy tính thành một người bạn siêu thông minh có thể giúp bạn làm những điều tuyệt vời!

Để tiếp tục cuộc trò chuyện, hãy thêm câu trả lời và một tin nhắn khác.

messages.append({'role':'model',
                 'parts':[response.text]})

messages.append({'role':'user',
                 'parts':["Okay, how about a more detailed explanation to a high school student?"]})

response = model.generate_content(messages)

to_markdown(response.text)

Về cốt lõi, máy tính là một cỗ máy có thể được lập trình để thực hiện một tập hợp các hướng dẫn. API này bao gồm một số thành phần thiết yếu hoạt động cùng nhau để xử lý, lưu trữ và hiển thị thông tin:

1. Bộ xử lý (CPU): – Bộ não của máy tính. – Thực hiện hướng dẫn và tính toán. – Tốc độ được đo bằng gigahertz (GHz). – Nhiều GHz hơn thường đồng nghĩa với việc xử lý nhanh hơn.

2. Bộ nhớ (RAM): - Bộ nhớ tạm thời cho dữ liệu đang được xử lý. – Lưu lại hướng dẫn và dữ liệu trong khi chương trình chạy. – Được đo bằng gigabyte (GB). – Dung lượng RAM lớn hơn cho phép chạy đồng thời nhiều chương trình hơn.

3. Bộ nhớ (HDD/SSD): – Bộ nhớ vĩnh viễn cho dữ liệu. – Lưu trữ hệ điều hành, chương trình và tệp người dùng. – Được đo bằng gigabyte (GB) hoặc terabyte (TB). – Ổ đĩa cứng (HDD) là loại truyền thống, chậm hơn và rẻ hơn. – Ổ thể rắn (SSD) mới hơn, nhanh hơn và đắt hơn.

4. Card đồ hoạ (GPU): - Xử lý và hiển thị hình ảnh. – Cần thiết cho việc chơi trò chơi, chỉnh sửa video và các công việc khác nặng về đồ hoạ. – Được đo bằng RAM video (VRAM) và tốc độ xung nhịp.

5. Bo mạch chủ: – Kết nối tất cả thành phần. – Cung cấp các nguồn năng lượng và lộ trình giao tiếp.

6. Thiết bị đầu vào/đầu ra (I/O): – Cho phép người dùng tương tác với máy tính. – Ví dụ: bàn phím, chuột, màn hình, máy in.

7. Hệ điều hành (OS): - Phần mềm quản lý tài nguyên của máy tính. – Cung cấp giao diện người dùng và chức năng cơ bản. – Ví dụ: Windows, macOS, Linux.

Khi bạn chạy một chương trình trên máy tính, những điều sau sẽ xảy ra:

  1. Hướng dẫn chương trình được tải từ bộ nhớ vào bộ nhớ.
  2. Bộ xử lý đọc hướng dẫn từ bộ nhớ và thực thi từng hướng dẫn một.
  3. Nếu lệnh có liên quan đến các phép tính, thì bộ xử lý sẽ thực hiện các phép tính này bằng đơn vị logic số học (ALU).
  4. Nếu lệnh liên quan đến dữ liệu, thì bộ xử lý sẽ đọc hoặc ghi vào bộ nhớ.
  5. Kết quả tính toán hoặc thao tác dữ liệu được lưu trữ trong bộ nhớ.
  6. Nếu cần hiển thị nội dung nào đó trên màn hình, chương trình sẽ gửi dữ liệu cần thiết đến thẻ đồ hoạ.
  7. Thẻ đồ hoạ xử lý và gửi dữ liệu đến màn hình để hiển thị dữ liệu.

Quá trình này sẽ tiếp tục cho đến khi chương trình hoàn tất tác vụ hoặc người dùng chấm dứt.

Cấu hình tạo

Đối số generation_config cho phép bạn sửa đổi các tham số tạo. Mọi lời nhắc bạn gửi đến mô hình đều bao gồm các giá trị tham số kiểm soát cách mô hình tạo ra phản hồi.

model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(
    'Tell me a story about a magic backpack.',
    generation_config=genai.types.GenerationConfig(
        # Only one candidate for now.
        candidate_count=1,
        stop_sequences=['x'],
        max_output_tokens=20,
        temperature=1.0)
)
text = response.text

if response.candidates[0].finish_reason.name == "MAX_TOKENS":
    text += '...'

to_markdown(text)

Ngày xửa ngày xưa, ở một thị trấn nhỏ nép mình giữa những ngọn đồi xanh tươi, có một cô gái trẻ tên là...

Bước tiếp theo

  • Thiết kế câu lệnh là quá trình tạo các câu lệnh để lấy câu trả lời mong muốn từ các mô hình ngôn ngữ. Việc viết câu lệnh có cấu trúc hợp lý là một phần quan trọng để đảm bảo câu trả lời chính xác và chất lượng cao từ mô hình ngôn ngữ. Tìm hiểu các phương pháp hay nhất để viết lời nhắc.
  • Gemini cung cấp một số biến thể mô hình để đáp ứng nhu cầu của nhiều trường hợp sử dụng, chẳng hạn như loại dữ liệu đầu vào và độ phức tạp, cách triển khai cho cuộc trò chuyện hoặc các nhiệm vụ khác về ngôn ngữ của hộp thoại, cũng như các quy tắc ràng buộc về kích thước. Tìm hiểu về các mẫu Gemini hiện có.
  • Gemini đưa ra các lựa chọn để yêu cầu tăng hạn mức giá. Giới hạn tốc độ cho các mô hình Gemini-Pro là 60 yêu cầu mỗi phút (RPM).