当前位置: 首页 > news >正文

旧手机部署LLM,作为服务端给其他App(萌译)翻译,Galgame神器

文章目录

  • MNN Chat
  • 萌译
  • ZeroTermux
  • 效果
  • 第三方模型

MNN Chat

首先安装MNN Chat :
MNN 项目地址
README_CN

在市场下载要跑的模型,我这边实测4B的模型效果不错

在设置里开启API服务

启动模型后右上角可以设置API参数

要给其他设备调用的话地址需设成自动获取,自用的话可关闭验证


此时已经可以作为LLM服务访问了

192.168.1.160:10000/v1
192.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

放进去


http://www.jsqmd.com/news/687162/

相关文章:

  • 告别纯代码连线!用Vivado Block Design图形化搭建一个720P HDMI显示系统(基于Artix-7)
  • TVA技术在医药行业视觉检测的最新进展(二)
  • 10-案例篇-四个现场与一个反例
  • 我不建议你先做SaaS:先卖“**竞品价格周报**”,更容易成交
  • AZ音乐下载器完全指南:一站式解决高品质音乐下载需求
  • 别光看F8和F7了!聊聊OllyDbg调试TraceMe时,那些被你忽略的‘信息窗口’和‘注释栏’
  • 怎样轻松部署中医AI助手:5步免费搭建仲景智能诊疗系统
  • NVIDIA Blackwell架构与CUDA 12.9家族特性解析
  • Charles手机App抓包完整配置指南
  • 从C语言到Go语言:聊聊编译器自举的那些事儿(以GCC和Go为例)
  • 手机号查QQ号完整指南:3分钟快速找回忘记的QQ账号
  • 避坑指南:树莓派Pico连接MicroSD卡模块,SPI引脚选错、文件系统挂载失败的常见问题与解决方法
  • Kotlin 集合常用操作
  • 终极图片格式转换指南:Save Image as Type让网页图片保存更简单
  • 别再被JavaCV的FFmpegFrameGrabber卡住了!手把手教你解决start()阻塞和Picture size 0x0错误
  • gprMax三维建模效率翻倍:我是如何用Paraview可视化分析随机介质雷达模拟结果的
  • AD20 原理图与PCB同步的隐藏技巧:用‘文档比较’搞定多对多更新
  • 有关CH585三模例程中RF低功耗睡眠处理的讲解
  • Steam Achievement Manager:重新定义你的游戏成就掌控权
  • 如何快速掌握RePKG:Wallpaper Engine资源提取与转换的终极指南
  • TVA技术在化工行业视觉检测的最新进展(3)
  • 2026年收藏必备:保姆级教你搞定论文AIGC率(附平台测评+独家去AI痕迹工具) - 降AI实验室
  • 终极指南:5个技巧让Obsidian表格管理效率提升90%
  • 电源噪声抑制减少高速时钟抖动基础手段
  • 赛博朋克2077存档编辑器:3步解锁夜之城无限可能
  • 文档插件《道斯通图》不震撼首发 免费下载直接使用
  • React Hook 性能调优与重复渲染问题
  • 终极指南:深度定制你的《赛博朋克2077》游戏体验
  • 审批流和状态机到底怎么选?一次讲清规则边界、适用场景与系统设计取舍
  • 深圳市场地位认证机构推荐指南 - 速递信息