Để kết nối và sử dụng Gemini với Go, LLM của Google, người ta có thể sử dụng Go SDK chính thức để làm điều này. Trong bài viết này, chúng ta chỉ sẽ hiển thị một ví dụ trò chuyện đơn giản để chứng minh cách thức hoạt động của nó với Go.
Ví dụ này chỉ yêu cầu mô hình dịch một số tiếng Anh sang tiếng Trung và nhận đầu ra của nó. Mã thực tế trông như thế này:
var client *genai.Client
// geminiOnce.Do(func() {
client, err = genai.NewClient(ctx, option.WithAPIKey(string(apiKey)))
if err != nil {
log.Fatal(err)
}
model := client.GenerativeModel("gemini-1.5-flash-latest")
model.SetTemperature(0.1)
resp, err := model.GenerateContent(ctx, genai.Text("Translate 'Hello world' to Chinese"))
if err != nil {
log.Printf("Error generating content: %v", err)
return "", err
}
for _, candidate := range resp.Candidates {
if candidate != nil {
if candidate.Content.Parts != nil {
log.Printf("Output: %s", string(candidate.Content.Parts[0].(genai.Text)))
}
}
}
Dưới đây là lời giải thích từng bước về đoạn mã được cung cấp:
1. Khai báo biến Client
var client *genai.Client
- Một biến con trỏ client kiểu
*genai.Client
được khai báo. - Biến này sẽ giữ phiên bản client được khởi tạo để tương tác với dịch vụ
genai
.
2. Khởi tạo Client
client, err = genai.NewClient(ctx, option.WithAPIKey(string(apiKey)))
if err != nil {
log.Fatal(err)
}
- genai.NewClient(ctx, option.WithAPIKey(string(apiKey))):
- Tạo một phiên bản client mới sử dụng thư viện genai.
- ctx: Một context.Context được truyền, cho phép hủy yêu cầu hoặc kiểm soát thời gian chờ.
- option.WithAPIKey(string(apiKey)): Chỉ định khóa API để xác thực client. Khóa API có thể được tạo trên Google AI Studio bằng cách tạo một dự án mới.
- Xử lý lỗi:
- Nếu err không phải là nil, chương trình ghi nhật ký lỗi và thoát bằng log.Fatal(err).
3. Chọn mô hình Generative
model := client.GenerativeModel("gemini-1.5-flash-latest")
- Phương thức GenerativeModel của client chọn một phiên bản mô hình cụ thể để làm việc.
- Ở đây, mô hình là "gemini-1.5-flash-latest", có lẽ là một mô hình AI generative. Có các mô hình khác có sẵn trong đó 2.0 là mô hình mới nhất đang trong giai đoạn thử nghiệm.
4. Thiết lập tham số mô hình
model.SetTemperature(0.1)
- Thiết lập nhiệt độ của mô hình thành 0.1.
- Nhiệt độ điều khiển tính ngẫu nhiên của đầu ra.
- Nhiệt độ thấp hơn (ví dụ: 0.1) tạo ra kết quả xác định hơn, trong khi nhiệt độ cao hơn giới thiệu nhiều biến thể hơn.
Có thể thiết lập các tham số khác bằng cách gọi model.SetXXX(), chẳng hạn như độ dài token đầu ra,
5. Tạo nội dung
resp, err := model.GenerateContent(ctx, genai.Text("Translate 'Hello world' to Chinese"))
if err != nil {
log.Printf("Error generating content: %v", err)
return "", err
}
- GenerateContent(ctx, genai.Text(...)):
- Gửi yêu cầu tạo nội dung đến mô hình với đầu vào "Translate 'Hello world' to Chinese".
- Đầu vào được gói trong
genai.Text
. Một loại xử lý văn bản chung, nó cũng hỗ trợ các kiểu khác như Blob(Hình ảnh), FunctionCall,
6. Xử lý phản hồi
for _, candidate := range resp.Candidates {
if candidate != nil {
if candidate.Content.Parts != nil {
log.Printf("Output: %s", string(candidate.Content.Parts[0].(genai.Text)))
}
}
}
- Lặp qua Candidates:
resp.Candidates
chứa các đầu ra có thể từ mô hình. Số lượng ứng viên có thể được đặt ở bước 4 vớimodel.SetCandidateCount()
. Giá trị mặc định là 1 và hiện tại nó cũng chỉ hỗ trợ 1.- Vòng lặp xử lý từng ứng viên trong phản hồi.
- Vì ngữ cảnh là một cuộc trò chuyện văn bản, nên ở đây đầu ra cũng là kiểu
genai.Text
. Chúng ta cần chuyển đổiPart
thành kiểugenai.Text
vì ban đầu nó là một giao diện.
Với những điều trên, bạn sẽ có thể tìm hiểu sâu hơn vào các tính năng khác của SDK và mô hình Gemini cung cấp.