手撸一个 deepseek 本地联网版且私有化部署(ollama + deepseek + langchain + searxXNG + flask)

这才是AI最强联网解决方案!手把手教你从聚合搜索到网页读取和超长上下文处理! 聚合搜索API、网页读、AI润色链接详解,打造最强联网搜索AI 阅读详情
AI摘要

本文介绍了搭建全部本地私有化的 deepseek 联网版的方法。先准备 ollama、deepseek 模型、searxXNG、langchain、flask 等环境,接着介绍 ollama 及 deepseek、searxXNG 的部署安装,还说明了开发环境准备,最后阐述开发联网版 deepseek 的思路及完整代码。

前言

之前写过一篇 openwebui 和博查结合的 deepseek 联网教程,但是考虑到灵活性、安全性和成本问题,还是决定自己搭一个全部本地私有化的,用 langchain 框架进行开发,通篇代码都在教程里,不夹私货~

一、准备环境

  1. ollama,用于在本地运行、部署和管理大型语言模型(LLMs)。
  2. deepseek 模型,本文用的 deepseek-r1:14b。
  3. searxXNG,免费的互联网搜索引擎,用户既不被跟踪也不被分析。
  4. langchain,大语言模型应用程序的开发框架,主要 python 实现。
  5. flask,python编写的web应用框架,本文主要用来对外提供api。

二、ollama 及 deepseek 部署安装

之前写过类似教程,这里就不在写了,传送门:

保姆级教程 本地部署 deepseek + ollama + open-webui + cuda + cudnn

ollama导出导入模型 解决下载模型慢问题 deepseek + ollama + Cherry Studio 客户端(离线部署)

三、searxXNG 部署安装

  1. 基于 docker 安装,先去下载需要的配置文件,地址:https://github.com/searxng/searxng-docker
  2. 下载完,进到根目录,修改以下内容:

① 修改 docker-compose.yaml 的端口,开放外网访问(公网服务器还是要限制下,白名单或者代理之类的):

在这里插入图片描述
② 修改 Caddyfile 文件的默认 80 和 443 端口,Caddy除了应用的端口外,默认还会监听 80 和 443,为了防止和别的软件冲突,这里还是修改下:
在这里插入图片描述
③ 应用端口可以看自己情况调整,保持和 docker-compose 里面的一致:
在这里插入图片描述
④ 修改 searxng 目录下的 settings.yml 的内容

  • secret_key 随便改一个
  • limiter 改为 false,否定通过 api 会访问不了
  • 添加 json 格式,方面 api 调用
# see https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true
server:
  # base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml
  secret_key: "admin@123456"  # change this!
  limiter: false  # can be disabled for a private instance
  image_proxy: true

search:  
  formats:
  - html
  - json

ui:
  static_use_hash: true
redis:
  url: redis://redis:6379/0

⑤ 构建并启动镜像,执行命令:

docker-compose up -d

访问localhost:8080,如下:
在这里插入图片描述

在网页上要想正常使用,还需在配置下,点击右上角首选项:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

搜索引擎好多国外的,国内用不了,所以只要勾选国内能用的,如下:

在这里插入图片描述
在这里插入图片描述

配置完之后点保存就可以正常使用了

在这里插入图片描述
在这里插入图片描述

三、开发环境准备

本文使用的 conda 管理 python 环境,创建一个 langchain 的虚拟机环境

conda create -n langchain python=3.11

使用 langchain 虚拟环境

conda activate langchain

切换pip镜像源

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple

本文用的到依赖都在存在 requirements.txt 里面,如下:

aiohappyeyeballs==2.4.6
aiohttp==3.11.12
aiosignal==1.3.2
annotated-types==0.7.0
anyio==4.8.0
attrs==25.1.0
beautifulsoup4==4.13.3
blinker==1.9.0
certifi==2025.1.31
charset-normalizer==3.4.1
click==8.1.8
colorama==0.4.6
dataclasses-json==0.6.7
faiss==1.9.0
Flask==3.1.0
frozenlist==1.5.0
greenlet==3.1.1
h11==0.14.0
html2text==2024.2.26
httpcore==1.0.7
httpx==0.28.1
httpx-sse==0.4.0
idna==3.10
itsdangerous==2.2.0
Jinja2==3.1.6
jsonpatch==1.33
jsonpointer==3.0.0
langchain==0.3.20
langchain-community==0.3.19
langchain-core==0.3.41
langchain-experimental==0.3.4
langchain-ollama==0.2.3
langchain-text-splitters==0.3.6
langsmith==0.3.8
MarkupSafe==3.0.2
marshmallow==3.26.1
mkl-service==2.4.0
multidict==6.1.0
mypy-extensions==1.0.0
ollama==0.4.7
orjson==3.10.15
propcache==0.2.1
pydantic==2.10.6
pydantic-settings==2.8.1
pydantic_core==2.27.2
pypdf==5.3.1
python-dotenv==1.0.1
PyYAML==6.0.2
requests==2.32.3
requests-toolbelt==1.0.0
sniffio==1.3.1
soupsieve==2.6
SQLAlchemy==2.0.38
tenacity==9.0.0
tqdm==4.67.1
typing-inspect==0.9.0
typing_extensions==4.12.2
urllib3==2.3.0
Werkzeug==3.1.3
yarl==1.18.3
zstandard==0.23.0

大家新建一个 requirements.txt 文件,把依赖复制进去,然后下载里面的依赖:

pip install -r requirements.txt

反过来,基于项目生成 requirements.txt 文件:

pip freeze >requirements.txt

faiss 依赖可能下载不下来,执行以下命令:

  • CPU版本
conda install -c pytorch faiss-cpu
  • GPU 版本:
conda install -c pytorch faiss-gpu

四、开发联网版 deepseek

基础思路如下:

  1. 将用户的信息发送给 searxXNG 进行检索。
  2. searxXNG 返回的内容包含很多链接,逐个去请求获取网页内容。
  3. 对每个网页的内容进行提取,去掉 html 标签之类的 。
  4. 把所有网页内容进行分块加载到 faiss 向量库,并进行检索返回 TOP5 的内容。
  5. 将返回的内容结合题词给大模型推理,并返回结果。
  6. 把结果通过flask返回,并实现打字机效果即流式输出。

① searxXNG 搜索,由于 langchain 自带的 SearxSearchWrapper 模块调用有点问题,返回不出结果,这里改用 request 请求:

def searx_search(keywords):
    headers = {
        "Cookie": "categories=general; language=zh-CN; method=GET; search_on_category_select=1; disabled_engines=wikipedia__general\054currency__general\054wikidata__general\054duckduckgo__general\054google__general\054lingva__general\054qwant__general\054startpage__general\054dictzone__general\054mymemory translated__general\054brave__general; enabled_engines=360search__general\054baidu__general\054bing__general\054sogou__general;",
    }
    url = "http://127.0.0.1:8080/search"
    params = {
        "q": keywords,
        "category_general": "1",
        "language": "zh-CN",
        "format": "json",

    }
    response = requests.get(url, headers=headers, params=params, verify=False)
    print(response.text)
    return response.text

② 加载每个网页内容,使用 langchain 的 AsyncHtmlLoader 模块:

loader = AsyncHtmlLoader(urls, ignore_load_errors=True, requests_kwargs={"timeout": 5})
docs = loader.load()

③ 清洗内容,使用的 langchain 的 Html2TextTransformer 模块:

html2text = Html2TextTransformer()
docs = html2text.transform_documents(docs)

④ 对所有内容进行分块并加载到向量库进行检索,这里用的 ollama 部署的 quentinz/bge-large-zh-v1.5 向量模型:

separators = ["\n\n", "\n", "。", "!", "?", " ", ""]
text_splitter = RecursiveCharacterTextSplitter(
   separators=[s.pattern if isinstance(s, re.Pattern) else s for s in separators],
   chunk_size=500,
   chunk_overlap=100)
