惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security @ Cisco Blogs
罗磊的独立博客
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
美团技术团队
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
博客园 - Franky
G
Google Developers Blog
Jina AI
Jina AI
Stack Overflow Blog
Stack Overflow Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Visual Studio Blog
腾讯CDC
S
SegmentFault 最新的问题
Recent Announcements
Recent Announcements
博客园 - 叶小钗
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网
L
LangChain Blog
Vercel News
Vercel News
Forbes - Security
Forbes - Security
PCI Perspectives
PCI Perspectives
N
News | PayPal Newsroom
S
Security Affairs
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
J
Java Code Geeks
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Hacker News: Ask HN
Hacker News: Ask HN
Schneier on Security
Schneier on Security
A
About on SuperTechFans
Attack and Defense Labs
Attack and Defense Labs
Google Online Security Blog
Google Online Security Blog
aimingoo的专栏
aimingoo的专栏
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
Cloudbric
Cloudbric
B
Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Proofpoint News Feed
D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News and Events Feed by Topic

博客园 - work hard work smart

SQLAlchemy 使用详解 Python 中使用 Elasticsearch 的完整指南 Qdrant 向量数据库使用指南 OpenEvals 快速入门:LLM 评估指南 DeepEval 快速入门:LLM 应用评估指南 LangSmith 批量评估完全指南 Qwen-Agent 入门指南:快速构建智能体应用 LangSmith 集成实战:从追踪到评估的完整指南 初识 go-zero:一款让你写后端更规范、更高效的 Go 微服务框架 RAG 中为什么需要 Rerank,以及如何使用 Rerank LangChain4j RAG 核心组件与组合方式 如何使用 Elasticsearch 进行全文检索和向量检索 MinerU Docker 部署指南 5 分钟上手:为 Cline 配置一个免费的 MCP 天气服务 Neo4j 图数据库安装与 Spring Boot 集成实战指南 LangFuse 实战指南:用 @observe 三行代码给 LLM 应用加上全链路追踪 Function Call 深度解析:让大模型从"嘴炮"到"实干"的技术革命 Spring AI 提示词模板实战:告别硬编码,实现提示词工程化管理 LangChain4j 实战指南:用 Java 轻松构建 AI 应用 Spring AI 对话短期记忆实战:让大模型拥有"记忆力" Spring AI 提示词工程实战:让大模型更懂你的意图 Spring AI ChatClient 深度解析:优雅构建大模型应用的利器 Spring AI Alibaba DashScopeChatModel 实战 Spring 中 SSE 流式输出的多种实现方式详解 OpenSandbox 实战指南:为 AI Agent 构建安全的代码执行沙箱 在本机启动 LangGraph 开发服务器:完整指南 DeepAgents中Backend的奥秘:让AI Agent拥有文件操作能力 为什么选择 Go 开发 Web 接口?从入门到实践 智能搜索DeepAgent笔记 RAG学习笔记2--系统查询流程 RAG学习笔记1--系统文件导入流程 百炼 WebSearch 快速入门指南 Python 连接 MongoDB 完整指南:从连接配置到增删改查实战 一行命令搞定 MongoDB 开发环境:Docker Compose 部署 + 可视化管理 使用 Attu 可视化管理 Milvus 向量数据库 在 Windows Docker 中快速安装 Milvus 2.5.6 minio使用 Spark 集群搭建 hadoop集群安装 Spring AI Alibaba 入门实战 Windows 安装 OpenClaw 实战指南 MyBatis 核心流程和原理 Idea中安装Claude code插件 Spark 编程 使用Matplotlib 绘制直方图 Flink安装部署 Flume安装 查找导致cpu过高的代码方法 JVisualVM监控远程Java进程 jmap jacoco多模块生成java单元测试报告实践 arthas 使用demo LockSupport Exchanger CyclicBarrier CountDownLatch 手把手教你用python开始第一个机器学习项目
使用 LangChain + Hugging Face 构建文本向量化服务
work hard work smart · 2026-07-05 · via 博客园 - work hard work smart

使用 LangChain + Hugging Face 构建文本向量化服务

在现代自然语言处理应用中,文本向量化是将非结构化文本转换为数值向量的关键技术,它使得计算机能够理解和处理文本内容。本文将详细介绍如何使用 LangChain 和 Hugging Face 构建一个高效、可扩展的文本向量化服务,重点介绍项目中使用的 BAAI/bge-large-zh-v1.5 模型的使用方式。

项目中使用的模型

我们的文本向量化服务使用的是 BAAI/bge-large-zh-v1.5 模型,这是一个由北京人工智能研究院(BAAI)开发的中文预训练模型。

