Các phần cơ sở kiến thức ▾

Điều hướng

▸ Bắt đầu tại đây Theo vai trò

Danh mục

Công cụ 52
Bảng thuật ngữ 12

Công cụ

Goose + JoinGonka Gateway: nhà cung cấp riêng và khóa trong keyring

Goose là một tác nhân AI mở, có thể mở rộng, hoạt động trên máy của bạn: ứng dụng máy tính để bàn cho macOS, Linux và Windows, CLI cho terminal và API để nhúng. Nó đọc và chỉnh sửa các tệp, chạy lệnh, kết nối các dịch vụ bên ngoài thông qua các phần mở rộng MCP. Được viết bằng Rust, phân phối theo giấy phép Apache 2.0. Dự án phát triển tại công ty Block, và hiện thuộc Agentic AI Foundation tại Linux Foundation; kho lưu trữ chính thức là github.com/aaif-goose/goose, địa chỉ cũ block/goose sẽ chuyển hướng đến đó.

Goose mô tả các nhà cung cấp của riêng mình một cách khai báo: tệp JSON trong thư mục custom_providers — và một nguồn mô hình khác sẽ xuất hiện trong danh sách. JoinGonka Gateway sử dụng OpenAI Chat Completions, vì vậy nó có thể được kết nối bằng một lệnh cài đặt hoặc một tệp duy nhất. Sau đó, tác nhân sẽ hoạt động trên các mô hình của mạng lưới phi tập trung Gonka — DeepSeek V4 Flash, GLM-5.3 Flash và MiniMax M2.7 — với giá thống nhất: $0.0069 cho mỗi triệu token đầu vào.

Một tính năng của Goose mà bạn nên biết trước: nó không giữ khóa nhà cung cấp trong tệp cấu hình mà trong bộ lưu trữ bí mật của hệ thống. Việc liệu trên máy của bạn có bộ lưu trữ như vậy hay không sẽ quyết định xem sau khi cài đặt bạn có còn phải thực hiện một bước thủ công nào hay không — vấn đề này được dành riêng một phần riêng. Các lệnh và thông báo dưới đây đã được xác minh bằng cách chạy trực tiếp goose 1.51.0 qua cổng vào ngày 23 tháng 9 năm 2026. Sau khi xác nhận địa chỉ, 3M token miễn phí sẽ được cộng vào tài khoản — đủ để bạn tự mình lặp lại tất cả những điều này.

Bắt đầu nhanh: cài đặt và một lệnh

Bước 1: cài Goose. Các cách chính thức cho CLI từ tài liệu dự án:

# macOS and Linux: the script puts the binary in ~/.local/bin
curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | CONFIGURE=false bash

# macOS, Homebrew
brew install block-goose-cli

Biến CONFIGURE=false tắt trình hướng dẫn goose configure, thứ mà script nếu không sẽ chạy ngay sau khi cài đặt: trình cài đặt sẽ cấu hình nhà cung cấp. Nếu thư mục ~/.local/bin không có trong PATH, script sẽ thông báo ngay. Với Windows, trong cùng repository có script download_cli.ps1, còn ứng dụng desktop thì tải từ trang tài liệu; cả nó và CLI đọc cùng một cấu hình, nên mọi thứ bên dưới đều áp dụng cho cả hai. Kiểm tra — goose --version.

Bước 2: lấy khóa. Đăng ký tại gate.joingonka.ai/register, xác nhận địa chỉ và tạo khóa với tiền tố jg- trong mục "API-keys". Một khóa và một số dư áp dụng cho tất cả các mô hình trong mạng.

Bước 3: chạy trình cài đặt.

npx @joingonka/setup --tool goose

