本地大模型系列:2.通过API让本地大模型为你服务

上一篇我们介绍了ollama和lmstudio,这两个工具都是个人版的运行大模型的工具,可以用来运行本地小参数的LLM(所谓小参数一般指不超过27B的4bit量化LLM,按照1B参与大约需要0.7G显存加载进行预测,加上其他开销月1-1.5G,可以估算自己自己的设备可以跑多大的参数)

【知识】关于4bit量化模型:

4bit量化大模型的定义

4bit量化大模型是指通过降低模型参数的数值精度(从常见的32位浮点数或16位浮点数量化为4位整数),以减少模型存储空间和计算资源占用的大型神经网络模型。量化技术通过牺牲少量精度换取显著的效率提升,适用于资源受限的场景。

量化技术的核心原理

  • 位宽缩减:将原始高精度参数(如FP32)映射到4位整数(通常为-8到7的整数值),通过缩放因子(scale)和零点偏移(zero-point)保留数值分布特征。
  • 对称与非对称量化:对称量化以零点为中心,非对称量化允许偏移以适配数据分布。
  • 分组量化(Group-wise):对参数矩阵分块量化,每组独立计算缩放因子,减少精度损失。

4bit量化的优势

  • 存储节省:模型体积减少至原FP32模型的1/8(4bit vs 32bit)。
  • 计算加速:低比特运算(如INT4)在支持硬件(如GPU张量核)上提升推理速度。
  • 能耗降低:适合边缘设备部署,减少内存带宽和功耗需求。

典型应用场景

  • 移动端推理:手机、IoT设备部署大模型(如Llama 2-4bit)。
  • 多模型并行:服务器同时加载多个量化模型,优化资源利用率。
  • 实时系统:低延迟要求的场景,如语音识别、实时翻译。

4bit量化技术正成为平衡效率与性能的关键手段,相关工具链(如Bitsandbytes、GGML)已集成到主流框架(PyTorch、TensorFlow)中。

通常来说,我们需要的是大模型的能力,而不是用ollama或者lmstudio界面搞一下娱乐,而是要把大模型能力嵌入到我们的应用程序中去。

当然我们也可以选择远端的API能力(如火山引擎、阿里千问、Deepseek等),但远端是要花钱的,而且依赖于网络。本地的就消耗电费,而且可以单机运行,在本地LLM的技术参数已经完全满足应用时,本地也是不错的选择。

这里采用chatbox来配置接口配置示例,这里配置通过的参数,可以翻到应用程序里直接使用,后面会给一个调用的示例。

chatbox安装:

https://chatboxai.app/zh 官网下载适合你的客户端

安装后运行如下:

1.ollama接口配置

打开ollama程序,找到其图标,点出其菜单,选择 Settings

打开上述开关,这样其他应用就可以调用ollama服务了

PS:这里的Model location是模型下载存放的目录,一定不能选择C盘,否则会变成Disk C Soldier,俗称C盘战士。可以百度一下如何迁移已经下载好的模型(就是复制到目标位置,然后将目录设置为目标位置即可)

此时打开浏览器,在窗口输入:http://localhost:11434/

能看到这个,说明ollama已经启动并可以提供对外服务。

然后操作chatbox:

在下图2的位置,填入 http://localhost:11434/ 或者 http://1270.0.1:11434/ (一般来说等效,其实有点小区别,感兴趣自己百度),然后点击获取

此时可以加载出本地ollama所有的模型,点击绿色的加号图标,选择你需要使用的模型

然后就能看到这个模型被加载出来了。

接下来打开默认模型,选择一个,省得我们每次都要手动选:

关闭设置窗口:

打开一个新会话:

是不是这里已经显示你刚才选择的默认模型了?

也可以自己手动选

现在,来说句话试试。

第一次启动会话,模型会加载,需要一点时间,跟电脑性能有关,加载完成之后,第二次就可以直接用,速度要快很多了。

在cmd里运行 ollama ps,可以看到当前已经加载的模型:

可以显示思考模式:

使用trae写个简单的代码来对接ollama,注意这里需要明确ollama用哪个模型:

注意:qwen3.5:latest可以缩写为qwen3.5,但是后面有参数的如qwen3.5:2B要写全称

AI生成的代码如下:

python 复制代码
import requests
import json

def test_ollama_connection():
    # Ollama服务器地址
    base_url = "http://localhost:11434"
    model = "qwen3.5"
    
    # 测试连接 - 获取模型列表
    print("测试连接到Ollama服务器...")
    try:
        response = requests.get(f"{base_url}/api/tags")
        response.raise_for_status()
        models = response.json().get("models", [])
        print(f"成功连接到Ollama服务器!")
        print(f"可用模型数量: {len(models)}")
        
        # 检查指定模型是否可用
        model_available = any(m.get("name", "").startswith(model) for m in models)
        if model_available:
            print(f"模型 {model} 可用!")
        else:
            print(f"模型 {model} 不可用,可用模型列表:")
            for m in models:
                print(f"  - {m.get('name')}")
        
    except requests.exceptions.RequestException as e:
        print(f"连接失败: {e}")
        return False
    
    # 测试模型生成
    print("\n测试模型生成能力...")
    try:
        payload = {
            "model": model,
            "prompt": "Hello, what can you do?",
            "stream": False
        }
        response = requests.post(f"{base_url}/api/generate", json=payload)
        response.raise_for_status()
        result = response.json()
        print(f"生成成功!")
        print(f"响应: {result.get('response', 'No response')[:100]}...")
        return True
    except requests.exceptions.RequestException as e:
        print(f"生成测试失败: {e}")
        return False