模型特点

  • 大尺寸模型:BAAI/bge-large-zh-v1.5 是一个大尺寸模型,具有更强的语义理解能力
  • 中文优化:专门针对中文文本进行了优化,支持多种语言
  • 高质量向量:生成的向量具有较高的语义相似度和区分度
  • 广泛应用:适用于语义搜索、文本分类、相似度匹配等任务

模型配置

在项目的配置文件 app_config.yaml 中,我们明确指定了使用的模型:

embedding:
  host: localhost
  port: 8081
  model: BAAI/bge-large-zh-v1.5  # 指定使用的预训练模型

模型下载和加载

首次运行时的自动下载

当您第一次初始化向量化服务时,Hugging Face 会自动从 Hugging Face Hub 下载模型到本地缓存中:

# 初始化客户端
embedding_client_manager.init()

第一次运行时会看到类似这样的下载提示:

Downloading (…)lve/main/config.json: 100%|██████████| 1.15k/1.15k [00:00<00:00, 1.15MB/s]
Downloading pytorch_model.bin: 100%|██████████| 1.38G/1.38G [01:23<00:00, 16.5MB/s]
Downloading (…)okenizer_config.json: 100%|██████████| 342/342 [00:00<00:00, 342kB/s]
Downloading (…)solve/main/vocab.txt: 100%|██████████| 110k/110k [00:00<00:00, 110kB/s]

模型下载位置

Hugging Face 会将下载的模型保存在用户的本地缓存中,默认位置为:

C:\Users\<用户名>\.cache\huggingface\transformers\

在该目录下,您会找到一个以模型名称命名的文件夹,其中包含所有必要的文件(如模型权重、配置文件、词汇表等)。

使用 Hugging Face 客户端调用模型

项目使用了 Hugging Face 的客户端库直接加载和使用下载到本地的模型:

# embedding_client_manager.py
from langchain_huggingface import HuggingFaceEmbeddings

class EmbeddingClientManager:
    def __init__(self, config: EmbeddingConfig):
        self.client: HuggingFaceEmbeddings | None = None
        self.config = config

    def init(self):
        # 直接使用 Hugging Face Embeddings 本地加载模型
        self.client = HuggingFaceEmbeddings(
            model_name=self.config.model,
            model_kwargs={"device": "cpu"}
        )

这种方式直接在应用程序中加载和使用模型,而不需要通过网络接口调用外部服务。

系统架构

我们的向量化系统采用了以下架构:

  1. 配置管理模块 (app_config.py) - 负责从 YAML 配置文件读取系统参数
  2. 客户端管理模块 (embedding_client_manager.py) - 提供单例模式的 Hugging Face Embeddings 客户端管理
  3. 服务集成模块 - 与数据代理服务、向量数据库等组件配合工作

核心实现

1. 配置管理

我们使用 OmegaConf 库来管理系统配置,配置文件 app_config.yaml 包含了所有必要的参数:

# app_config.py
from dataclasses import dataclass
from pathlib import Path
from omegaconf import OmegaConf

@dataclass
class EmbeddingConfig:
    host: str
    port: int
    model: str

@dataclass
class AppConfig:
    embedding: EmbeddingConfig

config_file = Path(__file__).parents[2] / 'conf' / 'app_config.yaml'
context = OmegaConf.load(config_file)
schema = OmegaConf.structured(AppConfig)
app_config: AppConfig = OmegaConf.to_object(OmegaConf.merge(schema, context))

2. 客户端管理

EmbeddingClientManager 类实现了单例模式的 Hugging Face Embeddings 客户端管理:

# embedding_client_manager.py
import asyncio
import sys
from pathlib import Path

sys.path.append(str(Path(__file__).parent.parent / "conf"))

from langchain_huggingface import HuggingFaceEmbeddings
from app_config import EmbeddingConfig, app_config

class EmbeddingClientManager:
    def __init__(self, config: EmbeddingConfig):
        self.client: HuggingFaceEmbeddings | None = None
        self.config = config

    def init(self):
        # 直接使用 Hugging Face Embeddings 本地加载模型
        self.client = HuggingFaceEmbeddings(
            model_name=self.config.model,
            model_kwargs={"device": "cpu"}
        )

    async def close(self):
        # 释放资源
        if self.client is not None:
            self.client = None

embedding_client_manager = EmbeddingClientManager(app_config.embedding)

if __name__ == '__main__':
    embedding_client_manager.init()
    client = embedding_client_manager.client

    async def test():
        text = "这是一个测试文本,用于验证向量化是否成功。"
        query_result = await client.aembed_query(text)
        print(query_result[:3])

    asyncio.run(test())

3. 核心功能特性

3.1 单例模式管理