Trình cài đặt sẽ hỏi khóa — khóa không được truyền qua đối số dòng lệnh để không lưu lại trong lịch sử shell — và sẽ làm những việc sau:

  • tạo tệp nhà cung cấp custom_providers/custom_joingonka.json với địa chỉ gateway và ba mô hình trong mạng cùng cửa sổ ngữ cảnh thực, với quyền 600. Các tên custom_joingonka và CUSTOM_JOINGONKA_API_KEY — giống như Goose tự suy ra từ tên "JoinGonka", nên khóa từ trình hướng dẫn sẽ nằm đúng chỗ;
  • đặt JoinGonka làm nhà cung cấp mặc định với mô hình DeepSeek V4 Flash — nhưng chỉ khi nhà cung cấp chưa được chọn hoặc đã chọn nhà cung cấp của chúng tôi với mô hình trống hoặc đã rời khỏi mạng. Lựa chọn của người khác sẽ không bị động đến, mà thay vào đó in ra lệnh để thử: goose session --provider custom_joingonka --model …;
  • đặt khóa vào secrets.yaml, chỉ khi kho lưu bí mật của Goose chắc chắn là dạng tệp; nếu không sẽ nói thẳng rằng còn một bước nữa, — chi tiết trong phần về khóa;
  • tạo bản sao lưu cho các tệp đã thay đổi và cuối cùng gửi một yêu cầu thực tế đến gateway để kiểm tra ngay khóa, địa chỉ và mô hình.

Trình cài đặt tìm thư mục cấu hình giống như chính Goose: ~/.config/goose trên Linux và macOS, %APPDATA%\Block\goose\config trên Windows, <root>/config khi có đặt GOOSE_PATH_ROOT. Mô hình khác được chỉ định bằng cờ --model với viết tắt deepseek, glm hoặc minimax; mô hình được chỉ định rõ ràng luôn được ghi lại. Chế độ không hỏi lấy khóa từ biến môi trường:

JOINGONKA_API_KEY=jg-your-key npx @joingonka/setup --tool goose --model glm --non-interactive

Cấu hình thủ công: tệp nhà cung cấp và config.yaml

Tất cả những gì trình cài đặt thực hiện, bạn đều có thể tự làm bằng tay. Nhà cung cấp là một tệp JSON riêng biệt ~/.config/goose/custom_providers/custom_joingonka.json; tên tệp trùng với trường name:

{
  "name": "custom_joingonka",
  "engine": "openai",
  "display_name": "JoinGonka",
  "description": "JoinGonka Gateway — Gonka AI inference (OpenAI-compatible)",
  "api_key_env": "CUSTOM_JOINGONKA_API_KEY",
  "base_url": "https://gate.joingonka.ai/v1/chat/completions",
  "models": [
    { "name": "deepseek-ai/DeepSeek-V4-Flash-0731", "context_limit": 380000 },
    { "name": "zai-org/GLM-5.3-Flash", "context_limit": 390000 },
    { "name": "MiniMaxAI/MiniMax-M2.7", "context_limit": 200000 }
  ],
  "supports_streaming": true,
  "requires_auth": true
}
TrườngGiá trịLưu ý quan trọng
namecustom_joingonkaĐây chính là tên tệp và giá trị --provider
engineopenaiĐịnh dạng OpenAI Chat Completions — đường dẫn chính của cổng kết nối. Ngoài ra, Goose còn nhận diện anthropic và ollama
api_key_envCUSTOM_JOINGONKA_API_KEYKhông phải là khóa, mà là tên của secret. Không có trường cho chính giá trị này trong tệp — nơi Goose tìm kiếm nó sẽ được giải thích ở phần sau
base_urlhttps://gate.joingonka.ai/v1/chat/completionsĐịa chỉ đầy đủ, giống như ví dụ trong tài liệu của Goose: các phiên bản cũ cũng hiểu định dạng này
modelsba mục nhập với context_limitNếu không có context_limit, Goose sẽ lấy cửa sổ từ danh mục mô hình của nó, hoặc 128.000 token cho mô hình lạ, và nén lịch sử khi nó lấp đầy 80% cửa sổ. Các mô hình mạng có cửa sổ từ 200.000 đến 390.000
supports_streaming, requires_authtruePhản hồi được truyền theo luồng, các yêu cầu yêu cầu khóa. Đừng tắt luồng: nếu không có nó và không có giới hạn trong yêu cầu, cổng sẽ giới hạn phản hồi theo một giá trị mặc định ngắn

