deep-searcher: 打造定制化深度搜索工具

前戏 今天我们用 DeepSearcher 体验下 Deep Research 的强大功能。 🌟 Deep-Searcher https://github.com/zilliztech/deep-searcher.git DeepSearcher 是一个开源的深度搜索工具, 旨在通过结合强大的语言模型(如 OpenAI、DeepSeek 等)和向量数据库, 在私有数据上进行高效搜索、评估和推理, 提供高精度的答案和综合报告。 🚀 功能特点 🔍 私有数据搜索:最大化利用企业内部数据, 同时确保数据安全。必要时可整合在线内容以提供更准确的答案。 📊 向量数据库管理:支持 Milvus 等向量数据库, 允许数据分区以提高检索效率。 🎨 灵活的嵌入选项:兼容多种嵌入模型, 可选择最优方案。 🌐 多语言模型支持:支持多种大型语言模型(LLM), 如 DeepSeek、OpenAI、Anthropic Claude、Google Gemini 等。 📄 文档加载器:支持本地文件加载(如 PDF、TXT 等), 并正在开发网页爬取功能。 🔗 RESTful API 接口:提供 API 接口, 方便与其他系统集成。 架构设计和代码结构 架构图如下: 代码结构分析: 📖 快速开始 准备 下载代码, 创建 Python 虚拟环境(推荐 Python 版本 >= 3.10) : git clone https://github.com/zilliztech/deep-searcher.git cd deep-searcher python3 -m venv .venv source .venv/bin/activate pip install -e . 快速使用 部署 filecrawl [可选] https://github.com/mendableai/firecrawl ...

二月 27, 2025 · 3 分钟 · 464 字 · zhu733756

从 RAG 到 Deep Research: 大模型又出大招?

前戏 随着人工智能技术的飞速发展, 大语言模型(LLM)逐渐成为研究和应用的热点。从最初的检索增强生成(RAG)技术到如今的深度研究(Deep Research), LLM 技术经历了多次重要的迭代与演进。本文将带您一探究竟, 回顾这一技术的发展历程。 RAG 技术的兴起与发展 RAG 的起源与原理 检索增强生成(Retrieval-Augmented Generation, RAG)技术最早于 2021 年被提出。 RAG 的核心思想, 是通过检索外部知识库中的相关信息, 增强语言模型的生成能力。RAG 技术的出现, 为 LLM 的发展奠定了重要的基础, 一定程度上解决了大模型由于私域知识不足, 往往胡编乱造的现象。 RAG 的范式演变 最初, RAG 主要被用于 LLM 的预训练阶段, 随后逐渐扩展到微调与推理任务。 2024 年, RAG 技术出现了多种新的范式: Naive RAG: 最基础的检索增强生成方法, 直接将检索到的信息与模型输入结合。 Advanced RAG: 引入更复杂的检索策略和生成机制, 提升模型性能。 Modular RAG: 将 RAG 系统模块化, 使其更灵活地适应不同任务。 Graph RAG: 融合知识图谱, 进一步增强模型对知识的结构化理解和推理能力。 Agentic RAG: 作为最新的范式, Agentic RAG 通过集成自主 AI 代理, 实现了动态管理检索策略、迭代细化上下文理解, 并适应性地调整工作流程。 LLM 技术的快速迭代 模型架构的创新 随着 RAG 技术的不断发展, LLM 本身也在架构上进行了多次创新。例如, DeepSeek-V3 采用了基于 MoE(Mixture of Experts)架构的设计, 总参数量达到 671B。这种架构通过激活部分参数, 既提升了模型性能, 又降低了计算成本。此外, DeepSeek-V3 还引入了无辅助损失的负载均衡策略和多 token 预测训练目标, 进一步优化了模型的训练效率。 ...

二月 24, 2025 · 2 分钟 · 294 字 · zhu733756

smolagents+ollama: 打造高度定制化可联网的私域agent

