这次我们来看一个很有意思的尝试:在学而思学习机上运行本地大语言模型。你可能觉得学习机就是个封闭的“学习盒子”,但通过 Termux 和 Ollama 的组合,我们能让它变成一个能离线对话、处理文档的轻量级 AI 终端。这背后的核心不是追求多强的性能,而是验证在 ARM 架构、资源受限的安卓设备上,本地 AI 部署的可行性与边界。

对于家长或技术爱好者来说,这有几个直接价值:一是探索学习机的“隐藏”能力,将其转化为一个可编程的 Linux 环境;二是在无需联网、确保隐私的前提下,让孩子体验基础的 AI 交互,比如问答、故事生成、学习规划;三是作为一种低成本的技术验证方案,了解移动端部署 AI 模型的门槛。整个过程不涉及系统破解或获取 root 权限,主要依赖开源工具在用户空间完成。

本文将带你完整走通从环境准备、软件安装、模型部署到基础功能测试的全流程。你会了解到 Termux 如何提供一个基础的 Linux 环境,Ollama 如何简化模型的拉取与管理,以及最终如何在学习机的终端里与本地模型对话。我们重点关注的是方案的通用性、部署过程中可能遇到的坑,以及在这种设备上运行 AI 模型的真实体验和性能边界。

1. 核心能力速览

在开始动手之前,我们先通过一个表格快速了解这个方案的核心信息、硬件门槛和能做什么。

能力项 说明
项目本质 在安卓设备(学而思学习机)上,利用 Termux 模拟 Linux 环境,部署 Ollama 来运行本地大语言模型。
核心工具 Termux(终端模拟器与 Linux 环境)、Ollama(本地大模型运行框架)。
硬件平台 基于 ARM 架构的安卓学习机/平板/手机。无需 root 权限。
性能门槛 主要瓶颈在内存(RAM)和存储空间 。流畅运行较小模型(如 7B 参数)建议设备内存 ≥ 4GB,存储空间预留 5-10GB 用于安装环境和模型。CPU 推理为主,速度较慢。
主要功能 在终端内与本地大模型进行纯文本对话、内容生成、简单推理。可作为离线 AI 助手原型。
启动方式 通过 Termux 命令行启动 Ollama 服务,使用 curl 或 Ollama 命令行与之交互。
是否支持 API 支持 。Ollama 默认提供 RESTful API(端口 11434),可供其他本地应用(如笔记软件、脚本)调用。
是否支持批量任务 可通过脚本循环调用 API 实现简单的批量文本处理,但受限于设备性能,不适合高强度批量任务。
适合场景 1. 隐私敏感场景 :离线问答、文档处理。
2. 教育探索 :让学生理解 AI 本地运行的基本原理。
3. 轻量级开发测试 :在 ARM 设备上验证 AI 应用原型。
4. 设备功能拓展 :将学习机变为编程和 AI 学习工具。

2. 适用场景与使用边界

在学而思学习机上跑本地模型,听起来很极客,但清楚它的适用场景和局限能帮你更好地决策是否值得尝试。

它非常适合以下情况:

  • 离线AI体验与教学 :你想让孩子或学生了解“AI不是魔法,而是运行在设备上的程序”,这个方案提供了一个完全离线、可触摸的实例。讨论模型是如何被下载、加载和响应问题的,是很好的科普。
  • 隐私安全优先的轻量级任务 :处理一些不想上传到云端的文本想法、草稿、学习计划。模型完全在本地,数据不出设备。
  • ARM环境开发学习 :作为移动端或嵌入式AI应用开发的低成本测试平台,了解在资源受限的ARM设备上部署AI服务的流程和挑战。
  • 学习机功能拓展实践 :通过Termux,你可以安装Python、Node.js、Git等工具,将学习机变成一个轻量级Linux开发环境,远超其原有学习功能。

你需要清楚它的主要限制:

  • 性能有限 :学习机的CPU并非为高强度AI计算设计,推理速度慢(生成一段文字可能需要数十秒)。内存小,无法运行大型模型(如70B参数模型)。
  • 功能单一 :目前主要实现文本对话。复杂的多模态(识图、语音)或需要GPU加速的任务在此方案上难以实现。
  • 体验粗糙 :交互方式以命令行终端为主,没有精美的图形界面。不适合追求流畅交互体验的日常使用。
  • 设备风险 :虽然不root,但安装非商店应用、占用大量存储和内存,可能影响学习机原有系统的稳定性或保修条款(请自行判断)。