Không có giới hạn phản hồi riêng biệt cho mục nhập mô hình của Goose. Đối với các mô hình này, nó hoàn toàn không truyền giới hạn trong yêu cầu — chúng tôi đã kiểm tra điều này qua nhật ký yêu cầu của nó — và ở chế độ streaming, bản thân cổng sẽ giới hạn phản hồi theo giới hạn của mô hình: 32.768 token cho DeepSeek V4 Flash, 8.192 cho GLM-5.3 Flash và MiniMax M2.7. Bạn không cần đặt biến toàn cục GOOSE_MAX_TOKENS cho việc này: nó áp dụng cho tất cả các nhà cung cấp cùng một lúc.

Goose đọc tệp nhà cung cấp bằng cách phân tích JSON nghiêm ngặt: chỉ cần một nhận xét hoặc dấu phẩy thừa là nhà cung cấp sẽ biến mất khỏi danh sách. Bạn có thể tạo nó bằng trình hướng dẫn (goose configure → Custom Providers), nhưng trình hướng dẫn không hỏi về cửa sổ ngữ cảnh — bạn sẽ phải tự thêm nó bằng tay.

Nhà cung cấp và mô hình mặc định nằm trong ~/.config/goose/config.yaml. Đây là cách Goose tự ghi lại chúng:

active_provider: custom_joingonka
providers:
  custom_joingonka:
    enabled: true
    model: deepseek-ai/DeepSeek-V4-Flash-0731
    configured: true

Cách bố trí cũ — các khóa phẳng GOOSE_PROVIDER và GOOSE_MODEL ở gốc tệp — cũng hoạt động: Goose đọc nó và tự chuyển đổi sang định dạng mới khi lưu cài đặt lần đầu tiên, giống như chúng tôi sau khi chạy goose configure. Trình cài đặt trên tệp trống sẽ viết các khóa phẳng — bất kỳ phiên bản nào cũng hiểu được chúng. Các biến môi trường cùng tên có ưu tiên cao hơn tệp: nếu chúng được đặt trong shell, lựa chọn từ config.yaml sẽ không có hiệu lực, và trình cài đặt sẽ cảnh báo về điều đó.

Khóa nằm ở đâu: keyring, secrets.yaml hoặc biến môi trường

Trong tệp nhà cung cấp của Goose chỉ có tên secret — CUSTOM_JOINGONKA_API_KEY. Goose tìm giá trị theo thứ tự: trong biến môi trường cùng tên, rồi đến kho secret hệ thống (keyring, trên macOS là Keychain), sau đó là tệp secrets.yaml cạnh tệp cấu hình. Secret chỉ được ghi vào tệp khi kho của Goose là dạng tệp, và nằm đó dưới dạng văn bản thuần với quyền 600. Còn trong config.yaml thì Goose hoàn toàn không tìm khóa (tài liệu).

Kho chuyển sang dạng tệp khi keyring bị tắt — bằng biến GOOSE_DISABLE_KEYRING với bất kỳ giá trị nào hoặc dòng GOOSE_DISABLE_KEYRING: true trong config.yaml — hoặc không khả dụng: máy chủ không có phiên đồ họa, container, CI. Trong trường hợp thứ hai, Goose ghi vào log «Keyring unavailable. Using file storage for secrets.» và tự chuyển sang tệp — đúng như những gì chúng ta thấy trong container. Trình cài đặt không biết ghi vào keyring, mà cũng không tự tắt nó thay bạn: Goose sẽ không còn thấy các secret đã nằm ở đó. Từ đó có các tình huống:

Tình huốngTrình cài đặt sẽ làm gìBạn còn lại gì
Máy để bàn có keyring: macOS, Windows, Linux với phiên đồ họaGhi nhà cung cấp và model, không ghi khóa và báo «ONE STEP LEFT»Lưu khóa một lần bằng wizard
Máy chủ hoặc container không có keyring, chưa có secrets.yamlNhư trên: không thể đoán kho dạng tệp qua các dấu hiệu gián tiếpChạy wizard — Goose sẽ tự đặt khóa vào secrets.yaml, sau đó trình cài đặt sẽ cập nhật nó ở đó
Đã đặt GOOSE_DISABLE_KEYRING hoặc đã có secrets.yamlGhi khóa vào secrets.yaml với quyền 600, giữ nguyên các secret khácKhông cần làm gì
Khóa do lệnh cấp cho nhà cung cấp (trường auth)Không ghi khóa: trong Goose auth và api_key_env loại trừ lẫn nhauKhông cần làm gì

Bước còn lại. Chạy goose configure và trả lời các câu hỏi của wizard — đây là cách chúng hiển thị trong lần chạy của chúng tôi:

  • What would you like to configure? → Configure Providers;
  • Which model provider should we use? → JoinGonka (trong máy chúng tôi nó đứng đầu);
  • Would you like to set CUSTOM_JOINGONKA_API_KEY? (optional) → Yes, rồi tại Enter value for CUSTOM_JOINGONKA_API_KEY dán khóa — các ký tự sẽ được thay bằng ô vuông. Khóa được lưu ngay lập tức;
  • Would you like to configure advanced settings? → No;
  • Select a model — Goose lấy danh sách từ gateway: MiniMaxAI/MiniMax-M2.7, deepseek-ai/DeepSeek-V4-Flash-0731, zai-org/GLM-5.3-Flash. Con trỏ đang ở dòng đầu — để giữ model mà trình cài đặt đã chọn, hãy dùng phím mũi tên chọn DeepSeek V4 Flash. Sau một truy vấn kiểm tra, wizard sẽ kết thúc bằng dòng «Configuration saved successfully».

Trong Goose Desktop, đường đi như sau: Settings → Models → Configure providers → JoinGonka → khóa → Submit. Không muốn dán khóa thủ công — hãy đặt nó vào biến môi trường và chạy wizard từ cùng shell đó: Goose sẽ báo «CUSTOM_JOINGONKA_API_KEY is set via environment variable» và đề nghị lưu giá trị:

read -s CUSTOM_JOINGONKA_API_KEY && export CUSTOM_JOINGONKA_API_KEY
goose configure

Còn cho một lần chạy, bạn có thể truyền khóa mà hoàn toàn không lưu: CUSTOM_JOINGONKA_API_KEY=jg-your-key goose session, trong PowerShell là $env:CUSTOM_JOINGONKA_API_KEY = "jg-your-key"; goose session. Biến môi trường có ưu tiên cao hơn giá trị đã lưu, nhưng chỉ tồn tại đến khi đóng shell.

Kiểm tra: điều gì sẽ xảy ra

Trước tiên, hãy xem Goose thực sự thấy những cài đặt nào:

goose info -v

Trong khối «goose Configuration» phải có các dòng GOOSE_PROVIDER: custom_joingonka và GOOSE_MODEL với ID của model. Tiếp theo — chạy thử một lần không dùng phiên tương tác: đặt vào một thư mục trống một file có lỗi rõ ràng và yêu cầu nó tìm ra.

goose run --no-session -t "Read calc.py and tell me in one sentence whether it has a bug."

Cờ --no-session không lưu lần chạy vào lịch sử. Ở phần đầu sẽ xuất hiện một dòng kiểu ● new session · custom_joingonka deepseek-ai/DeepSeek-V4-Flash-0731, sau đó là lệnh gọi công cụ — ▸ shell với câu lệnh cat calc.py — và câu trả lời kèm lỗi đã tìm ra. Để dùng model khác cho một lần chạy, dùng --model: zai-org/GLM-5.3-Flash hoặc MiniMaxAI/MiniMax-M2.7. Trong lần chạy ngày 23 tháng 9 năm 2026 của chúng tôi, cả ba model của mạng lưới đều hoàn thành vòng «yêu cầu → công cụ → kết quả → trả lời». Theo mặc định CLI Goose ẩn phần suy luận của model — có thể hiện chúng bằng biến GOOSE_CLI_SHOW_THINKING=1 nếu đầu ra đi vào terminal. Từ phía gateway, yêu cầu hiển thị trong bảng điều khiển: mục «Sử dụng», phân tách «Theo model» và «Theo key».