docs = text_splitter.split_documents(docs)
retriever = get_retriever(docs)
def get_retriever(documents: List[Document]):
    # 1. 初始化嵌入模型
    embeddings = OllamaEmbeddings(
        model=("quentinz/bge-large-zh-v1.5")
    )

    # 2. 自动构建FAISS向量库
    vector_store = FAISS.from_documents(
        documents=documents,
        embedding=embeddings
    )

    # 3. 返回检索器(支持相似度搜索和MMR筛选)
    return vector_store.as_retriever(search_kwargs={"k": 5})

⑤ 将内容给大模型进行推理:

def get_chat_llm() -> OllamaLLM:
    chat_llm = OllamaLLM(
        model="deepseek-r1:14b"
    )
    return chat_llm
def get_answer_prompt() -> ChatPromptTemplate:
    system_prompt = """
# 角色
你是一个精心打造的 AI 搜索助手,能够在网络世界中精准搜索,并以中立客观、新闻式的专业语气为用户答疑解惑。
## 技能
### 技能 1: 精准回应用户问题
1. 当用户提出问题时,首先以一个单独的段落简短直接地回答核心问题,随后通过若干独立的段落详细分析问题的各个方面和细节,确保答案完整且逻辑清晰。
2. 提供的答案应具备中等到较长的篇幅,信息量满满且紧密关联,但切勿重复用户问题。
3. 结构化地拆解内容,明确表达内部的分类及逻辑关系,并以 markdown 格式提供详尽内容。

### 技能 2:不要盲目的重复上下文,提供扩展的见解和解释
1. 对上下文信息进行分析、综合和评价,提供更深入的见解和解释。
2. 融入你的专业知识和经验,以提供更加丰富和有深度的答案。
3. 始终保持对用户问题的敏感度和对信息准确性的追求。

## 限制
1. 必须基于上下文信息来回答问题并引用相关内容,然而无需在回应中提及上下文。
2. 只有在必要的时候,才使用无序列表、有序列表等格式。
3. 只有在必要的时候,才通过独立段落详细分析问题、总结关键点和主要信息。

以下是上下文:
{context}
    """
    return ChatPromptTemplate([
        ("system", system_prompt),
        ("human", "{input}")
    ])
llm = get_chat_llm()
qa_chain = create_stuff_documents_chain(llm, get_answer_prompt())
rag_chain = create_retrieval_chain(retriever, qa_chain)
stream = rag_chain.stream({
    "input": query
})

⑥ 将内容流式返回给前端:

@app.route('/stream', methods=['POST'])
def stream_output():
    query = request.json.get("query")
    def generate():
        stream = start_chat_internet(query)
        for chunk in stream:
            if "answer" in chunk:
                yield "data: " + json.dumps({"answer": chunk['answer']}) + "\n"
            elif "context" in chunk:
                metadata = []
                for context in chunk["context"]:
                    metadata.append(context.metadata)
                yield "data: " + json.dumps({"quote": metadata}) + "\n"
    return Response(generate())

最终实现效果如下:
在这里插入图片描述

五、完整代码

import json
import re
from typing import List

from langchain_core.runnables import AddableDict
from langchain_ollama import OllamaLLM, OllamaEmbeddings
from requests.exceptions import RequestException
from langchain_community.document_loaders import AsyncHtmlLoader
from langchain_community.document_transformers.html2text import Html2TextTransformer
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.prompts.chat import ChatPromptTemplate
from langchain_community.vectorstores import FAISS
from langchain_core.documents import Document
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains.retrieval import create_retrieval_chain
import os
import sys
import requests
from flask import Flask, Response, request
import json

sys.path.append(os.path.abspath(os.pardir))

# 解决 Intel OpenMP 库(如 MKL、TBB)的运行时冲突
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
# 设置Ollama的主机和端口(可选,如果已在环境变量中设置则不需要)
os.environ["OLLAMA_HOST"] = "127.0.0.1"
os.environ["OLLAMA_PORT"] = "11434"

