这次我们来看一个很有意思的尝试:在学而思学习机上运行本地大语言模型。你可能觉得学习机就是个封闭的“学习盒子”,但通过 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
- 安装 Termux:
- 通过 F-Droid 安装 Termux。打开应用,完成初始化。
- 换源(关键步骤,大幅提升安装速度):
- 启动 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保存,回车确认。
- 更新与安装基础工具:
pkg update && pkg upgrade pkg install git wget python nodejs -y
4.2 安装 Ollama
Ollama 提供了在 Linux 系统上的一键安装脚本,在 Termux 的 Linux 环境下同样适用。
- 下载并运行安装脚本:
curl -fsSL https://ollama.com/install.sh | sh- 这个命令会下载安装脚本并自动执行。如果网络连接 ollama.com 较慢,可能会失败或等待很久。
- 国内网络优化方案:
- 如果上述命令下载缓慢或失败,可以尝试使用加速地址,或者先下载模型文件(见下一步),安装过程可能会检测到已存在的模型并跳过部分下载。
- 一个更直接的方法是,先确保 Termux 能访问外网,耐心等待。有时重试几次即可。
4.3 下载与运行模型
Ollama 安装成功后,ollama命令就应该可用了。我们选择一个适合移动端的小模型进行测试,例如qwen2.5:0.5b(千问2.5的0.5B版本,非常小巧)或llama3.2:1b。
- 拉取模型:
# 以 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 模型文件格式)。
- 运行模型服务:
- 拉取完成后,可以直接运行模型进行交互式对话:
ollama run qwen2.5:0.5b- 你会看到
>>>提示符,此时可以直接输入问题,例如:“用中文介绍一下你自己。” 模型会开始生成回答。
- 后台运行服务模式:
- 更多时候,我们希望 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命令结束它。
- 更多时候,我们希望 Ollama 作为后台服务运行,以便通过 API 调用。首先停止刚才的交互式会话(按
5. 功能测试与效果验证
安装部署完成后,我们需要验证 Ollama 服务是否正常工作,以及模型的基本能力。
5.1 基础对话测试
在 Termux 中,打开一个新的终端会话(或使用tmux、screen分屏),测试与模型的交互。
- 测试命令:
# 方式一:使用 ollama run 直接对话(测试服务是否正常) ollama run qwen2.5:0.5b # 进入交互模式后,输入: >>> 你是谁?请用中文回答。 - 预期结果:
- 模型会生成一段中文自我介绍,表明它是通义千问的某个版本,并说明其能力范围。
- 生成速度取决于学习机 CPU 性能,可能需要 10-30 秒。
- 成功判断:
- 能返回一段连贯、相关的中文文本,没有报错信息(如“连接失败”、“模型未加载”)。
- 常见失败:
Error: model 'qwen2.5:0.5b' not found:模型未成功下载,返回步骤 4.3 重新ollama pull。- 长时间无响应或报内存错误:可能是模型太大或设备内存不足,尝试更小的模型(如
tinyllama)。
5.2 API 接口测试
Ollama 的核心优势之一是提供 HTTP API,方便其他程序调用。我们在 Termux 内部用curl命令测试。
- 确保服务运行:确保
ollama serve正在后台运行(可通过ps aux | grep ollama检查)。 - 发送生成请求:
curl http://localhost:11434/api/generate -d '{ "model": "qwen2.5:0.5b", "prompt": "请写一首关于春天的五言绝句。", "stream": false }' - 预期结果:
- 会返回一个 JSON 格式的响应,其中
"response"字段包含了模型生成的诗歌文本。 - 响应中可能还包含
"done"、"context"等字段。
- 会返回一个 JSON 格式的响应,其中
- 成功判断:
- HTTP 返回状态码为 200。
- JSON 解析后,
"response"字段有非空的中文诗歌内容。
- 进阶测试(对话上下文):
# 第一次提问 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 脚本批量处理问题列表
- 在 Termux 中安装 Python requests 库(如果尚未安装):
pip install requests - 创建一个 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批量处理完成。") - 运行脚本:
python batch_ask.py- 重要提醒:批量任务会持续占用 CPU 和内存,可能导致设备发热、响应变慢。建议一次只处理少量任务,并在完成后重启 Ollama 服务释放资源。
7. 资源占用与性能观察
在资源受限的学习机上,监控资源占用至关重要。
- 查看进程与资源(Termux 内):
- 查看 Ollama 进程:
ps aux | grep ollama。可以看到进程 ID (PID) 和内存/CPU 占用百分比(但 Termux 的ps信息可能较简略)。 - 使用
top或htop:
在pkg install htop -y htophtop中,可以更直观地看到ollama进程的 CPU 和 MEM 使用情况。运行模型生成时,CPU 使用率会飙升到 70%-100%,内存占用也会显著增加。
- 查看 Ollama 进程:
- 性能影响因素:
- 模型大小:参数越多的模型,加载越慢,运行时内存占用越高,生成速度也越慢。在 4GB 内存设备上,1B-3B 的模型是更现实的选择。
- 生成参数:
num_predict(生成最大token数)设置越大,生成时间越长。temperature等参数对性能影响不大。 - 设备状态:后台运行的其他应用会抢占资源。进行 AI 推理时,最好关闭不必要的应用。
- 发热与耗电:
- 持续运行 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. 最佳实践与使用建议
为了让体验更顺畅,这里有一些实践建议:
模型选择策略:
- 首次尝试:务必从超小模型开始,如
tinyllama、qwen2.5:0.5b。验证流程跑通是第一要务。 - 平衡选择:如果小模型运行流畅,可以尝试
llama3.2:1b、qwen2.5:1.5b等,在能力和性能间取得平衡。 - 避免大模型:除非你的学习机有 8GB 以上内存,否则不要尝试 7B 及以上参数的模型,极易导致崩溃。
- 首次尝试:务必从超小模型开始,如
会话管理:
- 使用
tmux或screen来管理多个终端会话,一个跑服务,一个做交互,方便调试。
pkg install tmux -y tmux new -s ollama # 在这个tmux会话中启动 ollama serve # 按 Ctrl+B, 再按 D 脱离会话 # 重新连接:tmux attach -t ollama- 使用
资源监控:
- 在进行长时间批量任务前,先手动测试一个样本,观察资源占用和生成时间,估算总耗时。
- 使用
htop定期观察,如果内存使用持续增长(可能内存泄漏),需要重启 Ollama 服务。
数据与配置管理:
- Ollama 模型默认存储在
~/.ollama/models。定期清理不用的模型。 - 可以将常用的 API 调用命令写成 Shell 脚本或 Python 函数,方便复用。
- Ollama 模型默认存储在
安全与隐私:
- Ollama 服务默认绑定在
127.0.0.1,外部无法访问,相对安全。切勿将其修改为0.0.0.0暴露在局域网中,除非你完全理解风险并做了访问控制。 - 所有对话数据仅存在于设备本地内存中,服务停止后即消失(除非你自己保存日志)。这是隐私优势。
- Ollama 服务默认绑定在
10. 总结与下一步
通过 Termux 和 Ollama 在学而思学习机上部署本地大模型,我们成功地将一个消费级教育硬件变成了一个可编程的 AI 实验平台。这个方案的核心价值在于其可及性和教育意义:它用很低的成本和相对简单的操作,展示了 AI 模型本地运行的完整链条——从环境搭建、软件安装、模型部署到应用交互。
最值得尝试的点在于,你亲手在一个非 x86 的普通 ARM 设备上跑起了一个“大脑”,并能与之对话。这比任何理论讲解都更直观。
最先应该验证的功能就是基础对话和 API 调用。只要ollama run和curl测试能成功返回中文回答,整个技术链路就通了。
最容易踩的坑集中在网络(下载慢)、内存(模型太大)和存储空间不足。因此,坚持“从小开始、逐步升级”的原则,能避开大部分问题。
后续可以探索的方向:
- 集成到学习流程:写一个简单的 Python 脚本,让孩子输入作文题目,让本地模型生成提纲或提供灵感(需家长引导)。
- 尝试其他轻量模型:除了 Qwen 和 Llama,可以试试
gemma:2b、phi等,对比效果。 - 结合 Termux 其他能力:用 Termux 安装 Python,写一个简单的 Flask 网页前端,通过本地网络在电脑浏览器上访问学习机里的 Ollama 服务,获得更好的交互界面。
- 探索模型微调(高级):在极小的模型上,尝试用 LoRA 等技术,用本地数据做微调,打造一个专属的“学习助手”,但这需要更强的技术背景。
这个项目更像是一个“技术盆景”,它可能不实用,但足够有趣,且完整地呈现了本地 AI 部署的微观形态。对于有兴趣的家长和学生来说,其过程本身就是一个绝佳的、跨学科的实践项目。