Nếu có gì đó không ổn, chẩn đoán thường đọc được ngay từ thông báo:

Điều hiển thịNghĩa là gìCần làm gì
Error missing required key CUSTOM_JOINGONKA_API_KEY: Configuration value not foundGoose không tìm thấy key trong môi trường lẫn kho secretsHãy lưu key bằng trình hướng dẫn. Nếu key nằm trong secrets.yaml mà lỗi vẫn còn, Goose giờ giữ secrets trong keyring — hãy lưu key bằng trình hướng dẫn thêm lần nữa
Authentication failed … Status: 401 Unauthorized. Response: Invalid API key.Gateway không chấp nhận keyLưu lại key — nguyên vẹn, không có khoảng trắng. Lưu ý rằng biến CUSTOM_JOINGONKA_API_KEY trong môi trường có ưu tiên hơn giá trị đã lưu
Error Unknown provider: custom_joingonkaFile provider không đọc được: có comment, dấu phẩy thừa hoặc lỗi đánh máy trong JSONSửa file hoặc xóa nó và chạy lại trình cài đặt: trình cài đặt không ghi đè lên file hỏng mà chỉ nêu tên nó
Bad request (400): Model "…" not found. Available: …Lỗi đánh máy trong tên modelGateway tự liệt kê các ID có sẵn — hãy sao chép ID bạn cần
Rate limit exceeded: Model "…" is currently overloaded in the Gonka network (rate limit)Model đã hết công suất trống trong mạng vào giờ cao điểmGoose tự thử lại yêu cầu, nhưng với khoảng nghỉ ngắn. Hãy đổi model — /model trong phiên hoặc --model khi chạy — hoặc đợi một phút; tình trạng mạng — tại trang trạng thái
402Số dư tài khoản đã hết tiềnNạp tiền vào tài khoản trong mục «Thanh toán»; key vẫn hoạt động bình thường

Chi phí là bao nhiêu

Agent tiêu tốn token khác với chat thông thường. Ngay trong cấu hình mặc định, Goose gửi cho model mô tả của mười tám công cụ tích hợp, và trong lần chạy của chúng tôi, mỗi lượt tiêu tốn khoảng 4,6 nghìn token đầu vào trước cả câu hỏi của bạn. Nhiệm vụ «đọc file và tìm lỗi» mất hai-ba lượt và 10-15 nghìn token, gần như tất cả là đầu vào; Goose tự thực hiện thêm một truy vấn ngắn để đặt tên cho phiên. Các tiện ích mở rộng không cần thiết có thể được tắt trong goose configure → Toggle Extensions — đây là cách dễ nhất để giảm đầu vào.

Thông qua JoinGonka Gateway, token có giá $0.0069 cho mỗi triệu token đầu vào và $0.021 cho mỗi triệu token đầu ra — giá này giống nhau cho tất cả các model trong mạng và được lấy từ nguồn trực tiếp trên trang này.

Kịch bảnMức tiêu thụQua Gateway
Tác vụ một lần: đọc file, tìm lỗi10-15K tokenvài phần trăm xu
Một ngày làm việc tích cực3-7M tokenvài xu
Một tháng phát triển tích cực~150M tokenkhoảng một đô la

Các ước tính ở cột bên phải dựa trên giá tháng 9 năm 2026. Để so sánh — cách bạn có thể thanh toán cho các model trong Goose:

Phương thứcMô hình thanh toánHạn chế
Đăng ký Claude, ChatGPT hoặc Gemini qua ACPsố tiền cố định mỗi thánghạn ngạch và giới hạn từ phía nhà cung cấp
Khóa nhà cung cấp trực tiếptheo token dựa trên bảng giá nhà cung cấpchi phí tăng cùng với độ dài phiên
JoinGonka Gatewaytheo token, số dư trả trướcchi phí được hiển thị trong bảng điều khiển; không có phí đăng ký hay hạn ngạch tháng

Mức tiêu thụ chính xác và số dư còn lại nằm trong bảng điều khiển, trong các mục «Sử dụng» và «Thanh toán». Tại sao DeepSeek V4 Flash được chọn làm mặc định — với giới hạn phản hồi lớn nhất trong mạng — đã được phân tích chi tiết trong bài đánh giá model.

Những điều cần lưu ý khi làm việc

Chế độ xác nhận. Theo mặc định, Goose hoạt động ở chế độ auto — hoàn toàn tự động: tự sửa và xóa file, chạy lệnh và dùng các tiện ích mở rộng mà không hỏi gì. Trên dự án của mình thì tiện, nhưng với mã nguồn của người khác thì nên siết chặt chế độ hơn:

# inside a session
/mode smart_approve

# permanently, as a line in config.yaml
GOOSE_MODE: smart_approve
Chế độGoose hành xử thế nào
autoHành động không cần xác nhận — chế độ mặc định
smart_approveTự cho qua các hành động ít rủi ro, hỏi về những hành động còn lại
approveHỏi trước mỗi lần gọi công cụ
chatChỉ trò chuyện: không công cụ, không chỉnh sửa

Đây là thuộc tính của chính Goose, không phụ thuộc vào provider của model.

Đổi model. Trong phiên — lệnh /model kèm ID, ví dụ /model zai-org/GLM-5.3-Flash; cho một lần chạy — cờ --model của goose run và goose session; vĩnh viễn — goose configure hoặc dòng model trong config.yaml. Provider vẫn giữ nguyên. GLM-5.3 Flash có suy luận rất tốt cho logic rối rắm, nhưng giới hạn câu trả lời của nó là 8192 token, và một phần trong đó dành cho suy luận — chi tiết trong bài đánh giá model.

Chạy không cần giám sát. goose run phù hợp cho script và CI: cờ -q chỉ để lại câu trả lời của model trong đầu ra, --output-format json trả kết quả để phân tích. Các giới hạn --max-turns (số lượt agent thực hiện không có con người tham gia) và --max-tool-repetitions (số lần liên tiếp có thể gọi một công cụ với cùng đối số) giúp tránh lặp vô hạn.

Quyền riêng tư. Thống kê sử dụng ẩn danh trong Goose mặc định bị tắt (GOOSE_TELEMETRY_ENABLED). Gateway không lưu nội dung prompt và câu trả lời — trong thống kê chỉ còn lại các số liệu tổng hợp về mức dùng.

Goose kết nối với JoinGonka Gateway bằng một lệnh — npx @joingonka/setup --tool goose — hoặc một tệp: nhà cung cấp custom_joingonka trong custom_providers (engine: openai, địa chỉ https://gate.joingonka.ai/v1/chat/completions, các mô hình với context_limit trung thực) cộng với nhà cung cấp và mô hình mặc định trong config.yaml. Goose không giữ khóa trong cấu hình mà ở trong keyring hoặc secrets.yaml: trên máy có keyring chỉ còn một bước — goose configure → Configure Providers → JoinGonka → khóa, và tại lựa chọn mô hình nên để DeepSeek V4 Flash. Kiểm tra bằng goose run và mục «Sử dụng» trong tài khoản; giá của DeepSeek V4 Flash, GLM-5.3 Flash và MiniMax M2.7 là như nhau, vì vậy mô hình được chọn theo hành vi chứ không phải theo ngân sách.

Muốn tìm hiểu thêm?

Khám phá các phần khác hoặc bắt đầu kiếm GNK ngay bây giờ.

Nhận khóa và token miễn phí →