合规与安全边界提醒:

  • 版权与内容 :本地模型生成的内容,其版权和责任由使用者自行承担。需确保生成内容合法合规,符合社会主义核心价值观,尤其当用于教育场景时。
  • 设备用途 :请确保该技术实践用于合法学习与研究目的,不破坏学习机内置的正版教育资源与系统完整性。
  • 模型来源 :从Ollama官方或可信镜像下载模型,避免使用来路不明的模型文件。

3. 环境准备与前置条件

开始操作前,请确认你的学习机满足以下条件,并做好必要准备。

1. 设备确认:

  • 品牌型号 :学而思学习机(其他安卓平板或手机也可参考,流程通用)。
  • 系统版本 :安卓版本建议在 8.0 及以上。部分旧版本可能无法兼容最新 Termux。
  • 存储空间 :至少预留 8GB 可用空间。用于安装 Termux、Ollama 及其依赖,以及下载模型文件(一个7B模型约4-5GB)。
  • 运行内存 4GB 或以上 为佳。运行模型时,内存占用会显著上升。

2. 软件准备:

  • Termux 安装包 :由于 Google Play 上的 Termux 可能版本较旧或有问题,建议从 F-Droid 应用商店下载 Termux 及其插件(Termux:API, Termux:Widget 等可选)。这是获取可靠版本的最佳途径。
    • 可以在学习机内置浏览器中访问 F-Droid 官网下载安装器。
  • 终端工具 :Termux 本身即是一个强大的终端。你还需要一个 文件管理器 (如学习机自带管理器或 MT 管理器)来管理下载的文件。
  • 网络环境 :部署过程中需要从网络下载软件包和模型,请确保学习机连接到一个 稳定、通畅的网络 。由于 Ollama 默认从海外拉取模型,网络速度可能影响下载体验,后续步骤会提供优化方案。

3. 心理准备:

  • 整个过程涉及命令行操作,需要一定的耐心和学习能力。
  • 命令执行后可能需要等待较长时间(尤其是安装包和下载模型时)。
  • 如果遇到问题,排查思路比具体错误代码更重要。

4. 安装部署与启动方式

接下来是核心操作部分。请严格按照步骤进行。

4.1 安装并配置 Termux

  1. 安装 Termux
    • 通过 F-Droid 安装 Termux。打开应用,完成初始化。
  2. 换源(关键步骤,大幅提升安装速度)
    • 启动 Termux,依次执行以下命令,将软件源替换为国内镜像(如清华源)。
    pkg update
    pkg install curl
    curl -L https://gitee.com/mirrors/termux-images/raw/master/update.sh | bash
    
    • 或者,手动编辑源列表(如果上述脚本无效):
    pkg install nano
    nano $PREFIX/etc/apt/sources.list
    
    • 将文件内容替换为:
    # The termux repository mirror from TUNA:
    deb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main
    
    • Ctrl+X ,输入 Y 保存,回车确认。
  3. 更新与安装基础工具
    pkg update && pkg upgrade
    pkg install git wget python nodejs -y
    

4.2 安装 Ollama

Ollama 提供了在 Linux 系统上的一键安装脚本,在 Termux 的 Linux 环境下同样适用。

  1. 下载并运行安装脚本
    curl -fsSL https://ollama.com/install.sh | sh
    
    • 这个命令会下载安装脚本并自动执行。如果网络连接 ollama.com 较慢,可能会失败或等待很久。
  2. 国内网络优化方案
    • 如果上述命令下载缓慢或失败,可以尝试使用加速地址,或者先下载模型文件(见下一步),安装过程可能会检测到已存在的模型并跳过部分下载。
    • 一个更直接的方法是,先确保 Termux 能访问外网,耐心等待。有时重试几次即可。

4.3 下载与运行模型

