旧手机部署LLM,作为服务端给其他App(萌译)翻译,Galgame神器
文章目录
- MNN Chat
- 萌译
- ZeroTermux
- 效果
- 第三方模型
MNN Chat
首先安装MNN Chat :
MNN 项目地址
README_CN
在市场下载要跑的模型,我这边实测4B的模型效果不错
在设置里开启API服务
启动模型后右上角可以设置API参数
要给其他设备调用的话地址需设成自动获取,自用的话可关闭验证
此时已经可以作为LLM服务访问了
如192.168.1.160:10000/v1192.168.1.160:10000/v1/chat/completions
萌译
App萌译可以选择区域截屏OCR翻译,其中OCR可调用本地模型,翻译API除了调用大厂API,也能调用自定义API
官网:https://www.moetranslate.top/
官方教程:自定义文本API
在App中配置自定义API参数:
由于萌译接受的json接口结构比较简单,因此可再在部署模型的手机运行脚本转发,见下一节:
ZeroTermux
我这里使用ZeroTermux跑脚本进行转发
项目地址:https://github.com/hanxinhao000/ZeroTermux/
pkg install python
后创建转发脚本:
# 极简萌译LLM翻译中转服务fromhttp.serverimportHTTPServer,BaseHTTPRequestHandlerimportjsonimporturllib.requestimportsocketdefget_ipv4():try:withsocket.socket(socket.AF_INET,socket.SOCK_DGRAM)ass:s.connect(("8.8.8.8",80))ip=s.getsockname()[0]returnipexcept:return"127.0.0.1"llm_url="{}:8080".format(get_ipv4())# 本地LLM接口地址LLM_API="http://{}/v1/chat/completions".format(llm_url)classTranslateHandler(BaseHTTPRequestHandler):# 关闭日志输出deflog_message(self,format,*args):returndefdo_POST(self):# 1. 接收萌译发来的请求content_length=int(self.headers['Content-Length'])post_data=self.rfile.read(content_length).decode('utf-8')data=json.loads(post_data)text=data.get("text","")source=data.get("source","ja")target=data.get("target","zh-CN")# 2. 构造翻译Prompt(强制LLM只输出纯翻译结果)# prompt = f"请将{source}语言翻译成{target}语言,此为OCR识别生成,若有识别错误请自行修正和分段,直接输出翻译结果,不要添加任何解释、标点、额外文字:{text}"prompt=f"请将如下语言翻译成简体中文,此为OCR识别生成,若有识别错误请自行修正和分段,直接输出翻译结果,不要添加任何解释、标点、额外文字:{text}"# 3. 转发请求给本地LLMllm_data=json.dumps({"model":"qwen","messages":[{"role":"user","content":prompt}],"temperature":0.1,"stream":False}).encode('utf-8')req=urllib.request.Request(LLM_API,data=llm_data,headers={"Content-Type":"application/json"})withurllib.request.urlopen(req)asf:llm_response=json.loads(f.read().decode('utf-8'))# 4. 提取翻译结果,返回单层JSON(适配萌译)result=llm_response["choices"][0]["message"]["content"].strip()# 返回萌译支持的单层JSONself.send_response(200)self.send_header('Content-Type','application/json')self.end_headers()self.wfile.write(json.dumps({"result":result}).encode('utf-8'))# 启动服务(端口8080,电脑IP:192.168.1.88)if__name__=='__main__':print(llm_url)server=HTTPServer(('0.0.0.0',8080),TranslateHandler)print("萌译翻译中转服务已启动")server.serve_forever()跑起模型后,同时跑脚本进行转发
效果
此时运行的萌译即可调用部署模型的手机进行翻译
要更好的翻译效果可以试试腾讯的混元MT模型,官方MNN只有7B的版本,抱脸上有1.8B的版本,要导入本地模型,见下一节
第三方模型
要加载第三方模型,可以试试 Tiggy-Chan 大佬编译的版本
项目地址:gemma4-mnn-android
MnnLlmChat-v5-release.apk
要导入模型需要adb调试:
adb shellmkdir-p/data/local/tmp/mnn_models&&adb push${model_path}/data/local/tmp/mnn_models/如/data/local/tmp/mnn_models/Tencent-HY-MT1.5-1.8B-MNN
把 Hunyuan-MT1.5-1.8B-MNN
中的
├── llm.mnn ├── llm.mnn.weight ├── tokenizer.txt ├── llm_config.json └── config.json放进去
