引言在当前AI快速发展的背景下,RAG(Retrieval-Augmented Generation)技术因其能够有效结合外部知识与大语言模型而备受关注。本文将深入探讨RAG系统中的关键组件——Embedding服务,从理论到实践,帮助读者全面理解和应用这一技术。
RAG技术概述工作原理RAG技术通过以下步骤提升生成模型的表现:
知识库构建:将文档分块并通过Embedding服务转换为向量表示
相似度检索:基于用户查询检索相关文档片段
上下文融合:将检索到的内容作为上下文提供给大语言模型
答案生成:模型基于上下文生成准确的回答
技术优势
提供可溯源的知识支持
降低模型幻觉概率
支持知识的实时更新
减少训练成本
Embedding服务详解核心技术原理Embedding是将文本转换为稠密向量的过程,主要包括:
文本预处理
分词和标准化
特殊字符处理
长文本切分
向量生成
模型前向计算
维度归一化
批处理优化
主流模型对比
模型名称
维度
特点
适用场景
OpenAI Ada
1536
通用性强
英文场景
BGE
768
中文效果好
中文场景
E5
1 ...
Model Context Protocol (MCP) 深度解析什么是MCP?Model Context Protocol (MCP) 是一个开放协议,它为应用程序如何向大语言模型(LLMs)提供上下文制定了标准。我们可以将MCP比作AI应用程序的USB-C端口 —— 就像USB-C为设备连接各种外设提供标准接口一样,MCP为AI模型连接不同的数据源和工具提供了标准化的方式。
为什么需要MCP?在构建AI应用时,我们经常需要让LLMs与各种数据源和工具进行集成。MCP提供了以下核心优势:
预构建集成:提供大量可直接使用的预构建集成组件
灵活切换:支持在不同LLM供应商之间自由切换
安全性保障:在基础设施中提供最佳的数据安全实践
MCP架构概述MCP采用客户端-服务器架构,允许主机应用程序连接到多个服务器。主要包含以下组件:
1. MCP主机(Hosts)
Claude Desktop
集成开发环境(IDE)
各类AI工具
2. MCP客户端(Clients)
维护与服务器的1:1连接
处理协议通信
3. MCP服务器(Servers)
轻量级程序
通过标准化协议暴露特定功能
...
概述在Java生态中,RestTemplate和OkHttp是两个广泛使用的HTTP客户端框架。本文将从多个维度对比这两个框架的特点,并提供实践建议。
基本介绍RestTemplateRestTemplate是Spring框架提供的同步HTTP客户端,它:
是Spring生态的标准HTTP客户端
提供了优雅的REST操作封装
支持多种HTTP客户端实现
集成Spring的各种特性
OkHttpOkHttp是Square公司开发的HTTP客户端,特点是:
高效的HTTP实现
支持HTTP/2
连接池复用
透明的GZIP压缩
响应缓存
功能对比1. 基本用法对比RestTemplate示例:
1234567891011121314151617181920212223242526272829@Configurationpublic class RestTemplateConfig { @Bean public RestTemplate restTemplate() { return new RestTemplate(); ...
DDD概述领域驱动设计(Domain-Driven Design, DDD)是一种软件开发方法论,它强调以领域模型为中心的设计思想。本文将结合SpringBoot框架,探讨DDD在实际项目中的应用。
DDD核心概念1. 战略设计
限界上下文(Bounded Context)
上下文映射(Context Mapping)
通用语言(Ubiquitous Language)
领域(Domain)与子域(Subdomain)
2. 战术设计
实体(Entity)
值对象(Value Object)
聚合(Aggregate)
领域服务(Domain Service)
领域事件(Domain Event)
仓储(Repository)
工厂(Factory)
项目结构示例123456789101112131415161718com.example.ddd├── application // 应用层│ ├── dto // 数据传输对象│ ├── assembler // DTO转换器│ └── service // ...
Java技术栈概述Java作为一门成熟的编程语言,以其”一次编写,到处运行”的特性闻名于世。这种跨平台特性主要归功于Java虚拟机(JVM)。本文将从以下几个方面深入探讨Java技术栈:
JVM架构与原理
内存管理与垃圾回收
性能调优方法
常用诊断工具
JVM架构与原理1. JVM内存结构JVM内存主要分为以下几个区域:
堆区(Heap)
新生代(Young Generation)
Eden区
Survivor区(S0/S1)
老年代(Old Generation)
方法区(Method Area)
程序计数器(Program Counter Register)
虚拟机栈(VM Stack)
本地方法栈(Native Method Stack)
2. 类加载机制类加载过程包括:
加载(Loading)
验证(Verification)
准备(Preparation)
解析(Resolution)
初始化(Initialization)
3. 垃圾回收机制垃圾回收算法
标记-清除(Mark-Sweep)
复制(Copying)
标记-整理(Mark-Comp ...
背景在将EMQX部署到EKS集群时,我们使用AWS Network Load Balancer(NLB)作为入口负载均衡器。为了优化性能,我们选择将SSL/TLS终止放在NLB层面而不是EMQX层面。这种架构可以减轻EMQX的计算负担,但也带来了一些意想不到的问题。
问题描述在实际运行中,我们发现连接到MQTT服务器的IoT设备的电池消耗比预期要高。经过排查,发现这与AWS NLB的TLS监听器的一个特性有关。
根据AWS官方文档,当TLS监听器从客户端或目标接收TCP keepalive包时,负载均衡器会生成TCP keepalive包,并每20秒将它们发送到前端和后端连接。这个行为是固定的,无法修改。
1客户端 <-- TCP Keepalive(每20秒) --> NLB <-- TCP Keepalive(每20秒) --> EMQX
影响分析1. 设备耗电增加对于IoT设备来说,频繁的网络通信会显著增加电池消耗。每20秒一次的keepalive通信意味着:
设备无法进入深度休眠状态
无线模块需要频繁唤醒
增加了不必要的数据传输
2. 网 ...
背景在日常开发中,我们经常需要处理分页查询的场景。比如从数据库分页查询数据,或者调用第三方API进行分页查询。这些分页查询的逻辑往往比较类似:
设定页码(pageIndex)和每页大小(pageSize)
循环查询直到没有更多数据
处理每一页的数据
为了避免重复编写这些模板代码,我设计了一个通用的分页工具类PaginationHelper。
核心实现PaginationHelper的核心是一个静态方法paginateAndProcess,它接收三个参数:
fetchPageFunction: 分页查询函数,传入页码和每页大小,返回分页结果
pageSize: 每页大小
processDataFunction: 处理每页数据的函数
代码实现如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546@Slf4jpublic class PaginationHelper { /** * 通用分页遍历方法 * * @param fe ...
背景在分发 Apple 快捷指令时,为了确保用户下载的快捷指令未被篡改,我们需要一个可靠的校验方案。本文将介绍如何基于 plist 文件实现快捷指令的完整性校验。
校验流程1. 解析 UUID首先需要从 iCloud 快捷指令分享链接中提取 UUID。这个 UUID 是快捷指令的唯一标识符。
2. 请求快捷指令记录通过 API 获取快捷指令的详细信息:https://www.icloud.com/shortcuts/api/records/${uuid}
API 返回的数据中包含了多个重要字段,其中最关键的是 fields.shortcut.value.downloadURL,这个 URL 指向快捷指令的 plist 源代码文件。
以下为响应示例:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667{ "modified": { ...
MQTT协议简介MQTT(Message Queuing Telemetry Transport)是一个基于发布/订阅模式的轻量级消息传输协议,特别适用于物联网(IoT)场景。它具有以下特点:
轻量级: 协议简单,报文小,占用资源少
可靠性: 支持QoS(Quality of Service)服务质量保证
实时性: 采用发布/订阅模式,消息实时推送
双向通信: 支持客户端和服务器之间的双向通信
安全性: 支持TLS/SSL加密和用户名密码认证
MQTT核心概念1. 发布/订阅模式MQTT采用发布/订阅模式进行消息传递:
Publisher(发布者): 负责发送消息
Subscriber(订阅者): 接收特定主题的消息
Broker(代理服务器): 负责消息的转发和分发
2. Topic(主题)Topic是消息的路由通道,采用层级结构:
123home/living_room/temperaturehome/living_room/humidityhome/bedroom/temperature
支持通配符:
+: 单层通配符 ...
手搓个软件
未读北京出入境可预约时间段查询12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788import requestsimport time# 预定义的区域列表regions = [ {"code": "110000", "node": "出入境管理总队"}, {"code": "110105", "node": "朝阳区"}, {"code": "110101", "node": "东城区"}, & ...