Ollama 安装成功后, ollama 命令就应该可用了。我们选择一个适合移动端的小模型进行测试,例如 qwen2.5:0.5b (千问2.5的0.5B版本,非常小巧)或 llama3.2:1b

  1. 拉取模型
    # 以 qwen2.5:0.5b 为例
    ollama pull qwen2.5:0.5b
    
    • 这是最耗时的一步 ,模型文件大小约数百MB到数GB。请保持设备亮屏并连接稳定网络。
    • 国内镜像加速 :如果下载极慢,可以尝试在运行 ollama pull 前,设置环境变量使用国内镜像(并非所有模型都支持,但可以尝试):
      export OLLAMA_HOST=114.116.21.177:11434
      # 或者尝试其他社区镜像地址,但需注意安全性和稳定性。
      
    • 更推荐的方法是耐心等待官方源下载,或寻找可靠的、已下载的模型文件手动放置到 ~/.ollama/models 目录下(需要了解 Ollama 模型文件格式)。
  2. 运行模型服务
    • 拉取完成后,可以直接运行模型进行交互式对话:
    ollama run qwen2.5:0.5b
    
    • 你会看到 >>> 提示符,此时可以直接输入问题,例如:“用中文介绍一下你自己。” 模型会开始生成回答。
  3. 后台运行服务模式
    • 更多时候,我们希望 Ollama 作为后台服务运行,以便通过 API 调用。首先停止刚才的交互式会话(按 Ctrl+C )。
    • 启动 Ollama 服务:
    ollama serve
    
    • 默认情况下,服务会在 127.0.0.1:11434 启动。 注意:此命令会前台运行,阻塞当前终端。 要后台运行,可以:
      nohup ollama serve > ~/ollama.log 2>&1 &
      
    • 这样服务就在后台运行了,日志输出到 ~/ollama.log 。你可以用 ps aux | grep ollama 查看进程,用 kill 命令结束它。

5. 功能测试与效果验证

安装部署完成后,我们需要验证 Ollama 服务是否正常工作,以及模型的基本能力。

5.1 基础对话测试

在 Termux 中,打开一个新的终端会话(或使用 tmux screen 分屏),测试与模型的交互。

  1. 测试命令
    # 方式一:使用 ollama run 直接对话(测试服务是否正常)
    ollama run qwen2.5:0.5b
    # 进入交互模式后,输入:
    >>> 你是谁?请用中文回答。
    
  2. 预期结果
    • 模型会生成一段中文自我介绍,表明它是通义千问的某个版本,并说明其能力范围。
    • 生成速度取决于学习机 CPU 性能,可能需要 10-30 秒。
  3. 成功判断
    • 能返回一段连贯、相关的中文文本,没有报错信息(如“连接失败”、“模型未加载”)。
  4. 常见失败
    • Error: model 'qwen2.5:0.5b' not found :模型未成功下载,返回步骤 4.3 重新 ollama pull
    • 长时间无响应或报内存错误:可能是模型太大或设备内存不足,尝试更小的模型(如 tinyllama )。

5.2 API 接口测试

Ollama 的核心优势之一是提供 HTTP API,方便其他程序调用。我们在 Termux 内部用 curl 命令测试。

  1. 确保服务运行 :确保 ollama serve 正在后台运行(可通过 ps aux | grep ollama 检查)。
  2. 发送生成请求
    curl http://localhost:11434/api/generate -d '{
      "model": "qwen2.5:0.5b",
      "prompt": "请写一首关于春天的五言绝句。",
      "stream": false
    }'
    
  3. 预期结果
    • 会返回一个 JSON 格式的响应,其中 "response" 字段包含了模型生成的诗歌文本。
    • 响应中可能还包含 "done" "context" 等字段。
  4. 成功判断
    • HTTP 返回状态码为 200。
    • JSON 解析后, "response" 字段有非空的中文诗歌内容。
  5. 进阶测试(对话上下文)
    # 第一次提问
    curl http://localhost:11434/api/generate -d '{
      "model": "qwen2.5:0.5b",
      "prompt": "我的名字叫小明。",
      "stream": false
    }'
    # 从第一次响应中获取 `context` 字段的值(假设为 CTX1)
    # 第二次提问,带上之前的 context
    curl http://localhost:11434/api/generate -d '{
      "model": "qwen2.5:0.5b",
      "prompt": "我刚才说我叫什么名字?",
      "context": [CTX1], // 替换为实际的 context 数组
      "stream": false
    }'
    
    • 此测试验证模型是否能维持简单的会话上下文。

6. 接口 API 与批量任务

成功运行服务并通过基础测试后,我们可以探索如何更程序化地利用它。

6.1 API 接口详解

Ollama 的 API 非常简单。主要端点如下:

  • POST /api/generate :生成文本,我们上面测试用的就是这个。
  • POST /api/chat :更结构化的对话接口(推荐)。
  • GET /api/tags :列出本地已下载的模型。
  • POST /api/pull :拉取模型。
  • POST /api/ps :显示正在运行的模型。

