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 归一化向量后计算夹角余弦值 。
相关推荐
kimi-2223 小时前
LLM 生成 → 输出 Markdown 文本
langchain
AAA阿giao4 小时前
用 LangChain 玩转大模型:从零搭建你的第一个 AI 应用
javascript·人工智能·langchain·llm·ai编程·ai开发
至此流年莫相忘5 小时前
模型调用的主要方法及参数
langchain
红鼻子时代5 小时前
第6篇:实战项目-智能知识库助手(入门版)
langchain·知识库助手
Coder_Boy_5 小时前
基于SpringAI的智能平台基座开发-(十一)
人工智能·spring·langchain·langchain4j
小芳矶6 小时前
【langchain框架——检索链】利用检索链创建自己的购物知识库并完成智能体的商品推荐
java·python·langchain
AAA阿giao6 小时前
赋予大模型“记忆”:深度解析 LangChain 中 LLM 的上下文记忆实现
javascript·langchain·llm
神秘的猪头7 小时前
LangChain Tool 实战:让大模型“长出双手”,通过 Tool 调用连接真实世界
langchain·node.js·aigc
沛沛老爹8 小时前
Advanced-RAG原理:RAG-Fusion 检索增强生成的多查询融合实战
langchain·llm·agent·fusion·rag·advanced·web转型
xhxxx18 小时前
你的 AI 为什么总答非所问?缺的不是智商,是“记忆系统”
前端·langchain·llm