概要

本文提供一种简单易复现的让别人使用你本地部署的大模型的方案。

关键词

本地大模型、内网穿透、API暴露公网

正文

个人用的是MACmini M4 跑的模型哈。

  • 什么是API?

    • API(Application Programming Interface,应用程序编程接口) 是一组预先定义好的规则、协议和工具,它允许不同的软件应用程序之间相互通信和交换数据。
      请添加图片描述

*OpenAI API 的格式(pyhton)

 from openai import OpenAI#从 openai 库里导入 OpenAI 这个类(它是用来连接 API 的客户端)
 client = OpenAI()#client是客户的意思,这里创建创建了一个客户端,用于与服务端通讯

 response = client.responses.create(
     model="你的模型名字",#指定模型的命字
     input="这是一段你输入的文本"#给模型的提示
 )
 #响应结果=客户端.响应.创建(包含的信息)

 print(response.output_text)#将模型的回应结果打印
  • 流是什么?
    这个参数设置流:

    stream=true
    

    过程:你的程序 -> 发送请求 -> OpenAI服务器生成第一个词 -> 立刻返回 -> 你的程序处理 -> 服务器生成第二个词 -> 立刻返回 -> 你的程序处理 -> … -> 直到生成结束。

    效果:在控制台上,文字会像有人在你屏幕上打字一样,一个一个词(或几个词)地逐渐出现,而不是等待很长时间后突然出现一整段文字。

  • token是什么?

    在AI语言模型中,Token是文本的基本处理单元。它可以是一个词、一个字、一个标点符号,甚至是词的一部分。模型通过理解和管理这些Token来“读懂”和“生成”文本。

    理解(输入):把你输入的句子(乐高飞船)拆解成一个个标准的积木块(Token)。

    思考(处理):分析这些积木块如何组合在一起,以及接下来最应该放哪一块积木。

    生成(输出):根据它的“思考”,一块接一块地输出新的积木块(Token),最终组合成一个完整的、有意义的回复(新的乐高模型)。

    没有这些小小的积木块,就无法构建出任何东西。Token就是语言模型用来构建意义的“积木块”。

  • LM studio介绍

    LM Studio 是一个 桌面端的应用软件,用来在本地运行和管理大语言模型(LLM)

    它的界面很友好,点几下就能和模型对话,不需要敲很多命令行。相比于另一款Ollama,它更适合新手.

    它支持 本地运行(CPU 或 GPU)和 远程模型(通过 API)。

    LM Studio 自带一个本地 API 服务器(OpenAI 风格)。

  • 为什么要本地部署大模型?

    首先,拥有自己的本地大模型是一件很酷的事,你可以用它来做很多事情.

    所有数据都留在自己的电脑/服务器上,不用上传到云端,适合处理敏感数据.(公司文档、医疗、科研等)

    云端调用 API 要按 token 收费,用多了很贵。

    即使没有网络,也能运行。

  • 本地部署大模型

    • 下载LM studio

      下载地址:https://lmstudio.ai/download

      使用教程:https://www.bilibili.com/video/BV16RBGYMEXV/?spm_id_from=333.1387.homepage.video_card.click&vd_source=82dc9d13c607cde159964c075a4932d8

    • 下载模型

      选择适合你设备的模型,然后下载

    • 启动后端

      按照视频里的设置,然后把服务拉起就行了
      在这里插入图片描述

    • 重要参数

      • 模型名称:
        请添加图片描述

      • 访问地址:

在这里插入图片描述

  • 局域网调试

    • 安装Miniconda
      • mini conda介绍

        • 先介绍Anaconda:

          它是一个 Python 科学计算环境,里面打包好了:

          Python 本身

          常用的科学库(numpy, pandas, matplotlib…)

          conda 包管理器(用来装/卸载库、管理环境)

        • 那么 Miniconda 呢?

          Miniconda = 精简版的 Anaconda。

          它只包含 conda 包管理器 + Python,别的都没有。

          更小,更灵活.适合本套方案.

    下载地址:https://www.anaconda.com/download

在这里插入图片描述

下载右边的那个

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

出现这两个就代表安装成功啦!!!
在这里插入图片描述

  • 安装VScode

    • VScode介绍

      VSCode(Visual Studio Code)是一款由微软开发的免费、开源、跨平台的源代码编辑器。

      能在 Windows、macOS、Linux 上运行。

      主打 轻量 + 可扩展。

      集成终端。

      无与伦比的扩展生态系统.通过拓展,你能仅靠VScode做到很多事情.

      宇宙级编辑器.无需多言.

      支持几乎所有编程语言(Python、C++、Java、JavaScript…)。

      下载地址:https://code.visualstudio.com/

      一路安装下去就行啦~

  • 创建环境

    点开Anaconda Promt

    在这里插入图片描述

    会出现这个黑色框框:
    在这里插入图片描述

    输入以下命令,回车确认:

    conda create -n LLM python=3.9
    

在这里插入图片描述

输入: a

出现这个:

在这里插入图片描述

输入: y

在这里插入图片描述

出现这个就代表我们安装好了环境

  • 激活环境

    conda activate LLM
    

    在这里插入图片描述

    我们发现前面括号里的名字变了,这就代表我们进入了这个叫做LLM的环境里.

  • 安装所需包

    输入以下命令:

    pip install httpx
    pip install Openai
    

在这里插入图片描述

出现这个代表我们的环境已经配置好啦!

  • 选择环境

    接着我们新建一个文件夹,然后创建一个python文件,怎么创建自己搜哈~

    现在我们打开VScode

    看右下角

    在这里插入图片描述

    选择刚才创建的LLM环境

  • 开始本地调试

    from openai import OpenAI
    
    client = OpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio")
    
    messages = [
        {"role": "system", "content": "You are a helpful assistant"}
    ]
    
    while True:
        user_input = input("你:")
        if user_input.strip().lower() in ["exit", "quit"]:
            break
        messages.append({"role": "user", "content": user_input})
    
        stream = client.chat.completions.create(
            model="你的模型名字",
            messages=messages,
            temperature=0.7,
            stream=True,
        )
    
        reply = []
        for chunk in stream:
            token = chunk.choices[0].delta.content or ""
            print(token, end="", flush=True)
            reply.append(token)
        print()
        messages.append({"role": "assistant", "content": "".join(reply)})
        
    

    运行便能在内网访问了。

    根据你的实际情况

    找到这行代码,填写你的其他内网设备的地址:

     client = OpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio")
    
  • 内网穿透(frp)介绍

    内网穿透是一种技术,它能让位于本地私有网络(如家庭或公司内网)中的设备或服务,被公共互联网(外网)上的其他设备直接访问,就像把它直接暴露在公网上一样。

    • 能做:

      远程访问家中的NAS

      演示本地开发的项目

      微信小程序等开发调试

  • TCP介绍

    TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保了数据在网络中能够准确、有序、不重复地从一台计算机传输到另一台计算机。

  • 映射端口
    我们需要的是经典的樱花穿透,打开网址:https://www.natfrp.com/?page=panel&module=download

    在跑模型的那台电脑上安装樱花穿透.

在这里插入图片描述

新建用户后:

在这里插入图片描述

需要实名认证

接着复制访问密钥

在这里插入图片描述

新建隧道

在这里插入图片描述

选一个内地节点:

在这里插入图片描述

选择TCP

在这里插入图片描述

在这里插入图片描述

如上填写

接着下载对应你操作平台的软件:

在这里插入图片描述

windows无法安装就按照这个来:

在这里插入图片描述

  • 安装

    打开樱花穿透,粘贴刚才复制的访问密钥:

在这里插入图片描述

在这里插入图片描述

启动隧道,然后打开日志:

在这里插入图片描述