一个使用 /api/chat 的示例(更接近真实应用):

curl http://localhost:11434/api/chat -d '{
  "model": "qwen2.5:0.5b",
  "messages": [
    { "role": "user", "content": "你好" },
    { "role": "assistant", "content": "你好!我是通义千问,很高兴为你服务。" },
    { "role": "user", "content": "你会编程吗?" }
  ],
  "stream": false
}'

6.2 批量任务处理

在学习机上处理批量任务需要谨慎,因为性能有限。但可以通过简单的 Shell 脚本或 Python 脚本来实现。

示例:使用 Python 脚本批量处理问题列表

  1. 在 Termux 中安装 Python requests 库(如果尚未安装):
    pip install requests
    
  2. 创建一个 Python 脚本 batch_ask.py
    import requests
    import json
    import time
    
    OLLAMA_API = "http://127.0.0.1:11434/api/generate"
    
    questions = [
        "解释一下什么是光合作用。",
        "背诵李白的《静夜思》。",
        "计算一下 15 的平方是多少?",
    ]
    
    for i, question in enumerate(questions):
        print(f"\n处理第 {i+1} 个问题: {question}")
        payload = {
            "model": "qwen2.5:0.5b",
            "prompt": question,
            "stream": False
        }
        try:
            # 增加超时时间,因为设备慢
            response = requests.post(OLLAMA_API, json=payload, timeout=120)
            if response.status_code == 200:
                result = response.json()
                answer = result.get("response", "无响应").strip()
                print(f"回答: {answer}")
            else:
                print(f"请求失败,状态码: {response.status_code}")
        except Exception as e:
            print(f"请求异常: {e}")
        # 每个问题之间稍作停顿,避免过热或内存累积
        time.sleep(5)
    
    print("\n批量处理完成。")
    
  3. 运行脚本:
    python batch_ask.py
    
    • 重要提醒 :批量任务会持续占用 CPU 和内存,可能导致设备发热、响应变慢。建议一次只处理少量任务,并在完成后重启 Ollama 服务释放资源。

7. 资源占用与性能观察

在资源受限的学习机上,监控资源占用至关重要。

  1. 查看进程与资源(Termux 内)
    • 查看 Ollama 进程 ps aux | grep ollama 。可以看到进程 ID (PID) 和内存/CPU 占用百分比(但 Termux 的 ps 信息可能较简略)。
    • 使用 top htop
      pkg install htop -y
      htop
      
      htop 中,可以更直观地看到 ollama 进程的 CPU 和 MEM 使用情况。运行模型生成时,CPU 使用率会飙升到 70%-100%,内存占用也会显著增加。
  2. 性能影响因素
    • 模型大小 :参数越多的模型,加载越慢,运行时内存占用越高,生成速度也越慢。在 4GB 内存设备上,1B-3B 的模型是更现实的选择。
    • 生成参数 num_predict (生成最大token数)设置越大,生成时间越长。 temperature 等参数对性能影响不大。
    • 设备状态 :后台运行的其他应用会抢占资源。进行 AI 推理时,最好关闭不必要的应用。
  3. 发热与耗电
    • 持续运行 Ollama 进行文本生成会使 CPU 高负荷工作,导致设备明显发热,并加速耗电。这属于正常现象。
    • 建议 :长时间使用时,注意设备散热环境;如果是插电使用的学习机,则影响不大。

8. 常见问题与排查方法

部署过程中难免遇到问题,下表汇总了常见情况及其解决方法。

问题现象 可能原因 排查方式 解决方案
pkg update 失败或极慢 Termux 默认源网络连接差 执行 ping mirrors.tuna.tsinghua.edu.cn 务必执行 4.1 步骤 更换为国内镜像源。
`curl ... install.sh sh` 失败 网络无法连接 ollama.com 手动下载安装脚本,或检查 Termux 网络权限
ollama pull 下载卡住或失败 模型服务器连接不稳定或国内网络问题 观察下载进度,或使用 curl -I 测试连接 1. 耐心等待 ,模型文件较大。
2. 尝试设置 OLLAMA_HOST 环境变量指向国内镜像(需自行寻找可用镜像)。
3. 在网络条件好的时候重试。
ollama run 报错 model not found 模型未成功下载或名称错误 ollama list 查看本地已有模型 1. 确认模型名称拼写正确。
2. 使用 ollama pull 重新下载。
运行模型时 Termux 闪退或卡死 内存不足 (OOM) 观察 htop 中内存使用是否接近 100% 1. 关闭其他所有应用。
2. 换用更小的模型(如 tinyllama )。
3. 尝试在 ollama run 命令后加上 --verbose 看日志。
API 调用 ( curl ) 返回 connection refused Ollama 服务未启动 `ps aux grep ollama`
生成速度极慢(一个字要好几秒) 设备 CPU 性能有限,模型参数较大 这是 正常现象 1. 接受移动设备 CPU 推理的客观速度。
2. 确认使用的是小参数模型(如 0.5B, 1B)。
3. 降低生成文本的长度 ( num_predict )。
存储空间不足 模型文件占用过大 df -h 查看存储使用 1. 删除不用的模型: ollama rm <model-name>
2. 清理 Termux 缓存: pkg clean

