海淘科技上海网站设计官网网站搭建需要多少钱
2026/4/18 10:39:19 网站建设 项目流程
海淘科技上海网站设计,官网网站搭建需要多少钱,网站嵌入播放器,网页微信版文件传输助手文章目录一、PGVector 概述1.1 PGVector 简介1.2 基本概念1.3 使用建议二、安装 PGVector2.1 使用 Docker#xff08;推荐#xff0c;快速上手#xff09;2.2 在现有 PostgreSQL 中安装#xff08;Linux/macOS#xff09;三、Python 操作PGVector详解3.1 安装依赖3.2 连接…文章目录一、PGVector 概述1.1 PGVector 简介1.2 基本概念1.3 使用建议二、安装 PGVector2.1 使用 Docker推荐快速上手2.2 在现有 PostgreSQL 中安装Linux/macOS三、Python 操作PGVector详解3.1 安装依赖3.2 连接数据库 创建表3.3 插入向量数据3.4 向量相似性搜索核心功能3.5 使用 SQLAlchemyORM 方式3.6 混合搜索SQL关键词 向量3.7 完整可执行案例单文件PGVector 是 PostgreSQL 的一个开源扩展用于高效存储和检索向量embedding数据支持ANN近似最近邻搜索广泛应用于语义搜索、推荐系统、RAG检索增强生成等场景。一、PGVector 概述1.1 PGVector 简介官方 GitHubhttps://github.com/pgvector/pgvector核心功能存储高维向量如 768 维的 BERT embedding支持多种距离度量L2欧氏距离、Inner Product点积、Cosine余弦相似度提供高效索引IVFFlat、HNSW完全集成到 PostgreSQLSQL 友好对于新闻检索场景使用 pgvector 有一个巨大的优势结构化数据与非结构化数据的统一存储。你不需要单独维护一个向量数据库新闻的标题、发布时间、作者、原文内容都存在 Postgres 里而向量作为一个普通的字段存在同一行查询时可以用 SQL 同时过滤。1.2 基本概念概念说明vector(n)向量类型n为维度如vector(768)-L2 距离操作符#负内积操作符用于最大内积搜索余弦距离操作符1 - cosine_similarityivfflat基于聚类的 ANN 索引hnsw层次化可导航小世界图索引更快更准但占内存1.3 使用建议场景建议数据量 1万无需索引直接搜索1万 ~ 100万IVFFlat 索引lists100~1000 100万HNSW 索引内存充足时高写入避免频繁重建索引批量插入后建索引中文支持结合zhparsertsvector实现混合搜索适用场景RAG 应用、语义搜索、个性化推荐、图像/文本相似检索。二、安装 PGVector2.1 使用 Docker推荐快速上手# 拉取带 pgvector 的 PostgreSQL 镜像dockerrun -d\--name pgvector-demo\-p5432:5432\-ePOSTGRES_USERadmin\- ePOSTGRES_PASSWORD123456\-ePOSTGRES_DBvector_db\ankane/pgvector:latestankane/pgvector是官方维护的镜像已预装 pgvector 扩展。2.2 在现有 PostgreSQL 中安装Linux/macOS# 克隆源码gitclone https://github.com/pgvector/pgvector.gitcdpgvector# 编译安装需 postgresql-server-devmakemakeinstall# 登录 psql创建扩展CREATE EXTENSION vector;三、Python 操作PGVector详解推荐使用psycopg2轻量或SQLModel/SQLAlchemyORM3.1 安装依赖pipinstallpsycopg2-binary sqlalchemy pgvector注意pgvectorPython 包提供类型支持非必须但推荐3.2 连接数据库 创建表importpsycopg2frompsycopg2.extrasimportRealDictCursorimportnumpyasnp# 数据库连接配置DB_CONFIG{host:localhost,port:5432,database:vector_db,user:admin,password:123456}connpsycopg2.connect(**DB_CONFIG)curconn.cursor(cursor_factoryRealDictCursor)# 创建扩展首次运行需要cur.execute(CREATE EXTENSION IF NOT EXISTS vector;)# 创建新闻表含向量字段cur.execute( CREATE TABLE IF NOT EXISTS news ( id SERIAL PRIMARY KEY, title TEXT NOT NULL, content TEXT, embedding VECTOR(768) -- 假设使用 768 维 embedding ); )conn.commit()print( 表 news 创建成功)3.3 插入向量数据# 模拟生成 embedding实际应使用模型如 sentence-transformersdefgenerate_embedding(text:str)-list:# 实际项目替换为# from sentence_transformers import SentenceTransformer# model SentenceTransformer(all-MiniLM-L6-v2)# return model.encode(text).tolist()np.random.seed(hash(text)%2**32)returnnp.random.rand(768).tolist()# 插入示例数据news_items[{title:人工智能新突破,content:科学家开发出新型AI算法...},{title:全球气候峰会召开,content:各国达成减排新协议...},{title:量子计算进展,content:中国实现100量子比特操控...}]foriteminnews_items:embeddinggenerate_embedding(item[title] item[content])cur.execute(INSERT INTO news (title, content, embedding) VALUES (%s, %s, %s),(item[title],item[content],embedding))conn.commit()print(向量数据插入完成)3.4 向量相似性搜索核心功能1、精确搜索无索引小数据量可用defsearch_similar_news(query_text:str,limit:int3):query_embeddinggenerate_embedding(query_text)# 使用余弦相似度 返回余弦距离越小越相似cur.execute( SELECT id, title, content, embedding %s AS distance FROM news ORDER BY embedding %s LIMIT %s; ,(query_embedding,query_embedding,limit))resultscur.fetchall()returnresults# 测试搜索resultssearch_similar_news(AI 技术发展)forrinresults:print(f标题:{r[title]}, 距离:{r[distance]:.4f}) 距离说明余弦距离 ∈ [0, 2]0 表示完全相同L2 距离 ≥ 00 表示相同2、创建索引加速大数据必备IVFFlat 索引推荐入门# 创建 IVFFlat 索引基于余弦距离cur.execute( CREATE INDEX ON news USING ivfflat (embedding vector_cosine_ops) WITH (lists 100); -- lists ≈ sqrt(数据量) )conn.commit()print(IVFFlat 索引创建成功)参数建议lists min(100, sqrt(N))N 为数据量支持操作符vector_l2_ops,vector_ip_ops,vector_cosine_opsHNSW 索引更高性能PostgreSQL 16 或 pgvector v0.7# 需 pgvector 0.7.0cur.execute( CREATE INDEX ON news USING hnsw (embedding vector_cosine_ops) WITH (m 16, ef_construction 64); )HNSW 参数m: 每个节点的连接数默认 16ef_construction: 构建时的候选集大小默认 643.5 使用 SQLAlchemyORM 方式fromsqlalchemyimportcreate_engine,Column,Integer,Textfromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportsessionmakerfrompgvector.sqlalchemyimportVector Basedeclarative_base()classNews(Base):__tablename__newsidColumn(Integer,primary_keyTrue)titleColumn(Text)contentColumn(Text)embeddingColumn(Vector(768))# 创建引擎enginecreate_engine(postgresql://admin:123456localhost:5432/vector_db)Base.metadata.create_all(engine)Sessionsessionmaker(bindengine)sessionSession()# 插入数据embeddinggenerate_embedding(测试新闻)newsNews(title测试,content内容,embeddingembedding)session.add(news)session.commit()# 相似搜索SQLAlchemy 语法fromsqlalchemyimporttext query_embgenerate_embedding(查询词)resultssession.execute(text( SELECT *, embedding :query_emb AS distance FROM news ORDER BY embedding :query_emb LIMIT 3 ),{query_emb:query_emb}).fetchall()3.6 混合搜索SQL关键词 向量SELECT*,ts_rank_cd(to_tsvector(chinese,title),plainto_tsquery(AI))ASkeyword_score,embedding$1ASvector_distanceFROMnewsWHEREto_tsvector(chinese,title) plainto_tsquery(AI)ORDERBY0.7*vector_distance0.3*(1-keyword_score)LIMIT5;需要安装zhparser支持中文分词3.7 完整可执行案例单文件# pgvector_demo.pyimportpsycopg2importnumpyasnp DB_CONFIG{host:localhost,port:5432,database:vector_db,user:admin,password:123456}defmain():connpsycopg2.connect(**DB_CONFIG)curconn.cursor()# 初始化cur.execute(CREATE EXTENSION IF NOT EXISTS vector;)cur.execute( CREATE TABLE IF NOT EXISTS demo ( id SERIAL PRIMARY KEY, text TEXT, vec VECTOR(4) ); )# 插入数据data[(苹果很好吃,[0.1,0.2,0.3,0.4]),(香蕉很香甜,[0.2,0.3,0.4,0.5]),(汽车跑得快,[0.9,0.8,0.7,0.6])]fortext,vecindata:cur.execute(INSERT INTO demo (text, vec) VALUES (%s, %s),(text,vec))conn.commit()# 搜索query_vec[0.15,0.25,0.35,0.45]# 类似“水果”cur.execute( SELECT text, vec - %s AS distance FROM demo ORDER BY vec - %s LIMIT 2; ,(query_vec,query_vec))print(最相似的文本:)forrowincur.fetchall():print(f{row[0]}(距离:{row[1]:.4f}))cur.close()conn.close()if__name____main__:main()运行前确保 Docker 已启动dockerstart pgvector-demo python pgvector_demo.py

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询