更新时间:2024-08-29 GMT+08:00
分享

Vector

Embedding

Emebedding模块用于对Emebedding模型API的适配封装,提供统一的接口快速地调用CSS等模型emebedding能力。

  • 初始化:根据相应模型定义Emebedding类,如使用华为CSS Embedding为:Embeddings.of("css");。
    from pangukitsappdev.api.embeddings.factory import Embeddings
    # 初始化 Css Embedding
    embedding_api = Embeddings.of("css")
  • embedding单文本:把单个字符串转换为向量数据。(向量维度由模型确定)。
    text = "this is a test text."
    # embed query.
    embedding = embedding_api.embed_query(text)
    print(embedding)
  • embedding批量文档:把文档批量转换为向量数据。
    text = "this is a test text."
    # embed documents.
    embeddings = embedding_api.embed_documents([text])
    print(embeddings)

Splitter

文档拆分解析,提供对文档数据进行拆分解析能力,支持pdf/doc/docx/ppt/pptx/xls/xlsx/png/jpg/jpeg/bmp/gif/tiff/webp/pcx/ico/psd等格式文档。

  • 初始化

    根据相应解析接口定义DocSplit类,以使用华为Pangu DocSplit为例。

    其中,filePath指的是需要解析的文档路径;mode为分割解析模式,具体定义如下:

    0 - 返回文档的原始段落,不做其他处理。

    1 - 根据标注的书签或目录分段,一般适合有层级标签的word文档。

    2 - 根据内容里的章节条分段,适合制度类文档。

    3 - 根据长度分段,默认按照500字拆分,会尽量保留完整句子。

    from pangukitsappdev.api.doc_split.factory import DocSplits
    from pangukitsappdev.api.doc_split.split_config import SplitConfig
    split_config = SplitConfig()
    split_config.file_path='/data/xxx.docx'
    split_api = DocSplits.of("pangu-doc", split_config)
  • 文档解析
    doc_list = split_api.load()
    for doc in doc_list:    
        print(doc.page_content)

向量库

向量库用于向量数据存储,提供向量数据检索能力。

  • 初始化,以使用华为CSS示例。
    from pangukitsappdev.api.memory.vector.factory import Vectors
    from pangukitsappdev.api.memory.vector.vector_config import VectorStoreConfig, ServerInfoCss
    from pangukitsappdev.api.embeddings.factory import Embeddings
    vector_store_config = VectorStoreConfig(store_name="css",
                                            index_name="your_index_name",
                                            embedding=Embeddings.of("css"),
                                            text_key="name",
                                            vector_fields=["description"],
                                            distance_strategy="inner_product",
                                            server_info=ServerInfoCss(env_prefix="sdk.memory.css"))
    vector_api = Vectors.of("css", vector_store_config)
  • 数据入库
    from pangukitsappdev.vectorstores.bulk_data import BulkData
    bulk_list = [BulkData(id="1", data={"name": "名称name1", "description": "foo"}),
                 BulkData(id="2", data={"name": "名称name2", "description": "bar"}),
                 BulkData(id="3", data={"name": "名称name3", "description": "baz"})]
    ]
    vector_api.add_docs(bulk_list)
  • 数据检索
    docs = vector_api.similarity_search("bar", top_k=2)
  • 数据清理
     vector_api.clear()
  • CSS插件模式(内部已集成Embedding, 支持多字段组合向量检索)。

    CSS插件模式,需要提前手工创建索引(因索引中需要指定embdding/rank模型,SDK不能简单自动创建)。

    CSS插件模式,不支持clear删除索引接口(索引外部创建,应由外部删除)。

     
    vector_store_config = VectorStoreConfig(store_name="css",
                                            index_name="your_index_name",
                                            text_key="name",
                                            vector_fields=["name", "description"],
                                            server_info=ServerInfoCss(env_prefix="sdk.memory.css"))
    vector_api = Vectors.of("css", vector_store_config)
    
    # 检索
    docs = vector_api.similarity_search("bar", top_k=2)
    
    # 添加
    bulk_list = [BulkData(id="1", data={"name": "名称name1", "description": "foo"}),
                 BulkData(id="2", data={"name": "名称name2", "description": "bar"}),
                 BulkData(id="3", data={"name": "名称name3", "description": "baz"})]
    ]
    vector_api.add_docs(bulk_list)

    通过vectorStoreConfig判断使用CSS的插件模式和非插件模式。如果配置了embedding模型,则使用非插件模式,否则使用插件模式。注意,在非插件模式下,vectorFields有且只有1个。

相关文档