9. 最佳实践与使用建议

为了让体验更顺畅,这里有一些实践建议:

  1. 模型选择策略

    • 首次尝试 :务必从超小模型开始,如 tinyllama qwen2.5:0.5b 。验证流程跑通是第一要务。
    • 平衡选择 :如果小模型运行流畅,可以尝试 llama3.2:1b qwen2.5:1.5b 等,在能力和性能间取得平衡。
    • 避免大模型 :除非你的学习机有 8GB 以上内存,否则不要尝试 7B 及以上参数的模型,极易导致崩溃。
  2. 会话管理

    • 使用 tmux screen 来管理多个终端会话,一个跑服务,一个做交互,方便调试。
    pkg install tmux -y
    tmux new -s ollama
    # 在这个tmux会话中启动 ollama serve
    # 按 Ctrl+B, 再按 D 脱离会话
    # 重新连接:tmux attach -t ollama
    
  3. 资源监控

    • 在进行长时间批量任务前,先手动测试一个样本,观察资源占用和生成时间,估算总耗时。
    • 使用 htop 定期观察,如果内存使用持续增长(可能内存泄漏),需要重启 Ollama 服务。
  4. 数据与配置管理

    • Ollama 模型默认存储在 ~/.ollama/models 。定期清理不用的模型。
    • 可以将常用的 API 调用命令写成 Shell 脚本或 Python 函数,方便复用。
  5. 安全与隐私

    • Ollama 服务默认绑定在 127.0.0.1 ,外部无法访问,相对安全。 切勿 将其修改为 0.0.0.0 暴露在局域网中,除非你完全理解风险并做了访问控制。
    • 所有对话数据仅存在于设备本地内存中,服务停止后即消失(除非你自己保存日志)。这是隐私优势。

10. 总结与下一步

通过 Termux 和 Ollama 在学而思学习机上部署本地大模型,我们成功地将一个消费级教育硬件变成了一个可编程的 AI 实验平台。这个方案的核心价值在于其 可及性和教育意义 :它用很低的成本和相对简单的操作,展示了 AI 模型本地运行的完整链条——从环境搭建、软件安装、模型部署到应用交互。

最值得尝试的点 在于,你亲手在一个非 x86 的普通 ARM 设备上跑起了一个“大脑”,并能与之对话。这比任何理论讲解都更直观。

最先应该验证的功能 就是基础对话和 API 调用。只要 ollama run curl 测试能成功返回中文回答,整个技术链路就通了。

最容易踩的坑 集中在网络(下载慢)、内存(模型太大)和存储空间不足。因此,坚持“从小开始、逐步升级”的原则,能避开大部分问题。

后续可以探索的方向

  1. 集成到学习流程 :写一个简单的 Python 脚本,让孩子输入作文题目,让本地模型生成提纲或提供灵感(需家长引导)。
  2. 尝试其他轻量模型 :除了 Qwen 和 Llama,可以试试 gemma:2b phi 等,对比效果。
  3. 结合 Termux 其他能力 :用 Termux 安装 Python,写一个简单的 Flask 网页前端,通过本地网络在电脑浏览器上访问学习机里的 Ollama 服务,获得更好的交互界面。
  4. 探索模型微调(高级) :在极小的模型上,尝试用 LoRA 等技术,用本地数据做微调,打造一个专属的“学习助手”,但这需要更强的技术背景。

这个项目更像是一个“技术盆景”,它可能不实用,但足够有趣,且完整地呈现了本地 AI 部署的微观形态。对于有兴趣的家长和学生来说,其过程本身就是一个绝佳的、跨学科的实践项目。

更多推荐