TL;DR
Cấu hình CometAPI một lần trong OpenCode, rồi chọn Claude, GPT hoặc DeepSeek cho tác vụ lập trình của bạn. Hướng dẫn này mở rộng hướng dẫn tích hợp CometAPI OpenCode chính thức thành một thiết lập dự án hoàn chỉnh: một khóa API CometAPI, một tệp cấu hình với ba ví dụ mô hình, lệnh chuyển đổi mô hình và một tác vụ JavaScript nhỏ với kiểm tra lặp lại được.
Key Takeaways
- Thiết lập OpenCode CometAPI yêu cầu provider ID, API base URL, credential và model ID.
- Dùng {env:COMETAPI_KEY} để giữ khóa API thực không xuất hiện trong opencode.json.
- Đăng ký các ví dụ Claude, GPT và DeepSeek trong một opencode.json; cả ba mục đều dùng cùng một khóa và gateway CometAPI.
- Chuyển đổi provider/mô hình đã chọn trong OpenCode mà không cần lấy riêng các khóa Anthropic, OpenAI và DeepSeek.
- Lưu ý các biến môi trường bị thiếu, tuyến API không khớp và các lời nhắc phê duyệt có thể trông như yêu cầu bị treo.
What Is OpenCode and Why Use It with CometAPI?
OpenCode là một tác nhân AI mã nguồn mở dành cho lập trình, có giao diện terminal, ứng dụng desktop và tiện ích IDE. Trong một dự án, nó có thể giải thích mã hiện có, lập kế hoạch thay đổi, chỉnh sửa tệp và chạy lệnh theo quyền đã cấu hình. Hướng dẫn này sử dụng quy trình terminal: giao cho tác nhân một tác vụ lập trình nhỏ, xem xét các hành động đề xuất và xác minh các tệp kết quả bằng kiểm thử cục bộ. Xem tài liệu OpenCode chính thức để biết cách cài đặt và sử dụng.
CometAPI cung cấp lớp truy cập mô hình. Quy trình đa mô hình thường liên quan đến việc quản lý thông tin xác thực, thanh toán và cài đặt kết nối giữa các nhà cung cấp. Định tuyến các mô hình được hỗ trợ qua một tài khoản CometAPI mang lại một khóa và base URL dùng chung cho dự án này, trong khi OpenCode giữ kho mã và hướng dẫn tác vụ. Điều này hữu ích khi so sánh mô hình trên cùng một tác vụ hoặc thay đổi mô hình đã chọn mà không cần tổ chức lại dự án. Gateway tổng hợp là tùy chọn: truy cập trực tiếp nhà cung cấp có thể phù hợp với quy trình một nhà cung cấp hoặc yêu cầu hợp đồng cụ thể. Lợi ích ở đây là truy cập đa nhà cung cấp đơn giản hơn; định dạng API, hành vi mô hình và khả năng tương thích công cụ vẫn cần xác thực riêng.
CometAPI hỗ trợ Chat Completions tương thích OpenAI và cũng cung cấp các định dạng API khác. Tích hợp chính thức chọn một adapter cho mỗi định dạng. Ở đây, Claude Sonnet 5 dùng Messages, GPT-6.1 Sol dùng Responses và DeepSeek V4.1 Flash dùng Chat Completions, theo các ví dụ liên kết bên dưới. Tất cả yêu cầu vẫn gửi tới CometAPI với cùng một khóa. Tên nhà cung cấp và một định dạng API mô tả những thứ khác nhau; không nên giả định một mô hình đơn lẻ chấp nhận mọi định dạng.
| Configuration | Claude Sonnet 5 API in CometAPI | GPT-6.1 Sol API in CometAPI | DeepSeek V4.1 Flash API in CometAPI |
|---|---|---|---|
| Model supplier | Anthropic | OpenAI | DeepSeek |
| Model ID | claude-sonnet-5 | gpt-6.1-sol | deepseek-v4.1-flash |
| OpenCode provider ID | cometapi-messages | cometapi-responses | cometapi-chat |
| API format used here | Messages | Responses/ chat | Chat Completions |
| Adapter | @ai-sdk/anthropic | @ai-sdk/openai | @ai-sdk/openai-compatible |
What Do You Need Before Configuring CometAPI in OpenCode?
Sử dụng một terminal, Node.js với npm, một tài khoản CometAPI có quyền API và số dư khả dụng, và một thư mục dự án dùng một lần. Ví dụ Bash áp dụng cho macOS, Linux hoặc WSL; các ví dụ PowerShell có nhãn dùng cú pháp Windows. Node.js cũng phải khả dụng trong cùng phiên cho phần kiểm tra JavaScript ở cuối hướng dẫn này.
Quy trình này sử dụng phong cách cấu hình OpenCode 1. Tài liệu chính thức phân biệt OpenCode 1 với OpenCode 2; cả hai dùng lệnh opencode. Ghi lại opencode --version trước khi bắt đầu và dùng tài liệu cấu hình cho phiên bản chính đó. Quy trình ba mô hình bên dưới là một hướng dẫn tích hợp với kết quả kỳ vọng, không phải tuyên bố một kiểm thử đầu-cuối hoàn chỉnh.
Ghi lại CLI, Node.js, npm, hệ điều hành và ngày kiểm thử khi chạy các ví dụ. Việc sử dụng API được tính vào tài khoản CometAPI của bạn. Các lệnh dưới đây là hướng dẫn thực hành với kết quả kỳ vọng; không tuyên bố có đầu ra do mô hình tạo ra hoặc chạy thành công tích hợp ba mô hình.
node --versionnpm --versionopencode --version
How to Configure CometAPI in OpenCode Step by Step?
Step 1: Install OpenCode
Cài đặt gói npm chính thức nếu OpenCode chưa khả dụng. Cài đặt không ghim phiên bản sẽ theo phát hành hiện tại của gói; ghi lại phiên bản đã cài đặt trước khi sử dụng cấu hình. Nếu cần tái lập môi trường của hướng dẫn nguồn, phiên bản CLI được nêu là 1.18.16.
Cài đặt OpenCode CLI và hiển thị phiên bản của nó.
npm install -g opencode-aiopencode --version
Mở một terminal mới nếu không tìm thấy executable sau khi cài đặt. Tiếp tục trong một thư mục dự án dùng một lần để tác vụ đầu tiên của tác nhân có ranh giới rõ ràng.
Tạo và vào một thư mục dự án.
mkdir cometapi-opencode-democd cometapi-opencode-demo
Step 2: Create a CometAPI API Key
Tạo một khóa API từ tài khoản CometAPI của bạn và đặt nó trong cùng terminal dùng để khởi động OpenCode. Thay thế placeholder tại máy cục bộ. Không commit khóa, dán nó vào prompt hoặc đưa vào nhật ký chia sẻ.
Biến này áp dụng cho shell hiện tại và các tiến trình được khởi chạy từ đó. Không chụp màn hình token thực. Các kiểm tra sau đây báo cáo biến có tồn tại hay không mà không in giá trị của nó.
Đặt khóa CometAPI cho phiên Bash hiện tại.
export COMETAPI_KEY="YOUR_COMETAPI_KEY"
Đặt khóa CometAPI cho phiên PowerShell hiện tại.
$env:COMETAPI_KEY = "YOUR_COMETAPI_KEY"test -n "$COMETAPI_KEY" && printf "COMETAPI_KEY is set\n" || printf "COMETAPI_KEY is missing\n"if ([string]::IsNullOrWhiteSpace($env:COMETAPI_KEY)) { "COMETAPI_KEY is missing"} else { "COMETAPI_KEY is set"}
Step 3: Create opencode.json
Tạo opencode.json ở thư mục gốc của dự án, hoặc dùng ~/.config/opencode/opencode.json để có các mục được dùng chung giữa các dự án. Tệp dự án giúp hướng dẫn này tự chứa. Dùng một đối tượng provider chứa ba mục bên dưới; nếu đã có một đối tượng provider, hãy hợp nhất các mục của nó thay vì tạo khóa JSON trùng lặp.
Với các trường xung đột, cấu hình dự án ghi đè cấu hình toàn cục; các trường không xung đột được giữ lại. Tệp OPENCODE_CONFIG tùy biến được tải giữa cấu hình toàn cục và dự án. Kiểm tra chuỗi ưu tiên được ghi tài liệu nếu có cả thiết lập quản lý hoặc inline.
Lưu cấu hình hoàn chỉnh sau đây thành opencode.json. Mỗi provider đọc COMETAPI_KEY từ môi trường. Cố ý bỏ qua mô hình mặc định để bạn chọn rõ một trong ba ví dụ.
Biến thể Flash làm rõ ví dụ DeepSeek V4.1 được yêu cầu. Giữ GPT trên adapter Responses để sử dụng tool; hướng dẫn DeepSeek của CometAPI ghi lại tuyến Chat Completions được dùng ở đây. Kiểm tra lại tính khả dụng của mô hình và quyền trong tài khoản của bạn trước khi chạy các ví dụ.
{ "$schema": "https://opencode.ai/config.json", "provider": { "cometapi-messages": { "npm": "@ai-sdk/anthropic", "name": "CometAPI Claude", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "claude-sonnet-5": { "name": "Claude Sonnet 5" } } }, "cometapi-responses": { "npm": "@ai-sdk/openai", "name": "CometAPI GPT", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "gpt-6.1-sol": { "name": "GPT-6.1 Sol" } } }, "cometapi-chat": { "npm": "@ai-sdk/openai-compatible", "name": "CometAPI DeepSeek", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "deepseek-v4.1-flash": { "name": "DeepSeek V4.1 Flash" } } } }, "permission": { "edit": "ask", "shell": "ask" }}
baseURL đúng: https://api.cometapi.com/v1. baseURL sai: https://api.cometapi.com/v1/chat/completions. Adapter sẽ thêm đường dẫn endpoint. Hợp nhất ví dụ vào opencode.json hiện có mà không xóa các thiết lập không liên quan.
Các thiết lập edit và shell yêu cầu phê duyệt cho thay đổi tệp và lệnh theo quy tắc quyền OpenCode hiện tại. Chạy các ví dụ lập trình tương tác và kiểm tra các yêu cầu đó. OpenCode cũng kế thừa quyền truy cập hệ điều hành của tiến trình khởi chạy nó; sử dụng một thư mục dùng một lần cho bài tập này.
Step 4: Check the Gateway Connection
Thiết lập và xác minh Gemini tùy chọn được cung cấp sau các kiểm tra kết nối ba mô hình bên dưới.
Ví dụ HTTP dưới đây kiểm tra trực tiếp mục DeepSeek Chat Completions. Đây là cách hữu ích để tách biệt kết nối gateway khỏi OpenCode. Claude và GPT dùng các tuyến adapter đã chọn ở bước tiếp theo; việc thay đổi model ID trong yêu cầu HTTP này không tự động thay đổi giao thức.
Gửi một yêu cầu Chat Completions tối thiểu từ Bash.
curl --silent --show-error \ --output response.json \ --write-out "HTTP %{http_code}\n" \ https://api.cometapi.com/v1/chat/completions \ -H "Authorization: Bearer $COMETAPI_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-v4.1-flash","messages":[{"role":"user","content":"Reply with a short greeting."}]}'
Lệnh này dùng tùy chọn write-out và output của curl để tách HTTP status khỏi response.json. Truyền thành công vẫn có thể chứa lỗi HTTP, nên hãy kiểm tra trạng thái đã in và thân JSON. Điều này tránh phụ thuộc vào --fail-with-body, yêu cầu curl 7.76.0 trở lên.
Gửi cùng yêu cầu từ PowerShell mà không cần trích dẫn JSON theo shell.
$body = @{ model = "deepseek-v4.1-flash" messages = @(@{ role = "user"; content = "Reply with a short greeting." })} | ConvertTo-Json -Depth 4$response = Invoke-WebRequest -UseBasicParsing -Method Post ` -Uri "https://api.cometapi.com/v1/chat/completions" ` -Headers @{ Authorization = "Bearer $env:COMETAPI_KEY" } ` -ContentType "application/json" ` -Body $body$response.Content | Set-Content -Encoding UTF8 response.json"HTTP $($response.StatusCode)"
Khi có lỗi HTTP, PowerShell có thể ném ngoại lệ trước khi hai dòng cuối chạy. Ghi lại trạng thái và chi tiết lỗi đã ẩn của lỗi đó; đừng ghi nhận là phản hồi thành công.
Kết quả kỳ vọng cho yêu cầu DeepSeek: HTTP 200 và văn bản không rỗng trong choices[0].message.content. Kiểm tra tệp response.json đã lưu thay vì chỉ chấp nhận HTTP 200. Các bổ sung sau đây cho thấy dạng phản hồi và cách kiểm tra cả ba tuyến đã cấu hình. Ví dụ mang tính minh họa; bản sửa này không tuyên bố kết quả kiểm thử CometAPI trực tiếp. Yêu cầu chỉ văn bản không xác thực streaming hoặc tool call.
Dạng phản hồi DeepSeek minh họa: lời chào, giá trị usage và các trường khác phụ thuộc vào yêu cầu thực tế. JSON sau đây được rút ngắn có chủ ý, không phải phản hồi API đã ghi.
{"choices":[{"message":{"role":"assistant","content":"Hello!"}}]}
Sau một yêu cầu HTTP thành công thực tế, dòng trạng thái sẽ là HTTP 200 và response.json chứa văn bản assistant không rỗng. Giữ trạng thái và nội dung thực tế cho lần chạy của bạn; đừng sao chép ví dụ làm bằng chứng kiểm thử.
Step 5: Switch Between Claude, GPT, and DeepSeek
Các lệnh trong bước này nên trả về các dấu hiệu assistant đã yêu cầu. Văn bản assistant minh họa, với banner terminal, thời gian và metadata đã lược bỏ:
Claude: CLAUDE_READYGPT: GPT_READYDeepSeek: DEEPSEEK_READY
Các dòng này chỉ hiển thị nội dung kỳ vọng. Đây không phải transcript terminal. Ghi lại đầu ra thực tế và mã thoát tiến trình cho từng provider; một dấu hiệu thiếu hoặc yêu cầu thất bại cần được điều tra.
Bắt đầu trong thư mục chứa opencode.json. Liệt kê mô hình cho từng provider đã cấu hình, sau đó gửi một yêu cầu văn bản ngắn tới mỗi mục. Các lệnh này thay đổi mô hình và adapter đã chọn; khóa và base URL CometAPI vẫn giữ nguyên.
Dùng các lệnh này để kiểm tra rằng cả ba mục đều hiển thị và có thể trả văn bản.
opencode models cometapi-messagesopencode models cometapi-responsesopencode models cometapi-chatopencode run --model cometapi-messages/claude-sonnet-5 "Reply exactly with: CLAUDE_READY"opencode run --model cometapi-responses/gpt-6.1-sol "Reply exactly with: GPT_READY"opencode run --model cometapi-chat/deepseek-v4.1-flash "Reply exactly with: DEEPSEEK_READY"
Để chuyển đổi tương tác, khởi động opencode, nhập /models và chọn CometAPI Claude, CometAPI GPT hoặc CometAPI DeepSeek. OpenCode dùng cặp provider/model của mục đó. Bạn không cần ba tài khoản nhà cung cấp hoặc ba khóa API. Với cấu hình hỗ trợ môi trường này, không dùng /connect để cung cấp thông tin xác thực thứ hai; thiếu COMETAPI_KEY phải được sửa trong shell khởi chạy.
Kết quả kỳ vọng: mỗi yêu cầu ngắn trả về dấu hiệu đã yêu cầu. Ghi lại kết quả thực tế cho từng mô hình. Mục mô hình hiển thị xác nhận đăng ký; phản hồi văn bản thành công xác nhận đường yêu cầu. Không cái nào trong số đó tự chứng minh rằng file tools hoạt động.
Gemini dùng một provider và giao thức riêng. Giữ các mục Claude, GPT và DeepSeek ở trên; hợp nhất mục sau vào đối tượng provider hiện có. base URL dưới đây theo cấu hình CometAPI do người đánh giá cung cấp. Xác nhận tuyến hiện tại và quyền truy cập mô hình trong tài khoản CometAPI của bạn trước khi sử dụng.
Adapter Google hỗ trợ baseURL tùy biến và gửi apiKey bằng x-goog-api-key. Xem tài liệu tham chiếu provider Google của AI SDK. Điều này xác nhận cài đặt adapter; không chứng minh rằng một mô hình Gemini cụ thể đã được bật trên gateway CometAPI.
{ "provider": { "cometapi-gemini": { "npm": "@ai-sdk/google", "name": "CometAPI Gemini", "options": { "baseURL": "https://api.cometapi.com/v1beta", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "YOUR_GEMINI_MODEL_ID": { "name": "CometAPI Gemini (account-selected model)" } } } }}
Thay YOUR_GEMINI_MODEL_ID cả ở khóa JSON và lệnh bên dưới bằng chính xác model ID Gemini đã bật trong tài khoản CometAPI của bạn. Đây là placeholder, không phải model ID thực. Hợp nhất mục provider này mà không nhân đôi khóa provider cấp cao, và khởi chạy OpenCode từ cùng shell nơi COMETAPI_KEY đã được đặt.
opencode models cometapi-geminiopencode run --model cometapi-gemini/YOUR_GEMINI_MODEL_ID "Reply exactly with: GEMINI_READY"
Văn bản assistant kỳ vọng: GEMINI_READY. Mô hình được liệt kê xác nhận đăng ký cục bộ; nhận dấu hiệu xác nhận yêu cầu văn bản. Lưu phản hồi và mã thoát thực tế. Để xác thực công cụ lập trình, khởi chạy opencode --model cometapi-gemini/YOUR_GEMINI_MODEL_ID trong một thư mục dùng một lần mới và lặp lại tác vụ greet.cjs/check.cjs bên dưới. Thành công văn bản đơn lẻ không xác minh streaming, chỉnh sửa hoặc tool call.
How Do You Run a Coding Task with Claude, GPT, and DeepSeek?
Dùng cùng một tác vụ nhỏ cho mỗi mô hình: tạo hàm chào hỏi, thêm một assertion và chạy nó. Giữ ba thư mục mới để mô hình thứ hai không thể chỉ đơn giản tái sử dụng các tệp do mô hình thứ nhất tạo ra. Điều này kiểm tra quy trình tích hợp mà không biến bài viết thành bảng xếp hạng hiệu năng.
Lưu prepare-runs.cjs cạnh opencode.json và chạy nó một lần. Nó tạo ba thư mục mới và chỉ sao chép cấu hình dùng chung. Nó dừng nếu bất kỳ thư mục đích nào đã tồn tại, nên công việc trước đó không bị ghi đè.
const fs = require("node:fs");const path = require("node:path");const root = __dirname;const names = ["claude-demo", "gpt-demo", "deepseek-demo"];const config = path.join(root, "opencode.json");if (!fs.existsSync(config)) throw new Error("Missing opencode.json");for (const name of names) { if (fs.existsSync(path.join(root, name))) { throw new Error(`Directory already exists: ${name}`); }}for (const name of names) { const dir = path.join(root, name); fs.mkdirSync(dir); fs.copyFileSync(config, path.join(dir, "opencode.json"));}node prepare-runs.cjscd claude-demoopencode --model cometapi-messages/claude-sonnet-5# After exiting OpenCode:cd ..cd gpt-demoopencode --model cometapi-responses/gpt-6.1-sol# After exiting OpenCode:cd ..cd deepseek-demoopencode --model cometapi-chat/deepseek-v4.1-flash# After exiting OpenCode:cd ..
Chạy một trong các phiên sau mỗi lần, bắt đầu từ thư mục dự án cha. Thoát phiên trước khi chuyển sang ví dụ tiếp theo. Trong mỗi phiên, gửi cùng tác vụ dưới đây và xem xét các chỉnh sửa và lệnh được đề xuất. Node.js phải khả dụng với tiến trình khởi chạy OpenCode.
Yêu cầu tác nhân tạo và xác minh một hàm JavaScript nhỏ.
Create greet.cjs in this directory.Export a function named greet(name) that returns "Hello, " + name + "!".Create check.cjs using node:assert/strict.Assert that greet("Ada") equals "Hello, Ada!".Run node check.cjs and report its actual exit status.Do not modify opencode.json or unrelated files.
Kết quả kỳ vọng: tác nhân yêu cầu các phê duyệt đã cấu hình, tạo cả hai tệp và hoàn tất node check.cjs với mã thoát 0. Ghi lại những gì thực tế xảy ra. Kiểm tra các tệp và tự chạy lại kiểm tra; tuyên bố thành công bằng diễn giải không đủ. Nếu một tool call bị từ chối hoặc sai dạng, điều tra khả năng tương thích tuyến một cách riêng biệt với một phê duyệt đang chờ.
Reference Files and Local Verification
Các tệp sau là bản tham chiếu cho tác vụ đã yêu cầu. Chúng được viết trực tiếp cho hướng dẫn này; chúng không được đưa ra như hiện vật do mô hình tạo. Khớp hành vi quan sát được của chúng là điều kiện chấp nhận cho lần chạy tác nhân của bạn.
function greet(name) { return "Hello, " + name + "!";}module.exports = { greet };const assert = require("node:assert/strict");const { greet } = require("./greet.cjs");assert.equal(greet("Ada"), "Hello, Ada!");node check.cjsprintf "exit=%s\n" "$?"node check.cjs"exit=$LASTEXITCODE"
Kiểm tra tham chiếu cục bộ: Windows, Node.js v24.19.0, ngày 22 tháng 10 năm 2026; node check.cjs trả về mã thoát 0 với không có đầu ra chuẩn. Điều này chỉ kiểm tra hai tệp tham chiếu. Nó không xác minh cài đặt OpenCode, truy cập CometAPI, lời nhắc phê duyệt hoặc các tool call của mô hình.
| Run | Selected model entry | What to record |
|---|---|---|
| Claude | cometapi-messages/claude-sonnet-5 | Response, generated files, approvals, test exit code |
| GPT | cometapi-responses/gpt-6.1-sol | Response, generated files, approvals, test exit code |
| DeepSeek | cometapi-chat/deepseek-v4.1-flash | Response, generated files, approvals, test exit code |
Giữ một bản ghi kết quả cho mỗi mô hình: provider/model được chọn, có nhận phản hồi hay không, greet.cjs và check.cjs có được tạo hay không, có xuất hiện phê duyệt hay không và mã thoát của node check.cjs. Ghi thất bại là thất bại; đừng suy ra đạt từ bản tham chiếu.
Protect Credentials and Verify Reliability
Lưu COMETAPI_KEY trong biến môi trường thay vì tệp cấu hình hoặc nhật ký chia sẻ. Giữ bật phê duyệt chỉnh sửa tệp và lệnh shell, và kiểm thử cấu hình mới trong một dự án dùng một lần.
Xác minh yêu cầu API trực tiếp, phản hồi OpenCode và quy trình chỉnh sửa tệp một cách tách biệt. Ghi lại lỗi và kết quả kiểm thử, chỉ thử lại lỗi tạm thời và kiểm tra không gian làm việc trước khi lặp lại các tác vụ bị gián đoạn.
CometAPI đơn giản hóa việc chuyển đổi giữa các mô hình, nhưng OpenCode không tự động cung cấp chuyển đổi dự phòng đa mô hình qua cấu hình này. Nếu một mô hình trở nên không khả dụng, hãy chọn thủ công một mô hình đã xác minh khác và lặp lại kiểm tra chấp nhận.
How much does it cost to use Opencode with CometAPI?
Prices for CometAPI, and how is billing structured
CometAPI cung cấp định giá trả theo mức sử dụng mà không có phí thuê bao hàng tháng, chỉ tính phí cho việc sử dụng API thực tế. Mức giá mô hình chính thức của họ thường thấp hơn 20% so với giá tiêu chuẩn của nhà cung cấp, với chiết khấu theo sản lượng bổ sung. Nhà phát triển có thể truy cập Claude, GPT, DeepSeek và các mô hình khác qua một tài khoản, thanh toán dựa trên mức tiêu thụ token của mô hình đã chọn. Kiểm tra trang giá CometAPI để biết mức giá hiện tại.
Với các yêu cầu không có bộ nhớ đệm hoặc phụ phí:
Cost = (Input tokens × Input rate + Output tokens × Output rate) / 1,000,000
Ví dụ, với mức giá giả định $1/M token đầu vào và $4/M token đầu ra, sử dụng 20,000 token đầu vào và 2,000 token đầu ra chi phí $0.028. Đây là mức giá minh họa, không phải giá mô hình thực tế.
Ghi lại mức sử dụng token, tổng phí API, thời gian thực thi và kết quả kiểm thử cho mỗi tác vụ. Để giảm chi phí, hạn chế ngữ cảnh không cần thiết, dùng prompt ngắn gọn, tránh lặp lại các yêu cầu thất bại và chọn mô hình chi phí thấp hơn khi đáp ứng cùng yêu cầu chất lượng.
OpenCode API Cost Optimization Strategies
Để giảm chi phí OpenCode mà không ảnh hưởng chất lượng lập trình, tập trung vào lựa chọn mô hình, hiệu quả token và yêu cầu API không cần thiết.
- Chọn mô hình phù hợp: Dùng các mô hình chi phí thấp như DeepSeek cho tác vụ thường lệ, và dành Claude hoặc GPT cho gỡ lỗi, tái cấu trúc và suy luận phức tạp.
- Giảm tiêu thụ token: Giữ prompt ngắn gọn, chỉ cung cấp tệp dự án liên quan và tránh gửi lặp lại lượng ngữ cảnh lớn của kho mã.
- Dùng cache prompt: Tận dụng các tính năng cache được hỗ trợ cho ngữ cảnh lặp lại, như hướng dẫn dự án và tham chiếu mã, để giảm chi phí đầu vào.
- Tránh thử lại không cần thiết: Sửa lỗi cấu hình và xác thực trước khi thử lại, và xem lại đầu ra trước đó để tránh công việc trùng lặp.
- Theo dõi chi tiêu thực tế: Theo dõi mức dùng token, phí API và số tác vụ hoàn thành thành công qua CometAPI. So sánh chi phí trên mỗi tác vụ thành công thay vì chỉ giá token.
Kết hợp với định giá chiết khấu và trả theo mức sử dụng của CometAPI, các thực hành này giúp nhà phát triển kiểm soát chi tiêu trong khi duy trì hiệu năng lập trình đáng tin cậy trong OpenCode.
How Can You Extend the CometAPI Configuration?
Để thêm mô hình khác, đặt model ID của nó dưới provider có định dạng API mà nó hỗ trợ, hoặc thêm một mục provider mới với adapter yêu cầu. Sau đó chọn provider/mô hình đó qua /models. Giữ thông tin xác thực trong COMETAPI_KEY và giữ các mục hiện có để việc chuyển đổi vẫn là thao tác lựa chọn.
Hướng dẫn chính thức bao phủ bốn định dạng API, bao gồm Gemini. Bài viết này sử dụng ba mục cần cho Claude, GPT và DeepSeek. Nếu một số mô hình đã chọn hỗ trợ Chat Completions, chúng có thể chia sẻ một bản đồ models cometapi-chat. Đừng chuyển một tuyến chỉ Responses hoặc chỉ Messages vào bản đồ đó chỉ để giảm số mục.
Chọn adapter dựa trên tuyến mà bạn định gọi, và mô hình dựa trên tác vụ lập trình. Thay đổi nhà cung cấp không yêu cầu khóa CometAPI mới; thay đổi định dạng API yêu cầu adapter phù hợp đã cấu hình.
How to Troubleshoot CometAPI in OpenCode?
Theo dõi giai đoạn đầu tiên bị lỗi: yêu cầu HTTP → provider OpenCode → file tools. Nếu HTTP thất bại, kiểm tra thông tin xác thực, quyền truy cập mô hình và chi tiết endpoint. Nếu HTTP hoạt động nhưng OpenCode thất bại, kiểm tra cấu hình và môi trường khởi chạy. Nếu cả hai kiểm tra văn bản hoạt động nhưng hành động tệp thất bại, kiểm tra quyền và khả năng tương thích tool call.
| Symptom | First check | Next action | Diagnostic command / evidence |
|---|---|---|---|
| 401 response | Key value and Authorization header | Đặt khóa trong terminal hiện tại; kiểm tra khoảng trắng vô tình. | Kiểm tra sự hiện diện của biến mà không in khóa; giữ HTTP status và lỗi đã ẩn. |
| 403 or account restriction | Error body and account permissions | Xác nhận quyền truy cập mô hình và trạng thái tài khoản trong CometAPI. | Lưu lỗi phản hồi đã ẩn và xác nhận quyền truy cập tài khoản. |
| 404 response | Host, endpoint path, and model ID | So sánh yêu cầu với tài liệu API của mô hình đã chọn. | So sánh response.json với mô hình và endpoint đã yêu cầu. |
| Model missing in OpenCode | Project directory and provider configuration | Kiểm tra JSON hợp lệ và tên provider/model khớp; khởi động lại sau khi chỉnh sửa. | Chạy opencode models cometapi-chat, opencode models cometapi-messages và opencode models cometapi-responses; ghi lại opencode --version. |
| Text works, tools fail | Tool-call response and adapter compatibility | Xác minh hỗ trợ tuyến; phân biệt tool call bị từ chối với lời nhắc phê duyệt. | So sánh yêu cầu văn bản ngắn với hành động công cụ thất bại; giữ lỗi. |
| Command waits for approval | Interactive session and permission settings | Xem xét và phê duyệt hành động dự định; đừng coi yêu cầu đang chờ là gián đoạn API. | Dùng phiên tương tác; ghi lại hành động đã yêu cầu và kết quả phê duyệt. |
| 429 or transient server error | Error details and usage limits | Giảm đồng thời yêu cầu; theo hướng dẫn thử lại thay vì thử liên tục. | Giữ HTTP status và hướng dẫn thử lại; giảm đồng thời. |
Khi chia sẻ vấn đề, bao gồm phiên bản OpenCode, hệ điều hành, model ID, đường dẫn endpoint và văn bản lỗi đã ẩn. Loại trừ khóa API và nội dung kho mã riêng tư. Giữ yêu cầu nhỏ nhất có thể tái tạo lỗi để có thể điều tra riêng biệt lỗi cấu hình và lỗi công cụ.
FAQ
Why does OpenCode lose my CometAPI key in a new terminal?
Các lệnh export và PowerShell ở trên đặt biến môi trường cho phiên hiện tại và các tiến trình con của nó. Một terminal mở riêng hoặc trình soạn thảo đang chạy có thể không thừa hưởng nó. Đặt khóa trong môi trường khởi chạy OpenCode và khởi động lại tiến trình đó. Để thiết lập lâu dài, dùng trình quản lý thông tin xác thực của môi trường thay vì nhúng bí mật vào tệp kho mã.
Does OpenCode load COMETAPI_KEY from a .env file automatically?
Biểu thức {env:COMETAPI_KEY} đọc môi trường của tiến trình. Chỉ tạo tệp .env không đảm bảo biến đã được tải. Dùng shell của bạn hoặc bộ nạp môi trường được cấu hình rõ trước khi khởi chạy OpenCode. Chẩn đoán giá trị rỗng tại tiến trình khởi chạy thay vì giả định provider không khả dụng.
Can a global OpenCode configuration change this project setup?
OpenCode hợp nhất cấu hình thay vì thay thế từng tệp trước đó. Tệp dự án ghi đè các trường trùng lặp trong tệp toàn cục, trong khi các thiết lập toàn cục không liên quan vẫn được giữ. Tệp OPENCODE_CONFIG tùy biến được tải giữa chúng. Nếu hành vi khác nhau giữa các kho, so sánh các nguồn này và mọi thiết lập quản lý hoặc inline thay vì giả định tệp cục bộ là nguồn duy nhất.
Does refreshing the OpenCode model list enable CometAPI access?
Không. Tùy chọn refresh model cập nhật cache models.dev; nó không cấp quyền truy cập tài khoản hoặc chứng minh một endpoint chấp nhận model ID. Một mục cấu hình thủ công có thể hiển thị trước bất kỳ yêu cầu thành công nào. Dùng một yêu cầu thực tế để kiểm tra tuyến và tham khảo cài đặt tài khoản CometAPI để biết hạn chế truy cập.
Why does curl work while OpenCode cannot call CometAPI?
Hai tiến trình có thể tải thông tin xác thực khác nhau, dùng model ID khác nhau hoặc gửi dạng yêu cầu khác nhau. Trước tiên chạy lại prompt văn bản ngắn từ cùng terminal với yêu cầu HTTP thành công. Sau đó so sánh base URL provider, adapter và mô hình đã chọn. Nếu văn bản đơn giản hoạt động nhưng tác vụ tác nhân thất bại, bảo tồn lỗi liên quan đến công cụ riêng; kết nối HTTP đơn lẻ không chứng minh khả năng tương thích công cụ.
Conclusion
Giờ bạn đã có một opencode.json với các ví dụ Claude, GPT và DeepSeek, một thông tin xác thực CometAPI dùng chung và các lệnh để chuyển đổi mô hình đang hoạt động. Dùng các yêu cầu văn bản ngắn để kiểm tra truy cập, rồi chạy cùng tác vụ tạo tệp trong các thư mục riêng để xác minh quy trình lập trình. Giữ lại kết quả quan sát với chi tiết môi trường của bạn trước khi áp dụng thiết lập vào một kho mã lớn hơn.
