基于Azure OpenAI、Langchain实现企业内部数据向量化存储

基于Azure OpenAI、Langchain实现企业内部数据向量化存储

在这里插入图片描述

1. 前提

  1. 已创建部署Azure OpenAI Embeddings模型
  2. 虚拟机已部署PGVector
  3. Langchain支持文档格式,地址

2. PGVector部署&初始化

2.1. docker-compose

version: "3.9"
services:
  pg:
    image: ankane/pgvector:v0.4.4
    container_name: pg
    restart: always
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=pgvector
      - POSTGRES_PASSWORD=pgvector
      - POSTGRES_DB=pgvector
    volumes:
      - ./data/pg/data:/var/lib/postgresql/data
      - ./data/pg/bak:/bak

2.2. 初始化

CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE langchain_pg_collection (
	"name" varchar NULL,
	cmetadata json NULL,
	uuid uuid NOT NULL,
	CONSTRAINT langchain_pg_collection_pkey PRIMARY KEY (uuid)
);

CREATE TABLE langchain_pg_embedding (
	collection_id UUID, 
	embedding VECTOR(1536), 
	document VARCHAR, 
	cmetadata JSON, 
	custom_id VARCHAR, 
	uuid UUID NOT NULL, 
	PRIMARY KEY (uuid), 
	FOREIGN KEY(collection_id) REFERENCES langchain_pg_collection (uuid) ON DELETE CASCADE
);

3. 处理过程

3.1 文档数据提取

from langchain.document_loaders import UnstructuredFileLoader, UnstructuredPowerPointLoader

    # 判断fileName后缀名是否为ppt或者pptx
    if fileName.endswith(".ppt") or fileName.endswith(".pptx"):
        loader = UnstructuredPowerPointLoader(filePath)
    else:
        loader = UnstructuredFileLoader(filePath)
    
    document = loader.load()

3.2. 文本分割

from langchain.text_splitter import RecursiveCharacterTextSplitter
    
    # 初始化文本分割器
    chunkSizeSplitter = 2000 #文档数据切割
    chunkOverlapSplitter = 100 #文档前后重叠
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=chunkSizeSplitter,
        chunk_overlap=chunkOverlapSplitter
    )

    splitDocuments = text_splitter.split_documents(document)

3.3. 数据向量化

from langchain.embeddings import OpenAIEmbeddings
        
        # 初始化OpenAI向量嵌入
        os.environ[CONST_OPENAI_API_TYPE] = os.getenv(CONST_OPENAI_API_TYPE)
        os.environ[CONST_OPENAI_API_BASE] = os.getenv(CONST_OPENAI_API_BASE)
        os.environ[CONST_OPENAI_API_KEY] = os.getenv(CONST_OPENAI_API_KEY)
        os.environ[CONST_OPENAI_API_VERSION] = os.getenv(CONST_OPENAI_API_EMBEDDINGS_VERSION)

        # 初始化向量嵌入模型
        embeddings = OpenAIEmbeddings(
            deployment=os.getenv(CONST_EMBEDDINGS_DEPLOYMENT_NAME),
            model=os.getenv(CONST_EMBEDDINGS_MODEL_NAME),
            chunk_size=1
        )

注意参数 Azure 向量模型 chunk_size必须设置为1

3.4. 保存到向量数据库

        # 连接向量数据库
        connectionString = PGVector.connection_string_from_db_params(
            driver=os.environ.get(CONST_PGVECTOR_DRIVER, os.getenv(CONST_PGVECTOR_DRIVER)),
            host=os.environ.get(CONST_PGVECTOR_HOST, os.getenv(CONST_PGVECTOR_HOST)),
            port=int(os.environ.get(CONST_PGVECTOR_PORT, os.getenv(CONST_PGVECTOR_PORT))),
            database=dbName,
            user=os.environ.get(CONST_PGVECTOR_USER, os.getenv(CONST_PGVECTOR_USER)),
            password=os.environ.get(CONST_PGVECTOR_PASSWORD, os.getenv(CONST_PGVECTOR_PASSWORD)),
        )

        # 保存到向量数据库
        PGVector.from_documents(embedding=embeddings, documents=splitDocuments, collection_name=collectionName,
                                connection_string=connectionString)

4. 最后

我司的FinOps产品基于Azure OpenAI、PGVector提供企业私有智能助手解决方案。该解决方案包括私有知识库、私有智能客服、云专家和运维专家等功能,旨在为客户提供更快速、便捷的服务和支持。通过利用人工智能和自然语言处理技术,联蔚的FinOps产品能够帮助企业进行云消费的全生命周期管理,从而极大地节省云支出并提升效率。

如果有云上财务管理、企业私有智能助手的需求,可以关注我们的微信公众号、详情查看 联蔚盘云官网 联系我们。

相关链接:

联蔚荣获微软Azure OpenAI 合作伙伴 Level 300 认证

联蔚FinOps智能助手,为您打造专属的云上财务管理专家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值