复制你的隧道IP

  • 公网和内网是什么?

    • 公网:全球范围的互联网,就像公共邮政系统,每个地址(公网IP)必须是全球唯一的,可以直接被任何人访问。

    • 内网:一个局部范围内的私有网络,就像一栋大楼内部的房间号系统,地址(内网IP)可以重复出现在不同大楼里,外部无法直接访问。

      通过 NAT(网络地址转换)进行协作.

  • 穿透后调试

    • SSL是什么?

      SSL(Secure Sockets Layer) 安全套接层协议

      SSL(安全套接层)及其继任者TLS(传输层安全)是一种加密协议,它在你的电脑(客户端)和网站服务器之间建立一条安全、加密的通信隧道,确保你们之间传输的所有数据(密码、信用卡号、聊天信息)不会被窃听和篡改。

      如果没有 SSL,你的用户名和密码会以 明文 在网络里传输,黑客能直接截取。

      • 没有 SSL:就像你在邮局寄明信片,谁路过都能看见内容。

      • 有了 SSL:就像寄一个上锁的保险箱,只有收件人能打开。

    • 为什么要禁用SSL?

      在Python 里 SSL 验证默认是开启的

      在内网自己搭的服务器常常用“自签名证书”,不是权威 CA 签的。

      为方便调试,需要禁用.

    • 代码修改

      from openai import OpenAI
      import httpx
      import ssl
      
      # 创建自定义HTTP客户端,禁用SSL验证
      http_client = httpx.Client(verify=False)
      
      client = OpenAI(
          base_url="https://把这里改成你复制的隧道IP/v1", 
          api_key="lm-studio",#这里随便写哈
          http_client=http_client
      )
      
      messages = [
          {"role": "system", "content": "You are a helpful assistant"}
      ]
      
      while True:
          user_input = input("你:")
          if user_input.strip().lower() in ["exit", "quit"]:
              break
          messages.append({"role": "user", "content": user_input})
      
          stream = client.chat.completions.create(
              model="改成你的模型名字",
              messages=messages,
              temperature=0.7,
              stream=True,
          )
      
          reply = []
          for chunk in stream:
              token = chunk.choices[0].delta.content or ""
              print(token, end="", flush=True)
              reply.append(token)
          print()
          messages.append({"role": "assistant", "content": "".join(reply)})
          
      
    • 点击运行

    • 特别注意:Ollama部署的话,需要打开对局域网开放!

  • 应用案例

    • 网站嵌入

      你可以在网站内嵌一个智能体用于对话,后续我会在GitHub上放一个模板。

      这里我们使用一个叫Page Assist的浏览器插件。

      下载后会有一个这个界面:

      我们进点击右上角,进入设置在这里插入图片描述
      然后添加一个供应商在这里插入图片描述
      按照这样设置
      URL根据实际情况填写:

      • 本机不用改

      • 局域网内其他设备将localhost改成运行模型的IP地址即可

      • 外网将localhost改成隧道IP即可

        在这里插入图片描述

        回到首页,左上角选择模型,就可以开始对话了
        在这里插入图片描述
        当然你也可以自己搓一个更好看的网页出来哈~

    • 翻译

      我们需要一个浏览器插件,这里我们推荐:沉浸式翻译

      点击浏览器右上角的这个东西在这里插入图片描述

      然后获取拓展:

      在这里插入图片描述

      在这里插入图片描述
      下载完后:

      点击这个在这里插入图片描述

      接下来会出现这个:

      在这里插入图片描述

点击翻译服务

点击更多的翻译服务:
在这里插入图片描述

在这里插入图片描述

点击添加自定义翻译服务

按照下面图片进行设置

在这里插入图片描述

点击右上角的测试服务

没有问题的话是这样的:

在这里插入图片描述

关闭网页会自动保存

接着找一篇全英网站

点开拓展,翻译服务选择你刚才的本地翻译服务

点击在这里插入图片描述

左边那个可以开启双语对照。

然后开始体验乌龟般的翻译速度吧哈哈哈哈

附录

如有疏漏,请多包含

参考链接

Deepseek API使用文档:https://api-docs.deepseek.com/zh-cn/api/deepseek-api/
代码放在了:https://github.com/Linmoqian/LLM_frp_api

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