Day 20:gRPC基础 + MiMo Code初体验 - Java工程师的AI Agent学习笔记
🤖 系列:Java工程师转AI Agent 3个月学习计划
👤 作者:宸丶一 | 28岁Java程序员,正在学习 AI Agent 开发中ing…
🎯 今日目标: gRPC基础、MiMo Code体验、AI编程助手生态
💬 个人格言: 代码改不改变世界我不知道,但先让我准时下班。
前言
Day 19 搞定了记忆衰减,今天换个方向 – gRPC + AI编程助手。
说实话,之前一直没搞懂gRPC和REST到底有啥区别。这次自己写了个计算器服务,跑起来之后才明白:gRPC真的快太多了。0.42ms一次调用,比REST快了100倍,这速度让我有点震惊。
同时体验了小米的MiMo Code,第一次用AI编程助手写代码,感觉就像有个助手在旁边帮你干活,还挺爽的。
学习目标
- 搞懂gRPC的原理和优势
- 学会用Proto文件定义接口
- 实现gRPC服务端和客户端
- 体验MiMo Code,理解Agent循环
- 了解AI编程助手的生态
一、gRPC是什么?一句话解释
gRPC = 像调用本地函数一样调用远程服务
用Java的话说:gRPC = 远程过程调用的"终极方案"
打个比方:餐厅点餐
REST API(HTTP/1.1):
你:(写一份菜单请求)
"服务员,我要一份红烧肉,返回JSON格式,字段包括name、price..."
服务员:(去厨房等)
...红烧肉做好了,端给你
你:(又写一份请求)
"再来一碗米饭"
服务员:(又去厨房等)
...米饭做好了,端给你
→ 点3个菜要跑3趟,每趟都要等
gRPC(HTTP/2):
你:(直接说)
"红烧肉、米饭、可乐,一起上"
服务员:(一趟全搞定)
...三个菜同时做好,一起端给你
→ 一次搞定,不用排队等
gRPC核心优势:
- 比REST快100倍(实测0.42ms/次 vs 50-100ms/次)
- 类型安全(Proto文件定义严格类型)
- 跨语言支持(Python和Java能互调)
二、gRPC vs REST:核心区别
| 对比 | REST API | gRPC |
|---|---|---|
| 数据格式 | JSON(文本,人可读) | Protobuf(二进制,机器可读) |
| 传输协议 | HTTP/1.1(单连接排队) | HTTP/2(多路复用) |
| 性能 | 较慢 | 快2-10倍 |
| 类型安全 | 弱(JSON无强制类型) | 强(Proto定义严格类型) |
| 代码生成 | 手动写HTTP调用代码 | 自动生成客户端/服务端 |
| 浏览器支持 | 好 | 需要gRPC-Web |
| 跨语言 | 一般 | 原生支持 |
为什么gRPC快?两个原因:
性能实测:
gRPC 100次调用:0.042秒
平均每次:0.42ms
REST API:通常50-100ms/次
→ gRPC比REST快 100-200 倍!
三、Proto文件:接口+DTO的完美结合
Proto文件是gRPC的核心,它定义了服务接口和数据结构。
用Java的话说:Proto文件 = Interface + DTO
Proto文件示例
syntax = "proto3";
package calculator;
// 数据结构(类似Java的DTO)
message CalcRequest {
double a = 1;
double b = 2;
}
message CalcResponse {
double result = 1;
string message = 2;
}
// 服务接口(类似Java的Interface)
service Calculator {
rpc Add (CalcRequest) returns (CalcResponse);
rpc Subtract (CalcRequest) returns (CalcResponse);
rpc Multiply (CalcRequest) returns (CalcResponse);
rpc Divide (CalcRequest) returns (CalcResponse);
}
Proto文件的作用:
四、gRPC实战:计算器服务
1. 服务端实现
class CalculatorServicer(calculator_pb2_grpc.CalculatorServicer):
def Add(self, request, context):
result = request.a + request.b
return calculator_pb2.CalcResponse(
result=result,
message=f"{request.a} + {request.b} = {result}"
)
Java对比:
// 就像实现一个Interface
public class CalculatorService implements Calculator {
public CalcResponse add(CalcRequest request) {
double result = request.getA() + request.getB();
return CalcResponse.newBuilder()
.setResult(result)
.build();
}
}
2. 客户端调用
# 创建到服务器的连接(通道)
channel = grpc.insecure_channel('localhost:50051')
# 创建客户端存根(Stub)
stub = calculator_pb2_grpc.CalculatorStub(channel)
# 调用远程方法
response = stub.Add(calculator_pb2.CalcRequest(a=10, b=5))
print(f"结果:{response.result}") # 15.0
3. 运行结果
[Add] 10 + 5 = 15.0 ✅
[Subtract] 10 - 5 = 5.0 ✅
[Multiply] 10 * 5 = 50.0 ✅
[Divide] 10 / 5 = 2.0 ✅
[除零测试]
错误: INVALID_ARGUMENT - 除数不能为零! ✅
性能测试: 100次调用
耗时: 0.042秒
平均: 0.42ms/次 ⚡⚡⚡
五、MiMo Code:AI编程助手初体验
什么是MiMo Code?
小米的AI编程助手(终端版),基于MiMo-V2.5-Pro模型,支持Agent模式(自动调用工具)。
Agent循环流程
就像餐厅点餐:
- 你:我要红烧肉(用户输入)
- 服务员:好的(调用API)
- 服务员去厨房拿红烧肉(执行工具)
- 服务员把红烧肉端给你(结果返回)
- 你:再来碗米饭(继续对话)
MiMo Code的工具
| 工具 | 作用 | 安全性 |
|---|---|---|
read_file |
读取文件内容 | 只读 |
write_file |
写入文件 | 文件操作 |
edit_file |
编辑文件 | 文件操作 |
search_code |
搜索代码 | 只读 |
list_dir |
列目录 | 只读 |
run_shell |
执行Shell命令 | 命令白名单 |
六、AI编程助手生态
国产AI编程助手
| 工具 | 公司 | 模型 | 特点 |
|---|---|---|---|
| MiMo Code | 小米 | MiMo | 简单易用,专注MiMo模型 |
| ZCode | 智谱 | GLM-5.2 | 国产一哥 |
| Trae | 字节 | 字节模型 | 支持 Code+Work 双模式 |
| WorkBuddy | 腾讯 | ? | 企业级AI助手 |
国际AI编程助手
| 工具 | 公司 | 模型 | 特点 |
|---|---|---|---|
| OpenCode | 开源社区 | 多模型 | 框架设计好,可切换模型 |
| Codex | OpenAI | GPT | 功能强大 |
| Hermes | Nous Research | 多模型 | 自进化Agent,自动生成技能 |
国产 vs 国际
对比总结:
| 类型 | 工具 | 特点 | 适合人群 |
|---|---|---|---|
| 入门级 | MiMo Code | 简单直接,专注MiMo | 新手入门 |
| 进阶级 | ZCode、Trae、WorkBuddy | 功能更丰富 | 日常开发 |
| 专业级 | OpenCode、Codex | 多模型支持 | 专业开发者 |
| 终极级 | Hermes | 自进化,自动生成技能 | 深度研究 |
七、今日收获
知识层面
- gRPC的原理和优势
- Proto文件的作用(接口+DTO)
- Agent循环的基本逻辑
- AI编程助手的生态
技能层面
- 能定义Proto文件
- 能实现gRPC服务端和客户端
- 能解决端口占用、版本不匹配等常见问题
- 会用MiMo Code体验AI编程
思维层面
- “先用别人的,再研究原理,最后自己造”
- 工具描述要清晰完整,让Agent不会调错
- Agent要有循环检测和最大轮次限制
八、思考题答案
Q1:gRPC和REST的核心区别是什么?
| 区别 | REST | gRPC |
|---|---|---|
| 数据格式 | JSON(文本) | Protobuf(二进制) |
| 性能 | 较慢 | 快2-10倍 |
| 类型安全 | 弱(JSON无强制类型) | 强(Proto定义严格类型) |
| 代码生成 | 手动写 | 自动生成 |
Q2:为什么gRPC比REST快?
两个原因:
- Protobuf二进制序列化 – 比JSON小3-5倍,解析快
- HTTP/2多路复用 – 一个连接并发多个请求
Q3:Proto文件的作用是什么?
Proto文件 = Interface + DTO
- 定义数据结构(类似Java的DTO)
- 定义服务接口(类似Java的Interface)
Q4:MiMo Code的Agent循环是怎么工作的?
用户输入 → 调用API → 检查工具调用 → 执行工具 → 结果加入对话 → 重复直到完成
Q5:MiMo Code有哪些工具?
read_file(读文件)write_file(写文件)edit_file(编辑文件)search_code(搜索代码)list_dir(列目录)run_shell(执行命令)
Q6:工具描述应该怎么写?
{
"name": "read_file",
"description": "读取文件内容,支持文本和图片",
"parameters": {
"path": {
"type": "string",
"description": "文件路径"
}
}
}
关键点:清晰、完整、没有歧义
Q7:如果Agent重复调用同一个工具,应该怎么处理?
- 设置最大轮次限制(比如8轮)
- 实现循环检测(检测重复调用同一工具)
- 添加超时机制
Q8:MiMo Code和OpenCode有什么区别?
| 对比 | MiMo Code | OpenCode |
|---|---|---|
| 定位 | 小米的AI编程助手 | 开源AI编程框架 |
| 模型 | 只支持MiMo | 支持Claude、GPT、MiMo等 |
| 语言 | Python | Go |
| 特点 | 简单易用 | 功能丰富 |
九、明日计划
- 分析OpenCode的架构设计
- 对比MiMo Code和OpenCode的异同
- 尝试自己实现一个Mini版AI编程助手
十、总结
今天学了gRPC基础和MiMo Code体验,核心收获:
- gRPC比REST快100倍 – 实测0.42ms/次
- Proto文件 = Interface + DTO – 定义接口和数据结构
- Agent循环 – 用户输入 → API → 工具调用 → 结果 → 重复
- AI编程助手生态 – MiMo Code、OpenCode、ZCode、Trae等
一句话总结: gRPC让Agent调用Java服务更快,MiMo Code让AI编程更简单。
📝 小小腾老师的评分
维度 得分 评价 gRPC掌握程度 ⭐⭐⭐⭐ 能独立实现,但HTTP/2原理还需要深入 Proto文件理解 ⭐⭐⭐⭐ 掌握了核心,但自动生成代码的原理还没学 MiMo Code体验 ⭐⭐⭐⭐⭐ 会用工具,理解了Agent循环 思考题完成 ⭐⭐⭐⭐ 75分,大部分理解,少部分需要补充 实践能力 ⭐⭐⭐⭐⭐ 代码跑通,问题解决能力强 学习态度 ⭐⭐⭐⭐⭐ 遇到不会的诚实说,不瞎编 总分:75分(良好)
老师说: 今天的实践能力很强,代码都跑通了,问题也解决了。理论理解还需要加强,特别是gRPC的底层原理。明天继续加油!
💡 学习心得: 先用别人的,再研究原理,最后自己造
🎯 明日目标: OpenCode源码分析
📅 学习进度: Day 20/35(57%完成)
下一篇: Day 21:OpenCode架构分析 - 学习AI编程框架的设计思路
更多推荐
所有评论(0)