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

配置Vector(Java SDK)

Embedding

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

  • 初始化:根据相应模型定义Embedding类。例如,使用华为CSS Embedding为:Embeddings.of(Embeddings.CSS);。
    import com.huaweicloud.pangu.dev.sdk.api.embedings.Embedding;
    import com.huaweicloud.pangu.dev.sdk.api.embedings.Embeddings;
    
    // 初始化 Css Embedding
    Embedding css = Embeddings.of(Embeddings.CSS);
  • embedding单文本:把单个字符串转换为向量数据。(向量维度由模型确定)。
    import java.util.List;
    
    String text = "this is a test text.";
    // embed query.
    List<Float> embedding = css.embedQuery(text);
    embedding.forEach(s -> System.out.println(s.toString()));
  • embedding批量文档:把文档批量转换为向量数据。
    import java.util.Arrays;
    import java.util.List;
    
    String text = "this is a test text.";
    // embed documents.
    List<List<Float>> embeddings = css.embedDocuments(Arrays.asList(text));
    embeddings.forEach(s -> System.out.println(s.toString()));

Splitter

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

  • 初始化:根据相应解析接口定义DocSplit类。以使用华为Pangu DocSplit为例:
    import com.huaweicloud.pangu.dev.sdk.api.doc.splitter.DocSplit;
    import com.huaweicloud.pangu.dev.sdk.api.doc.splitter.DocSplits;
    import com.huaweicloud.pangu.dev.sdk.api.doc.splitter.config.SplitConfig;
    
    // 初始化 pangudoc split(直接指定filePath和mode)
    String filePath = "D:/test.doc";
    DocSplit docPanguSplit =
        DocSplits.of(SplitConfig.builder().splitName(DocSplits.PANGUDOC).filePath(filePath).mode("1").build());
    // 初始化pangudoc split(通过配置文件指定filePath和mode)
    DocSplit docPanguSplit = DocSplits.of(DocSplits.PANGUDOC);

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

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

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

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

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

  • 文档解析
    import com.alibaba.fastjson.JSONObject;
    import com.huaweicloud.pangu.dev.sdk.api.doc.splitter.DocSplit;
    import com.huaweicloud.pangu.dev.sdk.api.doc.splitter.DocSplits;
    import com.huaweicloud.pangu.dev.sdk.client.css.doc.splitter.CSSDocResultResp;
    
    DocSplit docPanguSplit = DocSplits.of(DocSplits.PANGUDOC);
    CSSDocResultResp resp = docPanguSplit.loadDocument();
    System.out.println(JSONObject.toJSONString(resp.getResult()));

向量库

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

  • 初始化,以使用华为CSS示例。
    import com.huaweicloud.pangu.dev.sdk.api.embedings.Embeddings;
    import com.huaweicloud.pangu.dev.sdk.api.memory.bo.Document;
    import com.huaweicloud.pangu.dev.sdk.api.memory.config.ServerInfoCss;
    import com.huaweicloud.pangu.dev.sdk.api.memory.config.VectorStoreConfig;
    import com.huaweicloud.pangu.dev.sdk.api.memory.vector.Vector;
    import com.huaweicloud.pangu.dev.sdk.api.memory.vector.Vectors;
    import java.util.Collections;
    
    Vector cssVector = Vectors.of(Vectors.CSS,
        VectorStoreConfig.builder()
            .embedding(Embeddings.of(Embeddings.CSS))
            .indexName("you_index_name")
            .vectorFields(Collections.singletonList("description"))
            .textKey("name")
            .serverInfo(ServerInfoCss.builder().build())
            .build());
  • 数据入库。
    import com.huaweicloud.pangu.dev.sdk.vectorstore.bo.BulkData;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    Map<String, Object> data = new HashMap<>();
    data.put("name", "名称name");
    data.put("description", "描述description");
    final BulkData bulkData = new BulkData();
    bulkData.setId("1");
    bulkData.setData(data);
    cssVector.addDocs(Collections.singletonList(bulkData));
  • 数据检索。
     List<Document> docs = cssVector.similaritySearch("bar", 2);
  • 数据清理。
      List<Document> docs = cssVector.clear();
  • CSS插件模式(内部已集成Embedding, 支持多字段组合向量检索)。
    CSS插件模式需要提前手工创建索引(因索引中需要指定embdding/rank模型,SDK不能简单自动创建)。
    import com.huaweicloud.pangu.dev.sdk.api.embedings.Embeddings;
    import com.huaweicloud.pangu.dev.sdk.api.memory.bo.Document;
    import com.huaweicloud.pangu.dev.sdk.api.memory.config.ServerInfoCss;
    import com.huaweicloud.pangu.dev.sdk.api.memory.config.VectorStoreConfig;
    import com.huaweicloud.pangu.dev.sdk.api.memory.vector.Vector;
    import com.huaweicloud.pangu.dev.sdk.api.memory.vector.Vectors;
    
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    Vector cssVector = Vectors.of(Vectors.CSS,
        VectorStoreConfig.builder()
            .indexName("your_index_name")
            .vectorFields(Arrays.asList("name", "description"))
            .textKey("name")
            .serverInfo(ServerInfoCss.builder().build())
            .build());

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

相关文档