if __name__ == "__main__":
    test_ollama_connection()

连接成功,现在你可以使用trae利用ollama的api开发本地app了。qwen3.5是多模态模型,可以支持图片和文字同时上传的,具体让trae帮你写代码就好。

ollama有个默认的设置,就是如果5分钟没有接口访问已经激活的模型,这个模型就会从内存中卸载,下次使用就要重新载入。你需要修改一个"OLLAMA_KEEP_ALIVE"的设置,具体如何操作自行百度,这个值默认为5

2.lmstudio api连接

打开lmstudio,点击图中位置:

图中LocalServer处打开箭头所示开关,然后点击LoadModel加载模型,就可以对外提供服务了

(图中的ip地址就是lmstudio 的api地址)

点击加载:

和ollama用的时候才加载不同,lmstudio可以先加载(也可以使用时被动加载),并且不会自动释放

现在回到chatbox

填写api主机,然后点击获取

这次我们不设置默认模型,而是直接在聊天界面中切换

思考了很久,这里也是注意在本地的小参数模型,速度还不快的时候,不要让他回答一些开放性问题,最好是具体的问题,这样不用等着对面回复等很久。

lmstudio这边是可以看到一直在输出的。

trae对接:

代码如下:

python 复制代码
import requests
import json

def test_lmstudio_connection():
    # LM Studio服务器地址
    base_url = "http://127.0.0.1:1234"
    model = "qwen3.5-9b-mlx"
    
    # 测试连接 - 检查服务器状态
    print("测试连接到LM Studio服务器...")
    try:
        # LM Studio使用类似OpenAI的API格式
        response = requests.get(f"{base_url}/v1/models")
        response.raise_for_status()
        models = response.json().get("data", [])
        print(f"成功连接到LM Studio服务器!")
        print(f"可用模型数量: {len(models)}")
        
        # 检查指定模型是否可用
        model_available = any(m.get("id", "") == model for m in models)
        if model_available:
            print(f"模型 {model} 可用!")
        else:
            print(f"模型 {model} 不可用,可用模型列表:")
            for m in models:
                print(f"  - {m.get('id')}")
        
    except requests.exceptions.RequestException as e:
        print(f"连接失败: {e}")
        return False
    
    # 测试模型生成
    print("\n测试模型生成能力...")
    try:
        # LM Studio使用OpenAI兼容的API格式
        payload = {
            "model": model,
            "prompt": "Hello, what can you do?",
            "max_tokens": 100,
            "temperature": 0.7
        }
        response = requests.post(f"{base_url}/v1/completions", json=payload)
        response.raise_for_status()
        result = response.json()
        print(f"生成成功!")
        print(f"响应: {result.get('choices', [{}])[0].get('text', 'No response')[:100]}...")
        return True
    except requests.exceptions.RequestException as e:
        print(f"生成测试失败: {e}")
        return False

if __name__ == "__main__":
    test_lmstudio_connection()

注意:访问ollama和访问lmstudio的代码是不一样的,这一点不用我们操心,trae可以做很好

结语:

至此我们已经介绍了ollama和lmstudio的接口使用方式,这为我们开发单机版的app打下基础。当然单机版的api可以轻松替换为远端付费大模型的api,修改一下调用方式即可。

相关推荐
Tina姐2 小时前
在 3D Slicer 中使用 Crop Volume 高效裁剪与重采样,提升分割、配准与深度学习处理效率
人工智能·深度学习
SuniaWang2 小时前
《Spring AI + 大模型全栈实战》学习手册系列· 专题二:《Milvus 向量数据库:从零开始搭建 RAG 系统的核心组件》
java·人工智能·分布式·后端·spring·架构·typescript
QQsuccess2 小时前
AI全体系保姆级详讲——第一部分:了解AI基本定义
人工智能·算法
科技新芯2 小时前
当AI龙虾接管购物车,Bidnex用CPS重构数字广告的信任基石
人工智能·重构
跨境卫士—小依2 小时前
标题与卖点不聚焦如何重构核心卖点逻辑
大数据·人工智能·跨境电商·亚马逊·营销策略
xin_yao_xin2 小时前
PaddleOCR系列——《文本检测、文本识别》模型训练
人工智能·python·paddlepaddle·ppocr
落地加湿器2 小时前
ReAct源码解读-一轮循环
人工智能·智能体·react框架·源码解读
液态不合群2 小时前
OpenCV多线程编程:从单线程到多线程的视频处理
人工智能·opencv·音视频
ZPC82102 小时前
OLOv11 + 深度相机的方案实现高精度3D定位
人工智能·数码相机·算法·机器人