基于 "本地大模型 + 内网穿透 + APEX" 的零成本大模型调用方案
基于 “本地大模型 + 内网穿透 + APEX” 的零成本大模型调用方案
对于开发者,往往希望:
- 大模型要具备尽可能低成本,最好0成本,但还要足够安全,避免被白嫖
- 应用由于要对外提供稳定服务,通常部署在 服务器或云主机上
- 手头有闲置 Macbook,特别是搭载了 Apple M1/M2/M4 芯片,可以复用
- 最低技术要求,最好用 PL/SQL 原生实现大模型的调用,以便结合 APEX 使用
- 数据自始至终不需要提供给第三方,安全有保障
本指南给出一个经过验证的方案:
- 本地 Apple M1 笔记本 → 运行 Ollama(Qwen3:8B大模型) → Ngrok 暴露公网API → 外网 APEX 通过 PL/SQL(uc_ai → provider_ollama)实现大模型调用
整个方案能够做到:
- 零成本:100%免费
- 不依赖任何外部 LLM 服务
- 完整复用本地算力
- 通过 PL/SQL 原生实现大模型调用
- 实现 APEX 无缝接入大模型
- 适合中小企业研究及个人学习使用
整体架构图

一、架构说明:为何必须使用内网穿透?
一般情况下:
- Ollama 模型是运行在你本地的电脑上:如果你自己有GPU实例,当我没说
- APEX 应用运行在外网服务器(云主机/OCI/自托管)
APEX 不能直接访问你本地ollama 提供的 http://localhost:11434,因为:
- 笔记本电脑在局域网内(NAT后)
- 外部服务器无法直连内网
- 必须提供一个公网 HTTPS API
因此,需要:Ngrok → 将本地 11434 映射为公网可访问的 HTTPS URL
示例:https://xxxx.ngrok-free.dev/api
这样 APEX(PL/SQL)才有机会通过这个公网API访问你本地的大模型。
二、本地大模型环境准备(Mac电脑)
安装 & 配置 brew
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
安装 Ollama
1 | brew install ollama |
启动 Ollama
1 | brew services start ollama |
验证 Ollama
1 | ollama --version |
下载 AI 大模型
比如下载通义千问最新的8B模型1
ollama pull qwen3:8b
运行 AI 大模型
1 | ollama run qwen3:8b |
验证 AI 大模型
1 | curl http://localhost:11434/api/generate -d '{"model":"qwen3:8b","prompt":"hello"}' |
三、配置 Ngrok(暴露 Ollama API)
注册 Ngrok 账号
Ngrok 是一个内网穿透工具,可以将本地端口映射为公网可访问的url地址。对于开发验证方案,可以免费使用。
登录 Ngrok 官网(https://ngrok.com),注册一个账号。
安装并获取 Ngrok 授权码

1
2brew install ngrok
ngrok config add-authtoken <你的token>
创建内网穿透隧道
1 | ngrok http 11434 |
Ngrok 会输出类似下面的公网地址,其中 abcd1234 是随机生成的字符串,由于我们是学习研究使用,可以直接用这个。如果是正式使用,可以绑定到自己的域名上。
https://abcd1234.ngrok-free.dev
验证 Ngrok 是否正常工作
可以在命令行终端使用刚生成的网址来访问 Ollama 接口是否已生效:1
curl https://abcd1234.ngrok-free.dev/api/generate -d '{"model":"qwen3:8b","prompt":"hello"}'
如果正常,会返回类似下面的结果:

至此,我们已经在本机上成功运行了 Ollama 大模型,并且通过 Ngrok 将本地端口映射为公网可访问的 HTTPS 地址,可以对外提供服务了。
四、下载安装 UC_AI(PL/SQL SDK)
UC_AI PL/SQL SDK 是国外一个大佬用 PL/SQL 实现的 AI 调用工具,支持多种 AI 提供商,包括 OpenAI、Anthropologie、Google、Ollama 和 Oracle 云基础设施 (OCI)。
- 免费开源:可在 GitHub 上下载最新版本 SDK
- 广泛兼容性:可与旧版 Oracle 数据库配合使用(如:12.2 版本,已在 18c 版本上测试)
- 统一接口:一个 API 可供多个AI提供商使用
- 提供商独立性:轻松切换模型和提供商。目前支持 5 个提供商:OpenAI GPT、Anthropologie Claude、Google Gemini、Ollama(离线模型)和 Oracle 云基础设施 (OCI)(Llama、Cohere、xAI Grok、Google Gemini)。
安装 UC_AI
将下载好的安装包解压后,使用 sysdba 用户登录数据库,执行以下命令:1
2
3
4
5
6
7
8
9
10
11
12
13sqlplus / as sysdba
-- 切换到正确的数据库容器下
alter session set container=orclpdb1;
-- 切换到正确的数据库模式下
alter session set current_schema=apexcn;
-- 安装 UC_AI
@install_uc_ai.sql
-- 也可以安装带日志模块的
@install_with_logger.sql
五、在 APEX 中调用 UC_AI
Oracle APEX 的 uc_ai 包原生支持 Ollama,无需创建 AI provider 或 model,只需设置 base_url 即可直接使用。适用于 Server-side Process、Dynamic Action、PL/SQL Block。具体调用方法可以参见 UC_AI 官方文档。
在 APEX 中创建测试页面
创建一个空白页面,添加如下组件:
- 1个输入框(P6_INPUT):普通的文本输入框;
- 1个输出框(P16_AI_RESULT):Rick Text Editor输入框
- 1个按钮(P16_BTN):普通按钮,点击后触发 Server-side Code。注意要设置 “Items to Submit“ 和 “Items to Return“ 属性,确保输入与输出能正确绑定到控件上。

1
2
3
4
5
6
7
8
9
10
11
12
13DECLARE
l_result sys.json_object_t;
BEGIN
uc_ai.g_base_url := 'https://abcd1234.ngrok-free.dev/api';
l_result := uc_ai.generate_text(
p_user_prompt => :P16_INPUT,
p_provider => uc_ai.c_provider_ollama,
p_model => 'qwen3:8b'
);
:P16_AI_RESULT := l_result.get_string('final_message');
END;
最终效果

六、访问日志与安全增强
登录到 Ngrok 控制台,查看通道访问日志
点击 Ngrok 控制台左侧的 “Endpoints & Traffic Policy“ 菜单,在右侧你的通道点击“Inspect Traffic“,即可查看该通道的访问日志。

这条就是刚才我们通过 APEX 页面调用 Ollama 的请求日志,可以看到请求经过了1分24秒才返回结果,速度跟你的电脑配置和返回的内容多少有关。我测试用的 macbook 是 Apple M1 芯片,16GB 内存。

在命令行终端查看访问日志
同时,你也可以在命令行终端上看到 ngrok 隧道的访问日志。

对 Ngrok 隧道进行安全增强
截止到目前为止,你的 Ngrok 隧道上暴露的 Ollama 接口服务是完全公开的,任何人(只要知道了网址)都可以访问。为了安全起见,可以对 Ngrok 隧道进行安全增强。可以通过增加 “Traffic Policy“ 的方式限制访问 IP 地址(免费版只能在命令行终端增加 policy 规则)。
查看 Ngrok 配置文件1
ngrok config check

编辑 Ngrok 配置文件1
ngrok config edit
在 ngrok.yml 配置文件中增加以下内容,用来只允许我的 APEX 主机访问这个隧道:1
2
3
4
5
6
7
8
9
10
11
12
13tunnels:
ollama:
addr: 11434
proto: http
domain: abcd1234.ngrok-free.dev
traffic_policy:
on_http_request:
- actions:
- type: restrict-ips
config:
enforce: true
allow:
- 129.150.34.102/32
重启 Ngrok 服务后,再次访问 Ngrok 控制台,可以看到访问日志中已经增加了 IP 地址限制:

此时再次通过其他电脑(包括本机)访问该通道,请求将被 ngrok 拒绝:1
curl https://abcd1234.ngrok-free.dev/api/generate -d '{"model":"qwen3:8b","prompt":"hello"}'
curl https://hulkier-pluckily-allan.ngrok-free.dev/api/generate -d ‘{“model”:”qwen3:8b”,”prompt”:”hello”}’

Ngrok 控制台上查看访问日志,同样能看到请求被拒绝的日志信息:

七、该方案的价值
该方案具备以下突出优势:
- 完全零成本:软硬件均无需额外投入
- 最大化利旧:利用 M1/M2/M4 Mac 的闲置算力
- 无锁定:可随时切换 Qwen、Llama、DeepSeek 等模型
- APEX 原生支持:无需 hack,无需扩展包
- 开发体验优雅:本地模型随开随用,响应速度可控
- 数据安全:模型与推理都在你的设备内执行
八、总结
本指南提供了一套完整的、零成本的、易推广的 APEX(外网) ←→ 内网 Mac 本地模型(Ollama+Qwen3) 的调用方法。核心技术路线包括:
- 本地运行 Ollama
- Ngrok 暴露稳定 HTTPS API
- APEX 原生 uc_ai 直接调用 provider_ollama
- 全链路可监控、可 debug、可复用
大家有更好的方案和建议,欢迎分享交流。