app = Flask(__name__)

# 基于request请求searx
def searx_search(keywords):
    headers = {
        "Cookie": "categories=general; language=zh-CN; method=GET; search_on_category_select=1; disabled_engines=wikipedia__general\054currency__general\054wikidata__general\054duckduckgo__general\054google__general\054lingva__general\054qwant__general\054startpage__general\054dictzone__general\054mymemory translated__general\054brave__general; enabled_engines=360search__general\054baidu__general\054bing__general\054sogou__general;",
    }
    url = "http://127.0.0.1:8080/search"
    params = {
        "q": keywords,
        "category_general": "1",
        "language": "zh-CN",
        "format": "json",

    }
    response = requests.get(url, headers=headers, params=params, verify=False)
    print(response.text)
    return response.text


# 检查url是否可访问
def check_url_access(urls: List[str]) -> List[str]:
    urls_can_access = []
    for url in urls:
        try:
            req_res = requests.get(url)
            if req_res is not None and req_res.ok:
                urls_can_access.append(url)
        except RequestException as e:
            continue
    return urls_can_access


# 初始化ollama
def get_chat_llm() -> OllamaLLM:
    chat_llm = OllamaLLM(
        model="deepseek-r1:14b"
    )
    return chat_llm


# 设置提示词,引导模型输出
def get_answer_prompt() -> ChatPromptTemplate:
    system_prompt = """
# 角色
你是一个精心打造的 AI 搜索助手,能够在网络世界中精准搜索,并以中立客观、新闻式的专业语气为用户答疑解惑。
## 技能
### 技能 1: 精准回应用户问题
1. 当用户提出问题时,首先以一个单独的段落简短直接地回答核心问题,随后通过若干独立的段落详细分析问题的各个方面和细节,确保答案完整且逻辑清晰。
2. 提供的答案应具备中等到较长的篇幅,信息量满满且紧密关联,但切勿重复用户问题。
3. 结构化地拆解内容,明确表达内部的分类及逻辑关系,并以 markdown 格式提供详尽内容。

### 技能 2:不要盲目的重复上下文,提供扩展的见解和解释
1. 对上下文信息进行分析、综合和评价,提供更深入的见解和解释。
2. 融入你的专业知识和经验,以提供更加丰富和有深度的答案。
3. 始终保持对用户问题的敏感度和对信息准确性的追求。

## 限制
1. 必须基于上下文信息来回答问题并引用相关内容,然而无需在回应中提及上下文。
2. 只有在必要的时候,才使用无序列表、有序列表等格式。
3. 只有在必要的时候,才通过独立段落详细分析问题、总结关键点和主要信息。

以下是上下文:
{context}
    """
    return ChatPromptTemplate([
        ("system", system_prompt),
        ("human", "{input}")
    ])


# 向量检索
def get_retriever(documents: List[Document]):
    # 1. 初始化嵌入模型
    embeddings = OllamaEmbeddings(
        model=("quentinz/bge-large-zh-v1.5")
    )

    # 2. 自动构建FAISS向量库
    vector_store = FAISS.from_documents(
        documents=documents,
        embedding=embeddings  # 自动处理索引和存储
    )

    # 3. 返回检索器(支持相似度搜索和MMR筛选)
    return vector_store.as_retriever(search_kwargs={"k": 5})


# 主流程
def start_chat_internet(query):
    # searx搜索
    results_json = searx_search(query)
    results_obj = json.loads(results_json)
    results = results_obj["results"]

    urls_to_look = []
    for result in results:
        urls_to_look.append(result["url"])

    # 检查url
    urls = check_url_access(urls_to_look)
    print(f"urls: {urls}")

    # 加载网页
    loader = AsyncHtmlLoader(urls, ignore_load_errors=True, requests_kwargs={"timeout": 5})
    docs = loader.load()

    # 清洗内容
    html2text = Html2TextTransformer()
    docs = html2text.transform_documents(docs)

    # 文本分块
    separators = ["\n\n", "\n", "。", "!", "?", " ", ""]
    text_splitter = RecursiveCharacterTextSplitter(
        separators=[s.pattern if isinstance(s, re.Pattern) else s for s in separators],
        chunk_size=500,
        chunk_overlap=100)
    docs = text_splitter.split_documents(docs)

    # 检索增强
    retriever = get_retriever(docs)

    # 模型推理
    llm = get_chat_llm()
    qa_chain = create_stuff_documents_chain(llm, get_answer_prompt())
    rag_chain = create_retrieval_chain(retriever, qa_chain)
    return rag_chain


# 流式输出
def start_chat_internet_stream(query):
    rag_chain = start_chat_internet(query)
    stream = rag_chain.stream({
        "input": query
    })
    return stream

# 完整输出
def start_chat_internet_invoke(query):
    rag_chain = start_chat_internet(query)
    invoke = rag_chain.invoke({
        "input": query
    })
    return invoke


@app.route('/stream', methods=['POST'])
def stream_output():
    query = request.json.get("query")
    def generate():
        stream = start_chat_internet_stream(query)
        for chunk in stream:
            if "answer" in chunk:
                yield "data: " + json.dumps({"answer": chunk['answer']}) + "\n"
            elif "context" in chunk:
                metadata = []
                for context in chunk["context"]:
                    metadata.append(context.metadata)
                yield "data: " + json.dumps({"quote": metadata}) + "\n"
    return Response(generate())


def test_stream():
    # 流式输出
    stream = start_chat_internet_stream("deepseek-r1什么时候发布的")
    for chunk in stream:
        if "answer" in chunk:
            print(chunk['answer'])
        elif "context" in chunk:
            metadata = []
            for context in chunk["context"]:
                metadata.append(context.metadata)
            print(json.dumps(metadata))

def test_invoke():
    # 完整输出
    invoke = start_chat_internet_invoke("deepseek-r1什么时候发布的")
    print(invoke["answer"])


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7862)
    # test_stream()
    # test_invoke()


测试接口代码:

import requests
import json

url = 'http://127.0.0.1:7862/chat'

input_query = {
    "query": "deepseek-r1什么时候发布的"
}

response = requests.post(url, json=input_query, stream=True)


if response.status_code == 200:
    for line in response.iter_lines():
        if line:
            print(json.loads(line.decode('utf-8').split('data: ')[1]))
else:
    print(f"Error: {response.status_code} - {response.text}")

大家可以根据每个环节的参数和代码进行优化。

使用Docker部署SearXNG SearXNG 是一个整合了超过70个搜索服务结果的免费的私有互联网搜索引擎,用户不会被网站跟踪或被建立档案进行特征分析,良好地保障了用户的隐私。知识库可以有效地弥补大模型的知识欠缺问题,但依旧无法补充或弥补知识库和大模型知识陈旧的问题,于是让大模型联网成为了非常重要的功能。本章将介绍如何使用 Docker Compose 部署属于私人的 SearXNG 服务,。 阅读详情

相关推荐

Kali Linux实战:5分钟复现永恒之蓝漏洞攻击(附Win7靶机配置指南)

本文提供了一份详细的Kali Linux实战指南,指导读者在5分钟内于隔离的虚拟环境中复现经典的永恒之蓝漏洞攻击。内容涵盖从Windows 7靶机配置、网络设置,到使用Nmap进行服务发现、利用Metasploit框架进行漏洞扫描与利用的全过程,并演示了基础的Meterpreter后渗透操作,旨在帮助网络安全学习者通过亲手实践深入理解SMB协议漏洞的攻防原理。

weixin_29313547的博客 198

SearXNG docker部署+Nginx鉴权SearchXNG的API(宝塔面板)

SearXNG是一款开源的元搜索引擎,可聚合240+主流引擎结果,提供无追踪的搜索体验。本文详细介绍了如何在宝塔面板中部署SearXNG:首先克隆searxng-docker仓库,然后修改settings.yml配置文件(包括启用Bing引擎、设置密钥等),调整docker-compose.yaml的端口映射,最后通过docker compose启动服务。部署完成后可通过公网IP访问Web界面。文章还对比了SearXNG与其他搜索引擎在开源性、隐私保护、自托管等方面的优势,特别适合需要数据自主控制的用户集成

