Deepseek本地部署+联网教程:Ollama+OpenWebUI+博查

博查 X Ollama github链接:https://github.com/BochaAI/open-webui-Bocha

博查开放平台(https://open.bochaai.com/)

博查介绍

博查是一个给AI用的世界知识搜索引擎,它可以让你的AI应用连接世界知识,获得干净、准确、高质量的搜索结果。

博查AI开放平台提供Web Search API、Semantic Reranker API等搜索服务,让你的AI应用可以通过API接口直接连接互联网,从近百亿网页和生态内容源中搜索高质量世界知识,包括新闻、图片、视频、百科、机酒、学术等。

博查底层基于多模态混合搜索与语义排序技术的新一代搜索引擎,适用于 AI Agents、AI Chatbots、AI Search 以及各类 RAG 应用的线上应用或数据冷启动。博查在数据安全、成本控制及内容合规性方面表现卓越,确保数据不出海并符合国内安全规范。

Ollama本地部署

Ollama介绍

Ollama是一款专门设计用于在本地环境中部署和定制大型语言模型的工具。它通过提供一个简洁且高效的接口,简化了创建、运行及管理这些模型的过程。此外,Ollama还拥有一个内容丰富的预构建模型库,便于用户将其轻松集成至不同的应用中。其核心目标在于让不论是开发者还是终端用户,在与大型语言模型进行交互或部署这些模型时,都能体验到前所未有的简便性。

下载地址

macOS: https://ollama.com/download/Ollama-darwin.zip

Windows: https://ollama.com/download/OllamaSetup.exe

Linux: 

curl -fsSL https://ollama.com/install.sh | sh

以windows为例,打开OllamaSetup.exe,完成ollama的安装过程

打开终端,输入以下命令 来检验Ollama是否已正确安装,若正确安装则会出现下列输出:

ollama

模型选择与下载

Ollama 支持在 ollama.com/library 上提供的模型列表。

以deepseek-r1为例,Ollama支持多种大小的模型选择,在下图1处选取模型大小后,只需要复制2处的指令,在命令行输入即可下载并运行该模型

Ollama的各种指令
  1. ollama serve用于在不运行桌面应用程序的情况下启动 Ollama。

  2. 下载大模型或者更新本地大模型:如ollama pull deepseek-r1:1.5b可下载deepseek-r1的1.5B大小的模型

    ollama pull [本地/远程仓库模型名称]
  3. 下载且运行本地大模型(若已下载,则直接运行):

ollama run [本地/远程仓库模型名称]

展示本地大模型列表:

ollama list

删除单个本地大模型:如ollama rm deepseek-r1:1.5b

ollama rm [本地模型名称]

查看本地运行中模型列表:

ollama ps

复制本地大模型:

ollama cp [本地存在的模型名] [新复制模型名]

使用命令行的Ollama指令来使用Deepseek

  1. 以deepseek-r1的1.5B大小的模型为例,ollama run deepseek-r1:1.5b运行程序

ollama run deepseek-r1:1.5b

直接在命令行中输入你好

   多行输入:对于多行输入,你可以用 """ 包裹文本,逐行输入:

"""Hello, 
... world! 
... """

若退出程序,可以使用ctrl+d或者输入/bye来退出程序

更多详细Ollama使用指南如自定义模型等请参考官方文档 更加直观和友好的交互设计,使用户操作更为便捷和高效,我们将部署一个Web可视化聊天界面。

Open-WebUI本地部署

Open WebUI是一个完全离线操作的、可扩展的、功能丰富的用户友好型自托管AI平台。它支持多种LLM运行器,如Ollama和与OpenAI兼容的API,并内置了针对RAG的推理引擎,使其成为一个强大的AI部署解决方案。

Bocha AI插件为Ollama WebUI提供的增强功能:通过实时网络搜索提升您的大型语言模型(LLM)

Bocha的主要特点⭐

🚀 多模态混合搜索:结合关键词匹配、语义理解和多模态分析,以在各种内容格式中提供精确的搜索结果。

⚙️ 语义重排序:通过使用上下文感知AI对搜索结果进行重新排序,从而提升相关性,确保您的大型语言模型(LLM)获得最具权威性和时效性的信息。

🤝 海量知识库:访问一个经过精心编排的近100亿网页和生态系统来源的索引,专为AI驱动的用例优化。

Bocha AI插件将Bocha AI开放平台无缝集成到Ollama的WebUI中,赋予您的大型语言模型(LLMs)实时互联网连接能力和先进的搜索功能。通过利用Bocha AI的搜索API,您的AI应用程序现在可以访问来自数十亿网页和可信内容源的高质量、最新的知识——包括新闻、图片、视频、百科全书、旅游数据、学术论文等。

我们修改了Open WebUI的代码以支持Bocha搜索API,您可以使用此版本让LLMs连接到网络,github链接为https://github.com/BochaAI/open-webui-Bocha

更多关于原始Open WebuUI的细节请参照https://github.com/open-webui/open-webui

安装过程

在安装之前,请确保您使用的是 Python 3.11 以避免兼容性问题。

   

  1. 将代码下载到本地

    git clone https://github.com/BochaAI/open-webui-Bocha.git cd open-webui-Bocha/

  2. 将.env.example复制一次副本并改名为.env

  3. 进入open-webui-Bocha/backend文件夹来构建所需的后端环境

创建一个新环境

conda create --name webui python=3.11

激活新环境

conda activate webui

进入backend文件夹,并安装环境依赖

cd ./backend pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt -U
  • 构建所需要的前端环境

返回./open-webui-Bocha文件夹

更换Node.js 工具包镜像源以下载提速

npm config set registry=https://registry.npmmirror.com

可以执行npm config get registry来查看是否设置成功

若出现npm 不是内部或外部命令,也不是可运行的程序或批处理文件的报错信息,说明本机未安装Nodejs,请参照Nodejs安装指引进行安装

安装前端所需的相应依赖和模块

npm i

构建前端环境

npm run build

若出现Failed to resolve entry for package “xxx“. The package may have incorrect main/module/expo等的报错信息,则说明可能是package.json 文件中的 main、module 或 exports 字段配置不正确导致的。

通过npm install xxx进行独立安装

Open-WebUI启动过程

  1. 进入open-webui-Bocha/backend文件夹下

cd ./backend

对于Linux用户,执行下列命令以启动 Open WebUI 服务器

bash start.sh

对于Windows用户,则执行下列命令

start_windows.bat
  • 若出现报错信息[Errno 10048] error while attempting to bind on address ('0.0.0.0', 8080): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。,则说明当前端口可能被占用

  • a. 输入以下指令来查看占用端口的进程

  • netstat -aon | findstr 8080
  •   b. 关闭该进程

    taskkill /F /PID 11288

      c. 如此即可解决端口占用问题

  • 当出现下列界面时则说明已正常运行,此时您可以在 http://localhost:8080 访问该服务器,可单点该链接

  1. 首次使用时,您需要将账号和密码设置为管理员信息。然后您就可以开始使用该服务了。

  2. 在 http://localhost:8080 访问该服务器时,出现下列界面则说明Open-WebUI已搭建成功

Open-WebUI的使用过程

  1. 切换目前所使用的模型

  2. 将语言更改为中文:admin->Settings->general->Language->简体中文

  3. 进入博查开放平台(https://open.bochaai.com/),登录之后获取自己的API key 信息

  4. 设置联网搜索:管理员面板->设置->联网搜索->点开启用联网搜索->选择bocha->输入bochaAPI->保存

  5. 若想在对话中启用联网搜索,按照如下方式进行点开启用按钮,即可在当前对话中启用联网搜索,正确启用后会有下图提示

  6. 如下即可正常使用

现有Open-WebUI源码修改以支持Bocha搜索

若您在此之前已通过上述源码的方式将Open-WebUI进行部署,同时希望在已部署的WebUI上进行修改以实现支持Bocha搜索,以下为相关修改教程。

在./config.py上的第1639行回车添加一新行后,添加

BOCHA_SEARCH_API_KEY = PersistentConfig(
    "BOCHA_SEARCH_API_KEY",
    "rag.web.search.bocha_search_api_key",
    os.getenv("BOCHA_SEARCH_API_KEY", ""),
)

在./backend/open_webui/main.py的第182行回车添加一新行后,添加

BOCHA_SEARCH_API_KEY,

第516行回车添加一新行后,添加

app.state.config.BOCHA_SEARCH_API_KEY = BOCHA_SEARCH_API_KEY

在./backend/open_webui/retrieval/web中新建一个bocha.py的文件,具体内容如下

import logging
from typing import Optional

import requests
import json
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
from open_webui.env import SRC_LOG_LEVELS

log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])

def _parse_response(response):
    result = {}
    if "data" in response:
        data = response["data"]
        if "webPages" in data:
            webPages = data["webPages"]
            if "value" in webPages:
                result["webpage"] = [
                    {
                        "id": item.get("id", ""),
                        "name": item.get("name", ""),
                        "url": item.get("url", ""),
                        "snippet": item.get("snippet", ""),
                        "summary": item.get("summary", ""),
                        "siteName": item.get("siteName", ""),
                        "siteIcon": item.get("siteIcon", ""),
                        "datePublished": item.get("datePublished", "") or item.get("dateLastCrawled", ""),
                    }
                    for item in webPages["value"]
                ]
    return result

def search_bocha(
    api_key: str, query: str, count: int, filter_list: Optional[list[str]] = None
) -> list[SearchResult]:
    """Search using Bocha's Search API and return the results as a list of SearchResult objects.

    Args:
        api_key (str): A Bocha Search API key
        query (str): The query to search for
    """
    url = "https://api.bochaai.com/v1/web-search?utm_source=ollama"
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    
    payload = json.dumps({
        "query": query,
        "summary": True,
        "freshness": "noLimit",
        "count": count
    })

    response = requests.post(url, headers=headers, data=payload, timeout=5)
    response.raise_for_status()
    results = _parse_response(response.json())
    print(results)
    if filter_list:
        results = get_filtered_results(results, filter_list)

    return [
        SearchResult(
            link=result["url"], 
            title=result.get("name"), 
            snippet=result.get("summary")
        )
        for result in results.get("webpage", [])[:count]  
    ]

在./backend/open_webui/routers/retrieval.py中的第47行回车添加一新行后,添加

from open_webui.retrieval.web.bocha import search_bocha

第381行回车添加一新行后,添加

"bocha_search_api_key": request.app.state.config.BOCHA_SEARCH_API_KEY,

第430添加一新行后添加

bocha_search_api_key: Optional[str] = None

第526行添加一新行后添加

        request.app.state.config.BOCHA_SEARCH_API_KEY = (
            form_data.web.search.bocha_search_api_key
        )

第590行添加一新行后添加

"bocha_search_api_key": request.app.state.config.BOCHA_SEARCH_API_KEY,

第1171行添加一新行后添加

    elif engine == "bocha":
        if request.app.state.config.BOCHA_SEARCH_API_KEY:
            return search_bocha(
                request.app.state.config.BOCHA_SEARCH_API_KEY,
                query,
                request.app.state.config.RAG_WEB_SEARCH_RESULT_COUNT,
                request.app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST,
            )
        else:
            raise Exception("No BOCHA_SEARCH_API_KEY found in environment variables")

在./src/lib/components/admin/Settings/WebSearch.svelte中的第20行添加一新行后添加

'bocha',

第181行添加一新行后添加

                                                {:else if webConfig.search.engine === 'bocha'}
                                                        <div>
                                                                <div class=" self-center text-xs font-medium mb-1">
                                                                        {$i18n.t('Bocha Search API Key')}
                                                                </div>

                                                                <SensitiveInput
                                                                        placeholder={$i18n.t('Enter Bocha Search API Key')}
                                                                        bind:value={webConfig.search.bocha_search_api_key}
                                                                />
                                                        </div>

在将上述代码进行修改以后,进行前端系统的搭建

进入主目录后执行下列命令来前端系统的重建

npm run build

之后就可以执行start_window.bat来使用服务。

### Ollama DeepSeek在Ubuntu上的离线安装与配置 对于希望在未连接互联网的环境中部署Ollama DeepSeek的情况,在Ubuntu系统中执行此操作涉及几个重要步骤,包括准备必要的文件、传输这些文件到目标机器以及最终完成软件的设置。 #### 准备阶段 为了实现离线环境中的顺利部署,首先需在一个联网设备上获取所需资源。这通常意味着要提前下载所需的Docker镜像并将其转换成可移植格式以便于后续处理。具体命令如下所示: ```bash docker pull ghcr.io/open-webui/open-webui:ollama docker save -o openwebui_ollama.tar ghcr.io/open-webui/open-webui:ollama[^1] ``` 上述指令会从指定仓库拉取`open-webui:ollama`版本的镜像,并保存为名为`openwebui_ollama.tar`的压缩包形式,方便之后导入至无网络连接的目标主机内使用。 #### 部署前准备 确保目标Ubuntu服务器已预先安装好Docker引擎及其CLI工具集。如果尚未安装,则可以通过官方文档指导在线环境下的一次性准备工作;而对于完全隔离状态下的计算机来说,则可能需要通过其他途径(比如USB驱动器)来转移预编译好的二进制文件或.deb包来进行本地化安装。 #### 导入镜像 一旦所有前提条件都满足完毕,就可以着手将之前创建好的`.tar`档案恢复成为实际可用的状态了。为此只需简单运行下面这条语句即可达成目的: ```bash docker load -i /path/to/openwebui_ollama.tar ``` 这里假设用户已经把刚才提到的那个归档放置到了适当的位置,并替换了路径参数以匹配实际情况。 #### 启动容器服务 最后一步就是启动基于所加载镜像实例化的容器单元。考虑到不同应用场景下可能存在个性化需求差异较大这一事实,建议先阅项目主页了解更详细的定制选项说明后再做决定。不过一般情况下默认配置就足以应付大多数常规用途了: ```bash docker run --name ollama-deepseek -d -p 7860:7860 ghcr.io/open-webui/open-webui:ollama ``` 以上命令将会以后台守护进程的方式激活一个监听端口7860的服务节点供外部访问调用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值