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 bắt đầu nhanh này minh hoạ cách sử dụng SDK Python cho Gemini API. Nền tảng này 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 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 vào API để sử dụng Gemini.
  2. Tạo câu trả lời bằng văn bản từ thông tin đầu vào.
  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. 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 quy trình khởi động nhanh này trong Google Colab để chạy sổ tay này ngay trong trình duyệt mà không cần phải định cấu hình môi trường bổ sung.

Ngoài ra, để hoàn thành quy trình bắt đầu nhanh này tại địa phương, 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:

  • 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 Gemini API có 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 Gemini API, trước tiên, bạn phải có khoá API. Nếu bạn chưa có khoá, hãy tạo khoá chỉ bằng một cú nhấp chuột trong Google AI Studio.

Tải khoá API

Trong Colab, hãy thêm khoá vào trình quản lý khoá bí mật bên dưới biểu tượng "🔑" trên bảng điều khiển bên trái. Đặt tên cho tệp đó là GOOGLE_API_KEY.

Sau khi bạn có khoá API, hãy chuyể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á cho 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)

Liệt kê mô hình

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

  • gemini-1.5-flash: mô hình đa phương thức nhanh nhất của chúng tôi
  • gemini-1.5-pro: mô hình đa phương thức mạnh nhất và thông minh nhất của chúng tôi
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

Tạo văn bản bằng cách nhập văn bản

Đối với những câu lệnh chỉ ở dạng 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 tính năng 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, còn văn bản làm đầu ra.

Trong trường hợp đơn giản nhất, bạn có thể truyền một chuỗi lời nhắc đến 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, trình truy cập response.text là tất cả những gì bạn cần. Để hiển thị văn bản Markdown đã định dạng, hãy sử 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 đã khiến mọi người bối rối qua nhiều thế kỷ, nhiều 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 rộng rãi, nhưng 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 sống của cá nhân.

  1. Niềm vui 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à sức khỏe thể chất cá nhân. Điều này có thể đòi hỏi bạn phải theo đuổi những niềm vui mang lại niềm vui, tạo dựng mối gắn kết sâu sắc, 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 có ý 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. Việc này có thể bao gồm việc theo đuổi một nghề mang lại lợi ích 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 văn học hoặc nghệ thuật hay sáng chế.

  3. Tự nhận thức và phát triển cá nhân: Theo đuổi việc tự nhận thức 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. Quá trình này có thể đòi hỏi bạn học những kỹ năng mới, vượt qua những ranh giới của bản thân, đối mặt với những 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ể bao gồm việc tuân thủ các nguyên tắc đạo đức của một người, làm điều đúng đắn ngay cả khi khó khăn và cố gắng làm cho thế giới tốt đẹp hơn.

  5. Thực hiện tinh thần: Đối với một số người, mục đích của cuộc 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ể bao gồm việc tìm kiếm một mối liên 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ố cá nhân tin rằng mục tiêu của cuộc sống là trải nghiệm tất cả những gì mang lại. Bạn có thể sẽ phải đi du lịch, thử những điều mới, chấp nhận rủi ro và khám phá những điều mới mẻ.

  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. Việc này có thể giúp bạn hoàn thành các mục tiêu đáng chú ý, được ghi nhớ nhờ những đóng góp của một người, hoặc truyền cảm hứng và tạo động lực cho người khác.

  8. Tìm sự cân bằng và hài hoà: Đối với một số người, mục đích của cuộc sống là tìm thấy sự cân bằng và hài hoà trong mọi khía cạnh cuộc sống. Điều này có thể dẫn đến việc phải thực hiện 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 giá trị và tín ngưỡng của một người.

Suy cho cùng, ý nghĩa của cuộc sống chính là một hành trình cá nhân. Mỗi cá nhân đều có thể khám phá mục đích độc đáo của riêng mình 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ề kết quả, hãy sử dụng GenerateContentResponse.prompt_feedback để xem kết quả đó có bị chặn do những 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 ra nhiều câu trả lời có thể có cho một câu lệnh. Những câu trả lời này được gọi là candidates và bạn có thể xem xét để chọn câu trả lời phù hợp nhất.

Xem các câu 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 trả về phản hồi sau khi hoàn tất toàn bộ quy trình tạo. Bạn cũng có thể truyền trực tuyến phản hồi khi nó được tạo và mô hình sẽ trả về các phần của phản hồi ngay khi chúng được tạo.

Để hiện câu trả lời theo thời gian thực, hãy sử 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 có sẵ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
}

Tuy nhiên, 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 từ dữ liệu đầu vào dạng hình ảnh và văn bản

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) để 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 câu lệnh nhập bao gồm cả văn bản và hình ảnh, hãy sử dụng Gemini 1.5 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 gà sốt teriyaki cùng cơm gạo lứt, bông cải xanh rang và ớt chuông.

