交通信号配时优化:从静态模型到鲁棒动态系统
2026/8/26 21:06:27
<!-- 自动整合 PGVector 向量存储 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-vector-store-pgvector</artifactId><version>1.0.0-M7</version></dependency>spring:ai:dashscope:# 需要替换为你自己的 keyapi-key:你的API-Keyembedding:options:model:qwen3.7-text-embeddingdimensions:1024################################################################# postgresql 向量数据库配置 ###################################################################vectorstore:pgvector:initialize-schema:true# 会自定初始化向量数据表 vector_storeindex-type:HNSW# 量索引的类型为 HNSW(分层可导航小世界图)。dimensions:1024# 存储的向量维度为 1024。distance-type:COSINE_DISTANCE# 相似度度量方式为“余弦距离max-document-batch-size:10000# Optional: Maximum number of documents per batchid-type:uuidtable-name:vector_store# 向量数据表表名schema-name:publicdatasource:url:jdbc:postgresql://localhost:5432/postgresusername:postgrespassword:123456项目启动时会自动创建向量数据表,表名为:vector_store
/** * 向量数据库表 vector_store 业务操作接口类 */publicinterfaceIVectorStoreService{/** * 简单示例,往向量数据库中插入字符串类型的数据 * @param knowledge * @return */StringaddSimple(Stringknowledge);/** * 从向量数据库中筛选文档 * @param content * @return */List<Document>similaritySearch(Stringcontent);}@Service@Slf4jpublicclassVectorStoreServiceImplimplementsIVectorStoreService{@AutowiredprivatePgVectorStorepgVectorStore;@Autowired@Qualifier("openAiChatModel")privateChatModelchatModel;@OverridepublicStringaddSimple(Stringknowledge){Documentdocument=newDocument(knowledge);pgVectorStore.add(List.of(document));return"添加知识库成功";}/** * 根据内容相识度查询 * @param content */publicList<Document>similaritySearch(Stringcontent){Queryquery=newQuery(content);ChatClient.BuilderchatClientBuilder=ChatClient.builder(chatModel);// 构建查询重写转换器RewriteQueryTransformerqueryTransformer=RewriteQueryTransformer.builder().chatClientBuilder(chatClientBuilder).build();// 构建翻译成中文转换器/* QueryTransformer queryTransformer = TranslationQueryTransformer.builder() .chatClientBuilder(chatClientBuilder) .targetLanguage("Chinese") .build();*/// 重写Querytransform=queryTransformer.transform(query);SearchRequestsearchRequest=SearchRequest.builder().query(transform.text())//搜索的查询文本,重写后的查询.topK(5)// 返回的最大结果数.similarityThreshold(0.5)// 相似度阈值分数,用于筛选搜索结果。只有相似度得分大于或等于该“阈值”的文档才会被返回。请注意,这是一个在客户端而非服务端执行的后处理步骤。阈值设为 0.0 表示接受任意相似度,或禁用相似度阈值过滤;阈值设为 1.0 则表示要求完全匹配。//.filterExpression("title in ['如何提升自身魅力吸引潜在伴侣?']") //基于文档元数据的过滤表达式.build();// Retrieve documents similar to a queryList<Document>results=pgVectorStore.similaritySearch(searchRequest);log.info("匹配到的知识库内容:{}",results.toArray());returnresults;}}/** * 向量数据库接口 */@RestController@RequestMapping("/vectorStore")publicclassVectorStoreController{@AutowiredprivateIVectorStoreServicevectorStoreService;/** * 新增数据 * 向vector_store插入数据 * @param knowledge 字符串类型的知识 */@PostMapping("/add")publicStringaddSimple(Stringknowledge){returnvectorStoreService.addSimple(knowledge);}/** * 查询-直接接口查询 * @param content * @return */@GetMapping("/query")publicList<Document>similaritySearch(Stringcontent){returnvectorStoreService.similaritySearch(content);}}
查看数据库,发现插入成功,embedding字段即为向量数组,metadata元信息为空,是因为我们暂时还没有设置。
继续多插入几条
测试下检索功能,发现只匹配到一条,分数为0.66