diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/RagHttpService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/RagHttpService.java index 488407253..74d47b40f 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/RagHttpService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/RagHttpService.java @@ -3,20 +3,23 @@ package cn.iocoder.yudao.module.llm.service.http; import cn.iocoder.yudao.framework.common.util.http.HttpUtils; import cn.iocoder.yudao.module.llm.framework.backend.config.LLMBackendProperties; -import cn.iocoder.yudao.module.llm.service.http.vo.RagEmbedReqVo; -import cn.iocoder.yudao.module.llm.service.http.vo.RagQueryMultipleReqVo; -import cn.iocoder.yudao.module.llm.service.http.vo.RagQueryReqVo; +import cn.iocoder.yudao.module.llm.service.http.vo.*; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.BeanUtils; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; import java.util.Map; /** * rag相关接口 */ @Service +@Slf4j public class RagHttpService { @Resource @@ -25,38 +28,52 @@ public class RagHttpService { /** * RAG健康检查API */ - public String ragHealth(Map headers){ + public RagHealthRespVO ragHealth(Map headers){ String ragHealth = llmBackendProperties.getRagHealth(); String res = HttpUtils.get(ragHealth, headers); - return res; + log.info(" ragHealth:{}", res); + RagHealthRespVO regHealthRespVO = JSON.parseObject(res, RagHealthRespVO.class); + log.info(" ragHealthRespVO:{}", regHealthRespVO); + return regHealthRespVO; } /** * 上传并向量化 */ - public String ragEmbed(Map headers, RagEmbedReqVo ragEmbedReqVo){ + public RagEmbedRespVO ragEmbed(Map headers, RagEmbedReqVo ragEmbedReqVo){ String ragEmbed = llmBackendProperties.getRagEmbed(); Map map = BeanUtils.beanToMap(ragEmbedReqVo); String res = HttpUtils.postForm(ragEmbed, headers,map); - return res; + log.info(" ragEmbedRespVO:{}", res); + RagEmbedRespVO ragEmbedRespVO = JSON.parseObject(res, RagEmbedRespVO.class); + log.info(" ragEmbedRespVO:{}", ragEmbedRespVO); + return ragEmbedRespVO; } /** * 获取所有向量id */ - public String ragIds(Map headers){ + public List ragIds(Map headers){ String ragIds = llmBackendProperties.getRagIds(); String res = HttpUtils.get(ragIds, headers); - return res; + log.info(" ragIds:{}", res); + List ids = JSON.parseArray(res, String.class); + log.info(" ragIds:{}", ids); + return ids; } /** * 根据id获取文档 */ - public String ragDocuments(Map headers){ + public RagDocumentsRespVO ragDocuments(Map headers, RagDocumentsReqVO ragDocumentsReqVO){ String ragDocuments = llmBackendProperties.getRagDocuments(); String res = HttpUtils.get(ragDocuments, headers); - return res; + log.info(" ragDocuments:{}", res); + List pages = JSON.parseArray(res, DocumentPageContent.class); + RagDocumentsRespVO ragDocumentRespVO = new RagDocumentsRespVO(); + ragDocumentRespVO.setPages(pages); + log.info(" ragDocumentRespVO:{}", ragDocumentRespVO); + return ragDocumentRespVO; } /** @@ -65,16 +82,28 @@ public class RagHttpService { public String ragDocumentsDel(Map headers){ String ragDocumentsDel = llmBackendProperties.getRagDocumentsDel(); String res = HttpUtils.del(ragDocumentsDel, headers); + log.info(" ragDocumentsDel:{}", res); return res; } /** * 根据file_id检索向量 */ - public String ragQuery(Map headers, RagQueryReqVo ragQueryReqVo){ + public RagQueryRespVO ragQuery(Map headers, RagQueryReqVo ragQueryReqVo){ String ragQuery = llmBackendProperties.getRagQuery(); String res = HttpUtils.post(ragQuery, headers, JSON.toJSONString(ragQueryReqVo)); - return res; + log.info(" ragQuery:{}", res); + JSONArray jsonArray = JSON.parseArray(res); + List pages = JSON.parseArray(jsonArray.getJSONObject(0).getString("page_content"), DocumentPageContent.class); + for (int i = 0; i < jsonArray.size(); i++) { + JSONArray temp = jsonArray.getJSONArray(i); + DocumentPageContent documentPageContent = JSON.toJavaObject(temp.getJSONObject(0), DocumentPageContent.class); + documentPageContent.setScore(String.valueOf(temp.getDouble(1))); + } + RagQueryRespVO ragQueryRespVO = new RagQueryRespVO(); + ragQueryRespVO.setPages(pages); + log.info(" ragQueryRespVO:{}", ragQueryRespVO); + return ragQueryRespVO; } /** diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/DocumentMetadata.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/DocumentMetadata.java new file mode 100644 index 000000000..303774011 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/DocumentMetadata.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.Data; + +@Data +public class DocumentMetadata { + private String file_id; + private String user_id; + private String digest; + private String source; +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/DocumentPageContent.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/DocumentPageContent.java new file mode 100644 index 000000000..0be861e64 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/DocumentPageContent.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.Data; + +@Data +public class DocumentPageContent { + + private String page_content; + private DocumentMetadata metadata; + private String score; +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagDocumentsReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagDocumentsReqVO.java new file mode 100644 index 000000000..d35358958 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagDocumentsReqVO.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class RagDocumentsReqVO { + + List ids; +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagDocumentsRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagDocumentsRespVO.java new file mode 100644 index 000000000..aa0f811ac --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagDocumentsRespVO.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class RagDocumentsRespVO { + + List pages; +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagEmbedReqVo.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagEmbedReqVo.java index 255881dc7..c40b4c31d 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagEmbedReqVo.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagEmbedReqVo.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.llm.service.http.vo; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import lombok.ToString; import java.io.File; @@ -9,10 +11,14 @@ import java.io.File; * 上传并向量化 请求参数 */ @Data +@NoArgsConstructor +@AllArgsConstructor @ToString(callSuper = true) public class RagEmbedReqVo { private String file_id; private File file; + + private String entity_id; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagEmbedRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagEmbedRespVO.java new file mode 100644 index 000000000..65af9368c --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagEmbedRespVO.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.Data; + +@Data +public class RagEmbedRespVO { + + private boolean status; + private String message; + private String fileId; + private String filename; + private boolean knownType; +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagHealthRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagHealthRespVO.java new file mode 100644 index 000000000..863644e41 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagHealthRespVO.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RagHealthRespVO { + + private String status; +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagQueryReqVo.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagQueryReqVo.java index 22a9dd26f..ab1ca0fdb 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagQueryReqVo.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagQueryReqVo.java @@ -13,4 +13,5 @@ public class RagQueryReqVo { private Integer k; + private String entity_id; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagQueryRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagQueryRespVO.java new file mode 100644 index 000000000..5cce58d41 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/RagQueryRespVO.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class RagQueryRespVO { + + private List pages; +} diff --git a/yudao-server/src/main/resources/application-dev.yaml b/yudao-server/src/main/resources/application-dev.yaml index 4bed9d4e1..539385de4 100644 --- a/yudao-server/src/main/resources/application-dev.yaml +++ b/yudao-server/src/main/resources/application-dev.yaml @@ -205,19 +205,19 @@ llm: backend: # RAG服务 #RAG健康检查 GET - rag_health: http://localhost:8123/health + rag_health: http://rag.xhllm.xinnuojinzhi.com/health #上传并向量化 POST - rag_embed: http://localhost:8123/embed + rag_embed: http://rag.xhllm.xinnuojinzhi.com/embed #获取所有向量id GET - rag_ids: http://localhost:8123/ids + rag_ids: http://rag.xhllm.xinnuojinzhi.com/ids #根据id获取文档 GET - rag_documents: http://localhost:8123/documents + rag_documents: http://rag.xhllm.xinnuojinzhi.com/documents #根据id删除文档 DEL - rag_documents_del: http://localhost:8123/documents + rag_documents_del: http://rag.xhllm.xinnuojinzhi.com/documents #根据file_id检索向量 POST - rag_query: http://localhost:8123/query + rag_query: http://rag.xhllm.xinnuojinzhi.com/query #支持多个文件id查询向量 GET - rag_query_multiple: http://localhost:8123/query_multiple + rag_query_multiple: http://rag.xhllm.xinnuojinzhi.com/query_multiple # LLM train and service api # 训练集列表 GET diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 67dec8454..e981a7636 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -248,19 +248,19 @@ llm: backend: #### RAG服务 #RAG健康检查 GET - rag_health: http://localhost:8123/health + rag_health: http://rag.xhllm.xinnuojinzhi.com/health #上传并向量化 POST - rag_embed: http://localhost:8123/embed + rag_embed: http://rag.xhllm.xinnuojinzhi.com/embed #获取所有向量id GET - rag_ids: http://localhost:8123/ids + rag_ids: http://rag.xhllm.xinnuojinzhi.com/ids #根据id获取文档 GET - rag_documents: http://localhost:8123/documents + rag_documents: http://rag.xhllm.xinnuojinzhi.com/documents #根据id删除文档 DEL - rag_documents_del: http://localhost:8123/documents + rag_documents_del: http://rag.xhllm.xinnuojinzhi.com/documents #根据file_id检索向量 POST - rag_query: http://localhost:8123/query + rag_query: http://rag.xhllm.xinnuojinzhi.com/query #支持多个文件id查询向量 GET - rag_query_multiple: http://localhost:8123/query_multiple + rag_query_multiple: http://rag.xhllm.xinnuojinzhi.com/query_multiple #### LLM train and service api # 训练集列表 GET