小名同学 8万+

人工势场法在自动驾驶避障中的实践与优化

本文深入探讨了人工势场法在自动驾驶避障中的核心原理与实践优化。通过解析引力与斥力模型,揭示了经典算法在局部最优和目标不可达等问题上的局限性,并重点介绍了改进斥力场函数、引入道路边界斥力及动态参数调整等关键优化策略,有效提升了该局部路径规划算法在复杂动态场景下的实用性与鲁棒性。

weixin_29208327的博客 927

全民上手大模型ollama+langchain+deepseek本机跑通大模型

基于这些因素,导致大模型的事情总是少数人在玩,国人也是一肚子气,我们国产的大模型deepseek已经达到了世界顶级的水准,作为一名技术从业者,写下这篇文章是让大家都有一份自己的大模型,将大模型的门槛彻底打穿!过年嘛,我试着让deepseek帮忙写一首诗,可以直接感受一下,其实是不是国产的,让大模型来诗词歌赋就好了,一下子就知道是不是俺们国产的了,而且并不是简单的帮你写,内容上也是很经验的。我下载模型具体如下,因为模型确实比较大,所以要的时间也是比较久哦, 如果失败,再次执行就行,可以断点续传的。

python1234_的博客 2221

CASIA数据集解析:图像篡改检测的黄金标准与实践指南

本文深入解析了CASIA数据集在图像篡改检测领域的核心价值与应用实践。作为中科院自动化所打造的黄金标准,CASIA数据集通过模拟真实篡改场景(如拼接和复制移动)为研究者提供全面支持。文章详细对比了v1.0与v2.0版本差异,分享数据预处理和模型训练的最佳实践,并探讨了未来研究方向,是图像篡改检测领域的重要参考指南。

kappa的博客 784

地震数据可视化必备:5分钟读懂SEGY道头字段全解析(含坐标定位指南)

本文深入解析了SEGY文件格式中道头坐标字段的提取与可视化方法。针对地震数据处理中的常见痛点,详细介绍了sx/sy、gx/gy等关键坐标字段的二进制解析、比例因子应用、单位转换及常见问题解决方案,并提供了实用的Python代码示例,帮助开发者实现从SEGY文件到三维空间可视化的完整流程。

echo99的专栏 1012

【MARK】搜索引擎汇总

小众搜索引擎及在线工具

```On Earth, Be Water, By Coding``` 1万+

【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part6基于图谱的问答实现

前序文章:本部分则是整个项目的核心内容——基于图谱的问答。需要实现的是对于“简单问题”进行解析,然后从图谱数据库中查询与该人员及其相关人员信息,返回到前端并显示该人员的基本信息。除此之外,用户可以点击返回的结果人员节点,页面能够显示该用户的个人基本信息。那么现在就开始吧。根据源码实现问答形式,其实是比较简单的。原代码中使用ltp对问题进行分词,选取具有名次词性的关键词进行处理。 ltp配置稍许麻烦,我使用jieba分词工具对问题进行分词,然后再按照原文提取问句中人物及关系,然后构建cypher neo4j查

让算法融入生活,改变生活! 2938

LangChain-ChatChat+Ollama+DeepSeek 构建RAG本地知识库

使用 LangChain-ChatChat+Ollama+DeepSeek 构建RAG本地知识库

bigwhitetao9527的博客 1万+

从苏宁电器到卡巴斯基(第二部)第01篇:我在卡巴的日子 I