前戏 今天我们聊聊使用 smolagents + ollama 打造本地私域可联网 agent 🌟 项目简介 https://github.com/huggingface/smolagents smolagents 是一个轻量级库, 用于构建强大的代理(agents)。它允许用户通过几行代码运行功能强大的代理,支持多种语言模型(LLM)和工具。代理可以通过编写 Python 代码来调用工具并协调其他代理,非常适合快速开发和部署智能代理系统。 🚀 功能特点 极简设计:代理的核心逻辑仅约 1000 行代码,保持最小化的抽象层。 支持代码代理 CodeAgent :通过代码执行动作,支持在沙盒环境中运行以确保安全性 集成 Hugging Face Hub:支持从 Hub 共享和拉取工具。 模型无关性:支持任何 LLM。 多模态支持:支持文本、视觉、视频甚至音频输入。 工具无关性:支持 LangChain、Anthropic 的 MCP 等工具,甚至可以将 Hub Space 作为工具使用。 🛠️ 部署使用指南 📦 安装 通过 pip 安装 smolagents: pip install smolagents 友情提示: 本地的 python 版本要求>=3.10 你可以参考这个方式进行升级: sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.10 python3.10 --version # Python 3.10 默认可能不带 pip,需要手动安装: sudo apt install python3.10-distutils curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3.10 get-pip.py # 配置python3.10 为python3默认版本 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 sudo update-alternatives --config python3 🌐 支持的模型和工具 HfApiModel:支持 Hugging Face Hub 上的模型。 LiteLLMModel:通过 LiteLLM 集成访问 100+ LLM。 OpenAIServerModel:支持 OpenAI 兼容的服务器。 TransformersModel:支持本地 transformers 模型。 AzureOpenAIServerModel:支持 Azure 上的 OpenAI 模型。 📟 CLI 工具 smolagents 提供了两个 CLI 命令:smolagent 和 webagent。 ...

二月 19, 2025 · 4 分钟 · 748 字 · zhu733756

离线大模型联网的N个插件尝试

前戏 今天我们一起看下几个大模型联网插件, 让你的离线大模型打通实时联网能力任督二脉。 架构介绍 一个典型的 RAG 流程图如下: 在这个流程中有一个联网查询过程, 插件通过调用实时爬虫将搜索到的文档丢给大模型, 然后总结输出回答。 离线大模型部署 https://ollama.com/ 联网插件哪家强? Page Assist Page Assist 是一款专为开发者设计的开源浏览器扩展工具,旨在通过简单的配置和操作,让用户直接调用本地或离线运行的大模型。它支持多种主流浏览器(如 Chrome、Edge、Firefox 等),并提供了丰富的插件功能,帮助用户实现跨网页交互、文档解析、搜索管理等功能。 本文使用 Edge 浏览器演示, 毕竟不用使用魔法就能安装。 安装以后, 我们在右上角的配置设置选择语言模式为中文, 然后配置本地的 ollama 地址: 接着配置联网插件, 这里我们使用百度。 问下大模型 page assist 是什么? Open WebUI https://github.com/open-webui/open-webui 功能特点 🎉 无缝安装:支持通过 Docker 或 Kubernetes(kubectl、kustomize 或 helm)进行安装,支持 :ollama 和 :cuda 标签的镜像。 🔗 Ollama/OpenAI API 集成:无缝集成 OpenAI 兼容 API,支持与 LMStudio、GroqCloud、Mistral、OpenRouter 等更多服务的连接。 🛡️ 细粒度权限与用户组:管理员可以创建详细的用户角色和权限,确保安全的用户环境。 📱 响应式设计:支持桌面、笔记本和移动设备。 📱 进阶 Web 应用(PWA):支持移动端的离线访问,提供类似原生应用的体验。 ...

二月 18, 2025 · 2 分钟 · 291 字 · zhu733756

OneAPI: 大模型接口管理和分发系统

前戏 今天我们聊聊大模型接口管理和分发系统 OneApi, 并使用 ollama 对接大模型 deepseek-r1:7b。 🌟 项目简介 https://github.com/songquanpeng/one-api One API 是一个开源的 OpenAI 接口管理和分发系统,支持多种大模型,包括 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元。该项目旨在通过标准的 OpenAI API 格式访问所有的大模型,开箱即用。 📚 架构设计 oneapi的架构图比较简单: 用户使用key访问oneapi的接口时,根据用户的身份和权限,调用对应的model模块进行模型调用。 🚀 功能特点 https://github.com/songquanpeng/one-api?tab=readme-ov-file#%E5%8A%9F%E8%83%BD 支持多种大模型, 这里不一一列举了。 支持令牌管理 支持配额和兑换码管理 支持额度和用户激励 支持用户管理, 支持飞书、github、微信授权登录 … 🛠️ 部署指南 基于 Docker 进行部署 官方推荐: # 使用 SQLite 的部署命令: $ docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api # 使用 MySQL 的部署命令: $ docker run --name one-api -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api 由于 latest 当前没有 arm64 架构的镜像, 本人使用正式版部署: ...

二月 13, 2025 · 2 分钟 · 354 字 · zhu733756

使用 Milvus 构建图片搜索引擎

