Commit 51d16f4b authored by alex yao's avatar alex yao

feat: 支持文档解析

parent 638e3dd7
...@@ -29,11 +29,23 @@ public interface AgentApplicationInfoService { ...@@ -29,11 +29,23 @@ public interface AgentApplicationInfoService {
boolean deletedAgentApplication(String agentId) throws Exception; boolean deletedAgentApplication(String agentId) throws Exception;
/** /**
* 应用预览 * 应用对话
*
* @param agentId 应用ID
* @param identifier 对话唯一标识
* @param largeModel 模型
* @param agentSystem 应用角色指令
* @param knowledgeIds 知识库ID
* @param communicationTurn 对话轮数
* @param topP 模型参数topP
* @param temperature 模型参数temperature
* @param messages 对话消息
* @param tools 插件配置
* @param fileUrls 文件URL
*/ */
String callAgentApplication(String agentId, String identifier, String largeModel, String[] unitIds, String agentSystem, String callAgentApplication(String agentId, String identifier, String largeModel, String agentSystem,
Integer[] knowledgeIds, Integer communicationTurn, Float topP, Float temperature, Integer[] knowledgeIds, Integer communicationTurn, Float topP, Float temperature,
List<Message> messages, List<Tool> tools, HttpServletResponse httpServletResponse) throws Exception; List<Message> messages, List<Tool> tools, List<String> fileUrls, HttpServletResponse httpServletResponse) throws Exception;
/** /**
* 应用下架 * 应用下架
......
...@@ -12,6 +12,7 @@ import cn.com.poc.common.constant.CommonConstant; ...@@ -12,6 +12,7 @@ import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.BlContext; import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.ListUtils;
import cn.com.poc.knowledge.entity.BizKnowledgeDocumentEntity; import cn.com.poc.knowledge.entity.BizKnowledgeDocumentEntity;
import cn.com.poc.knowledge.service.BizKnowledgeDocumentService; import cn.com.poc.knowledge.service.BizKnowledgeDocumentService;
import cn.com.poc.support.security.oauth.entity.UserBaseEntity; import cn.com.poc.support.security.oauth.entity.UserBaseEntity;
...@@ -28,11 +29,9 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.BaiduAISailsT ...@@ -28,11 +29,9 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.BaiduAISailsT
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
import cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum; import cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum;
import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.GetLongMemory; import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.LongMemory;
import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.LongMemoryEntity; import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.LongMemoryEntity;
import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.GetMemoryVariable; import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriter;
import cn.com.poc.thirdparty.resource.demand.ai.function.value_memory.GetValueMemory;
import cn.com.poc.thirdparty.resource.demand.ai.function.value_memory.SetValueMemoryConstants;
import cn.com.poc.thirdparty.service.LLMService; import cn.com.poc.thirdparty.service.LLMService;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.data.model.PagingInfo; import cn.com.yict.framemax.data.model.PagingInfo;
...@@ -116,12 +115,9 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ ...@@ -116,12 +115,9 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
} }
} }
if (needClean) { if (needClean) {
String contentKey = SetValueMemoryConstants.REDIS_PREFIX + entity.getAgentId() + ":" + entity.getMemberId(); MemoryVariableWriter.clean(entity.getAgentId() + ":" + entity.getAgentId());
redisService.del(contentKey);
} }
// 保存或更新 // 保存或更新
return StringUtils.isEmpty(entity.getAgentId()) ? return StringUtils.isEmpty(entity.getAgentId()) ?
bizAgentApplicationInfoService.save(entity) : bizAgentApplicationInfoService.update(entity); bizAgentApplicationInfoService.save(entity) : bizAgentApplicationInfoService.update(entity);
...@@ -155,8 +151,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ ...@@ -155,8 +151,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
if (CollectionUtils.isNotEmpty(items)) { if (CollectionUtils.isNotEmpty(items)) {
logger.info("variables structure cache remove,items:{}", items); logger.info("variables structure cache remove,items:{}", items);
for (DialogsIdsQueryByAgentIdQueryItem item : items) { for (DialogsIdsQueryByAgentIdQueryItem item : items) {
String contentKey = SetValueMemoryConstants.REDIS_PREFIX + item.getDialogsId() + ":" + bizAgentApplicationInfoEntity.getAgentId() + ":"; MemoryVariableWriter.clearByPre(item.getDialogsId() + ":" + bizAgentApplicationInfoEntity.getAgentId());
redisService.delByPre(contentKey);
} }
} }
...@@ -179,14 +174,17 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ ...@@ -179,14 +174,17 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
} }
@Override @Override
public String callAgentApplication(String agentId, String identifier, String largeModel, String[] unitIds, String agentSystem, Integer[] kdIds, Integer communicationTurn, Float topP, Float temperature, List<Message> messages, List<Tool> tools, HttpServletResponse httpServletResponse) throws Exception { public String callAgentApplication(String agentId, String identifier, String largeModel,
logger.info("--------- Call Agent Application large model:{},unitIds:{},agentSystem:{},knowledgeIds:{}" + " communicationTurn:{},topP:{},messages:{}--------------", largeModel, unitIds, agentSystem, kdIds, communicationTurn, topP, messages); String agentSystem, Integer[] kdIds, Integer communicationTurn, Float topP, Float temperature,
List<Message> messages, List<Tool> tools, List<String> fileUrls, HttpServletResponse httpServletResponse) throws Exception {
logger.info("Call Agent Application, agentId:{}, identifier:{},largeModel:{},agentSystem:{},kdIds:{},communicationTurn:{},topP:{},temperature:{},messages:{}, tools:{}"
, agentId, identifier, largeModel, agentSystem, kdIds, communicationTurn, topP, temperature, messages, tools);
String model = modelConvert(largeModel); String model = modelConvert(largeModel);
Tool[] toolArray = tools.toArray(new Tool[0]); Tool[] toolArray = tools.toArray(new Tool[0]);
FunctionResult functionResult = functionCall(identifier, messages, toolArray, agentId); FunctionResult functionResult = functionCall(identifier, messages, toolArray, agentId, fileUrls);
String promptTemplate = buildDialogsPrompt(functionResult, messages, agentSystem, kdIds, toolArray, identifier, agentId); String promptTemplate = buildDialogsPrompt(functionResult, messages, agentSystem, kdIds, toolArray, identifier, agentId);
...@@ -599,7 +597,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ ...@@ -599,7 +597,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
String name = tool.getFunction().getName(); String name = tool.getFunction().getName();
// 长期记忆 // 长期记忆
if (LargeModelFunctionEnum.set_long_memory.name().equals(name)) { if (LargeModelFunctionEnum.set_long_memory.name().equals(name)) {
List<LongMemoryEntity> longMemoryEntities = GetLongMemory.get(identifier + ":" + agentId); List<LongMemoryEntity> longMemoryEntities = LongMemory.get(identifier + ":" + agentId);
if (CollectionUtils.isNotEmpty(longMemoryEntities)) { if (CollectionUtils.isNotEmpty(longMemoryEntities)) {
StringBuilder stringBuilder = new StringBuilder(""); StringBuilder stringBuilder = new StringBuilder("");
for (LongMemoryEntity longMemoryEntity : longMemoryEntities) { for (LongMemoryEntity longMemoryEntity : longMemoryEntities) {
...@@ -615,7 +613,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ ...@@ -615,7 +613,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
// 变量记忆 // 变量记忆
if (LargeModelFunctionEnum.memory_variable_writer.name().equals(name)) { if (LargeModelFunctionEnum.memory_variable_writer.name().equals(name)) {
Map<Object, Object> map = GetMemoryVariable.get(identifier + ":" + agentId); Map<Object, Object> map = MemoryVariableWriter.get(identifier + ":" + agentId);
StringBuilder stringBuilder = new StringBuilder(""); StringBuilder stringBuilder = new StringBuilder("");
if (MapUtils.isNotEmpty(map)) { if (MapUtils.isNotEmpty(map)) {
Set<Object> keySet = map.keySet(); Set<Object> keySet = map.keySet();
...@@ -799,7 +797,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ ...@@ -799,7 +797,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
* @param messages * @param messages
* @param tools * @param tools
*/ */
private FunctionResult functionCall(String identifier, List<Message> messages, Tool[] tools, String agentId) { private FunctionResult functionCall(String identifier, List<Message> messages, Tool[] tools, String agentId, List<String> fileUrls) {
FunctionResult result = new FunctionResult(); FunctionResult result = new FunctionResult();
if (ArrayUtils.isEmpty(tools)) { if (ArrayUtils.isEmpty(tools)) {
return result; return result;
...@@ -811,6 +809,11 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ ...@@ -811,6 +809,11 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
} else { } else {
query = content.toString(); query = content.toString();
} }
if (CollectionUtils.isNotEmpty(fileUrls)) {
query = JsonUtils.serialize(fileUrls) + query;
}
FunctionCallResult functionCallResult = llmService.functionCall(query, tools); FunctionCallResult functionCallResult = llmService.functionCall(query, tools);
if (functionCallResult != null && functionCallResult.isNeed()) { if (functionCallResult != null && functionCallResult.isNeed()) {
// 执行函数返回结果 // 执行函数返回结果
......
...@@ -65,6 +65,7 @@ public class AgentApplicationInfoConvert { ...@@ -65,6 +65,7 @@ public class AgentApplicationInfoConvert {
if (StringUtils.isNotBlank(model.getKnowledgeIds())) { if (StringUtils.isNotBlank(model.getKnowledgeIds())) {
entity.setKnowledgeIds(JsonUtils.deSerialize(model.getKnowledgeIds(), Integer[].class)); entity.setKnowledgeIds(JsonUtils.deSerialize(model.getKnowledgeIds(), Integer[].class));
} }
entity.setIsDocumentParsing(model.getIsDocumentParsing());
entity.setLargeModel(model.getLargeModel()); entity.setLargeModel(model.getLargeModel());
entity.setTopP(model.getTopP()); entity.setTopP(model.getTopP());
entity.setTemperature(model.getTemperature()); entity.setTemperature(model.getTemperature());
...@@ -93,6 +94,7 @@ public class AgentApplicationInfoConvert { ...@@ -93,6 +94,7 @@ public class AgentApplicationInfoConvert {
model.setPreamble(entity.getPreamble()); model.setPreamble(entity.getPreamble());
model.setPublishTime(entity.getPublishTime()); model.setPublishTime(entity.getPublishTime());
model.setIsLongMemory(entity.getIsLongMemory()); model.setIsLongMemory(entity.getIsLongMemory());
model.setIsDocumentParsing(entity.getIsDocumentParsing());
if (CollectionUtils.isNotEmpty(entity.getVariableStructure())) { if (CollectionUtils.isNotEmpty(entity.getVariableStructure())) {
model.setVariableStructure(JsonUtils.serialize(entity.getVariableStructure())); model.setVariableStructure(JsonUtils.serialize(entity.getVariableStructure()));
} }
...@@ -144,6 +146,7 @@ public class AgentApplicationInfoConvert { ...@@ -144,6 +146,7 @@ public class AgentApplicationInfoConvert {
AgentApplicationKnowledgeConfig knowledgeConfig = new AgentApplicationKnowledgeConfig(); AgentApplicationKnowledgeConfig knowledgeConfig = new AgentApplicationKnowledgeConfig();
knowledgeConfig.setKnowledgeIds(entity.getKnowledgeIds()); knowledgeConfig.setKnowledgeIds(entity.getKnowledgeIds());
knowledgeConfig.setIsDocumentParsing(entity.getIsDocumentParsing());
AgentApplicationCommModelConfig commModelConfig = new AgentApplicationCommModelConfig(); AgentApplicationCommModelConfig commModelConfig = new AgentApplicationCommModelConfig();
commModelConfig.setLargeModel(entity.getLargeModel()); commModelConfig.setLargeModel(entity.getLargeModel());
...@@ -191,6 +194,7 @@ public class AgentApplicationInfoConvert { ...@@ -191,6 +194,7 @@ public class AgentApplicationInfoConvert {
if (ObjectUtil.isNotEmpty(dto.getKnowledgeConfig())) { if (ObjectUtil.isNotEmpty(dto.getKnowledgeConfig())) {
entity.setKnowledgeIds(dto.getKnowledgeConfig().getKnowledgeIds()); entity.setKnowledgeIds(dto.getKnowledgeConfig().getKnowledgeIds());
entity.setIsDocumentParsing(dto.getKnowledgeConfig().getIsDocumentParsing());
} }
if (ObjectUtil.isNotEmpty(dto.getCommModelConfig())) { if (ObjectUtil.isNotEmpty(dto.getCommModelConfig())) {
...@@ -221,6 +225,7 @@ public class AgentApplicationInfoConvert { ...@@ -221,6 +225,7 @@ public class AgentApplicationInfoConvert {
entity.setPreamble(infoQueryItem.getPreamble()); entity.setPreamble(infoQueryItem.getPreamble());
entity.setPublishTime(infoQueryItem.getPublishTime()); entity.setPublishTime(infoQueryItem.getPublishTime());
entity.setIsLongMemory(infoQueryItem.getIsLongMemory()); entity.setIsLongMemory(infoQueryItem.getIsLongMemory());
entity.setIsDocumentParsing(infoQueryItem.getIsDocumentParsing());
if (StringUtils.isNotBlank(infoQueryItem.getVariableStructure())) { if (StringUtils.isNotBlank(infoQueryItem.getVariableStructure())) {
entity.setVariableStructure(JsonUtils.deSerialize(infoQueryItem.getVariableStructure(), new TypeReference<List<Variable>>() { entity.setVariableStructure(JsonUtils.deSerialize(infoQueryItem.getVariableStructure(), new TypeReference<List<Variable>>() {
......
...@@ -36,6 +36,7 @@ public class BizAgentApplicationPublishConvert { ...@@ -36,6 +36,7 @@ public class BizAgentApplicationPublishConvert {
entity.setPreamble(model.getPreamble()); entity.setPreamble(model.getPreamble());
entity.setIsLongMemory(model.getIsLongMemory()); entity.setIsLongMemory(model.getIsLongMemory());
entity.setPublishTime(model.getModifiedTime()); entity.setPublishTime(model.getModifiedTime());
entity.setIsDocumentParsing(model.getIsDocumentParsing());
if (StringUtils.isNotBlank(model.getVariableStructure())) { if (StringUtils.isNotBlank(model.getVariableStructure())) {
entity.setVariableStructure(JsonUtils.deSerialize(model.getVariableStructure(), new TypeReference<List<Variable>>() { entity.setVariableStructure(JsonUtils.deSerialize(model.getVariableStructure(), new TypeReference<List<Variable>>() {
}.getType())); }.getType()));
...@@ -76,6 +77,7 @@ public class BizAgentApplicationPublishConvert { ...@@ -76,6 +77,7 @@ public class BizAgentApplicationPublishConvert {
model.setAgentSystem(entity.getAgentSystem()); model.setAgentSystem(entity.getAgentSystem());
model.setPreamble(entity.getPreamble()); model.setPreamble(entity.getPreamble());
model.setIsLongMemory(entity.getIsLongMemory()); model.setIsLongMemory(entity.getIsLongMemory());
model.setIsDocumentParsing(entity.getIsDocumentParsing());
if (CollectionUtils.isNotEmpty(entity.getVariableStructure())) { if (CollectionUtils.isNotEmpty(entity.getVariableStructure())) {
model.setVariableStructure(JsonUtils.serialize(entity.getVariableStructure())); model.setVariableStructure(JsonUtils.serialize(entity.getVariableStructure()));
} }
...@@ -126,6 +128,7 @@ public class BizAgentApplicationPublishConvert { ...@@ -126,6 +128,7 @@ public class BizAgentApplicationPublishConvert {
AgentApplicationKnowledgeConfig knowledgeConfig = new AgentApplicationKnowledgeConfig(); AgentApplicationKnowledgeConfig knowledgeConfig = new AgentApplicationKnowledgeConfig();
knowledgeConfig.setKnowledgeIds(entity.getKnowledgeIds()); knowledgeConfig.setKnowledgeIds(entity.getKnowledgeIds());
knowledgeConfig.setIsDocumentParsing(entity.getIsDocumentParsing());
AgentApplicationCommModelConfig commModelConfig = new AgentApplicationCommModelConfig(); AgentApplicationCommModelConfig commModelConfig = new AgentApplicationCommModelConfig();
commModelConfig.setLargeModel(entity.getLargeModel()); commModelConfig.setLargeModel(entity.getLargeModel());
...@@ -173,6 +176,7 @@ public class BizAgentApplicationPublishConvert { ...@@ -173,6 +176,7 @@ public class BizAgentApplicationPublishConvert {
if (ObjectUtil.isNotEmpty(dto.getKnowledgeConfig())) { if (ObjectUtil.isNotEmpty(dto.getKnowledgeConfig())) {
entity.setKnowledgeIds(dto.getKnowledgeConfig().getKnowledgeIds()); entity.setKnowledgeIds(dto.getKnowledgeConfig().getKnowledgeIds());
entity.setIsDocumentParsing(dto.getKnowledgeConfig().getIsDocumentParsing());
} }
if (ObjectUtil.isNotEmpty(dto.getCommModelConfig())) { if (ObjectUtil.isNotEmpty(dto.getCommModelConfig())) {
......
...@@ -18,4 +18,18 @@ public class AgentApplicationKnowledgeConfig { ...@@ -18,4 +18,18 @@ public class AgentApplicationKnowledgeConfig {
public void setKnowledgeIds(java.lang.Integer[] knowledgeIds) { public void setKnowledgeIds(java.lang.Integer[] knowledgeIds) {
this.knowledgeIds = knowledgeIds; this.knowledgeIds = knowledgeIds;
} }
/**
* is_document_parsing
* 是否开启文档解析 1、Y 是 2、N 否
*/
private java.lang.String isDocumentParsing;
public java.lang.String getIsDocumentParsing() {
return this.isDocumentParsing;
}
public void setIsDocumentParsing(java.lang.String isDocumentParsing) {
this.isDocumentParsing = isDocumentParsing;
}
} }
...@@ -19,6 +19,16 @@ public class AgentApplicationPreviewDto implements Serializable { ...@@ -19,6 +19,16 @@ public class AgentApplicationPreviewDto implements Serializable {
private List<Message> messages; private List<Message> messages;
private List<String> fileUrls;
public List<String> getFileUrls() {
return fileUrls;
}
public void setFileUrls(List<String> fileUrls) {
this.fileUrls = fileUrls;
}
public Float getTopP() { public Float getTopP() {
return topP; return topP;
} }
......
...@@ -315,6 +315,19 @@ public class BizAgentApplicationInfoEntity { ...@@ -315,6 +315,19 @@ public class BizAgentApplicationInfoEntity {
this.isLongMemory = isLongMemory; this.isLongMemory = isLongMemory;
} }
/**
* is_document_parsing
* 是否开启文档解析 1、Y 是 2、N 否
*/
private java.lang.String isDocumentParsing;
public java.lang.String getIsDocumentParsing() {
return this.isDocumentParsing;
}
public void setIsDocumentParsing(java.lang.String isDocumentParsing) {
this.isDocumentParsing = isDocumentParsing;
}
/** /**
* is_deleted * is_deleted
......
...@@ -377,7 +377,24 @@ public class BizAgentApplicationInfoModel extends BaseModelClass implements Seri ...@@ -377,7 +377,24 @@ public class BizAgentApplicationInfoModel extends BaseModelClass implements Seri
this.isLongMemory = isLongMemory; this.isLongMemory = isLongMemory;
super.addValidField("isLongMemory"); super.addValidField("isLongMemory");
} }
/** is_document_parsing
*是否开启文档解析 1、Y 是 2、N 否
*/
private java.lang.String isDocumentParsing;
@Column(name = "is_document_parsing",length = 1)
public java.lang.String getIsDocumentParsing(){
return this.isDocumentParsing;
}
public void setIsDocumentParsing(java.lang.String isDocumentParsing){
this.isDocumentParsing = isDocumentParsing;
super.addValidField("isDocumentParsing");
}
/** is_deleted /** is_deleted
*是否删除 1、Y 是 2、N 否 *是否删除 1、Y 是 2、N 否
*/ */
......
...@@ -344,6 +344,19 @@ public class BizAgentApplicationPublishModel extends BaseModelClass implements S ...@@ -344,6 +344,19 @@ public class BizAgentApplicationPublishModel extends BaseModelClass implements S
super.addValidField("isLongMemory"); super.addValidField("isLongMemory");
} }
private java.lang.String isDocumentParsing;
@Column(name = "is_document_parsing",length = 1)
public java.lang.String getIsDocumentParsing(){
return this.isDocumentParsing;
}
public void setIsDocumentParsing(java.lang.String isDocumentParsing){
this.isDocumentParsing = isDocumentParsing;
super.addValidField("isDocumentParsing");
}
/** is_deleted /** is_deleted
*是否删除 1、Y 是 2、N 否 *是否删除 1、Y 是 2、N 否
*/ */
......
...@@ -21,6 +21,7 @@ select distinct ...@@ -21,6 +21,7 @@ select distinct
unit_ids, unit_ids,
variable_structure, variable_structure,
is_long_memory, is_long_memory,
is_document_parsing,
is_deleted, is_deleted,
CREATOR, CREATOR,
CREATED_TIME, CREATED_TIME,
......
...@@ -285,18 +285,18 @@ public class AgentApplicationInfoQueryItem extends BaseItemClass implements Seri ...@@ -285,18 +285,18 @@ public class AgentApplicationInfoQueryItem extends BaseItemClass implements Seri
} }
/**
/** temperature * temperature
*对话模型 温度 [0-1.00] * 对话模型 温度 [0-1.00]
*/ */
private java.lang.Float temperature; private java.lang.Float temperature;
@Column(name = "temperature") @Column(name = "temperature")
public java.lang.Float getTemperature(){ public java.lang.Float getTemperature() {
return this.temperature; return this.temperature;
} }
public void setTemperature(java.lang.Float temperature){ public void setTemperature(java.lang.Float temperature) {
this.temperature = temperature; this.temperature = temperature;
} }
...@@ -347,6 +347,23 @@ public class AgentApplicationInfoQueryItem extends BaseItemClass implements Seri ...@@ -347,6 +347,23 @@ public class AgentApplicationInfoQueryItem extends BaseItemClass implements Seri
this.isLongMemory = isLongMemory; this.isLongMemory = isLongMemory;
} }
/**
* is_document_parsing
* 是否开启文档解析 1、Y 是 2、N 否
*/
private java.lang.String isDocumentParsing;
@Column(name = "is_document_parsing", length = 1)
public java.lang.String getIsDocumentParsing() {
return this.isDocumentParsing;
}
public void setIsDocumentParsing(java.lang.String isDocumentParsing) {
this.isDocumentParsing = isDocumentParsing;
}
/** /**
* is_deleted * is_deleted
* is_deleted * is_deleted
......
...@@ -7,23 +7,19 @@ import cn.com.poc.agent_application.entity.*; ...@@ -7,23 +7,19 @@ import cn.com.poc.agent_application.entity.*;
import cn.com.poc.agent_application.query.AgentApplicationInfoQueryCondition; import cn.com.poc.agent_application.query.AgentApplicationInfoQueryCondition;
import cn.com.poc.agent_application.rest.AgentApplicationInfoRest; import cn.com.poc.agent_application.rest.AgentApplicationInfoRest;
import cn.com.poc.agent_application.service.*; import cn.com.poc.agent_application.service.*;
import cn.com.poc.agent_application.utils.AgentApplicationUtils; import cn.com.poc.agent_application.utils.AgentApplicationToolsBuilder;
import cn.com.poc.common.annotation.RedisLimit; import cn.com.poc.common.annotation.RedisLimit;
import cn.com.poc.common.constant.CommonConstant; import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.BlContext; import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.knowledge.aggregate.KnowledgeService; import cn.com.poc.knowledge.aggregate.KnowledgeService;
import cn.com.poc.support.security.oauth.entity.UserBaseEntity; import cn.com.poc.support.security.oauth.entity.UserBaseEntity;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool;
import cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum;
import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.SetLongMemoryConstants; import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.SetLongMemoryConstants;
import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.GetMemoryVariable; import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriter;
import cn.com.poc.thirdparty.resource.demand.ai.function.value_memory.GetValueMemory;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.data.model.PagingInfo; import cn.com.yict.framemax.data.model.PagingInfo;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -34,7 +30,6 @@ import javax.annotation.Resource; ...@@ -34,7 +30,6 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.text.Collator;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -217,7 +212,7 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest { ...@@ -217,7 +212,7 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
List<Integer> kdIds = knowledgeService.getKdIdsByKnowledgeInfoIds(infoEntity.getKnowledgeIds()); List<Integer> kdIds = knowledgeService.getKdIdsByKnowledgeInfoIds(infoEntity.getKnowledgeIds());
//配置对话function //配置对话function
List<Tool> tools = AgentApplicationUtils.buildMemoryConfig(infoEntity.getVariableStructure(), infoEntity.getIsLongMemory(), dialogueId, agentId); List<Tool> tools = AgentApplicationToolsBuilder.buildFunctionConfig(infoEntity.getVariableStructure(), infoEntity.getIsLongMemory(), dialogueId, agentId, infoEntity.getUnitIds(), infoEntity.getIsDocumentParsing());
//对话大模型配置 //对话大模型配置
String model = StringUtils.isNotBlank(dto.getModelNickName()) ? dto.getModelNickName() : infoEntity.getLargeModel(); String model = StringUtils.isNotBlank(dto.getModelNickName()) ? dto.getModelNickName() : infoEntity.getLargeModel();
...@@ -227,8 +222,8 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest { ...@@ -227,8 +222,8 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
//调用应用服务 //调用应用服务
agentApplicationInfoService.callAgentApplication(agentId, dialogueId, model, agentApplicationInfoService.callAgentApplication(agentId, dialogueId, model,
infoEntity.getUnitIds(), agentSystem, kdIds.toArray(new Integer[0]), infoEntity.getCommunicationTurn(), topP, agentSystem, kdIds.toArray(new Integer[0]), infoEntity.getCommunicationTurn(), topP,
temperature, dto.getMessages(), tools, httpServletResponse); temperature, dto.getMessages(), tools, dto.getFileUrls(), httpServletResponse);
} catch (Exception e) { } catch (Exception e) {
httpServletResponse.setContentType("text/event-stream"); httpServletResponse.setContentType("text/event-stream");
PrintWriter writer = httpServletResponse.getWriter(); PrintWriter writer = httpServletResponse.getWriter();
...@@ -319,7 +314,7 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest { ...@@ -319,7 +314,7 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
public List<AgentApplicationValueMemoryDto> getVariableList(String agentId) { public List<AgentApplicationValueMemoryDto> getVariableList(String agentId) {
List<AgentApplicationValueMemoryDto> result = new ArrayList<>(); List<AgentApplicationValueMemoryDto> result = new ArrayList<>();
BizAgentApplicationInfoEntity infoEntity = bizAgentApplicationInfoService.getByAgentId(agentId); BizAgentApplicationInfoEntity infoEntity = bizAgentApplicationInfoService.getByAgentId(agentId);
Map<Object, Object> map = GetMemoryVariable.get(agentId + ":" + agentId); Map<Object, Object> map = MemoryVariableWriter.get(agentId + ":" + agentId);
List<Variable> variableStructure = infoEntity.getVariableStructure(); List<Variable> variableStructure = infoEntity.getVariableStructure();
if (MapUtils.isEmpty(map)) { if (MapUtils.isEmpty(map)) {
if (CollectionUtils.isEmpty(variableStructure)) { if (CollectionUtils.isEmpty(variableStructure)) {
......
...@@ -213,6 +213,7 @@ public class BizAgentApplicationInfoServiceImpl extends BaseServiceImpl ...@@ -213,6 +213,7 @@ public class BizAgentApplicationInfoServiceImpl extends BaseServiceImpl
if (entity.getTemperature() != null) { if (entity.getTemperature() != null) {
Assert.isTrue(entity.getTemperature() > 0 && entity.getTemperature() <= 1.0, "temperature is error,must greater than 0, less than or equal to 1.9"); Assert.isTrue(entity.getTemperature() > 0 && entity.getTemperature() <= 1.0, "temperature is error,must greater than 0, less than or equal to 1.9");
} }
model.setIsDocumentParsing(entity.getIsDocumentParsing());
model.setIsLongMemory(entity.getIsLongMemory()); model.setIsLongMemory(entity.getIsLongMemory());
model.setTemperature(entity.getTemperature()); model.setTemperature(entity.getTemperature());
model.setTopP(entity.getTopP()); model.setTopP(entity.getTopP());
......
...@@ -190,5 +190,6 @@ public class BizAgentApplicationPublishServiceImpl extends BaseServiceImpl ...@@ -190,5 +190,6 @@ public class BizAgentApplicationPublishServiceImpl extends BaseServiceImpl
if (ArrayUtils.isNotEmpty(entity.getUnitIds())) { if (ArrayUtils.isNotEmpty(entity.getUnitIds())) {
model.setUnitIds(JsonUtils.serialize(entity.getUnitIds())); model.setUnitIds(JsonUtils.serialize(entity.getUnitIds()));
} }
model.setIsDocumentParsing(entity.getIsDocumentParsing());
} }
} }
\ No newline at end of file
...@@ -5,37 +5,41 @@ import cn.com.poc.common.constant.CommonConstant; ...@@ -5,37 +5,41 @@ import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool; import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool;
import cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum; import cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum;
import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.GetMemoryVariable; import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriter;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ArrayUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class AgentApplicationUtils { public class AgentApplicationToolsBuilder {
/** /**
* 构造Agent应用 记忆函数配置 * 构造Agent应用 函数配置
* *
* @param variableStructures * @param variableStructures 记忆变量
* @param isLongMemory * @param isLongMemory 是否开启长期记忆
* @param identifier * @param identifier 标识符
* @param agentId * @param agentId 应用id
* @param unitIds 插件id
* @param isDocumentParsing 是否开启文档解析
* @return * @return
*/ */
public static List<Tool> buildMemoryConfig(List<Variable> variableStructures, String isLongMemory, String identifier, String agentId) { public static List<Tool> buildFunctionConfig(List<Variable> variableStructures, String isLongMemory, String identifier, String agentId, String[] unitIds, String isDocumentParsing) {
List<Tool> tools = new ArrayList<>(); List<Tool> tools = new ArrayList<>();
//开启对话变量 //开启对话变量
if (CollectionUtils.isNotEmpty(variableStructures)) { if (CollectionUtils.isNotEmpty(variableStructures)) {
String functionName = LargeModelFunctionEnum.memory_variable_writer.name(); String functionName = LargeModelFunctionEnum.memory_variable_writer.name();
String llmConfig = LargeModelFunctionEnum.valueOf(functionName).getFunction().getVariableStructureLLMConfig(variableStructures).get(0); String llmConfig = LargeModelFunctionEnum.valueOf(functionName).getFunction().getLLMConfig(variableStructures).get(0);
Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class); Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class);
tools.add(tool); tools.add(tool);
//初始化变量函数 //初始化变量函数
Map<Object, Object> map = GetMemoryVariable.get(identifier + ":" + agentId); Map<Object, Object> map = MemoryVariableWriter.get(identifier + ":" + agentId);
if (MapUtils.isEmpty(map)) { if (MapUtils.isEmpty(map)) {
List<Variable> variableStructure = variableStructures; List<Variable> variableStructure = variableStructures;
for (Variable variable : variableStructure) { for (Variable variable : variableStructure) {
...@@ -55,7 +59,29 @@ public class AgentApplicationUtils { ...@@ -55,7 +59,29 @@ public class AgentApplicationUtils {
Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class); Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class);
tools.add(tool); tools.add(tool);
} }
//开启文档解析
if (CommonConstant.YOrN.Y.equals(isDocumentParsing)) {
String functionName = LargeModelFunctionEnum.document_reader.name();
String llmConfig = LargeModelFunctionEnum.valueOf(functionName).getFunction().getLLMConfig().get(0);
Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class);
tools.add(tool);
}
//初始化插件函数
if (ArrayUtils.isNotEmpty(unitIds)) {
for (String unitId : unitIds) {
LargeModelFunctionEnum modelFunctionEnum = LargeModelFunctionEnum.getFunction(unitId);
if (modelFunctionEnum == null) {
continue;
}
String llmConfig = modelFunctionEnum.getFunction().getLLMConfig().get(0);
Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class);
tools.add(tool);
}
}
return tools; return tools;
} }
} }
...@@ -131,4 +131,31 @@ public class DocumentLoad { ...@@ -131,4 +131,31 @@ public class DocumentLoad {
doc.close(); doc.close();
return stringBuilder.toString(); return stringBuilder.toString();
} }
public static File downloadURLDocument(String path) {
// 下载网络文件
int bytesum = 0;
int byteread = 0;
try {
URL url = new URL(path);
URLConnection conn = url.openConnection();
String[] split = url.getFile().split("\\.");
String suffix = split[split.length - 1];
File tempFile = File.createTempFile(UUIDTool.getUUID(), "." + suffix);
FileOutputStream fs = new FileOutputStream(tempFile);
InputStream inStream = conn.getInputStream();
byte[] buffer = new byte[1024];
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread;
fs.write(buffer, 0, byteread);
}
fs.close();
return tempFile;
} catch (IOException e) {
throw new I18nMessageException("exception/file.load.error");
}
}
} }
...@@ -10,8 +10,13 @@ public interface AgentApplicationService { ...@@ -10,8 +10,13 @@ public interface AgentApplicationService {
/** /**
* 调用 已发布Agent应用 * 调用 已发布Agent应用
*
* @param agentId 应用ID
* @param dialogsId 对话ID
* @param input 用户输入
* @param fileUrls 文件URL
*/ */
void callAgentApplication(String agentId, String dialogsId, String input, HttpServletResponse httpServletResponse) throws Exception; void callAgentApplication(String agentId, String dialogsId, String input, List<String> fileUrls, HttpServletResponse httpServletResponse) throws Exception;
/** /**
* 追问AI生成 * 追问AI生成
...@@ -24,7 +29,7 @@ public interface AgentApplicationService { ...@@ -24,7 +29,7 @@ public interface AgentApplicationService {
/** /**
* [首页] 获取推荐问 * [首页] 获取推荐问
* *
* @param xlang 语言 zh-cn 中文简体 en 英文 zh-tw 中文繁体 * @param xlang 语言 zh-cn 中文简体 en 英文 zh-tw 中文繁体
* @param memberId 用户ID * @param memberId 用户ID
*/ */
List<String> getRecommendQuestions(String xlang, Long memberId) throws InterruptedException; List<String> getRecommendQuestions(String xlang, Long memberId) throws InterruptedException;
......
...@@ -13,7 +13,7 @@ import cn.com.poc.agent_application.service.BizAgentApplicationDialoguesRecordSe ...@@ -13,7 +13,7 @@ import cn.com.poc.agent_application.service.BizAgentApplicationDialoguesRecordSe
import cn.com.poc.agent_application.service.BizAgentApplicationGcConfigService; import cn.com.poc.agent_application.service.BizAgentApplicationGcConfigService;
import cn.com.poc.agent_application.service.BizAgentApplicationPublishService; import cn.com.poc.agent_application.service.BizAgentApplicationPublishService;
import cn.com.poc.agent_application.service.BizMemberAgentApplicationCollectService; import cn.com.poc.agent_application.service.BizMemberAgentApplicationCollectService;
import cn.com.poc.agent_application.utils.AgentApplicationUtils; import cn.com.poc.agent_application.utils.AgentApplicationToolsBuilder;
import cn.com.poc.common.constant.CommonConstant; import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.common.constant.XLangConstant; import cn.com.poc.common.constant.XLangConstant;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
...@@ -29,7 +29,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.constants.LLMRoleEnum; ...@@ -29,7 +29,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.constants.LLMRoleEnum;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
import cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum; import cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum;
import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.GetMemoryVariable; import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriter;
import cn.com.poc.thirdparty.service.LLMService; import cn.com.poc.thirdparty.service.LLMService;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.data.model.PagingInfo; import cn.com.yict.framemax.data.model.PagingInfo;
...@@ -87,7 +87,7 @@ public class AgentApplicationServiceImpl implements AgentApplicationService { ...@@ -87,7 +87,7 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
private RedisService redisService; private RedisService redisService;
@Override @Override
public void callAgentApplication(String agentId, String dialogsId, String input, HttpServletResponse httpServletResponse) { public void callAgentApplication(String agentId, String dialogsId, String input, List<String> fileUrls, HttpServletResponse httpServletResponse) {
UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException(); UserBaseEntity userBaseEntity = BlContext.getCurrentUserNotException();
if (userBaseEntity == null) { if (userBaseEntity == null) {
...@@ -112,9 +112,6 @@ public class AgentApplicationServiceImpl implements AgentApplicationService { ...@@ -112,9 +112,6 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
// 构造对话参数 // 构造对话参数
List<Message> messages = buildMessages(dialogsId, agentId, userBaseEntity.getUserId(), input); List<Message> messages = buildMessages(dialogsId, agentId, userBaseEntity.getUserId(), input);
//配置对话function
List<Tool> tools = AgentApplicationUtils.buildMemoryConfig(infoEntity.getVariableStructure(), infoEntity.getIsLongMemory(), dialogsId, agentId);
// 保存用户输入记录 // 保存用户输入记录
Long inputTimestamp = System.currentTimeMillis(); Long inputTimestamp = System.currentTimeMillis();
BizAgentApplicationDialoguesRecordEntity inputRecord = new BizAgentApplicationDialoguesRecordEntity(); BizAgentApplicationDialoguesRecordEntity inputRecord = new BizAgentApplicationDialoguesRecordEntity();
...@@ -126,6 +123,9 @@ public class AgentApplicationServiceImpl implements AgentApplicationService { ...@@ -126,6 +123,9 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
inputRecord.setTimestamp(inputTimestamp); inputRecord.setTimestamp(inputTimestamp);
bizAgentApplicationDialoguesRecordService.save(inputRecord); bizAgentApplicationDialoguesRecordService.save(inputRecord);
//配置对话function
List<Tool> tools = AgentApplicationToolsBuilder.buildFunctionConfig(infoEntity.getVariableStructure(), infoEntity.getIsLongMemory(), dialogsId, agentId, infoEntity.getUnitIds(), infoEntity.getIsDocumentParsing());
// 记录输出时间戳 // 记录输出时间戳
BizAgentApplicationDialoguesRecordEntity outputRecord = new BizAgentApplicationDialoguesRecordEntity(); BizAgentApplicationDialoguesRecordEntity outputRecord = new BizAgentApplicationDialoguesRecordEntity();
...@@ -137,8 +137,8 @@ public class AgentApplicationServiceImpl implements AgentApplicationService { ...@@ -137,8 +137,8 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
//对话 //对话
String output = agentApplicationInfoService.callAgentApplication(agentId, dialogsId, infoEntity.getLargeModel(), String output = agentApplicationInfoService.callAgentApplication(agentId, dialogsId, infoEntity.getLargeModel(),
infoEntity.getUnitIds(), infoEntity.getAgentSystem(), kdIdList.toArray(new Integer[0]), infoEntity.getCommunicationTurn(), infoEntity.getAgentSystem(), kdIdList.toArray(new Integer[0]), infoEntity.getCommunicationTurn(),
infoEntity.getTopP(), infoEntity.getTemperature(), messages, tools, httpServletResponse); infoEntity.getTopP(), infoEntity.getTemperature(), messages, tools, fileUrls, httpServletResponse);
//保存对话记录 //保存对话记录
outputRecord.setContent(output); outputRecord.setContent(output);
...@@ -382,12 +382,12 @@ public class AgentApplicationServiceImpl implements AgentApplicationService { ...@@ -382,12 +382,12 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
//开启对话变量 //开启对话变量
if (CollectionUtils.isNotEmpty(infoEntity.getVariableStructure())) { if (CollectionUtils.isNotEmpty(infoEntity.getVariableStructure())) {
String functionName = LargeModelFunctionEnum.memory_variable_writer.name(); String functionName = LargeModelFunctionEnum.memory_variable_writer.name();
String llmConfig = LargeModelFunctionEnum.valueOf(functionName).getFunction().getVariableStructureLLMConfig(infoEntity.getVariableStructure()).get(0); String llmConfig = LargeModelFunctionEnum.valueOf(functionName).getFunction().getLLMConfig(infoEntity.getVariableStructure()).get(0);
Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class); Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class);
tools.add(tool); tools.add(tool);
//初始化变量函数 //初始化变量函数
Map<Object, Object> map = GetMemoryVariable.get(identifier + ":" + infoEntity.getAgentId()); Map<Object, Object> map = MemoryVariableWriter.get(identifier + ":" + infoEntity.getAgentId());
if (MapUtils.isEmpty(map)) { if (MapUtils.isEmpty(map)) {
List<Variable> variableStructure = infoEntity.getVariableStructure(); List<Variable> variableStructure = infoEntity.getVariableStructure();
for (Variable variable : variableStructure) { for (Variable variable : variableStructure) {
......
package cn.com.poc.expose.dto; package cn.com.poc.expose.dto;
import java.util.List;
public class AgentApplicationDto { public class AgentApplicationDto {
private String dialogsId; private String dialogsId;
...@@ -32,4 +34,13 @@ public class AgentApplicationDto { ...@@ -32,4 +34,13 @@ public class AgentApplicationDto {
this.input = input; this.input = input;
} }
private List<String> fileUrls;
public List<String> getFileUrls() {
return fileUrls;
}
public void setFileUrls(List<String> fileUrls) {
this.fileUrls = fileUrls;
}
} }
...@@ -104,7 +104,7 @@ public class AgentApplicationRestImpl implements AgentApplicationRest { ...@@ -104,7 +104,7 @@ public class AgentApplicationRestImpl implements AgentApplicationRest {
Assert.notNull(dto.getAgentId()); Assert.notNull(dto.getAgentId());
Assert.notNull(dto.getDialogsId()); Assert.notNull(dto.getDialogsId());
try { try {
agentApplicationService.callAgentApplication(dto.getAgentId(), dto.getDialogsId(), dto.getInput(), httpServletResponse); agentApplicationService.callAgentApplication(dto.getAgentId(), dto.getDialogsId(), dto.getInput(), dto.getFileUrls(), httpServletResponse);
} catch (Exception e) { } catch (Exception e) {
httpServletResponse.setContentType("text/event-stream"); httpServletResponse.setContentType("text/event-stream");
PrintWriter writer = httpServletResponse.getWriter(); PrintWriter writer = httpServletResponse.getWriter();
......
...@@ -3,7 +3,7 @@ package cn.com.poc.support.dgTools; ...@@ -3,7 +3,7 @@ package cn.com.poc.support.dgTools;
import cn.com.poc.common.constant.FmxParamConfigConstant; import cn.com.poc.common.constant.FmxParamConfigConstant;
import cn.com.poc.common.utils.ListUtils; import cn.com.poc.common.utils.ListUtils;
import cn.com.poc.common.utils.http.LocalHttpClient; import cn.com.poc.common.utils.http.LocalHttpClient;
import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.route.DgtoolsApiRoute;
import cn.com.poc.support.dgTools.request.AbstractParam; import cn.com.poc.support.dgTools.request.AbstractParam;
import cn.com.poc.support.dgTools.request.AbstractRequest; import cn.com.poc.support.dgTools.request.AbstractRequest;
import cn.com.poc.support.dgTools.request.ProjectTokenRequest; import cn.com.poc.support.dgTools.request.ProjectTokenRequest;
...@@ -117,8 +117,8 @@ public class DgtoolsAbstractHttpClient { ...@@ -117,8 +117,8 @@ public class DgtoolsAbstractHttpClient {
} }
HttpUriRequest httpUriRequest = post HttpUriRequest httpUriRequest = post
.setHeader(DgtoolsApiConstants.JSON_HEADER) .setHeader(DgtoolsApiRoute.JSON_HEADER)
.setUri(dgtoolsDomainurl + DgtoolsApiConstants.BASE_URL + url) .setUri(dgtoolsDomainurl + DgtoolsApiRoute.BASE_URL + url)
.setEntity(new StringEntity(json, StandardCharsets.UTF_8)) .setEntity(new StringEntity(json, StandardCharsets.UTF_8))
.build(); .build();
DgtoolsApiResult dgtoolsApiResult = LocalHttpClient.executeJsonResult(httpUriRequest, DgtoolsApiResult.class); DgtoolsApiResult dgtoolsApiResult = LocalHttpClient.executeJsonResult(httpUriRequest, DgtoolsApiResult.class);
......
...@@ -4,7 +4,7 @@ import cn.com.poc.common.constant.FmxParamConfigConstant; ...@@ -4,7 +4,7 @@ import cn.com.poc.common.constant.FmxParamConfigConstant;
import cn.com.poc.common.constant.MkpRedisKeyConstant; import cn.com.poc.common.constant.MkpRedisKeyConstant;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.route.DgtoolsApiRoute;
import cn.com.poc.support.dgTools.request.ProjectTokenRequest; import cn.com.poc.support.dgTools.request.ProjectTokenRequest;
import cn.com.poc.support.dgTools.result.ProjectTokenResult; import cn.com.poc.support.dgTools.result.ProjectTokenResult;
import cn.com.poc.support.dgTools.service.AuthorizationService; import cn.com.poc.support.dgTools.service.AuthorizationService;
...@@ -51,8 +51,8 @@ public class AuthorizationServiceImpl implements AuthorizationService { ...@@ -51,8 +51,8 @@ public class AuthorizationServiceImpl implements AuthorizationService {
request.setProjectKey(projectKey); request.setProjectKey(projectKey);
request.setProjectSecret(projectSecret); request.setProjectSecret(projectSecret);
List<Header> headers = new ArrayList<>(); List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.PAY_HEADER); headers.add(DgtoolsApiRoute.PAY_HEADER);
ProjectTokenResult projectTokenResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.GET_APP_TOKEN, request, headers); ProjectTokenResult projectTokenResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.GET_APP_TOKEN, request, headers);
return projectTokenResult.getAppToken(); return projectTokenResult.getAppToken();
} }
......
...@@ -8,7 +8,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.OpenAiResult; ...@@ -8,7 +8,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.OpenAiResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.*; import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.*;
import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService; import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.route.DgtoolsApiRoute;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -84,10 +84,10 @@ public class AICreateImageServiceImpl implements AICreateImageService { ...@@ -84,10 +84,10 @@ public class AICreateImageServiceImpl implements AICreateImageService {
Assert.isTrue(request.getN() <= 10 && request.getN() >= 1, "The number of images to generate. Must be between 1 and 10."); Assert.isTrue(request.getN() <= 10 && request.getN() >= 1, "The number of images to generate. Must be between 1 and 10.");
List<Header> headers = new ArrayList<>(); List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER); headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER); headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())); headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
OpenAiResult openAiResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_OPENAI_CREATE_IMAGE, request, headers); OpenAiResult openAiResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.AI_OPENAI_CREATE_IMAGE, request, headers);
if (openAiResult != null) { if (openAiResult != null) {
GenerationsResult generationsResult = JSONObject.parseObject(openAiResult.getMessage(), GenerationsResult.class); GenerationsResult generationsResult = JSONObject.parseObject(openAiResult.getMessage(), GenerationsResult.class);
return generationsResult; return generationsResult;
...@@ -114,10 +114,10 @@ public class AICreateImageServiceImpl implements AICreateImageService { ...@@ -114,10 +114,10 @@ public class AICreateImageServiceImpl implements AICreateImageService {
Assert.isTrue(request.getNum() <= 6 && request.getNum() >= 1, "图片生成数量,支持1-6张"); Assert.isTrue(request.getNum() <= 6 && request.getNum() >= 1, "图片生成数量,支持1-6张");
List<Header> headers = new ArrayList<>(); List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER); headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER); headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())); headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduGetImageResult baiduGetImageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_CREATE_IMAGE, request, headers); BaiduGetImageResult baiduGetImageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.AI_BAIDU_CREATE_IMAGE, request, headers);
if (baiduGetImageResult != null) { if (baiduGetImageResult != null) {
GenerationsResult generationsResult = new GenerationsResult(); GenerationsResult generationsResult = new GenerationsResult();
List<ImgUrl> imgUrls = baiduGetImageResult.getData().getImgUrls(); List<ImgUrl> imgUrls = baiduGetImageResult.getData().getImgUrls();
...@@ -150,10 +150,10 @@ public class AICreateImageServiceImpl implements AICreateImageService { ...@@ -150,10 +150,10 @@ public class AICreateImageServiceImpl implements AICreateImageService {
} }
List<Header> headers = new ArrayList<>(); List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER); headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER); headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())); headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduGetImageV2Result baiduGetImageV2Result = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_CREATE_IMAGE_V2, request, headers); BaiduGetImageV2Result baiduGetImageV2Result = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.AI_BAIDU_CREATE_IMAGE_V2, request, headers);
if (baiduGetImageV2Result != null) { if (baiduGetImageV2Result != null) {
if (FAILED.equals(baiduGetImageV2Result.getData().getTaskStatus())) { if (FAILED.equals(baiduGetImageV2Result.getData().getTaskStatus())) {
...@@ -195,10 +195,10 @@ public class AICreateImageServiceImpl implements AICreateImageService { ...@@ -195,10 +195,10 @@ public class AICreateImageServiceImpl implements AICreateImageService {
Assert.notNull(request.getPrompt(), "文生图配置异常,请联系开发人员"); Assert.notNull(request.getPrompt(), "文生图配置异常,请联系开发人员");
List<Header> headers = new ArrayList<>(); List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER); headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER); headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())); headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduAISailsText2ImageResult imageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_SAILS_TEXT_CREATE_IMAGE, request, headers); BaiduAISailsText2ImageResult imageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.AI_BAIDU_SAILS_TEXT_CREATE_IMAGE, request, headers);
if (imageResult == null) { if (imageResult == null) {
throw new I18nMessageException("exception/middle.platform.is.unresponsive"); throw new I18nMessageException("exception/middle.platform.is.unresponsive");
} }
...@@ -234,10 +234,10 @@ public class AICreateImageServiceImpl implements AICreateImageService { ...@@ -234,10 +234,10 @@ public class AICreateImageServiceImpl implements AICreateImageService {
String jsonBody = dgToolsAbstractHttpClient.buildJson(request); String jsonBody = dgToolsAbstractHttpClient.buildJson(request);
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse httpResponse = httpClient.execute(RequestBuilder.create(POST) CloseableHttpResponse httpResponse = httpClient.execute(RequestBuilder.create(POST)
.setUri(DOMAIN_URL + DgtoolsApiConstants.BASE_URL + DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_SAILS_IMAGE_CREATE_TEXT) .setUri(DOMAIN_URL + DgtoolsApiRoute.BASE_URL + DgtoolsApiRoute.DgtoolsAI.AI_BAIDU_SAILS_IMAGE_CREATE_TEXT)
.addHeader(DgtoolsApiConstants.JSON_HEADER) .addHeader(DgtoolsApiRoute.JSON_HEADER)
.addHeader(DgtoolsApiConstants.AI_HEADER) .addHeader(DgtoolsApiRoute.AI_HEADER)
.addHeader(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())) .addHeader(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()))
.setEntity(new StringEntity(jsonBody, StandardCharsets.UTF_8)) .setEntity(new StringEntity(jsonBody, StandardCharsets.UTF_8))
.build() .build()
); );
......
...@@ -8,7 +8,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDema ...@@ -8,7 +8,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDema
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse; import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService; import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.route.DgtoolsApiRoute;
import org.apache.http.Header; import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.methods.RequestBuilder;
...@@ -70,12 +70,12 @@ public class AIDialogueServiceImpl implements AIDialogueService { ...@@ -70,12 +70,12 @@ public class AIDialogueServiceImpl implements AIDialogueService {
@Override @Override
public FunctionCallResult functionCall(FunctionCallResponse response) { public FunctionCallResult functionCall(FunctionCallResponse response) {
String url = DgtoolsApiConstants.DgtoolsAI.FUNCTION_CALL; String url = DgtoolsApiRoute.DgtoolsAI.FUNCTION_CALL;
response.setApiKey(API_KEY); response.setApiKey(API_KEY);
List<Header> headers = new ArrayList<Header>() {{ List<Header> headers = new ArrayList<Header>() {{
add(DgtoolsApiConstants.JSON_HEADER); add(DgtoolsApiRoute.JSON_HEADER);
add(DgtoolsApiConstants.AI_HEADER); add(DgtoolsApiRoute.AI_HEADER);
add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())); add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
}}; }};
return dgToolsAbstractHttpClient.doRequest(url, response, headers); return dgToolsAbstractHttpClient.doRequest(url, response, headers);
} }
...@@ -84,10 +84,10 @@ public class AIDialogueServiceImpl implements AIDialogueService { ...@@ -84,10 +84,10 @@ public class AIDialogueServiceImpl implements AIDialogueService {
String jsonBody = dgToolsAbstractHttpClient.buildJson(request); String jsonBody = dgToolsAbstractHttpClient.buildJson(request);
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse httpResponse = httpClient.execute(RequestBuilder.create(POST) CloseableHttpResponse httpResponse = httpClient.execute(RequestBuilder.create(POST)
.setUri(DOMAIN_URL + DgtoolsApiConstants.BASE_URL + DgtoolsApiConstants.DgtoolsAI.LARGE_MODEL) .setUri(DOMAIN_URL + DgtoolsApiRoute.BASE_URL + DgtoolsApiRoute.DgtoolsAI.LARGE_MODEL)
.addHeader(DgtoolsApiConstants.JSON_HEADER) .addHeader(DgtoolsApiRoute.JSON_HEADER)
.addHeader(DgtoolsApiConstants.AI_HEADER) .addHeader(DgtoolsApiRoute.AI_HEADER)
.addHeader(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())) .addHeader(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()))
.setEntity(new StringEntity(jsonBody, StandardCharsets.UTF_8)) .setEntity(new StringEntity(jsonBody, StandardCharsets.UTF_8))
.build() .build()
); );
...@@ -97,11 +97,11 @@ public class AIDialogueServiceImpl implements AIDialogueService { ...@@ -97,11 +97,11 @@ public class AIDialogueServiceImpl implements AIDialogueService {
} }
private LargeModelDemandResult largeModelRequest(LargeModelDemandResponse request) { private LargeModelDemandResult largeModelRequest(LargeModelDemandResponse request) {
String url = DgtoolsApiConstants.DgtoolsAI.LARGE_MODEL; String url = DgtoolsApiRoute.DgtoolsAI.LARGE_MODEL;
List<Header> headers = new ArrayList<Header>() {{ List<Header> headers = new ArrayList<Header>() {{
add(DgtoolsApiConstants.JSON_HEADER); add(DgtoolsApiRoute.JSON_HEADER);
add(DgtoolsApiConstants.AI_HEADER); add(DgtoolsApiRoute.AI_HEADER);
add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())); add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
}}; }};
return dgToolsAbstractHttpClient.doRequest(url, request, headers); return dgToolsAbstractHttpClient.doRequest(url, request, headers);
} }
......
package cn.com.poc.thirdparty.resource.demand.ai.aggregate.impl; package cn.com.poc.thirdparty.resource.demand.ai.aggregate.impl;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.route.DgtoolsApiRoute;
import cn.com.poc.support.dgTools.result.AbstractResult; import cn.com.poc.support.dgTools.result.AbstractResult;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService; import cn.com.poc.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.*; import cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.*;
...@@ -33,7 +33,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -33,7 +33,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
TrainKnowledgeRequest request = new TrainKnowledgeRequest(); TrainKnowledgeRequest request = new TrainKnowledgeRequest();
request.setDocumentUrl(fileURL); request.setDocumentUrl(fileURL);
request.setSegmentationConfig(segmentationConfig); request.setSegmentationConfig(segmentationConfig);
TrainKnowledgeResult trainKnowledgeResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.TRAIN_KNOWLEDGE, request, getHeaders()); TrainKnowledgeResult trainKnowledgeResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.TRAIN_KNOWLEDGE, request, getHeaders());
if (null == trainKnowledgeResult) { if (null == trainKnowledgeResult) {
throw new I18nMessageException("exception/abnormal.knowledge.base.training"); throw new I18nMessageException("exception/abnormal.knowledge.base.training");
} }
...@@ -46,7 +46,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -46,7 +46,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
TrainKnowledgeRequest request = new TrainKnowledgeRequest(); TrainKnowledgeRequest request = new TrainKnowledgeRequest();
request.setDocumentUrl(fileURL); request.setDocumentUrl(fileURL);
request.setSegmentationConfig(segmentationConfig); request.setSegmentationConfig(segmentationConfig);
TrainKnowledgeResult trainKnowledgeResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.TRAIN_KNOWLEDGE_EVENT, request, getHeaders()); TrainKnowledgeResult trainKnowledgeResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.TRAIN_KNOWLEDGE_EVENT, request, getHeaders());
if (null == trainKnowledgeResult) { if (null == trainKnowledgeResult) {
throw new I18nMessageException("exception/abnormal.knowledge.base.training"); throw new I18nMessageException("exception/abnormal.knowledge.base.training");
} }
...@@ -58,7 +58,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -58,7 +58,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
Assert.notBlank(knowledgeId); Assert.notBlank(knowledgeId);
TrainKnowledgeStatusRequest request = new TrainKnowledgeStatusRequest(); TrainKnowledgeStatusRequest request = new TrainKnowledgeStatusRequest();
request.setKnowledgeId(knowledgeId); request.setKnowledgeId(knowledgeId);
TrainKnowledgeStatusResult trainKnowledgeStatusResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.TRAIN_KNOWLEDGE_STATUS, request, getHeaders()); TrainKnowledgeStatusResult trainKnowledgeStatusResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.TRAIN_KNOWLEDGE_STATUS, request, getHeaders());
if (null == trainKnowledgeStatusResult) { if (null == trainKnowledgeStatusResult) {
throw new I18nMessageException("exception/abnormal.training.status.of.knowledge.base.acquisition"); throw new I18nMessageException("exception/abnormal.training.status.of.knowledge.base.acquisition");
} }
...@@ -70,7 +70,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -70,7 +70,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
Assert.notBlank(knowledgeId); Assert.notBlank(knowledgeId);
DelKnowledgeRequest request = new DelKnowledgeRequest(); DelKnowledgeRequest request = new DelKnowledgeRequest();
request.setKnowledgeId(knowledgeId); request.setKnowledgeId(knowledgeId);
AbstractResult abstractResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.DEL_KNOWLEDGE, request, getHeaders()); AbstractResult abstractResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.DEL_KNOWLEDGE, request, getHeaders());
if (null == abstractResult) { if (null == abstractResult) {
throw new I18nMessageException("exception/delete.knowledge.base.exception"); throw new I18nMessageException("exception/delete.knowledge.base.exception");
} }
...@@ -89,7 +89,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -89,7 +89,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
searchKnowledgeRequest.setQuery(query); searchKnowledgeRequest.setQuery(query);
searchKnowledgeRequest.setKnowLedgeIds(knowledgeIds); searchKnowledgeRequest.setKnowLedgeIds(knowledgeIds);
searchKnowledgeRequest.setTopK(topK); searchKnowledgeRequest.setTopK(topK);
SearchKnowledgeResult searchKnowledgeResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.SEARCH_KNOWLEDGE, searchKnowledgeRequest, getHeaders()); SearchKnowledgeResult searchKnowledgeResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.SEARCH_KNOWLEDGE, searchKnowledgeRequest, getHeaders());
if (null == searchKnowledgeResult) { if (null == searchKnowledgeResult) {
throw new I18nMessageException("exception/query.knowledge.base.exception"); throw new I18nMessageException("exception/query.knowledge.base.exception");
} }
...@@ -104,7 +104,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -104,7 +104,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
GetKnowledgeChunkInfoRequest request = new GetKnowledgeChunkInfoRequest(); GetKnowledgeChunkInfoRequest request = new GetKnowledgeChunkInfoRequest();
request.setKnowledgeIds(knowledgeIds); request.setKnowledgeIds(knowledgeIds);
request.setQuery(query); request.setQuery(query);
return dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.GET_KNOWLEDGE_CHUNK_INFOS, request, getHeaders(), pagingInfo); return dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.GET_KNOWLEDGE_CHUNK_INFOS, request, getHeaders(), pagingInfo);
} }
@Override @Override
...@@ -113,7 +113,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -113,7 +113,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
request.setKnowledgeId(knowledgeId); request.setKnowledgeId(knowledgeId);
request.setChunkRelationId(chunkRelationId); request.setChunkRelationId(chunkRelationId);
request.setIsOpen(isOpen); request.setIsOpen(isOpen);
dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.OPEN_KNOWLEDGE_CHUNK, request, getHeaders()); dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.OPEN_KNOWLEDGE_CHUNK, request, getHeaders());
} }
@Override @Override
...@@ -121,7 +121,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -121,7 +121,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
UpsertChunkInfoRequest request = new UpsertChunkInfoRequest(); UpsertChunkInfoRequest request = new UpsertChunkInfoRequest();
request.setKnowledgeId(knowledgeId); request.setKnowledgeId(knowledgeId);
request.setChunkRelationId(chunkRelationId); request.setChunkRelationId(chunkRelationId);
dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.DELETE_KNOWLEDGE_CHUNK, request, getHeaders()); dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.DELETE_KNOWLEDGE_CHUNK, request, getHeaders());
} }
@Override @Override
...@@ -130,7 +130,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -130,7 +130,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
request.setKnowledgeId(knowledgeId); request.setKnowledgeId(knowledgeId);
request.setChunkRelationId(chunkRelationId); request.setChunkRelationId(chunkRelationId);
request.setChunkContent(content); request.setChunkContent(content);
dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.UPDATE_KNOWLEDGE_CHUNK_DOC, request, getHeaders()); dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.UPDATE_KNOWLEDGE_CHUNK_DOC, request, getHeaders());
} }
@Override @Override
...@@ -139,14 +139,14 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService { ...@@ -139,14 +139,14 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
request.setKnowledgeId(knowledgeId); request.setKnowledgeId(knowledgeId);
request.setChunkSort(chunkSort); request.setChunkSort(chunkSort);
request.setChunkContent(content); request.setChunkContent(content);
dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.ADD_KNOWLEDGE_CHUNK, request, getHeaders()); dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.ADD_KNOWLEDGE_CHUNK, request, getHeaders());
} }
private List<Header> getHeaders() { private List<Header> getHeaders() {
List<Header> headers = new ArrayList<>(); List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER); headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER); headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())); headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
return headers; return headers;
} }
} }
...@@ -8,7 +8,14 @@ import java.util.List; ...@@ -8,7 +8,14 @@ import java.util.List;
public abstract class AbstractLargeModelFunction { public abstract class AbstractLargeModelFunction {
public abstract String doFunction(String content, String key); /**
* 执行函数
*
* @param content 入参
* @param identifier 唯一标识
* @return
*/
public abstract String doFunction(String content, String identifier);
/** /**
* 获取函数描述 * 获取函数描述
...@@ -22,9 +29,11 @@ public abstract class AbstractLargeModelFunction { ...@@ -22,9 +29,11 @@ public abstract class AbstractLargeModelFunction {
*/ */
public abstract List<String> getLLMConfig(); public abstract List<String> getLLMConfig();
/** /**
* 获取有关变量的配置 * 获取有关变量的配置
*/ */
public abstract List<String> getVariableStructureLLMConfig(List<Variable> variableStructure); public abstract List<String> getLLMConfig(List<Variable> variableStructure);
} }
package cn.com.poc.thirdparty.resource.demand.ai.function; package cn.com.poc.thirdparty.resource.demand.ai.function;
import cn.com.poc.common.utils.SpringUtils; import cn.com.poc.common.utils.SpringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.function.document_reader.DocumentReaderFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.html_reader.HtmlReaderFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.SetLongMemoryFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.SetLongMemoryFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriterFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriterFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.value_memory.SetValueMemoryFunction;
public enum LargeModelFunctionEnum { public enum LargeModelFunctionEnum {
set_long_memory(SetLongMemoryFunction.class), set_long_memory(SetLongMemoryFunction.class),
set_value_memory(SetValueMemoryFunction.class),
memory_variable_writer(MemoryVariableWriterFunction.class), memory_variable_writer(MemoryVariableWriterFunction.class),
html_reader(HtmlReaderFunction.class),
document_reader(DocumentReaderFunction.class),
bing_web_search(null),
; ;
private Class<? extends AbstractLargeModelFunction> function; private Class<? extends AbstractLargeModelFunction> function;
...@@ -24,4 +27,13 @@ public enum LargeModelFunctionEnum { ...@@ -24,4 +27,13 @@ public enum LargeModelFunctionEnum {
public void setFunction(Class<AbstractLargeModelFunction> function) { public void setFunction(Class<AbstractLargeModelFunction> function) {
this.function = function; this.function = function;
} }
public static LargeModelFunctionEnum getFunction(String functionName) {
for (LargeModelFunctionEnum value : LargeModelFunctionEnum.values()) {
if (value.name().equals(functionName)) {
return value;
}
}
return null;
}
} }
package cn.com.poc.thirdparty.resource.demand.ai.function.document_reader;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Parameters;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Properties;
import cn.hutool.core.collection.ListUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.List;
@Component
public class DocumentReaderFunction extends AbstractLargeModelFunction {
private final String DESC = "文档阅读器,读取PDF、docx、doc、txt、md格式文件";
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig
.FunctionLLMConfigBuilder()
.name("document_reader")
.description(DESC)
.parameters(new Parameters("object")
.addProperties("file_urls", new Properties("array", "doc、docx、pdf、txt、md文件地址"))
).build();
@Override
public String doFunction(String content, String identifier) {
if (StringUtils.isBlank(content)) {
return StringUtils.EMPTY;
}
StringBuilder sb = new StringBuilder();
JSONObject jsonObject = JSON.parseObject(content);
if (jsonObject.containsKey("file_urls")) {
JSONArray jsonArray = jsonObject.getJSONArray("file_urls");
int size = jsonArray.size();
if (size == 0) {
return StringUtils.EMPTY;
}
for (int i = 0; i < size; i++) {
String fileUrl = jsonArray.getString(i);
File file = DocumentLoad.downloadURLDocument(fileUrl);
sb.append(StringUtils.LF).append("## Document ").append((i + 1)).append(StringUtils.LF);
sb.append(DocumentLoad.documentToText(file));
}
return sb.toString();
}
return StringUtils.EMPTY;
}
@Override
public String getDesc() {
return DESC;
}
@Override
public List<String> getLLMConfig() {
return ListUtil.toList(JsonUtils.serialize(this.functionLLMConfig));
}
@Override
public List<String> getLLMConfig(List<Variable> variableStructure) {
return this.getLLMConfig();
}
}
package cn.com.poc.thirdparty.resource.demand.ai.function.entity;
public class Function {
/**
* 函数名
*/
private String name;
/**
* 函数参数
*/
private Parameters parameters;
public Function() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Parameters getParameters() {
return parameters;
}
public void setParameters(Parameters parameters) {
this.parameters = parameters;
}
}
package cn.com.poc.thirdparty.resource.demand.ai.function.entity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class FunctionLLMConfig {
private String type;
private String description;
private Function function;
public String getType() {
return type;
}
public String getDescription() {
return description;
}
public Function getFunction() {
return function;
}
public void setType(String type) {
this.type = type;
}
public void setDescription(String description) {
this.description = description;
}
public void setFunction(Function function) {
this.function = function;
}
public static class FunctionLLMConfigBuilder {
private String type = "function";
private String description;
private Function function = new Function();
public FunctionLLMConfigBuilder description(String description) {
this.description = description;
return this;
}
public FunctionLLMConfigBuilder name(String name) {
this.function.setName(name);
return this;
}
public FunctionLLMConfigBuilder parameters(Parameters parameters) {
this.function.setParameters(parameters);
return this;
}
public FunctionLLMConfig build() {
FunctionLLMConfig config = new FunctionLLMConfig();
config.setType(type);
config.setDescription(description);
config.setFunction(function);
return config;
}
}
}
package cn.com.poc.thirdparty.resource.demand.ai.function.entity;
import java.util.Map;
public class Parameters {
private String type;
private Map<String, Properties> properties;
public Parameters(String type) {
this.type = type;
}
public Parameters(String type, Map<String, Properties> properties) {
this.type = type;
this.properties = properties;
}
public String getType() {
return type;
}
public Map<String, Properties> getProperties() {
return properties;
}
public Parameters addProperties(String key, Properties properties) {
if (this.properties == null) {
this.properties = new java.util.HashMap<>();
}
this.properties.put(key, properties);
return this;
}
}
package cn.com.poc.thirdparty.resource.demand.ai.function.entity;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Properties {
private String type;
private String description;
@JsonAlias("enum")
private List<String> enums;
public Properties(String type, String description) {
this.type = type;
this.description = description;
}
public Properties(String type, String description, List<String> enums) {
this.type = type;
this.description = description;
this.enums = enums;
}
public String getType() {
return type;
}
public String getDescription() {
return description;
}
public List<String> getEnums() {
return enums;
}
}
package cn.com.poc.thirdparty.resource.demand.ai.function.html_reader;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Parameters;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Properties;
import cn.hutool.core.collection.ListUtil;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class HtmlReaderFunction extends AbstractLargeModelFunction {
private final String DESC = "该方法用于加载和读取Html网页内容,并转换为markdown格式。";
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig.FunctionLLMConfigBuilder()
.name("html_reader")
.description(DESC)
.parameters(new Parameters("object")
.addProperties("url", new Properties("string", "网页地址")))
.build();
@Override
public String doFunction(String content, String key) {
if (StringUtils.isBlank(content)) {
return "FAIL";
}
JSONObject jsonObject = JSONObject.parseObject(content);
String url = jsonObject.getString("url");
if (StringUtils.isNotBlank(url)) {
return DocumentLoad.htmlToMarkdown(url);
}
return StringUtils.EMPTY;
}
@Override
public String getDesc() {
return getDesc();
}
@Override
public List<String> getLLMConfig() {
return ListUtil.toList(JsonUtils.serialize(functionLLMConfig));
}
@Override
public List<String> getLLMConfig(List<Variable> variableStructure) {
return this.getLLMConfig();
}
}
...@@ -9,7 +9,7 @@ import java.util.List; ...@@ -9,7 +9,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
public class GetLongMemory { public class LongMemory {
public static List<LongMemoryEntity> get(String key) { public static List<LongMemoryEntity> get(String key) {
RedisService redisService = SpringUtils.getBean(RedisService.class); RedisService redisService = SpringUtils.getBean(RedisService.class);
......
...@@ -4,28 +4,33 @@ import cn.com.poc.agent_application.entity.Variable; ...@@ -4,28 +4,33 @@ import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.service.RedisService; import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.BlContext; import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.DateUtils; import cn.com.poc.common.utils.DateUtils;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Parameters;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Properties;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.google.gson.Gson; import org.springframework.stereotype.Component;
import com.sun.org.apache.regexp.internal.RE;
import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 长期记忆 * 长期记忆
*/ */
@Service @Component
public class SetLongMemoryFunction extends AbstractLargeModelFunction { public class SetLongMemoryFunction extends AbstractLargeModelFunction {
private final String desc = "该方法仅用来保存用户想记录的内容,不能通过该方法进行查询。"; private final String desc = "该方法仅用来保存用户想记录的内容,不能通过该方法进行查询。";
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig.FunctionLLMConfigBuilder()
.name("set_long_memory")
.description(desc)
.parameters(new Parameters("object").addProperties("content", new Properties("string", "内容的详细说明")))
.build();
private final Long expireTime = 30 * 60 * 24L; // 30天有效期 private final Long expireTime = 30 * 60 * 24L; // 30天有效期
...@@ -57,43 +62,45 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction { ...@@ -57,43 +62,45 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction {
@Override @Override
public List<String> getLLMConfig() { public List<String> getLLMConfig() {
Map<String, Object> config = new HashMap<>(); // Map<String, Object> config = new HashMap<>();
Map<String, Object> function = new HashMap<>(); // Map<String, Object> function = new HashMap<>();
//
Map<String, Object> content = new HashMap<>(); // Map<String, Object> content = new HashMap<>();
content.put("type", "string"); // content.put("type", "string");
content.put("description", "内容的详细说明"); // content.put("description", "内容的详细说明");
//
Map<String, Object> properties = new HashMap<>(); // Map<String, Object> properties = new HashMap<>();
properties.put("content", content); // properties.put("content", content);
//
Map<String, Object> parameters = new HashMap<>(); // Map<String, Object> parameters = new HashMap<>();
parameters.put("type", "object"); // parameters.put("type", "object");
parameters.put("properties", properties); // parameters.put("properties", properties);
//
List<String> required = new ArrayList<>(); // List<String> required = new ArrayList<>();
required.add("content"); // required.add("content");
parameters.put("required", required); // parameters.put("required", required);
//
//
function.put("name", "set_long_memory"); // function.put("name", "set_long_memory");
function.put("description", desc); // function.put("description", desc);
function.put("parameters", parameters); // function.put("parameters", parameters);
//
config.put("type", "function"); // config.put("type", "function");
config.put("function", function); // config.put("function", function);
//
// 将 Map 转换为 JSON 字符串 // // 将 Map 转换为 JSON 字符串
Gson gson = new Gson(); // Gson gson = new Gson();
String jsonString = gson.toJson(config); // String jsonString = gson.toJson(config);
//
List<String> resultList = new ArrayList<>(); // List<String> resultList = new ArrayList<>();
resultList.add(jsonString); // resultList.add(jsonString);
return resultList; // return resultList;
return ListUtil.toList(JsonUtils.serialize(functionLLMConfig));
} }
@Override @Override
public List<String> getVariableStructureLLMConfig(List<Variable> variableStructure) { public List<String> getLLMConfig(List<Variable> variableStructure) {
throw new I18nMessageException("exception/variable.structure.configuration.is.not.currently.supported"); return this.getLLMConfig();
} }
} }
...@@ -6,7 +6,7 @@ import cn.com.poc.common.utils.SpringUtils; ...@@ -6,7 +6,7 @@ import cn.com.poc.common.utils.SpringUtils;
import java.util.Map; import java.util.Map;
public class GetMemoryVariable { public class MemoryVariableWriter {
public static Map<Object, Object> get(String key) { public static Map<Object, Object> get(String key) {
String redisKey = MemoryVariableWriterConstants.REDIS_PREFIX + key + ":" + BlContext.getCurrentUserNotException().getUserId().toString(); String redisKey = MemoryVariableWriterConstants.REDIS_PREFIX + key + ":" + BlContext.getCurrentUserNotException().getUserId().toString();
...@@ -17,4 +17,16 @@ public class GetMemoryVariable { ...@@ -17,4 +17,16 @@ public class GetMemoryVariable {
Map<Object, Object> result = redisService.hmget(redisKey); Map<Object, Object> result = redisService.hmget(redisKey);
return result; return result;
} }
public static void clean(String key) {
String redisKey = MemoryVariableWriterConstants.REDIS_PREFIX + key + ":" + BlContext.getCurrentUserNotException().getUserId().toString();
RedisService redisService = SpringUtils.getBean(RedisService.class);
redisService.del(redisKey);
}
public static void clearByPre(String key) {
String redisKey = MemoryVariableWriterConstants.REDIS_PREFIX + key + ":";
RedisService redisService = SpringUtils.getBean(RedisService.class);
redisService.delByPre(redisKey);
}
} }
...@@ -6,11 +6,15 @@ import cn.com.poc.common.utils.BlContext; ...@@ -6,11 +6,15 @@ import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.JsonUtils; import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils; import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction; import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.FunctionLLMConfig;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Parameters;
import cn.com.poc.thirdparty.resource.demand.ai.function.entity.Properties;
import cn.com.yict.framemax.core.i18n.I18nMessageException; import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.json.JSONArray; import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONException; import cn.hutool.json.JSONException;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -18,36 +22,20 @@ import java.util.HashMap; ...@@ -18,36 +22,20 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Component
public class MemoryVariableWriterFunction extends AbstractLargeModelFunction { public class MemoryVariableWriterFunction extends AbstractLargeModelFunction {
private final String DESC = "该方法参考key字段给出的内容键,来保存对应的内容值,该方法不可进行查询"; private final String DESC = "该方法参考key字段给出的内容键,来保存对应的内容值,该方法不可进行查询";
private final String LLM_JSON_SCHEMA = "{\n" + private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig
" \"description\": \"" + DESC + "\",\n" + .FunctionLLMConfigBuilder()
" \"type\": \"function\",\n" + .name("memory_variable_writer")
" \"function\": {\n" + .description(DESC)
" \"name\": \"memory_variable_writer\",\n" + .parameters(new Parameters("array")
" \"parameters\": {\n" + .addProperties("key", new Properties("string", "内容键"))
" \"type\": \"array\",\n" + .addProperties("value", new Properties("string", "内容值"))
" \"properties\": {\n" + ).build();
" \"key\": {\n" +
" \"type\": \"string\",\n" +
" \"enum\": ${variableStructure},\n" +
" \"description\": \"内容键\"\n" +
" },\n" +
" \"value\": {\n" +
" \"type\": \"string\",\n" +
" \"description\": \"内容值\"\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
" }";
private final Long expireTime = 30 * 60 * 24L; // 30天有效期
@Resource @Resource
private RedisService redisService; private RedisService redisService;
...@@ -77,6 +65,8 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction { ...@@ -77,6 +65,8 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction {
} else { } else {
setMap(new JSONObject(content), result); setMap(new JSONObject(content), result);
} }
// 30天有效期
long expireTime = 30 * 60 * 24L;
redisService.hmset(contentKey, result, expireTime); redisService.hmset(contentKey, result, expireTime);
return "SUCCESS"; return "SUCCESS";
} }
...@@ -98,18 +88,16 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction { ...@@ -98,18 +88,16 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction {
} }
@Override @Override
public List<String> getVariableStructureLLMConfig(List<Variable> variableStructure) { public List<String> getLLMConfig(List<Variable> variableStructure) {
List<String> enumList = new ArrayList<>(); List<String> enumList = new ArrayList<>();
for (Variable variable : variableStructure) { for (Variable variable : variableStructure) {
enumList.add(variable.getKey()); enumList.add(variable.getKey());
} }
String enums = JsonUtils.serialize(enumList); this.functionLLMConfig.getFunction().getParameters().addProperties("key", new Properties("string", "内容键", enumList));
String configStr = LLM_JSON_SCHEMA.replace("${variableStructure}", enums); return ListUtil.toList(JsonUtils.serialize(functionLLMConfig));
List<String> resultList = new ArrayList<>();
resultList.add(configStr);
return resultList;
} }
private boolean isJsonArray(String json) { private boolean isJsonArray(String json) {
try { try {
new JSONArray(json); new JSONArray(json);
......
package cn.com.poc.thirdparty.resource.demand.ai.function.value_memory;
import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.SpringUtils;
import java.util.Map;
/**
* 获取【变量】内容
*/
public class GetValueMemory {
public static Map<Object, Object> get(String key) {
String contentKey = SetValueMemoryConstants.REDIS_PREFIX + key + ":" + BlContext.getCurrentUserNotException().getUserId().toString();
RedisService redisService = SpringUtils.getBean(RedisService.class);
if (!redisService.hasKey(contentKey)) {
return null;
}
Map<Object, Object> result = redisService.hmget(contentKey);
return result;
}
}
package cn.com.poc.thirdparty.resource.demand.ai.function.value_memory;
public interface SetValueMemoryConstants {
String REDIS_PREFIX = "AGENT_APP_FUNCTION:VALUE_MEMORY:";
}
package cn.com.poc.thirdparty.resource.demand.ai.function.value_memory;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Function;
import cn.com.poc.thirdparty.resource.demand.ai.function.AbstractLargeModelFunction;
import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.hutool.json.JSONObject;
import com.google.gson.Gson;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class SetValueMemoryFunction extends AbstractLargeModelFunction {
private final String desc = "该方法仅用enum给定的内容名来保存用户想记录的内容值,不可使用该方法进行查询";
private final Long expireTime = 30 * 60 * 24L; // 30天有效期
@Resource
private RedisService redisService;
@Override
public String getDesc() {
return desc;
}
@Override
public String doFunction(String content, String key) {
String contentKey = SetValueMemoryConstants.REDIS_PREFIX + key + ":" + BlContext.getCurrentUserNotException().getUserId().toString();
// 创建 JSONObject 对象
JSONObject jsonObject = new JSONObject(content);
// 提取 contentName 和 contentValue
String contentName = jsonObject.getStr("contentName");
String contentValue = jsonObject.getStr("contentValue");
Map<String, Object> result = new HashMap<>();
if (redisService.hasKey(contentKey)) {
Map<Object, Object> hmget = redisService.hmget(contentKey);
for (Map.Entry<Object, Object> entry : hmget.entrySet()) {
if (entry.getKey() instanceof String) {
String tempKey = (String) entry.getKey();
result.put(tempKey, entry.getValue());
}
}
}
result.put(contentName, contentValue);
redisService.hmset(contentKey, result, expireTime);
return "SUCCESS";
}
@Override
public List<String> getLLMConfig() {
throw new I18nMessageException("exception/this.method.is.not.supported");
}
@Override
public List<String> getVariableStructureLLMConfig(List<Variable> variableStructure) {
Map<String, Object> config = new HashMap<>();
Map<String, Object> function = new HashMap<>();
Map<String, Object> parameters = new HashMap<>();
parameters.put("type", "object");
List<String> required = new ArrayList<>();
required.add("contentName");
required.add("contentValue");
parameters.put("required", required);
Map<String, Object> properties = new HashMap<>();
Map<String, Object> contentName = new HashMap<>();
contentName.put("type", "string");
contentName.put("description", "内容名");
List<String> enumList = new ArrayList<>();
for (Variable variable : variableStructure) {
enumList.add(variable.getKey());
}
contentName.put("enum", enumList); // 设置变量
Map<String, Object> contentValue = new HashMap<>();
contentValue.put("type", "string");
contentValue.put("description", "内容值");
properties.put("contentName", contentName);
properties.put("contentValue", contentValue);
parameters.put("properties", properties);
parameters.put("type", "object");
function.put("name", "set_value_memory");
function.put("description", desc);
function.put("parameters", parameters);
config.put("type", "function");
config.put("function", function);
// 将 Map 转换为 JSON 字符串
Gson gson = new Gson();
String jsonString = gson.toJson(config);
List<String> resultList = new ArrayList<>();
resultList.add(jsonString);
return resultList;
}
}
package cn.com.poc.thirdparty.resource.demand.ai.common; package cn.com.poc.thirdparty.resource.demand.ai.route;
import org.apache.http.Header; import org.apache.http.Header;
import org.apache.http.HttpHeaders; import org.apache.http.HttpHeaders;
...@@ -10,7 +10,7 @@ import org.apache.http.message.BasicHeader; ...@@ -10,7 +10,7 @@ import org.apache.http.message.BasicHeader;
* *
* @author Roger Wu * @author Roger Wu
*/ */
public interface DgtoolsApiConstants { public interface DgtoolsApiRoute {
/** /**
* 中台路由 * 中台路由
......
package cn.com.poc.thirdparty.resource.demand.clickhouse.service.impl; package cn.com.poc.thirdparty.resource.demand.clickhouse.service.impl;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.route.DgtoolsApiRoute;
import cn.com.poc.thirdparty.resource.demand.clickhouse.entity.WebBrowseHarvestEntity; import cn.com.poc.thirdparty.resource.demand.clickhouse.entity.WebBrowseHarvestEntity;
import cn.com.poc.thirdparty.resource.demand.clickhouse.service.DataReportService; import cn.com.poc.thirdparty.resource.demand.clickhouse.service.DataReportService;
import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService; import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService;
...@@ -33,11 +33,11 @@ public class DataReportServiceImpl implements DataReportService { ...@@ -33,11 +33,11 @@ public class DataReportServiceImpl implements DataReportService {
private void dataReport(WebBrowseHarvestEntity request) { private void dataReport(WebBrowseHarvestEntity request) {
List<Header> headers = new ArrayList<Header>() {{ List<Header> headers = new ArrayList<Header>() {{
add(DgtoolsApiConstants.JSON_HEADER); add(DgtoolsApiRoute.JSON_HEADER);
add(DgtoolsApiConstants.CKHOUSE_HEADER); add(DgtoolsApiRoute.CKHOUSE_HEADER);
add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken())); add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
}}; }};
dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.ClickHouse.WEB_BROWSE_HARVEST_REPORT, request, headers); dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.ClickHouse.WEB_BROWSE_HARVEST_REPORT, request, headers);
} }
} }
...@@ -3,7 +3,7 @@ package cn.com.poc.thirdparty.resource.demand.member.api; ...@@ -3,7 +3,7 @@ package cn.com.poc.thirdparty.resource.demand.member.api;
import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResponse; import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResponse;
import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResult; import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResult;
import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient; import cn.com.poc.support.dgTools.DgtoolsAbstractHttpClient;
import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.route.DgtoolsApiRoute;
import org.apache.http.Header; import org.apache.http.Header;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -28,7 +28,7 @@ public class DemandAuthApi { ...@@ -28,7 +28,7 @@ public class DemandAuthApi {
*/ */
public DemandAuthResult getToken(DemandAuthResponse response) { public DemandAuthResult getToken(DemandAuthResponse response) {
List<Header> headers = new LinkedList<>(); List<Header> headers = new LinkedList<>();
headers.add(DgtoolsApiConstants.MEMBER_HEADER); headers.add(DgtoolsApiRoute.MEMBER_HEADER);
return dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.MemberPlatform.GET_PLATFORM_TOKEN, response, headers); return dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.MemberPlatform.GET_PLATFORM_TOKEN, response, headers);
} }
} }
...@@ -2,7 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.member.api; ...@@ -2,7 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.member.api;
import cn.com.poc.common.utils.http.LocalHttpClient; import cn.com.poc.common.utils.http.LocalHttpClient;
import cn.com.poc.thirdparty.resource.demand.member.entity.DemandMemberResult; import cn.com.poc.thirdparty.resource.demand.member.entity.DemandMemberResult;
import cn.com.poc.thirdparty.resource.demand.ai.common.DgtoolsApiConstants; import cn.com.poc.thirdparty.resource.demand.ai.route.DgtoolsApiRoute;
import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.methods.RequestBuilder;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -24,10 +24,10 @@ public class DemandMemberApi { ...@@ -24,10 +24,10 @@ public class DemandMemberApi {
*/ */
public String createDemandMember(String token) { public String createDemandMember(String token) {
HttpUriRequest httpUriRequest = RequestBuilder.post() HttpUriRequest httpUriRequest = RequestBuilder.post()
.setUri(dgtoolsDomainurl + DgtoolsApiConstants.BASE_URL + DgtoolsApiConstants.MemberPlatform.CRAETE_DEMAND_MEMBER) .setUri(dgtoolsDomainurl + DgtoolsApiRoute.BASE_URL + DgtoolsApiRoute.MemberPlatform.CRAETE_DEMAND_MEMBER)
.setHeader(DgtoolsApiConstants.JSON_HEADER) .setHeader(DgtoolsApiRoute.JSON_HEADER)
.setHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, token) .setHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, token)
.setHeader(DgtoolsApiConstants.MEMBER_HEADER) .setHeader(DgtoolsApiRoute.MEMBER_HEADER)
.build(); .build();
return LocalHttpClient.executeJsonResult(httpUriRequest, String.class); return LocalHttpClient.executeJsonResult(httpUriRequest, String.class);
} }
...@@ -37,10 +37,10 @@ public class DemandMemberApi { ...@@ -37,10 +37,10 @@ public class DemandMemberApi {
*/ */
public DemandMemberResult searchDemandMember(String demandMemberId, String token) { public DemandMemberResult searchDemandMember(String demandMemberId, String token) {
HttpUriRequest httpUriRequest = RequestBuilder.post() HttpUriRequest httpUriRequest = RequestBuilder.post()
.setUri(dgtoolsDomainurl + DgtoolsApiConstants.BASE_URL + DgtoolsApiConstants.MemberPlatform.SEARCH_DEMAND_MEMBER) .setUri(dgtoolsDomainurl + DgtoolsApiRoute.BASE_URL + DgtoolsApiRoute.MemberPlatform.SEARCH_DEMAND_MEMBER)
.setHeader(DgtoolsApiConstants.JSON_HEADER) .setHeader(DgtoolsApiRoute.JSON_HEADER)
.setHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, token) .setHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, token)
.setHeader(DgtoolsApiConstants.MEMBER_HEADER) .setHeader(DgtoolsApiRoute.MEMBER_HEADER)
.addParameter("memberId", demandMemberId) .addParameter("memberId", demandMemberId)
.build(); .build();
return LocalHttpClient.executeJsonResult(httpUriRequest, DemandMemberResult.class); return LocalHttpClient.executeJsonResult(httpUriRequest, DemandMemberResult.class);
......
...@@ -71,4 +71,5 @@ file.content.more.than.100w=The number of characters in a file cannot exceed 100 ...@@ -71,4 +71,5 @@ file.content.more.than.100w=The number of characters in a file cannot exceed 100
collect.limit.message=Click too fast, do not repeat the operation collect.limit.message=Click too fast, do not repeat the operation
sms.limit.message=Do not send it again. Try again later sms.limit.message=Do not send it again. Try again later
phone.is.exist=The mobile number already exists phone.is.exist=The mobile number already exists
email.is.exist=The email already exists email.is.exist=The email already exists
\ No newline at end of file file.load.error=File loading failure
\ No newline at end of file
...@@ -71,4 +71,5 @@ file.content.more.than.100w=\u6587\u4EF6\u5185\u5BB9\u5B57\u7B26\u6570\u4E0D\u80 ...@@ -71,4 +71,5 @@ file.content.more.than.100w=\u6587\u4EF6\u5185\u5BB9\u5B57\u7B26\u6570\u4E0D\u80
collect.limit.message=\u70B9\u51FB\u8FC7\u5FEB,\u8BF7\u52FF\u91CD\u590D\u64CD\u4F5C collect.limit.message=\u70B9\u51FB\u8FC7\u5FEB,\u8BF7\u52FF\u91CD\u590D\u64CD\u4F5C
sms.limit.message=\u8BF7\u52FF\u91CD\u590D\u53D1\u9001\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5 sms.limit.message=\u8BF7\u52FF\u91CD\u590D\u53D1\u9001\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
phone.is.exist=\u8BE5\u624B\u673A\u53F7\u5DF2\u5B58\u5728 phone.is.exist=\u8BE5\u624B\u673A\u53F7\u5DF2\u5B58\u5728
email.is.exist=\u8BE5\u90AE\u7BB1\u5DF2\u5B58\u5728 email.is.exist=\u8BE5\u90AE\u7BB1\u5DF2\u5B58\u5728
\ No newline at end of file file.load.error=\u6587\u4EF6\u52A0\u8F7D\u5931\u8D25
...@@ -71,4 +71,5 @@ file.content.more.than.100w=\u6587\u4EF6\u5185\u5BB9\u4E0D\u53EF\u8D85100w\u5B57 ...@@ -71,4 +71,5 @@ file.content.more.than.100w=\u6587\u4EF6\u5185\u5BB9\u4E0D\u53EF\u8D85100w\u5B57
collect.limit.message=\u9EDE\u64CA\u904E\u5FEB\uFF0C\u8ACB\u52FF\u91CD\u8907\u64CD\u4F5C collect.limit.message=\u9EDE\u64CA\u904E\u5FEB\uFF0C\u8ACB\u52FF\u91CD\u8907\u64CD\u4F5C
sms.limit.message=\u8ACB\u52FF\u91CD\u8907\u767C\u9001\uFF0C\u7A0D\u5F8C\u91CD\u8A66 sms.limit.message=\u8ACB\u52FF\u91CD\u8907\u767C\u9001\uFF0C\u7A0D\u5F8C\u91CD\u8A66
phone.is.exist=\u8A72\u624B\u6A5F\u865F\u5DF2\u5B58\u5728 phone.is.exist=\u8A72\u624B\u6A5F\u865F\u5DF2\u5B58\u5728
email.is.exist=\u8A72\u90F5\u7BB1\u5DF2\u5B58\u5728 email.is.exist=\u8A72\u90F5\u7BB1\u5DF2\u5B58\u5728
\ No newline at end of file file.load.error=\u6587\u4EF6\u52A0\u8F09\u5931\u6557
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment