Langchain-Chatchat[三、PG向量库embedding存储]

文章目录


前言

跟踪PG向量库embedding存储,即需要分析: kb --recreate-vs 命令,重新创建向量库以及文本内容加强embedding存储。

前提
1.Langchain-Chatchat[一、本地开发环境部署]

2.已安装Pg向量库

kb_settings.yaml文件配置

yaml 复制代码
# 默认使用的知识库
DEFAULT_KNOWLEDGE_BASE: samples

# 默认向量库/全文检索引擎类型
# 可选值:['faiss', 'milvus', 'zilliz', 'pg', 'es', 'relyt', 'chromadb']
DEFAULT_VS_TYPE: pg

kbs_config:
  faiss: {}
  ......
  pg:
    connection_uri: postgresql://postgres:postgres@127.0.0.1:5432/postgres
  relyt:
    connection_uri: postgresql+psycopg2://postgres:postgres@127.0.0.1:5432/postgres
 

PyCharm 配置debug调试参数:kb --recreate-vs


一、创建向量库并加强embedding存储文本流程图

二、流程核心部分说明

文本内容加强(embeddings)存储

pg_kb_service.py#def _load_pg_vector(self):

代码如下(片断):

python 复制代码
class PGKBService(KBService):
    engine: Engine = sqlalchemy.create_engine(
        Settings.kb_settings.kbs_config.get("pg").get("connection_uri"), pool_size=10
    )

    def _load_pg_vector(self):
        self.pg_vector = PGVector(
            embedding_function=get_Embeddings(self.embed_model),
            collection_name=self.kb_name,
            distance_strategy=DistanceStrategy.EUCLIDEAN, #DistanceStrategy.EUCLIDEAN = "l2" 点积
            connection=PGKBService.engine,
            connection_string=Settings.kb_settings.kbs_config.get("pg").get("connection_uri"),
        )
python 复制代码
class PGVector(VectorStore):
	    def __init__(
        self,
        connection_string: str,
        embedding_function: Embeddings,
        embedding_length: Optional[int] = None,
        collection_name: str = _LANGCHAIN_DEFAULT_COLLECTION_NAME,
        collection_metadata: Optional[dict] = None,
        distance_strategy: DistanceStrategy = DEFAULT_DISTANCE_STRATEGY,
        pre_delete_collection: bool = False,
        logger: Optional[logging.Logger] = None,
        relevance_score_fn: Optional[Callable[[float], float]] = None,
        *,
        connection: Optional[sqlalchemy.engine.Connection] = None,
        engine_args: Optional[dict[str, Any]] = None,
        use_jsonb: bool = False,
        create_extension: bool = True,
    ) -> None:
        """Initialize the PGVector store."""
        self.connection_string = connection_string
        self.embedding_function = embedding_function
        self._embedding_length = embedding_length
        self.collection_name = collection_name
        self.collection_metadata = collection_metadata
        self._distance_strategy = distance_strategy  #DistanceStrategy.EUCLIDEAN = "l2" 点积
        self.pre_delete_collection = pre_delete_collection
        self.logger = logger or logging.getLogger(__name__)
        self.override_relevance_score_fn = relevance_score_fn
        self.engine_args = engine_args or {}
        self._bind = connection if connection else self._create_engine()
        self.use_jsonb = use_jsonb
        self.create_extension = create_extension
        .....

说明:PG向量库类等默认向量相似度为[最大内积:(点积)衡量相似性 L2]

如图:


三、存储PG向量库表

1.distance_strategy=DistanceStrategy.EUCLIDEAN

复制代码
   默认配置参数:DistanceStrategy.EUCLIDEAN = "l2" ,最大内积(点积),_embedding值范围为:(负穷大,正无穷大)

2.distance_strategy=DistanceStrategy.COSINE

复制代码
   修改配置参数:DistanceStrategy.EUCLIDEAN = "cosine" ,余弦相似度, 如图:

_embedding加强存储,值范围为:(-1,1)
存在的问题: 修改PG库distance_strategy参数后并未改变 文档内容_embedding值范围,不清楚是否是 Pg库问题还是其它问题,等待分析。

3.策略‌配置参数distance_strategy

文本内容加强embedding(向量化)存储值由数据库创建向量索引策略方式确定,目前LangChain VectorStores支持向量索引策略计算方法有三种,策略‌如下:

  • 欧氏距离:欧氏距离(L2范数)计算向量差异。
  • 最大内积:(点积)衡量相似性,适用于高维向量场景,如:PG向量库embedding默认 L2。
  • 余弦相似度:COSINE 归一化向量后计算夹角余弦值 。
相关推荐
q***062914 小时前
LangChain-08 Query SQL DB 通过GPT自动查询SQL
数据库·sql·langchain
AI大模型17 小时前
最好用的开源AI智能体(Agent)开发框架对比:LangChain-AutoGen-LlamaIndex等
langchain·llm·agent
Dr_哈哈17 小时前
🔥彻底搞懂 AI Agent!LangGraph 从入门到实战(附完整源码)
langchain·node.js·agent
nix.gnehc21 小时前
LangChain与模型
langchain
东南门吹雪1 天前
向量、张量、大语言模型、Embedding
人工智能·语言模型·embedding
海底的星星fly1 天前
【Prompt学习技能树地图】LangChain原理及应用操作指南
人工智能·语言模型·langchain·prompt
呲溜滑_1 天前
langchain(node.js) 实际应用订单助手
microsoft·langchain·node.js
阿杰学AI1 天前
AI核心知识31——大语言模型之Multimodal Understanding(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·embedding·多模态理解
nvd112 天前
一个简单的GitHub AI Agent 实现指南
人工智能·langchain