前戏 在当今数字化时代,图片数据呈爆炸式增长,如何从海量图片中快速准确地找到相似图片成为了一个重要问题。Milvus 作为一个高性能的向量数据库,为解决这一问题提供了强大的支持。本文将详细介绍如何使用 Milvus 构建一个图片搜索引擎,让你能够轻松地在图片海洋中找到“知音”。 Milvus 简介 Milvus 是专为处理海量向量数据而设计的数据库,它构建在 Faiss、HNSW、DiskANN、SCANN 等流行的向量搜索库之上,能够高效地在包含数百万、数十亿甚至数万亿向量的数据集上进行相似性搜索。Milvus 支持数据分片、流式数据摄取、动态 Schema、结合向量和标量数据的搜索等多种高级功能,采用共享存储架构,计算节点具有存储和计算分解及横向扩展能力,非常适合用于构建图片搜索引擎。 图片搜索引擎架构 https://github.com/milvus-io/bootcamp/blob/master/applications/image/reverse_image_search/README.md 上面的例子使用 towhee 通过 ResNet50 提取图像特征,并使用 Milvus 构建了一个可以执行反向图像搜索的系统。 Towhee 由四大模块构成:算子、流水线、数据处理 API 和执行引擎。 算子是基础组件,可为神经网络模型、数据处理方法或 Python 函数。流水线由多个算子组成,形成有向无环图,实现复杂功能如特征提取等。数据处理 API 提供多种数据转换接口,用于构建数据处理管道,处理非结构化数据。执行引擎负责流水线实例化、任务调度、资源管理及性能优化,有轻量级本地引擎和高性能的 Nvidia Triton 引擎。 系统架构如下: 数据源 https://drive.google.com/file/d/1n_370-5Stk4t0uDV1QqvYkcvyV8rbw0O/view?usp=sharing 环境准备 安装 Milvus 你可以选择在本地安装 Milvus Lite,也可以在 Docker 或 Kubernetes 上部署高性能的 Milvus 服务器。可以参考这篇文章。 服务部署 https://github.com/milvus-io/bootcamp/blob/master/applications/image/reverse_image_search/docker-compose.yaml 这个 docker-compose.yaml 文件是一个用于部署Milvus 和相关组件的配置文件。主要包括: etcd minio milvus-standalone mysql webserver webclient 我们可以把它缩减成这样: mysql webserver webclient 详见: https://github.com/zhu733756/cloud-database-tools/blob/master/milvus/img-search/docker/docker-compose.yaml 需要修改这几个参数: environment: MILVUS_HOST: '172.18.0.4' MILVUS_PORT: '30774' MYSQL_HOST: '172.16.238.11' 配置 Milvus 这个 CR 为 NodePort: ...

一月 13, 2025 · 2 分钟 · 394 字 · zhu733756

快速尝鲜! k8s部署向量数据库milvus实用指南

前戏 过去两年 AI 大火, 向量数据库 milvus 赋能 RAG 向量搜索加速, 这玩意怎么在 k8s 上部署? milvus Milvus 构建在 Faiss、HNSW、DiskANN、SCANN 等流行的向量搜索库之上, 专为在包含数百万、数十亿甚至数万亿向量的密集向量数据集上进行相似性搜索而设计。 支持数据分片、流式数据摄取、动态Schema、结合向量和标量数据的搜索、多向量和混合搜索、稀疏向量和其他许多高级功能。 采用共享存储架构, 其计算节点具有存储和计算分解及横向扩展能力。 官方建议使用 Kubernetes 部署 Milvus。 创建集群 本文使用 kind 来部署 k8s 集群。 下载 kind 和 helm 此处省略细节, 具体可参考前文。 一行命令, 创建一个集群 准备配置文件: kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 31000 # 将主机 31000 端口映射到容器的 31000 端口 hostPort: 31000 listenAddress: '0.0.0.0' # Optional, defaults to "0.0.0.0" protocol: tcp # Optional, defaults to tcp - role: worker - role: worker - role: worker kubeadmConfigPatches: - | apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration metadata: name: config networking: serviceSubnet: 10.0.0.0/16 imageRepository: registry.aliyuncs.com/google_containers nodeRegistration: kubeletExtraArgs: pod-infra-container-image: registry.aliyuncs.com/google_containers/pause:3.1 - | apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration metadata: name: config networking: serviceSubnet: 10.0.0.0/16 imageRepository: registry.aliyuncs.com/google_containers 用以上配置文件, 执行集群创建命令, 可以得到一个 4 节点的集群: ...

一月 6, 2025 · 6 分钟 · 1206 字 · zhu733756

源码走读: fasthttp 为什么这么快?

