本页面提供一个通过 Java SDK 完成知识库文档导入与 RAG 问答的完整流程请求示例,涵盖文档上传、向量检索及大模型问答调用,注意使用时根据实际情况填充账户鉴权信息、collection 名称、文档路径和查询内容。
package com.volcengine.vikingdb.runtime.knowledge._05_overall; import com.volcengine.vikingdb.runtime.core.RequestAddition; import com.volcengine.vikingdb.runtime.knowledge.model.request.AddDocV2Request; import com.volcengine.vikingdb.runtime.knowledge.model.request.ChatCompletionRequest; import com.volcengine.vikingdb.runtime.knowledge.model.request.ChatMessage; import com.volcengine.vikingdb.runtime.knowledge.model.request.SearchKnowledgeRequest; import com.volcengine.vikingdb.runtime.knowledge.model.response.AddDocResponse; import com.volcengine.vikingdb.runtime.knowledge.model.response.ChatCompletionResponse; import com.volcengine.vikingdb.runtime.knowledge.model.response.SearchKnowledgeResponse; import com.volcengine.vikingdb.runtime.knowledge.service.KnowledgeCollectionClient; import com.volcengine.vikingdb.runtime.knowledge.service.KnowledgeService; import com.volcengine.vikingdb.runtime.knowledge.util.ExampleUtil; import java.util.Arrays; import java.util.List; import java.util.UUID; public class Main { public static void main(String[] args) throws Exception { KnowledgeService service = ExampleUtil.newKnowledgeService(ExampleUtil.preferAuth()); KnowledgeCollectionClient kc = service.collection(ExampleUtil.defaultCollectionMeta()); String docId = ExampleUtil.envOrDefault("VIKING_DOC_ID", "java-overall-doc-" + UUID.randomUUID()); String uri = ExampleUtil.envOrDefault("VIKING_DOC_URI", "tos://your-bucket/your-path/your-file.pdf"); AddDocV2Request addReq = AddDocV2Request.builder() .docId(docId) .docName(ExampleUtil.envOrDefault("VIKING_DOC_NAME", "your-file-name.pdf")) .uri(uri) .build(); AddDocResponse addResp = kc.addDocV2(addReq, new RequestAddition()); ExampleUtil.printJson("overall_add_doc_v2", addResp); SearchKnowledgeRequest skReq = SearchKnowledgeRequest.builder() .query(ExampleUtil.envOrDefault("VIKING_QUERY", "your query")) .limit(10) .denseWeight(0.5) .build(); SearchKnowledgeResponse skResp = kc.searchKnowledge(skReq, new RequestAddition()); ExampleUtil.printJson("overall_search_knowledge", skResp); String contextText; if (skResp == null || skResp.getData() == null || skResp.getData().getResultList() == null || skResp.getData().getResultList().isEmpty()) { contextText = "(检索结果为空或不可用)"; } else { StringBuilder sb = new StringBuilder(); int limit = Math.min(5, skResp.getData().getResultList().size()); for (int i = 0; i < limit; i++) { if (i > 0) { sb.append("\n\n"); } String title = skResp.getData().getResultList().get(i).getChunkTitle(); String content = skResp.getData().getResultList().get(i).getContent(); sb.append("【").append(title == null ? "" : title).append("】\n") .append(content == null ? "" : content); } contextText = sb.toString(); } String systemPrompt = "你是一位专业的财报分析师,你需要根据「参考资料」来回答接下来的「用户问题」,这些信息在 <context></context> XML 标签之内。回答必须在参考资料范围内,尽可能简洁,无法回答时请礼貌说明并引导提供更多信息。\n\n<context>\n" + contextText + "\n</context>"; List<ChatMessage> messages = Arrays.asList( ChatMessage.builder().role("system").content(systemPrompt).build(), ChatMessage.builder().role("user").content(skReq.getQuery()).build()); ChatCompletionRequest chatReq = ChatCompletionRequest.builder() .model(ExampleUtil.envOrDefault("VIKING_CHAT_MODEL", "Doubao-1-5-pro-32k")) .messages(messages) .maxTokens(4096) .temperature(0.1) .returnTokenUsage(true) .apiKey(ExampleUtil.envOrDefault("VIKING_CHAT_API_KEY", "")) .stream(false) .build(); ChatCompletionResponse chatResp = service.chatCompletion( chatReq, new RequestAddition().setRequestId("knowledge_chat_completion_java_example")); ExampleUtil.printJson("overall_chat_completion", chatResp); } }