Để cung cấp cả văn bản và hình ảnh trong câu lệnh, hãy truyề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à cách tuyệt vời để tiết kiệm thời gian và tiền bạc, đồng thời 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 và có thể dễ dàng được chuẩn bị trước.

Bữa ăn này có cơm lứt, rau củ nướng và sốt teriyaki gà. Gạo lứt là một loại hạt nguyên hạt giàu chất xơ và chất dinh dưỡng. Rau quay là cách tuyệt vời để bổ sung lượng vitamin và khoáng chất hằng ngày. Ngoài ra, sốt teriyaki gà là một nguồn protein nạc và nhiều hương vị.

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

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 kiếm một món ăn ngon lành và lành mạnh. Đâ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ì một cân nặng lành mạnh.

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

Cuộc trò chuyện

Gemini tạo điều kiện để bạn trò chuyện tự do ở nhiều chặng. 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.

Bắt đầu 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 loại GenerateContentResponse như GenerativeModel.generate_content. Thao tác này cũng sẽ thêm tin nhắn và câu trả lời của bạn vào nhật ký 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 thông minh, có thể hiểu và làm theo các chỉ dẫn của chúng ta, giúp chúng ta hoàn thành công việc và thậm chí 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.
________________________________________________________________________________

Các đối tượng glm.Content chứa một danh sách đối tượng glm.Part, trong đó mỗi đối tượng chứa một văn bản (chuỗi) hoặc nội tuyến (glm.Blob), trong đó blob chứa dữ liệu nhị phân và mime_type. Nhật ký trò chuyện có sẵn 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: Giải thích cách hoạt động của máy tính cho trẻ nhỏ trong một câu.

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

người dùng: Ok, thế nào là một phần giải thích chi tiết hơn cho học sinh trung học?

model: Máy tính hoạt động bằng cách tuân theo các lệnh, được gọi là một chương trình, cho biết việc cần làm. Những lệnh này được viết bằng một ngôn ngữ đặc biệt mà máy tính có thể hiểu và được lưu trữ trong bộ nhớ của máy tính. Bộ xử lý hoặc CPU của máy tính đọc các lệnh từ bộ nhớ và thực hiện các lệnh đó, thực hiện các phép tính và đưa ra quyết định dựa trên logic của chương trình. Kết quả của các tính toán và quyết định này sau đó đượ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.

Một ví dụ tương tự như vậy, hãy tưởng tượng một chiếc máy tính như một đầu bếp đang nấu theo một công thức. Công thức giống như chương trình và hành động của đầu bếp sẽ giống như hướng dẫn mà máy tính tuân theo. Đầu bếp đọc công thức (chương trình) và thực hiện các thao tác như thu thập nguyên liệu (tìm nạp dữ liệu từ bộ nhớ), kết hợp chúng với nhau (thực hiện tính toán) và nấu (xử lý dữ liệu). Sau đó, món ăn cuối cùng (đầu ra) được trình bày trên đĩ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ớ, để thực hiện các phép tính, ra quyết định và hiển thị hoặc lưu trữ kết quả.

Đếm mã

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 lường theo số lượng mã thông báo. Với Gemini API, bạn có thể xác định số lượng mã thông báo cho mỗi đối tượng genai.protos.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 vào 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

Dùng tính năng nhúng

Nhúng là kỹ thuật dùng để biểu diễn 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ể trình bày văn bản (từ, câu và khối văn bản) ở dạng vectơ, giúp bạn 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 chủ đề hoặc một tình cảm phải có các liên kết nhúng tương tự nhau. Các nội dung này có thể được xác định thông qua các kỹ thuật so sánh toán học 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ề nhúng.

Sử dụng phương thức embed_content để tạo các mục 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à một truy vấn trong chế độ 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 chế độ 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 Cho biết văn bản đã cho sẽ được dùng để xác định tính tương đồng về mặt văn bản theo ngữ nghĩa (STS).
PHÂN LOẠI Cho biết các mục nhúng sẽ được dùng để phân loại.
PHÂN TÍCH Chỉ định xem các mục nhúng có được dùng để phân cụm hay không.

Hàm sau đây tạo ra một mục nhúng cho một chuỗi đơn để 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 các 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 ...

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

Mặc dù đối tượng genai.protos.Content là đa phương thức, nhưng phương thức embed_content chỉ hỗ trợ tính năng nhúng văn bản. Thiết kế này cho phép API khả năng mở rộng sang các mục 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 danh sách các đối tượng genai.protos.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 ở cấp thấp hơn của SDK Python cho Gemini API.

Cài đặt an toàn

