Toybrick

标题: [面向RKLLm编程] Android Demo-1: 翻译软件 (基于deepseek-r1) [打印本页]

作者: jefferyzhang    时间: 2025-2-11 17:27
标题: [面向RKLLm编程] Android Demo-1: 翻译软件 (基于deepseek-r1)
本帖最后由 jefferyzhang 于 2025-2-12 09:14 编辑

本文目的

1. 打破传统开发思路,为面向本地大语言模型编程提供新手思路
2. 为rkllm在Android App开发中的使用方式提供示例


本文源码

Jerzha/RKLLM_Translator: Android Translation App Based on RKLLM (3576/3588)


运行环境

Toybrick RK3576 Android12+
Toybrick RK3588 Android12+
其他RK3576和RK3588开发板理论上也是可以跑的,出现问题请调试下。

使用方式

1. 先量化后把模型拷贝到 app/src/main/assets下面
2. 修改 MainActivity.kt 的 onCreate 函数中模型的文件名
3. 使用Android Studio打开或导入工程,解决编译环境问题,并编译运行


项目概述

1. 基于deepseek-r1 1.5b,当然也可以修改成其他任何大语言模型
2. 通过编写对话模板,格式化输出,实现万国翻译程序
3. 基于思考类大语言模型,可看到思考过程,实现教学目的


界面需求

1. 输入框输入待翻译的文字
2. 选择需要翻译的目标语言
3. 点击翻译
4. 思考框展现思考过程
5. 结果框展现最终翻译结果

[attach]2955[/attach]

[attach]2956[/attach]


作者: jefferyzhang    时间: 2025-2-12 08:59
本帖最后由 jefferyzhang 于 2025-2-12 09:18 编辑

核心设计

1. LLmTranslator.kt 中设计的输入模板

  1. val msg = "<|User|>请将下一行的句子翻译成${lang},并仅将翻译结果输出。\n${str}<|Assistant|>"
复制代码



其中:

*  <|User|> 是大语言模型中通用对话模板的角色标签,表示后面是用户说的
*  <|Assistant|> 是大语言模型中通用对话模板的AI助理角色标签,表示前面用户说的话已经结束,后面是由AI回复。
*  如果不做模板约束,大语言模型可能会按照用户输入内容继续生成用户的文字,错误的续写了问题,然后开始自问自答。
*  ${lang} 是想要翻译的语言,目前deepseek-r1 1.5b在除了英文外的语言翻译不是特别好,可以换成其他更适合做翻译模型或者二次训练
*  “\n”是为了告诉模型下一行的内容才需要翻译。当然也可以使用其他xml或者json标签
* 同时也可以改进优化要求大语言模型按照特定的标签输出,但是deepseek-r1对格式化输出并不友好,这也是官方所说的缺陷之一,这里我们只要求他输出唯一结果即可。


2.   LLmTranslator.kt 中设计的输出模板


  1. if (data == "<think>") {
  2.     inThinking = true
  3.     return
  4. } else if (data == "</think>") {
  5.     inThinking = false
  6.     callback.onThinking("", true)
  7.     return
  8. }

  9. if (inThinking) {
  10.     callback.onThinking(data, false)
  11. } else {
  12.     if (data == "\n") return
  13.     callback.onResult(data, false)
  14. } else {
  15.     callback.onThinking("", true)
  16.     callback.onResult("", true)
  17. }
复制代码


按照模型输出,我们只判断<think></think>标签来提取思考和结果内容。


3. 由于思考类型的模型think会比较久,所以他适合的场景和其他LLM是不一样的,他更适合做教学、博弈、分析、解题、决策等工作,我们此篇demo做的就是类教学的场景,后面有空的话我想写个象棋博弈的apk,也挺适合这类模型

4. 有的人觉得1.5b模型太弱,其实小模型无法覆盖所有场景对话,但在特定的场景使用上是完全足够的。我们可以通过fine tunning、lora等手段来二次训练模型,让他更适合产品的特定场景应用(而非即要...又要...),让产品更容易落地。


作者: erquren    时间: 2025-2-12 10:36
象棋博弈、围棋博弈传统的RL每步的胜率都能直接给出,可以结合起来丢给LLM,看他的解析,以前和狗下,只能慢慢分析,这应该能作为一个卖点




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3