001/* 002 * Copyright (c) 2023-2026, Agents-Flex (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package com.agentsflex.core.store; 017 018import com.agentsflex.core.util.Metadata; 019 020import java.util.ArrayList; 021import java.util.Arrays; 022import java.util.Collection; 023import java.util.List; 024 025 026public class VectorData extends Metadata { 027 028 private float[] vector; 029 030 /** 031 * 0 ~ 1, 数值越大,相似度越高 032 */ 033 private Double score; 034 035 public float[] getVector() { 036 return vector; 037 } 038 039 public List<Float> getVectorAsList() { 040 if (vector == null) { 041 return null; 042 } 043 List<Float> result = new ArrayList<>(vector.length); 044 for (float v : vector) { 045 result.add(v); 046 } 047 return result; 048 } 049 050 public List<Double> getVectorAsDoubleList() { 051 if (vector == null) { 052 return null; 053 } 054 List<Double> result = new ArrayList<>(vector.length); 055 for (float v : vector) { 056 result.add((double) v); 057 } 058 return result; 059 } 060 061 public double[] getVectorAsDoubleArray() { 062 if (vector == null) { 063 return null; 064 } 065 double[] result = new double[vector.length]; 066 for (int i = 0; i < vector.length; i++) { 067 result[i] = vector[i]; 068 } 069 return result; 070 } 071 072 073 public void setVector(float[] vector) { 074 this.vector = vector; 075 } 076 077 public void setVector(Float[] vector) { 078 this.vector = new float[vector.length]; 079 for (int i = 0; i < vector.length; i++) { 080 this.vector[i] = vector[i]; 081 } 082 } 083 084 public void setVector(double[] vector) { 085 this.vector = new float[vector.length]; 086 for (int i = 0; i < vector.length; i++) { 087 this.vector[i] = (float) vector[i]; 088 } 089 } 090 091 public void setVector(Double[] vector) { 092 this.vector = new float[vector.length]; 093 for (int i = 0; i < vector.length; i++) { 094 this.vector[i] = vector[i].floatValue(); 095 } 096 } 097 098 public void setVector(Collection<? extends Number> vector) { 099 this.vector = new float[vector.size()]; 100 int index = 0; 101 for (Number num : vector) { 102 this.vector[index++] = num.floatValue(); 103 } 104 } 105 106 public Double getScore() { 107 return score; 108 } 109 110 public void setScore(Double score) { 111 this.score = score; 112 } 113 114 @Override 115 public String toString() { 116 return "VectorData{" + 117 "vector=" + Arrays.toString(vector) + 118 ", score=" + score + 119 ", metadataMap=" + metadataMap + 120 '}'; 121 } 122}