EmbeddingClientManager 类确保整个应用程序中只有一个 Hugging Face Embeddings 客户端实例,避免了重复加载模型导致的资源浪费:

embedding_client_manager = EmbeddingClientManager(app_config.embedding)

3.2 本地模型加载

系统直接从本地或 Hugging Face Hub 加载预训练模型:

self.client = HuggingFaceEmbeddings(
    model_name=self.config.model,
    model_kwargs={"device": "cpu"}
)

3.3 异步操作支持

系统提供了异步查询方法 aembed_query,适合处理高并发场景:

query_result = await client.aembed_query(text)

3.4 资源管理

close 方法用于释放资源,确保系统能够正确地关闭客户端连接:

async def close(self):
    if self.client is not None:
        self.client = None

使用示例

1. 基本使用方法

from app.data_agent.app.clients.embedding_client_manager import embedding_client_manager

# 初始化客户端(首次运行会下载模型)
embedding_client_manager.init()

# 获取客户端实例
client = embedding_client_manager.client

# 文本向量化
text = "这是一个测试文本,用于验证向量化是否成功。"
query_result = await client.aembed_query(text)
print(query_result[:3])  # 输出向量的前3个元素

2. 批量向量化

from app.data_agent.app.clients.embedding_client_manager import embedding_client_manager

# 初始化客户端
embedding_client_manager.init()

# 获取客户端实例
client = embedding_client_manager.client

# 批量处理文本
texts = [
    "这是一个测试文本,用于验证向量化是否成功。",
    "第二个测试文本,用于验证批量处理逻辑。",
    "这是第三个测试文本,用于验证中文向量化效果。"
]

# 批量向量化
document_embeddings = await client.aembed_documents(texts)

# 输出结果
for i, embedding in enumerate(document_embeddings):
    print(f"文本 {i+1} 向量长度: {len(embedding)}")
    print(f"文本 {i+1} 向量前3个元素: {embedding[:3]}")
    print("---")

3. 资源清理

from app.data_agent.app.clients.embedding_client_manager import embedding_client_manager

# 初始化客户端
embedding_client_manager.init()

# 使用客户端...

# 释放资源
await embedding_client_manager.close()

性能优化

1. GPU 加速

如果您的系统支持 GPU,可以通过修改配置文件来启用 GPU 加速:

# 在 init 方法中修改
self.client = HuggingFaceEmbeddings(
    model_name=self.config.model,
    model_kwargs={"device": "cuda"}
)

2. 模型选择

根据应用场景选择合适的预训练模型:

# app_config.yaml
embedding:
  host: "localhost"
  port: 5000
  model: "BAAI/bge-large-zh-v1.5"  # 更大的模型,更高的精度

3. 批量处理优化

对于大规模文本向量化任务,可以使用批量处理方法提高效率:

document_embeddings = await client.aembed_documents(large_text_list)

集成到数据代理服务

这个向量化服务是数据代理服务的核心组件之一,与其他组件配合工作:

  1. 数据存储 - 与 Qdrant 向量数据库集成,存储和检索向量
  2. 搜索功能 - 与 Elasticsearch 集成,提供全文搜索和语义搜索
  3. 自然语言处理 - 与 LLM 服务集成,提供更高级的文本处理功能

部署和监控

1. 系统要求

  • Python 3.9+
  • Hugging Face Transformers 库
  • LangChain 库
  • OmegaConf 库

2. 安装依赖

pip install langchain-huggingface transformers sentence-transformers omegaconf

3. 启动服务

from app.data_agent.app.clients.embedding_client_manager import embedding_client_manager

if __name__ == '__main__':
    embedding_client_manager.init()
    print("Embedding service initialized successfully")

4. 监控和日志

系统使用配置文件中的日志设置:

# app_config.yaml
logging:
  file:
    enable: true
    level: "INFO"
    path: "logs/embedding_service.log"
    rotation: "daily"
    retention: "7 days"
  console:
    enable: true
    level: "INFO"

总结

本文详细介绍了如何使用 LangChain 和 Hugging Face 构建一个高效、可扩展的文本向量化服务,重点介绍了项目中使用的 BAAI/bge-large-zh-v1.5 模型的使用方式。

项目使用了 Hugging Face 的客户端库直接加载和使用下载到本地的模型,首次运行时会自动从 Hugging Face Hub 下载模型到本地缓存中,然后在内存中运行。这种方式直接在应用程序中加载和使用模型,而不需要通过网络接口调用外部服务。

我们实现了单例模式的客户端管理、异步操作支持和配置管理功能,并提供了完整的使用示例和性能优化建议。这个向量化服务可以广泛应用于各种自然语言处理任务,如语义搜索、文本分类、相似度匹配等,为现代应用程序提供强大的文本处理能力。