聊聊行业薪酬 我相信不论是谁,如果是入职一家新的公司,那么他最想知道的一件事情就是待遇情况了。这里既包含每月实际能到手多少钱,又包括五险一金是否齐全以及是按照高标准还是低标准缴纳。另外,如果是入职IT公司,还会在意年终奖有多少,毕竟某些富裕的IT企业,每到年末就会以此制造新闻来博取大家的关注,以彰显自身的实力。 一言以蔽之,待遇问题也就是年收入究竟会有多少,也是我们进入职场的人喜欢相互打听的问题。比如我研究生那届最厉害的一位同学,签了A公司的算法岗位,年薪30W+(税前,下同),在当时的我看来就是天价了

Gleam的专栏 1226

H3C BGP联盟实验

bgp,bgp联盟,bgp公认团体属性,

一只懒羊羊 970

本地部署SearchXNG:移动设备上实现精准高效搜索的实践探索

在人工智能与移动计算深度融合的当下,用户对信息获取的即时性与准确性提出了更高要求。通过API调用付费模型获取搜索结果虽能满足基本需求,但存在响应延迟、隐私泄露及长期成本累积等痛点。本文将聚焦本地部署SearchXNG实例在iPhone设备上的应用实践,深入剖析其如何突破传统搜索模式的局限,为移动用户带来精准、简短且高效的信息检索体验。 ## 本地部署的核心优势:从云端依赖到终端自主 传统基于云

gitblog_00700的博客 540

RK3588网卡出现丢包或者带宽不足的问题验证排查