前戏 今天我们聊聊 golang 的 web 框架, fasthttp 和 gin 到底谁更丝滑? fasthttp 简介 安装 go get -u github.com/valyala/fasthttp fasthttp 性能吊打 net/http 简而言之,fasthttp服务器的速度比net/http快多达 10 倍, 具体参数可以查看官网https://github.com/valyala/fasthttp fasthttp 使用方式与 net/http 有所差异 // using the given handler. func ListenAndServe(addr string, handler RequestHandler) error { s := &Server{ Handler: handler, } return s.ListenAndServe(addr) } type RequestHandler func(ctx *RequestCtx) 可以这样使用: type MyHandler struct { foobar string } // request handler in net/http style, i.e. method bound to MyHandler struct. func (h *MyHandler) HandleFastHTTP(ctx *fasthttp.RequestCtx) { // notice that we may access MyHandler properties here - see h.foobar. fmt.Fprintf(ctx, "Hello, world! Requested path is %q. Foobar is %q", ctx.Path(), h.foobar) } // pass bound struct method to fasthttp myHandler := &MyHandler{ foobar: "foobar", } fasthttp.ListenAndServe(":8080", myHandler.HandleFastHTTP) 在多个handler的时候需要这样使用: ...

十二月 27, 2024 · 5 分钟 · 1000 字 · zhu733756

Ollama离线部署大模型: Qwen下载与ModelFile命令速成手册!

前戏 今天我们聊聊大模型离线部署,用Ollama怎么部署Qwen模型。 Ollama Ollama是一个开源的 AI 模型服务, 旨在简化大型语言模型本地部署和运行过程的工具, 允许用户在无需 Internet 连接的情况下使用本地模型。 简化部署 一行命令跑起大模型: ollama run llama3.2 当然, 运行前先保证ollama serve已经启动。环境变量配置 OLLAMA_HOST设置后端的地址。 简明的命令行风格 ollama --help Large language model runner Usage: ollama [flags] ollama [command] Available Commands: serve Start ollama create Create a model from a Modelfile show Show information for a model run Run a model stop Stop a running model pull Pull a model from a registry push Push a model to a registry list List models ps List running models cp Copy a model rm Remove a model help Help about any command Flags: -h, --help help for ollama -v, --version Show version information Use "ollama [command] --help" for more information about a command. 模型导入与定制 ModelFile 这是一个类似DockeFile的哲学设计,通过ModelFile可以快速构建一个模型镜像,然后通过ollama run 命令直接跑起一个模型: ...

十二月 25, 2024 · 4 分钟 · 749 字 · zhu733756

segmentio/kafka-go: 如何实现Kafka读写的极致性能与精准一次处理

前戏 小白: 老花, 我想学习下golang如何批量写入和消费 kafka? 老花: 可以的, 我这里要推荐一个golang的kafka库, github.com/segmentio/kafka-go, 在此之前, 我们先来一波八股文。 kafka 分区架构(八股文) 分区 分区(Partition)是 Kafka 中最基本的数据存储单元。每个主题(Topic)可以有多个分区, 每个分区都是一个有序的、不可变的消息序列。分区的设计使得 Kafka 能够实现数据的并行处理和负载均衡。 并行处理: 通过分区, Kafka 允许多个消费者并行处理不同分区的数据, 从而提高系统的处理能力。 数据本地性: 每个分区可以分布在不同的 Broker 上, 这样可以充分利用集群的存储能力, 并实现数据的分布式存储。 顺序保证: 在单个分区内, 消息是有序的, 这有助于确保一些需要顺序处理的场景, 如日志记录。 生产者与消费者操作分区 生产者发送消息到指定 Partition: 生产者可以根据需要将消息发送到特定的分区, 这可以通过指定消息的分区键来实现。 消费者订阅指定 Partition: 消费者可以选择订阅特定的分区, 也可以订阅整个 Topic, 以实现对特定数据流的处理。 负载均衡 Kafka 的生产者在将消息发送到分区时, 使用分区键的哈希函数来决定消息应该被分配到哪个分区, 这有助于实现负载均衡。 幂等性 enable.idempotence 被设置成 true 后, Producer 自动升级成幂等性, 在底层设计架构中引入了 ProducerID 和 SequenceNumber, 自动帮你做消息的重复去重。 事务 事务要求消息一起成功发送, 要么一起失败。简单来说,就像是个打包操作,把消息 Record1 和 Record2 看作一个整体,要么一起成功,要么一起失败。 ...

十二月 23, 2024 · 7 分钟 · 1464 字 · zhu733756