文章目录
基于Azure OpenAI、Langchain实现企业内部数据向量化存储
1. 前提
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产品能够帮助企业进行云消费的全生命周期管理,从而极大地节省云支出并提升效率。
如果有云上财务管理、企业私有智能助手的需求,可以关注我们的微信公众号、详情查看 联蔚盘云官网 联系我们。
相关链接: