duan-translator小模型是专门为了段言这门中文编程语言而微调训练的,可以帮助我们写段言的程序,确切来说,是可以把python代码转为段言代码!
启动ollama并绑定到0.0.0.0
export OLLAMA_HOST=0.0.0.0:11434 ollama serve启动模型
skywalk@fb98:~ $ ollama run duan-translator >>> hello Hello! How can I assist you today? >>> Send a message (/? for help)成功了!
skywalk@fb98:~ $ ollama run duan-translator
>>> 将Python代码转为段言代码:\n\nPython 代码:\ndef hello(): print('hi')
段落 hello:
打印("hi")
>>> Send a message (/? for help)
Dumate测试结果
全部测试通过!Q80 量化完美保留了微调知识,推理速度 28 tok/s,全部翻译正确。
来看一下结果对比:
| Python 代码 | 段言翻译 | 正确 |
|---|---|---|
def add(a, b): return a + b | 段落 加法 接收 a, b:/返回 a 加 b | ✓ |
| 递归阶乘 | 段落 超乘 接收 n:/如果 n 小于等于 1:/返回 n 乘 超乘(n 减 1) | ✓ |
for i in range(10): print(i) | 遍历 i 于 0至9:/打印(i) | ✓ |
| 条件分支 | 设 x 为 10/如果 x 大于 5:/否则: | ✓ |
关键结论:
- Q8_0 量化(531MB)是 0.5B 小模型的最佳选择——精度足够保留 LoRA 微调知识,且能在 Quadro K4200(4GB VRAM)上流畅运行
- 之前 Q4KM(398MB)量化太狠,把微调学到的段言语法知识全丢了
- 推理速度~28 tok/s,首次加载稍慢(35s),后续 1-3 秒/次
- 模型已部署在
http://192.168.0.88:11434,模型名duan-translator
现在可以通过 ollama API 随时调用了。比如:
import requests resp = requests.post("http://192.168.0.88:11434/api/chat", json={ "model": "duan-translator", "messages": \[ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": "将Python代码转为段言代码:\n\nPython 代码:\ndef hello(): print('hi')"} ], "stream": False }) print(resp.json()["message"]\["content"])大段测试
结果很清晰了。以下是 4 个复杂测试的分析:
Test 1 - 冒泡排序:完美✓
- 嵌套循环、swap 临时变量、函数调用、数组字面量全部正确
range(n)→遍历 i 于 0至n减1,range(0, n-i-1)→遍历 j 于 0至n减i减2都精确翻译
Test 2 - 二分查找:部分正确⚠️
- 模型输出了两个版本(第一版有错误后自行重试),说明 0.5B 模型在长代码上会出现重复生成
while left <= right→当 左大于等于右(条件方向搞反了)return -1→返回 减 1(丢了变量名)
Test 3 - 类与继承:失败✗
- 训练数据中 OOP 样本不足,模型开始幻觉(重复定义、混用
己/自己、继承语法混乱)
Test 4 - 字典+列表推导:部分正确⚠️
- 列表推导
\[s for s in students if ...]正确拆解为遍历 + 如果 + 追加 - 但 f-string 翻译不正确,出现了
跳过(遍历...)等无意义输出
总结:0.5B 模型 + 881 条训练数据的能力边界——
| 代码模式 | 翻译效果 |
|---|---|
| 函数定义、参数、返回值 | ✅ 精准 |
| for/while 循环、嵌套循环 | ✅ 良好 |
| 条件分支 if/elif/else | ✅ 良好 |
| 变量赋值、运算 | ✅ 精准 |
| 数组操作、swap | ✅ 良好 |
| 异常处理 try/except | ⚠️ 部分 |
| f-string 格式化 | ❌ 不支持 |
| 类/继承/OOP | ❌ 训练数据不足 |
| 列表推导式 | ⚠️ 能拆解但有噪声 |
如果要提升 OOP 和高级语法的翻译质量,下一步可以扩充训练数据集,补充类定义、继承、列表推导、f-string、异常处理等模式的 Python→段言 对照样本。需要我来做吗?
碰到的问题
虚拟机卡的要命
是因为原来双cpu 24内核+64G内存,分配给虚拟机24G内存和16内核
现在是单cpu 12内核+32G,把虚拟机改回10内核和 20G内存