Đối số safety_settings cho phép bạn định cấu hình những nội dung mà mô hình chặn và cho phép trong cả lời nhắc và phản hồi. Theo mặc định, chế độ cài đặt an toàn sẽ chặn nội dung có xác suất trung bình và/hoặc cao là nội dung không an toàn trên tất cả phương diện. 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 đề và chạy mô hình với chế độ cài đặt an toàn mặc định và 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 đưa ra câu lệnh tương tự cho mô hình đó với các chế độ cài đặt an toàn mới được thiết lập và bạn có thể 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, phòng 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á tin nhắn

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 một ví dụ có định dạng đầy đủ tương đương với ví dụ trước để bạn có thể hiểu rõ hơn thông tin ở cấp thấp hơn về cách SDK mã hoá thông báo.

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

  1. một text (chuỗi)
  2. inline_data (genai.protos.Blob), trong đó blob chứa data nhị phân và mime_type.
  3. hoặc các loại dữ liệu khác.

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

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

model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(
    genai.protos.Content(
        parts = [
            genai.protos.Part(text="Write a short, engaging blog post based on this picture."),
            genai.protos.Part(
                inline_data=genai.protos.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à cách tuyệt vời để tiết kiệm thời gian và tiền bạc, đồng thời 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 đã hiển thị 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, hãy 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 đơn lẻ, ứng dụng này có thể xử lý các cuộc trò chuyện nhiều lượt.

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

Truyền một danh sách đối tượng genai.protos.Content và danh sách này 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 tưởng tượng máy tính là một người bạn thực sự thông minh và có thể giúp bạn làm nhiều việc. Giống như bạn có bộ não để 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 và nói cho máy tính biết phải làm gì.

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

Khi bạn nhấn các nút trên bàn phím hoặc nhấp vào các mục trên màn hình bằng chuột, bạn đang gửi tin nhắn đến máy tính. Những tin nhắn này truyền qua các dây đặc biệt, được gọi là cáp, tới bộ xử lý.

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

Tất cả những gì bạn nhìn thấy trên màn hình đều được tạo ra bằng thẻ đồ họa, giống như một nghệ sĩ ảo thuật bên trong máy tính. Ứng dụng này lấy chỉ dẫn của bộ xử lý rồi biến chúng thành những bức ảnh và video đầy màu sắc.

Để lưu trò chơi, video hoặc hình ảnh yêu thích của bạn, máy tính sử dụng không gian lưu trữ đặc biệt được gọi là ổ đĩa cứng. Giống như một thư viện khổng lồ, 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ẽ sử dụng một thứ gọi là thẻ mạng để gửi và nhận tin nhắn qua cáp Internet hoặc tín hiệu Wi-Fi.

Vì vậy, cũng 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 cùng hoạt động để biến máy tính của bạn 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 đáng kinh ngạc!

Để 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ơ bản, máy tính là một 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. Giao diện này bao gồm một số thành phần thiết yếu phối hợp với 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 thi các chỉ dẫn và thực hiện các phép tính. – Tốc độ được đo bằng gigahertz (GHz). - Thông thường, GHz càng cao thì xử lý càng nhanh.

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

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 của người dùng. – Được đo bằng gigabyte (GB) hoặc terabyte (TB). – Ổ đĩa cứng (HDD) 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. Thẻ đồ hoạ (GPU): – Xử lý và hiển thị hình ảnh. – Cần thiết để 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ả các thành phần. – Cung cấp sức mạnh và các lộ trình liên lạc.

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. Các hướng dẫn của chương trình sẽ được tải từ bộ nhớ vào bộ nhớ.
  2. Bộ xử lý đọc các lệnh từ bộ nhớ rồi thực thi từng lệnh một.
  3. Nếu hướng dẫn có liên quan đến các phép tính, thì bộ xử lý sẽ thực hiện bằng cách sử dụng đơn vị logic số học (ALU).
  4. Nếu lệnh có 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 sẽ được lưu trữ trong bộ nhớ.
  6. Nếu chương trình 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 tới thẻ đồ hoạ.
  7. Cạc đồ hoạ xử lý dữ liệu và gửi dữ liệu đến màn hình để hiển thị dữ liệu.

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

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 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 tạo câu trả lờ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, tại một thị trấn nhỏ nép mình giữa những ngọn đồi xanh mướt, có một cô bé tên là...

Bước tiếp theo

  • Thiết kế câu lệnh là quá trình tạo câu lệnh để gợi ra phản hồ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 thiết yếu để đảm bảo các câu trả lời chính xác và 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 có một số biến thể của mô hình để đáp ứng nhu cầu của nhiều trường hợp sử dụng, chẳng hạn như các kiểu dữ liệu đầu vào và độ phức tạp, phương thức triển khai cho tính năng trò chuyện hoặc các tác vụ khác liên quan đến ngôn ngữ của hộp thoại, cũng như giới hạn về kích thước. Tìm hiểu về các mô hình Gemini hiện có.