1. Giới thiệu
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tạo và triển khai một máy chủ Giao thức ngữ cảnh mô hình (MCP) để mở rộng các chức năng của Gemini CLI. Bạn sẽ tạo godoctor, một máy chủ dựa trên Go cung cấp các công cụ tuỳ chỉnh để phát triển Go, chuyển đổi Gemini CLI từ một trợ lý lập trình đa năng thành một chuyên gia phát triển Go chuyên biệt.
Lớp học lập trình này sử dụng phương pháp "dựa trên câu lệnh". Bạn sẽ đóng vai trò là trưởng nhóm kỹ thuật, đưa ra câu lệnh cho trợ lý AI của mình (chính là Gemini CLI). Mục tiêu của bạn là tìm hiểu cách chuyển các yêu cầu của dự án thành câu lệnh hiệu quả và để AI xử lý các chi tiết triển khai.
Trọng tâm của dự án này là Giao thức ngữ cảnh mô hình (MCP). MCP là một giao thức nguồn mở giúp chuẩn hoá cách các mô hình ngôn ngữ lớn (LLM) như Gemini giao tiếp với các công cụ và dịch vụ bên ngoài. Công cụ này đóng vai trò là cầu nối, cho phép AI truy cập vào thông tin thực tế và thực hiện các hành động ngoài kiến thức được tích hợp sẵn. Bằng cách tạo một máy chủ MCP, bạn đang tạo một trình bổ trợ tuỳ chỉnh mà Gemini CLI có thể khám phá và sử dụng, từ đó dạy cho Gemini CLI các kỹ năng mới.
Kiến thức bạn sẽ học được
- Cách cài đặt và định cấu hình Gemini CLI
- Cách xây dựng câu lệnh hiệu quả để hướng dẫn trợ lý AI trong quá trình phát triển phần mềm
- Cách cung cấp bối cảnh và nguyên tắc cho trợ lý AI
- Cách tạo và định cấu hình máy chủ MCP để tăng cường các chức năng của Gemini CLI
- Cách tạo vùng chứa và triển khai một ứng dụng Go lên Google Cloud Run
Bạn cần có
Bạn có thể thực hiện toàn bộ hội thảo này trong Google Cloud Shell. Nền tảng này được cài đặt sẵn tất cả các phần phụ thuộc cần thiết (gcloud CLI, Go, Docker, Gemini CLI).
Ngoài ra, nếu muốn làm việc trên máy riêng, bạn sẽ cần những thứ sau:
- Node.js 20 trở lên
- Một dự án trên Google Cloud đã bật tính năng thanh toán
- Google Cloud SDK (gcloud CLI) đã được cài đặt và khởi chạy
- Go 1.24 trở lên đã được cài đặt trên hệ thống của bạn
- Docker đã được cài đặt trên hệ thống của bạn
Công nghệ chính
Tại đây, bạn có thể tìm thêm thông tin về các công nghệ mà chúng tôi sẽ sử dụng:
- Gemini CLI: Giao diện dòng lệnh dựa trên AI mà chúng tôi sẽ mở rộng
- Giao thức ngữ cảnh mô hình (MCP): Giao thức nguồn mở cho phép Gemini CLI giao tiếp với công cụ tuỳ chỉnh của chúng tôi
- Go SDK cho MCP: Thư viện Go mà chúng ta sẽ dùng để triển khai máy chủ MCP
Mẹo để có một lớp học lập trình thành công
Làm việc với trợ lý AI là một cách mới để phát triển phần mềm. Sau đây là một số mẹo giúp bạn có trải nghiệm suôn sẻ và thành công:
- Đừng ngại nhấn phím ESC. Đôi khi, AI sẽ đề xuất những hành động hoặc mã mà bạn không đồng ý. Sử dụng phím ESC để huỷ hành động được đề xuất và đưa ra một câu lệnh mới để hướng dẫn AI đi đúng hướng. Bạn là phi công.
- Khuyến khích sử dụng công cụ. Nếu AI có vẻ không biết hoặc đang bịa đặt thông tin, hãy khuyến khích AI sử dụng các công cụ hiện có. Những câu lệnh như "Bạn có thể dùng Google Tìm kiếm để xác minh điều đó không?" hoặc "Hãy dùng công cụ read_file để hiểu mã hiện tại trước khi thực hiện thay đổi" có thể rất hiệu quả.
- Chống lại các thay đổi thủ công. Hãy thử để AI thực hiện mọi việc. Đây là kỹ năng cốt lõi mà bạn đang luyện tập. Tuy nhiên, nếu bạn phải thực hiện thay đổi theo cách thủ công, hãy cho AI biết về thay đổi đó sau. Một câu lệnh như "Tôi đã cập nhật tệp README.md theo cách thủ công. Vui lòng đọc lại để củng cố kiến thức" sẽ đảm bảo AI luôn đồng bộ hoá với dự án của bạn.
- Bạn đã thử tắt rồi bật lại chưa? Trong trường hợp hiếm gặp khi AI cố gắng đi theo một đường dẫn nhất định trái với lệnh của bạn, thì có thể là do ngữ cảnh bị suy giảm (đôi khi còn gọi là "ngữ cảnh bị hỏng"). Trong trường hợp này, bạn có thể dùng lệnh "/compress" của Gemini CLI để giảm nhiễu ngữ cảnh hoặc trong trường hợp nghiêm trọng, bạn có thể dùng lệnh "/clear" để xoá toàn bộ nhật ký phiên.
2. Thiết lập môi trường
Thiết lập môi trường theo tốc độ của riêng bạn
- Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị cho những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
- Mã dự án là giá trị duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là
PROJECT_ID
). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án. - Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
- Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.
Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:
Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:
Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.
3. Làm quen với Gemini CLI
Trong phần này, bạn sẽ tìm hiểu về Gemini CLI, bao gồm cả cách cài đặt và định cấu hình Gemini CLI cho môi trường của mình.
Gemini CLI là gì?
Gemini CLI là một giao diện dòng lệnh dựa trên AI, có thể giúp bạn thực hiện nhiều tác vụ phát triển. Gemini có thể hiểu ngữ cảnh dự án của bạn, trả lời câu hỏi, tạo mã và sử dụng các công cụ bên ngoài để mở rộng khả năng của mình.
Cài đặt
Cài đặt Gemini CLI trên toàn cầu bằng npm.
npm install -g @google/gemini-cli
Bạn có thể xác nhận rằng CLI đã được cài đặt bằng cách chạy:
gemini --version
Cấu hình
Hành vi của Gemini CLI được kiểm soát bằng các tệp cấu hình và biến môi trường. Có hai tệp khoá:
GEMINI.md
: Tệp này cung cấp hướng dẫn và bối cảnh bằng ngôn ngữ tự nhiên cho AI. CLI sẽ đọc tệp này để hiểu các tiêu chuẩn và quy ước mã hoá của dự án..gemini/settings.json
: Tệp này kiểm soát cấu hình của CLI, bao gồm cả cách kết nối với các công cụ bên ngoài. Chúng ta sẽ dùng tệp này để định cấu hình CLI nhằm sử dụng máy chủ MCP mà chúng ta đang tạo trong phòng thí nghiệm này.
Trước tiên, chúng ta sẽ thiết lập môi trường rồi tiến hành tạo tệp GEMINI.md
. Tệp settings.json
sẽ được định cấu hình ở bước sau.
- Tạo và khởi chạy một thư mục dự án:
mkdir godoctor
cd godoctor
go mod init godoctor
- Xác thực bằng thông tin xác thực mặc định của ứng dụng Google Cloud:
Chúng ta cần đăng nhập vào một tài khoản có quyền truy cập vào dự án GCP mà bạn sẽ sử dụng cho lớp học lập trình này:
- Đảm bảo bạn đã cài đặt và khởi chạy Google Cloud SDK.
- Chạy lệnh sau để thiết lập Thông tin xác thực mặc định của ứng dụng:
gcloud auth application-default login
4. Nguyên tắc phát triển
Để đảm bảo trợ lý AI tạo ra mã Go chất lượng cao và tự nhiên, bạn cần cung cấp cho trợ lý này các nguyên tắc rõ ràng. Việc này được thực hiện trong tệp GEMINI.md.
Mục tiêu: Tạo một tệp GEMINI.md đóng vai trò là bộ quy tắc cho trợ lý AI trong dự án này.
Việc cần làm: Tạo một tệp có tên GEMINI.md trong thư mục gốc của godoctor rồi dán nội dung sau vào tệp đó.
# Go Development Guidelines
All code contributed to this project must adhere to the following principles.
### 1. Formatting
All Go code **must** be formatted with `gofmt` before being submitted.
### 2. Naming Conventions
- **Packages:** Use short, concise, all-lowercase names.
- **Variables, Functions, and Methods:** Use `camelCase` for unexported identifiers and `PascalCase` for exported identifiers.
- **Interfaces:** Name interfaces for what they do (e.g., `io.Reader`), not with a prefix like `I`.
### 3. Error Handling
- Errors are values. Do not discard them.
- Handle errors explicitly using the `if err != nil` pattern.
- Provide context to errors using `fmt.Errorf("context: %w", err)`.
### 4. Simplicity and Clarity
- "Clear is better than clever." Write code that is easy to understand.
- Avoid unnecessary complexity and abstractions.
- Prefer returning concrete types, not interfaces.
### 5. Documentation
- All exported identifiers (`PascalCase`) **must** have a doc comment.
- Comments should explain the *why*, not the *what*.
# Agent Guidelines
- **Reading URLs:** ALWAYS read URLs provided by the user. They are not optional.
Giờ đây, môi trường phát triển của bạn đã được thiết lập đầy đủ.
5. Bản dựng ban đầu: Máy chủ godoc
Mục tiêu đầu tiên của bạn là tạo phiên bản ban đầu của máy chủ godoctor
. Phiên bản này phải là một ứng dụng tối thiểu, sẵn sàng phát hành, cung cấp một công cụ duy nhất có tên là godoc
, cho phép tra cứu tài liệu Go.
Mục tiêu: Tạo một máy chủ MCP sẵn sàng cho hoạt động sản xuất, hiển thị lệnh go doc, cho phép một LLM truy vấn tài liệu Go.
Chạy lệnh Gemini CLI trên shell:
gemini
Khi bạn chạy CLI lần đầu tiên, hệ thống sẽ yêu cầu bạn chọn một chế độ xác thực và một giao diện. Đối với chế độ xác thực, hãy chọn "đăng nhập bằng Google" để đăng nhập bằng Tài khoản Google cá nhân. Nhờ đó, bạn có thể tận dụng bậc miễn phí hào phóng của Gemini CLI. Bạn sẽ thấy một lựa chọn để chọn chế độ xác thực tương tự như sau:
Trong trường hợp cần thay đổi lựa chọn, bạn có thể nhập /auth
rồi nhấn Enter để mở lại trình đơn này.
Tiếp theo, bạn sẽ được nhắc chọn một giao diện:
Tương tự như /auth
, bạn cũng có thể thay đổi giao diện sau này bằng lệnh /theme
.
Sau khi chọn phương thức xác thực và giao diện bạn muốn, bạn sẽ được chuyển đến dấu nhắc lệnh. Tại đây, bạn có thể nhập các lệnh, ví dụ:
Write a hello world application in Go.
CLI sử dụng kết hợp khả năng suy luận của riêng mình (thông qua một mô hình Gemini như Gemini Flash hoặc Gemini Pro) và các công cụ để thực hiện các việc. Nó sử dụng các công cụ bất cứ khi nào cần tương tác với hệ thống tệp hoặc các dịch vụ bên ngoài, chẳng hạn như API, cơ sở dữ liệu, v.v. Ví dụ về các công cụ có sẵn hoặc "công cụ nội bộ" là read_file, write_file, web_fetch và google_search. Máy chủ MCP mà chúng tôi đang xây dựng cũng sẽ trở thành một công cụ có sẵn cho CLI.
Vào lần đầu tiên chạy một công cụ, công cụ đó sẽ yêu cầu bạn cấp quyền. Bạn có thể cấp cho ứng dụng này quyền truy cập một lần, phê duyệt chung cho phần còn lại của phiên hoặc từ chối yêu cầu của ứng dụng. Nếu đó là thao tác chỉnh sửa tệp, bạn cũng sẽ thấy lựa chọn chỉnh sửa tệp bằng một trình chỉnh sửa bên ngoài, phòng trường hợp bạn muốn điều chỉnh. Ví dụ: đây là kết quả của câu lệnh trên, để tạo một chương trình hello world:
Ngoài câu lệnh, bạn cũng có thể dùng lệnh gạch chéo. Nếu bạn nhập "/", CLI sẽ tự động cho bạn thấy các lựa chọn tự động hoàn thành. Bạn có thể tiếp tục nhập toàn bộ lệnh hoặc chọn một lệnh trong số các lựa chọn. Lệnh /auth
và /theme
nêu trên là một vài lệnh như vậy.
Sau khi làm quen với giao diện này, bạn có thể bắt đầu nhiệm vụ chính của phần này, đó là yêu cầu CLI viết máy chủ MCP cho chúng ta.
Tạo máy chủ MCP Hello World
Một trong những cách tốt nhất để đảm bảo mô hình sẽ tạo ra các nội dung nhất quán hơn là chia nhỏ các nhiệm vụ phức tạp thành các bước gia tăng. Mặc dù mô hình có thể tự mình tìm ra một tác vụ phức tạp, nhưng nếu không có chế độ thiết lập phù hợp, mô hình sẽ mất nhiều thời gian để khám phá ra cách triển khai phù hợp.
Để có một phương pháp nhất quán hơn, trước tiên, chúng ta sẽ hướng dẫn nó tạo một máy chủ MCP "Hello World" trước khi triển khai chức năng mà chúng ta muốn (đọc tài liệu về Go).
Sau đây là một ví dụ về câu lệnh:
Your task is to create a Model Context Protocol (MCP) server to expose a "hello world" tool. For the MCP implementation, you should use the official Go SDK for MCP and use the stdio transport.
Read these references to gather information about the technology and project structure before writing any code:
- https://github.com/modelcontextprotocol/go-sdk/blob/main/README.md
- https://modelcontextprotocol.io/specification/2025-06-18/basic/lifecycle
- https://go.dev/doc/modules/layout
To test the server, use shell commands like these:
(
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}}';
echo '{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}';
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}';
) | ./bin/godoctor
Xin lưu ý rằng câu lệnh trên bao gồm 3 đoạn chính:
- Quy cách vấn đề, bao gồm những gì chúng ta muốn xây dựng và các ràng buộc (ví dụ: sử dụng SDK chính thức thay vì bất kỳ SDK nào)
- Tài liệu tham khảo cho mô hình để giúp mô hình phân biệt rõ yêu cầu
- Một quy trình kiểm thử, đóng vai trò là tiêu chí chấp nhận cho nhiệm vụ
Việc có 3 thành phần này sẽ giúp mô hình đạt được kết quả mong muốn một cách nhất quán hơn.
Triển khai công cụ Go doc
Sau khi bạn triển khai thành công, chúng ta có thể chuyển sang triển khai công cụ "go doc" thực:
Add a new tool to our MCP server called "godoc" that invokes the "go doc" shell command. The tool will take a mandatory "package" argument and an optional "symbol" argument.
Read the reference for the go doc command to understand its API: https://pkg.go.dev/golang.org/x/tools/cmd/godoc
Test it by executing the call with:
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name": "godoc", "arguments": {"package": "fmt"} } }'
| ./bin/godoctor
Test it using both a standard library package and an external package like "github.com/modelcontextprotocol/go-sdk/mcp", both with and without symbols.
Bạn có thể thoải mái thử nghiệm câu lệnh này hoặc tự nghĩ ra câu lệnh của riêng mình.
Giao diện dòng lệnh hữu ích
Ngay khi đã quyết định được cách triển khai phù hợp, bạn có thể hướng dẫn mô hình tạo CLI godoctor bằng cách sử dụng một ứng dụng MCP. Việc này sẽ giúp đơn giản hoá quá trình kiểm thử các tính năng bằng cách tránh tạo các lệnh gọi JSON-RPC theo cách thủ công như trước đây.
Câu lệnh mẫu:
Now create a godoctor-cli component that will call the MCP server using command transport. This CLI will expose all tools using subcommands and allow us to test the MCP server implementation without needing to build the JSON-RPC calls manually.
Use the reference implementation at https://github.com/modelcontextprotocol/go-sdk/blob/main/README.md to build the client.
Test it by calling from the command line:
- the hello_world tool
- the godoc tool with a local package
- the godoc tool with a local package and symbol
- the godoc tool with an external package
- the godoc tool with an external package and symbol
Giờ đây, bạn đã có một nhóm ứng dụng và máy chủ đang hoạt động. Trong phần tiếp theo, bạn sẽ định cấu hình Gemini CLI bằng máy chủ MCP mà bạn vừa tạo để bắt đầu tận dụng các lợi ích của máy chủ này trong nhiệm vụ lập trình tiếp theo.
Tài nguyên hữu ích
Vì MCP vẫn là một khái niệm mới và SDK Go cho MCP là một thư viện mới, nên ở bước này, Gemini có thể mất nhiều thời gian để tự mình khám phá cách triển khai phù hợp. Để giúp mô hình đưa ra giải pháp phù hợp, bạn có thể cung cấp cho mô hình những thông tin tham khảo sau:
- Bạn có thể đưa ra lời nhắc sau cho mô hình để mô hình khám phá API SDK một cách nhất quán hơn: "use the go doc shell command to discover the api for the go-sdk library" (sử dụng lệnh shell go doc để khám phá api cho thư viện go-sdk)
- Nếu cố gắng kiểm tra mã nguồn của SDK bằng công cụ
read_file
, mô hình sẽ không thành công vì Gemini CLI không thể đọc các tệp bên ngoài phạm vi hiện tại của nó. Bạn có thể hướng dẫn công cụ này sử dụng các lệnhcat
vàls
thông qua công cụrun_shell_command
. - Nếu mô hình gặp khó khăn trong việc gỡ lỗi ứng dụng, hãy hướng dẫn mô hình thêm tính năng ghi nhật ký chi tiết hơn và cải thiện thông tin theo bối cảnh trong thông báo lỗi.
- Nếu tất cả các cách khác đều không thành công, hãy tham khảo cách triển khai này: https://github.com/danicat/godoctor
6. Định cấu hình godoctor làm Máy chủ MCP cho Gemini CLI
Sau khi trợ lý AI tạo mã cho cả máy khách và máy chủ, bạn có thể hướng dẫn trợ lý này chạy một số kiểm thử thủ công. Ví dụ:
retrieve the documentation for the package net/http
Đảm bảo bạn cũng kiểm thử với một phần phụ thuộc bên ngoài (không có trong thư viện chuẩn):
retrieve the documentation for the go-sdk package
Khi bạn hài lòng với kết quả, hãy hướng dẫn AI viết một tệp README.md có hướng dẫn về cách sử dụng và phát triển dự án này.
Now write a detailed README.md file explaining both from a user and a developer perspective how to use and to build this project.
Bây giờ, chúng ta sẽ định cấu hình máy chủ để Gemini CLI có thể sử dụng máy chủ này trong giai đoạn phát triển tiếp theo.
- Yêu cầu CLI cập nhật GEMINI.md để sử dụng
godoc
làm phương thức ưu tiên để đọc tài liệu:
update the GEMINI.md file to use the godoc tool to retrieve documentation about Go packages or symbols. Always prefer to use godoc over WebFetch and GoogleSearch, and only use those when godoc doesn't give a clear answer.
- Bây giờ, chúng ta cần khởi động lại Gemini CLI để định cấu hình. Trước tiên, hãy lưu phiên trò chuyện để bạn có thể tiếp tục từ điểm dừng khi phiên trò chuyện được khởi động lại.
/chat save workshop001
- Thoát khỏi CLI bằng cách nhấn tổ hợp phím Ctrl+D hai lần.
- Biên dịch tệp nhị phân của máy chủ: Tạo một thư mục
bin
rồi biên dịch máy chủ godoctor vào thư mục đó.
mkdir -p bin
go build -o ./bin/godoctor ./cmd/godoctor # adjust paths as needed
- Định cấu hình Gemini CLI cho công cụ cục bộ: Tạo một tệp
.gemini/settings.json
trong thư mục gốc của dự án và thêm một phầnmcpServers
để cho Gemini CLI biết cách chạy máy chủ đã biên dịch.
mkdir -p .gemini
touch .gemini/settings.json
- Bây giờ, hãy thêm nội dung sau vào tệp mới bằng một trình chỉnh sửa dòng lệnh như
vim
hoặcnano
:
{
"mcpServers": {
"godoctor": {
"command": "./bin/godoctor"
}
}
}
- Bây giờ, hãy chạy Gemini CLI và khôi phục phiên trò chuyện:
/chat resume workshop001
- Bạn có thể thấy công cụ này được tải bằng cách nhấn tổ hợp phím Ctrl+T:
- Kiểm thử quá trình tích hợp bằng cách yêu cầu Gemini CLI sử dụng công cụ của bạn bằng một câu lệnh như "Lấy tài liệu cho net/http"
Bạn sẽ thấy như sau:
Nếu công cụ hoạt động bình thường, bạn sẽ thấy tài liệu được truy xuất thông qua lệnh gọi công cụ:
Xin chúc mừng, bạn đã tạo được một công cụ MCP! Nhưng đây chưa phải là kết thúc, chúng ta vẫn có thể làm cho nó hữu ích hơn một chút.
7. Thêm một công cụ đánh giá mã dựa trên AI
Hãy thêm một tính năng tinh vi hơn, dựa trên AI: một trình đánh giá mã sử dụng Gemini API.
Mục tiêu: Thêm một công cụ mới có tên là code_review vào dự án hiện có. Công cụ này sẽ sử dụng Gemini API để phân tích mã Go và đưa ra ý kiến phản hồi.
Câu lệnh mẫu:
I want to add a new tool to my project called code_review. This tool should use the Gemini API to analyze Go code and provide a list of improvements in json format according to the best practices accepted by the Go community. The tool should take the Go code content and an optional hint as input. The hint will be used to provide additional guidance for the AI reviewer, like "focus on security" or "help me simplify this code". Please update the server to include this new tool and modify the CLI client to add a review command to use it.
Use this SDK to call Gemini: https://github.com/googleapis/go-genai
Mẹo hữu ích
Sau khi mô hình bắt đầu hoạt động, bạn có thể thấy mô hình tự động yêu cầu gọi công cụ godoc
để duyệt xem tài liệu cho gói genai
. Nếu không, bạn luôn có thể nhấn phím thoát để dừng quy trình và nhắc AI rằng giờ đây AI có công cụ godoc
theo ý mình.
Kiểm thử Trình đánh giá mã
- Chúng ta cần khởi động lại Gemini CLI để tạo và tải lại máy chủ MCP. Lưu phiên trò chuyện bằng
/chat save workshop002
rồi thoát CLI bằng cách nhấn Ctrl+D hai lần. - Công cụ
code_review
cần có khoá API vì chúng ta đang gọi một mô hình Gemini để thực hiện các bài đánh giá cho chúng ta. Bạn có thể tạo khoá API bằng Google AI Studio. - Định cấu hình biến môi trường
GEMINI_API_KEY
bằng khoá API được tạo ở bước trên:
export GEMINI_API_KEY="YOUR_API_KEY"
- Biên dịch lại máy chủ: Sau khi thêm công cụ mới, bạn phải biên dịch lại tệp nhị phân của máy chủ để đưa các thay đổi vào.
go build -o ./bin/godoctor ./cmd/godoctor
- Khởi chạy lại Gemini CLI. Khôi phục phiên trò chuyện bằng
/chat resume workshop002
. - Lưu ý quan trọng. Đảm bảo rằng bạn đã xác thực bằng tài khoản Gmail cá nhân để chính Gemini CLI không sử dụng tài khoản thanh toán của bạn. Bạn có thể thực hiện việc này bằng cách sử dụng lệnh
/auth
:
- Xác nhận rằng bạn đã bật công cụ bằng cách nhấn tổ hợp phím Ctrl+T. Bạn sẽ thấy như sau:
- Bây giờ, hãy kiểm thử công cụ
code-review
bằng cách xem xét một trong các tệp nguồn của công cụ này:
"Sử dụng công cụ godoctor để xem xét tệp cmd/godoctor/main.go."
You should see something like this:
Khi công cụ đánh giá mã hoạt động, giờ đây, bạn có thể đề xuất mô hình áp dụng một số điểm cải tiến mà mô hình tìm thấy, để có một quy trình "tự cải thiện" hoàn chỉnh!
Giờ đây, bạn đã xác nhận rằng công cụ code-review
hoạt động. Trong phần tiếp theo, bạn sẽ tìm hiểu cách triển khai ứng dụng này lên đám mây.
Cách xoá GEMINI_API_KEY:
- Lưu phiên hiện tại bằng
/chat save workshop003
và thoát khỏi CLI - Sao lưu khoá API ở nơi an toàn:
export | grep GEMINI_API_KEY > env.bkp
- Huỷ đặt
GEMINI_API_KEY
:
export GEMINI_API_KEY=
- Khởi động lại CLI và tải phiên bằng
/chat resume workshop003
- Yêu cầu mô hình áp dụng các điểm cải tiến trong quy trình đánh giá mã.
8. Chuẩn bị máy chủ cho đám mây
Máy chủ MCP mà chúng ta đã phát triển cho đến nay chỉ chạy trên máy cục bộ. Điều này không sao nếu bạn đang phát triển các công cụ để sử dụng cho riêng mình. Tuy nhiên, trong môi trường doanh nghiệp, chúng ta thường cần triển khai các công cụ để hàng trăm hoặc thậm chí hàng nghìn nhà phát triển có thể sử dụng rộng rãi.
Để mở rộng quy mô máy chủ MCP, chúng ta cần chuyển đổi máy chủ này từ một máy chủ chỉ sử dụng I/O tiêu chuẩn sang một máy chủ có thể sử dụng HTTP và triển khai máy chủ này ở một nơi mà nhiều nhà phát triển có thể truy cập. Để đạt được mục tiêu này, chúng ta sẽ sử dụng một chế độ truyền tải được xác định trong quy cách MCP dưới dạng HTTP có thể truyền phát và sử dụng Cloud Run làm mục tiêu triển khai.
Mục tiêu: Tái cấu trúc máy chủ godoctor để sử dụng phương thức truyền HTTP có thể truyền trực tuyến.
Câu lệnh mẫu:
The godoctor server is currently using the stdio transport. I want to deploy it to Cloud Run, so I need to refactor it to use the streamable HTTP transport instead. Please modify the server to comply with the streamable HTTP specification.
Tài nguyên hữu ích
- Nếu mô hình gặp khó khăn khi triển khai phương thức truyền HTTP có thể truyền trực tuyến, bạn có thể cung cấp cho mô hình tài liệu tham khảo này: https://github.com/modelcontextprotocol/go-sdk/blob/main/design/design.md
- Thay vào đó, mô hình có thể cố gắng sử dụng HTTP+SSE (không dùng nữa). Nếu bạn thấy yêu cầu đi theo đường dẫn này, hãy chuyển hướng yêu cầu đó trở lại HTTP có thể truyền phát.
Kiểm thử Máy chủ bằng HTTP
Yêu cầu mô hình cập nhật ứng dụng godoctor để cũng sử dụng HTTP có thể truyền trực tuyến để bạn có thể kiểm thử xem ứng dụng đó có hoạt động hay không.
Now update the client to use streamable HTTP and run a test by retrieving documentation from one package
Không bắt buộc: Nếu bạn muốn định cấu hình Gemini CLI để sử dụng máy chủ thông qua HTTP, hãy làm như sau:
- Lưu phiên và thoát khỏi CLI
- Chỉnh sửa tệp
.gemini/settings.json
và thay đổi cấu hình để trỏ đến máy chủ đang chạy cục bộ.
"mcpServers": {
"godoctor": {
"httpUrl": "http://localhost:8080"
}
}
- Chạy máy chủ được tái cấu trúc cục bộ:
go run ./cmd/godoctor/main.go
- Trong một thiết bị đầu cuối mới (vì thao tác trên đang chặn), hãy khởi động Gemini CLI và đưa ra một câu lệnh để kiểm tra kết nối, ví dụ: "Sử dụng công cụ godoctor để xem tài liệu về fmt.Println."
- Dừng máy chủ bằng tổ hợp phím Ctrl+C khi bạn hoàn tất kiểm thử.
9. Đóng gói ứng dụng bằng Docker
Giờ đây, khi máy chủ của chúng ta đang sử dụng giao thức truyền tải chính xác, chúng ta có thể chứa nó để triển khai.
Mục tiêu: Tạo một Dockerfile để đóng gói máy chủ godoctor thành một hình ảnh vùng chứa di động, sẵn sàng cho sản xuất.
Câu lệnh mẫu:
Please create a multi-stage Dockerfile that compiles the Go binary and copies it into a minimal golang image like golang:1.24-alpine.
Kiểm thử hình ảnh Docker
Sau khi tạo Dockerfile
, hãy tạo hình ảnh và chạy hình ảnh đó để đảm bảo hình ảnh hoạt động đúng cách. Bạn có thể hướng dẫn Gemini làm việc này cho bạn:
build the image and test the connectivity to the server using the godoctor client
Không bắt buộc: nếu bạn muốn thực hiện kiểm thử theo cách thủ công:
- Tạo vùng chứa:
docker build -t godoctor:latest .
- Chạy vùng chứa cục bộ:
docker run -p 8080:8080 -e PORT=8080 godoctor:latest
- Kiểm thử vùng chứa đang chạy: Trong một thiết bị đầu cuối khác, hãy khởi động Gemini CLI và yêu cầu công cụ này tìm nạp tài liệu.
- Dừng máy chủ bằng tổ hợp phím Ctrl+C khi bạn hoàn tất kiểm thử.
10. Triển khai lên Cloud Run
Giờ là lúc triển khai vùng chứa lên đám mây.
Mục tiêu: Triển khai máy chủ godoctor được chứa trong vùng chứa vào Google Cloud Run.
Hướng dẫn về câu lệnh: Yêu cầu trợ lý AI cung cấp các lệnh gcloud để triển khai vùng chứa.
Câu lệnh mẫu:
Now please deploy this image to Cloud Run and return me an URL I can use to call the MCP tool. Deploy it to us-central1 and use the project currently configured in the environment.
Sau khi quá trình triển khai hoàn tất, chúng ta sẽ định cấu hình Gemini CLI để sử dụng công cụ mà bạn vừa triển khai.
Yêu cầu Gemini cập nhật tệp .gemini/settings.json
để thay đổi cấu hình công cụ MCP nhằm trỏ đến dịch vụ đã triển khai của bạn.
now update the .gemini/settings.json file to use this URL for the godoctor server
Phần mcpServers
cuối cùng sẽ có dạng như sau (hãy nhớ thay thế trình giữ chỗ bằng URL thực tế của ứng dụng Cloud Run):
"mcpServers": {
"godoctor": {
"httpUrl": "https://<your-cloud-run-id>.us-central1.run.app"
}
}
Kiểm thử việc triển khai Cloud Run
Giờ đây, bạn đã sẵn sàng cho quy trình kiểm thử toàn diện cuối cùng.
Khởi động lại Gemini CLI lần cuối (bằng cách sử dụng /chat save
và /chat resume
để giữ lại ngữ cảnh). Giờ đây, CLI có thể gọi máy chủ MCP từ xa. Hãy thử yêu cầu tài liệu cho mọi gói.
Bạn chỉ cần nhớ rằng để sử dụng công cụ đánh giá mã, dịch vụ cần có GEMINI_API_KEY
. Bạn có thể yêu cầu Gemini CLI triển khai lại với môi trường phù hợp:
update the cloud run environment to add a GEMINI_API_KEY and use the value in @env.bkp. Then update the .gemini/settings.json file with the correct service URL
Khởi động lại CLI và kiểm thử bằng một câu lệnh:
Use the godoctor tool to review the cmd/godoctor/main.go file
Giờ đây, Gemini CLI sẽ kết nối với dịch vụ Cloud Run mà bạn đã triển khai và thực hiện quy trình đánh giá mã.
Câu lệnh mẫu:
I'm done with my tests on the CloudRun server, please delete this deployment for me and revert my .gemini/settings.json to use the local version.
11. Xin chúc mừng!
Bạn đã hướng dẫn thành công một trợ lý AI xây dựng, đóng gói và triển khai một công cụ tinh vi dựa trên AI. Quan trọng hơn, bạn đã thực hành kỹ năng thiết yếu của hoạt động phát triển phần mềm hiện đại: chuyển đổi các yêu cầu thành câu lệnh hiệu quả. Bạn đã mở rộng thành công Gemini CLI bằng một công cụ tuỳ chỉnh, biến công cụ này thành một trợ lý phát triển Go chuyên biệt và mạnh mẽ hơn.