配置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个。