注意除了有最大的TCP数据接收缓冲,还有/proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲可以调整,这里暂时没用到,针对具体需要可适当调整。比如把ethx接口中断从默认的cpu0迁移到其它cpu,例如将eth0中断234移到cpu7 (10是16进制, cpu0 =3588的cpu有8个核,4个A55(小核)+4个A76(大核),可以找到对应中断 将中断从默认cpu0核切到cpu7。tcp_rmem:单位是字节,接收缓存区大小,缓存从对端接收的数据,后续会被应用程序读取。

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 2030

DeepSeek本地部署,可视化、无延迟、畅快使用

你的DeepSeek又提示服务器繁忙了吗?很多朋友已经发现DeepSeek的API服务能力远远没有跟上它的爆火程度,回答问题的响应速度明显比豆包、Kimi、智谱等国产大模型慢,时不时还会崩掉~~无论是个人体验还是企业业务,都需要一个低延迟响应大模型服务。此外,如果有数据隐私、定制化(微调、RAG、多模态)等需求时,本地部署就更加必要了。

m0_63171455的博客 1709

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

DeepSeek 本地部署后如何联网搜索,小白必看秘籍!

DeepSeek 本地部署后如何联网搜索,小白必看秘籍!

Y525698136的博客 5914

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用langchain ollama gradio搭建一个本地基于deepseek r1的RAG问答系统

使用langchain ollama gradio搭建一个本地基于deepseek r1的RAG问答系统

weixin_62428212的博客 3972

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

手把手带你用DeepSeek-R1和Ollama搭建本地应用,一文搞定!

本教程详细介绍了如何使用 DeepSeek R1 和 Ollama 构建本地化的 RAG 应用系统。文档处理:使用 PDFPlumberLoader 加载 PDF 文档,并通过 RecursiveCharacterTextSplitter 将文本切分成适当大小的块。向量存储:利用 Chroma 数据库和 Ollama 的嵌入模型建立向量存储系统,为后续的相似度检索提供基础。Chain 构建:设计并实现处理链,将文档处理、提示模板和模型响应整合成流程化的处理过程。RAG 实现。

python1234_的博客 5061

关于实习第一个任务就是部署SearXNG并且把集成搜狗微信这件事

详情点击下方链接。

qq_62784654的博客 5266

本地部署deepseek-Ollama+langchain+langserver

1.5B 是最小的模型,大小为1GB左右,7B,8B模型大小在8GB左右,想要调用模型的话根据自己电脑的配置选择(我个人下载体验了1.5B,8B模型),独立显卡3050 ti 4G显存 16G内存。它是免费的、私密的,并且支持在本地硬件上离线运行。从技术角度来看,它基于 Qwen 7B 架构,经过精简和优化,确保在保持强大性能的同时,提升了运行效率。DeepSeek 的最大亮点是,它能够与一些领先的商业AI模型相媲美,但作为开源项目,你可以在本地运行它,完全不依赖云服务器,从而更好地掌控你的数据。

wang987158的博客 996

LangChain + Ollama + DeepSeek 全链路认知:从模型包装器到提示词模版 Agent Demo

博文内容为LangChainOllamaDeepSeek本地部署 LLM 应用开发认知涉及LangChain架构,核心模块认知以及 模型包装器,提示词模版,Agent方式开发AI应用Demo理解不足小伙伴帮忙指正 😃,生活加油我看远山,远山悲悯持续分享技术干货,感兴趣小伙伴可以关注下。

山河已无恙 1642

TensorFlow相关组件的安装

TensorFlow相关组件的安装

AAI666666的博客 3935

【2025版】LangChain+RAG+Agent本地部署DeepSeek-R1商用级知识库,从零基础到精通,精通收藏这篇就够了!

使用 LangChain 封装的模型实例通过 get_model_instance_by_model_user_id、embed_query、invoke 以及 stream 等方法,实现 LLM 整体调用,无缝对接大语言模型推理服务。构造上下文和消息列表利用 HumanMessage、SystemMessage 等消息类型将系统提示、历史对话、用户输入等进行整合,作为调用 LLM 的输入。调用向量库进行语义检索。

Libra1313的博客 2572

前端 x AI:基于Ollama、DeepSeek、Chroma、LangChain搭建AI应用开发框架

Ollama 是一款开源框架,专注于在本地环境部署和运行 LLM。它通过简化模型管理流程和优化硬件资源利用,为开发者、企业及研究人员提供高效便捷的本地化 AI 解决方案‌。Ollama 内置多种模型支持,包括 Llama 2、Mistral、DeepSeek 等,用户可根据需求选择不同参数规模的模型(如 8B、70B 等)。DeepSeek R1 是一款利用思维链(CoT)来提高回复质量的推理模型。

ytt0523_com的博客 1254

如何使用 DeepSeek-R1、LangChain 和 Ollama 搭建隐私优先的 RAG 系统

赘述一下基本概念,检索增强生成(Retrieval-Augmented Generation,简称 RAG)是一种结合信息检索和生成式 AI 的技术架构。RAG 通过从外部知识库(如文档、数据库)中检索相关信息,并将其作为上下文输入给 LLM(大型语言模型),从而提高回答的准确性,减少幻觉问题。我们的目标是在本地运行一个 RAG 系统,能够处理 PDF 文档,保障数据隐私,并能高效回答与文档内容相关的问题。当然,通过修改代码,我们也可以实现处理其他类型的数据。PDF 文档上传。

2401_84208172的博客 2184

大模型不支持联网搜索?为Deepseek、Qwen、llama等本地模型添加网络搜索

当我们需要大模型进行联网搜索,但是大模型不支持怎么办?本文接下来是介绍第三种实现方案,利用SearXNG网络搜索结合大模型,实现联网问答。在开始之前,基础代码不再编写,在上一篇博文已经进行介绍过了。请先参考上一篇博文。

qq_35650513的博客 1万+

【AI实践】Windows上私有化部署可联网、可上传文件的DeepSeek-R1步骤全记录

Windows安装包下载链接:https://github.com/ollama/ollama/releases/download/v0.5.11/OllamaSetup.exe。打开Ollama模型库(https://ollama.com/library/),查看其它支持的模型。(2)博查开放平台(https://open.bochaai.com/)【国内,需充值,费用低】(1)Exa平台(https://exa.ai/)【国外可用平台,需充值,已测通】(3)开源searxng【免费、需自行部署】

趣谈AI栈 745
上一篇: 小白也懂的 deepseek 满血版之在哪用和使用技巧
下一篇: 手撸一个 deepseek 聊天历史对话、多轮对话(ollama + deepseek + langchain + flask)
AlanLai、
博客等级 码龄11年 255粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值