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

feat: 支持文档解析

parent 638e3dd7
......@@ -29,11 +29,23 @@ public interface AgentApplicationInfoService {
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,
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;
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.common.utils.ListUtils;
import cn.com.poc.knowledge.entity.BizKnowledgeDocumentEntity;
import cn.com.poc.knowledge.service.BizKnowledgeDocumentService;
import cn.com.poc.support.security.oauth.entity.UserBaseEntity;
......@@ -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.LargeModelResponse;
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.memory_variable_writer.GetMemoryVariable;
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.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriter;
import cn.com.poc.thirdparty.service.LLMService;
import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.data.model.PagingInfo;
......@@ -116,12 +115,9 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
}
}
if (needClean) {
String contentKey = SetValueMemoryConstants.REDIS_PREFIX + entity.getAgentId() + ":" + entity.getMemberId();
redisService.del(contentKey);
MemoryVariableWriter.clean(entity.getAgentId() + ":" + entity.getAgentId());
}
// 保存或更新
return StringUtils.isEmpty(entity.getAgentId()) ?
bizAgentApplicationInfoService.save(entity) : bizAgentApplicationInfoService.update(entity);
......@@ -155,8 +151,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
if (CollectionUtils.isNotEmpty(items)) {
logger.info("variables structure cache remove,items:{}", items);
for (DialogsIdsQueryByAgentIdQueryItem item : items) {
String contentKey = SetValueMemoryConstants.REDIS_PREFIX + item.getDialogsId() + ":" + bizAgentApplicationInfoEntity.getAgentId() + ":";
redisService.delByPre(contentKey);
MemoryVariableWriter.clearByPre(item.getDialogsId() + ":" + bizAgentApplicationInfoEntity.getAgentId());
}
}
......@@ -179,14 +174,17 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
}
@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 {
logger.info("--------- Call Agent Application large model:{},unitIds:{},agentSystem:{},knowledgeIds:{}" + " communicationTurn:{},topP:{},messages:{}--------------", largeModel, unitIds, agentSystem, kdIds, communicationTurn, topP, messages);
public String callAgentApplication(String agentId, String identifier, String largeModel,
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);
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);
......@@ -599,7 +597,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
String name = tool.getFunction().getName();
// 长期记忆
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)) {
StringBuilder stringBuilder = new StringBuilder("");
for (LongMemoryEntity longMemoryEntity : longMemoryEntities) {
......@@ -615,7 +613,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
// 变量记忆
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("");
if (MapUtils.isNotEmpty(map)) {
Set<Object> keySet = map.keySet();
......@@ -799,7 +797,7 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
* @param messages
* @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();
if (ArrayUtils.isEmpty(tools)) {
return result;
......@@ -811,6 +809,11 @@ public class AgentApplicationInfoServiceImpl implements AgentApplicationInfoServ
} else {
query = content.toString();
}
if (CollectionUtils.isNotEmpty(fileUrls)) {
query = JsonUtils.serialize(fileUrls) + query;
}
FunctionCallResult functionCallResult = llmService.functionCall(query, tools);
if (functionCallResult != null && functionCallResult.isNeed()) {
// 执行函数返回结果
......
......@@ -65,6 +65,7 @@ public class AgentApplicationInfoConvert {
if (StringUtils.isNotBlank(model.getKnowledgeIds())) {
entity.setKnowledgeIds(JsonUtils.deSerialize(model.getKnowledgeIds(), Integer[].class));
}
entity.setIsDocumentParsing(model.getIsDocumentParsing());
entity.setLargeModel(model.getLargeModel());
entity.setTopP(model.getTopP());
entity.setTemperature(model.getTemperature());
......@@ -93,6 +94,7 @@ public class AgentApplicationInfoConvert {
model.setPreamble(entity.getPreamble());
model.setPublishTime(entity.getPublishTime());
model.setIsLongMemory(entity.getIsLongMemory());
model.setIsDocumentParsing(entity.getIsDocumentParsing());
if (CollectionUtils.isNotEmpty(entity.getVariableStructure())) {
model.setVariableStructure(JsonUtils.serialize(entity.getVariableStructure()));
}
......@@ -144,6 +146,7 @@ public class AgentApplicationInfoConvert {
AgentApplicationKnowledgeConfig knowledgeConfig = new AgentApplicationKnowledgeConfig();
knowledgeConfig.setKnowledgeIds(entity.getKnowledgeIds());
knowledgeConfig.setIsDocumentParsing(entity.getIsDocumentParsing());
AgentApplicationCommModelConfig commModelConfig = new AgentApplicationCommModelConfig();
commModelConfig.setLargeModel(entity.getLargeModel());
......@@ -191,6 +194,7 @@ public class AgentApplicationInfoConvert {
if (ObjectUtil.isNotEmpty(dto.getKnowledgeConfig())) {
entity.setKnowledgeIds(dto.getKnowledgeConfig().getKnowledgeIds());
entity.setIsDocumentParsing(dto.getKnowledgeConfig().getIsDocumentParsing());
}
if (ObjectUtil.isNotEmpty(dto.getCommModelConfig())) {
......@@ -221,6 +225,7 @@ public class AgentApplicationInfoConvert {
entity.setPreamble(infoQueryItem.getPreamble());
entity.setPublishTime(infoQueryItem.getPublishTime());
entity.setIsLongMemory(infoQueryItem.getIsLongMemory());
entity.setIsDocumentParsing(infoQueryItem.getIsDocumentParsing());
if (StringUtils.isNotBlank(infoQueryItem.getVariableStructure())) {
entity.setVariableStructure(JsonUtils.deSerialize(infoQueryItem.getVariableStructure(), new TypeReference<List<Variable>>() {
......
......@@ -36,6 +36,7 @@ public class BizAgentApplicationPublishConvert {
entity.setPreamble(model.getPreamble());
entity.setIsLongMemory(model.getIsLongMemory());
entity.setPublishTime(model.getModifiedTime());
entity.setIsDocumentParsing(model.getIsDocumentParsing());
if (StringUtils.isNotBlank(model.getVariableStructure())) {
entity.setVariableStructure(JsonUtils.deSerialize(model.getVariableStructure(), new TypeReference<List<Variable>>() {
}.getType()));
......@@ -76,6 +77,7 @@ public class BizAgentApplicationPublishConvert {
model.setAgentSystem(entity.getAgentSystem());
model.setPreamble(entity.getPreamble());
model.setIsLongMemory(entity.getIsLongMemory());
model.setIsDocumentParsing(entity.getIsDocumentParsing());
if (CollectionUtils.isNotEmpty(entity.getVariableStructure())) {
model.setVariableStructure(JsonUtils.serialize(entity.getVariableStructure()));
}
......@@ -126,6 +128,7 @@ public class BizAgentApplicationPublishConvert {
AgentApplicationKnowledgeConfig knowledgeConfig = new AgentApplicationKnowledgeConfig();
knowledgeConfig.setKnowledgeIds(entity.getKnowledgeIds());
knowledgeConfig.setIsDocumentParsing(entity.getIsDocumentParsing());
AgentApplicationCommModelConfig commModelConfig = new AgentApplicationCommModelConfig();
commModelConfig.setLargeModel(entity.getLargeModel());
......@@ -173,6 +176,7 @@ public class BizAgentApplicationPublishConvert {
if (ObjectUtil.isNotEmpty(dto.getKnowledgeConfig())) {
entity.setKnowledgeIds(dto.getKnowledgeConfig().getKnowledgeIds());
entity.setIsDocumentParsing(dto.getKnowledgeConfig().getIsDocumentParsing());
}
if (ObjectUtil.isNotEmpty(dto.getCommModelConfig())) {
......
......@@ -18,4 +18,18 @@ public class AgentApplicationKnowledgeConfig {
public void setKnowledgeIds(java.lang.Integer[] 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 {
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() {
return topP;
}
......
......@@ -315,6 +315,19 @@ public class BizAgentApplicationInfoEntity {
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
......
package cn.com.poc.agent_application.entity;
import javax.persistence.Column;
import java.util.List;
public class BizAgentApplicationPublishEntity {
private static final long serialVersionUID = 1L;
/** id
*自增ID
/**
* id
* 自增ID
*/
private java.lang.Integer id;
public java.lang.Integer getId(){
public java.lang.Integer getId() {
return this.id;
}
public void setId(java.lang.Integer id){
public void setId(java.lang.Integer id) {
this.id = id;
}
/** member_id
*创建应用的用户ID
/**
* member_id
* 创建应用的用户ID
*/
private java.lang.Integer memberId;
public java.lang.Integer getMemberId(){
public java.lang.Integer getMemberId() {
return this.memberId;
}
public void setMemberId(java.lang.Integer memberId){
public void setMemberId(java.lang.Integer memberId) {
this.memberId = memberId;
}
/** agent_id
*agent应用ID
/**
* agent_id
* agent应用ID
*/
private java.lang.String agentId;
public java.lang.String getAgentId(){
public java.lang.String getAgentId() {
return this.agentId;
}
public void setAgentId(java.lang.String agentId){
public void setAgentId(java.lang.String agentId) {
this.agentId = agentId;
}
/** agent_avatar
*应用头像ICON地址
/**
* agent_avatar
* 应用头像ICON地址
*/
private java.lang.String agentAvatar;
public java.lang.String getAgentAvatar(){
public java.lang.String getAgentAvatar() {
return this.agentAvatar;
}
public void setAgentAvatar(java.lang.String agentAvatar){
public void setAgentAvatar(java.lang.String agentAvatar) {
this.agentAvatar = agentAvatar;
}
/** agent_title
*应用标题
/**
* agent_title
* 应用标题
*/
private java.lang.String agentTitle;
public java.lang.String getAgentTitle(){
public java.lang.String getAgentTitle() {
return this.agentTitle;
}
public void setAgentTitle(java.lang.String agentTitle){
public void setAgentTitle(java.lang.String agentTitle) {
this.agentTitle = agentTitle;
}
/** agent_desc
*应用描述
/**
* agent_desc
* 应用描述
*/
private java.lang.String agentDesc;
public java.lang.String getAgentDesc(){
public java.lang.String getAgentDesc() {
return this.agentDesc;
}
public void setAgentDesc(java.lang.String agentDesc){
public void setAgentDesc(java.lang.String agentDesc) {
this.agentDesc = agentDesc;
}
/** agent_system
*角色指令
/**
* agent_system
* 角色指令
*/
private java.lang.String agentSystem;
public java.lang.String getAgentSystem(){
public java.lang.String getAgentSystem() {
return this.agentSystem;
}
public void setAgentSystem(java.lang.String agentSystem){
public void setAgentSystem(java.lang.String agentSystem) {
this.agentSystem = agentSystem;
}
/** agent_publish_status
*应用发布状态 草稿-draft 发布-publish
/**
* agent_publish_status
* 应用发布状态 草稿-draft 发布-publish
*/
private java.lang.String agentPublishStatus;
public java.lang.String getAgentPublishStatus(){
public java.lang.String getAgentPublishStatus() {
return this.agentPublishStatus;
}
public void setAgentPublishStatus(java.lang.String agentPublishStatus){
public void setAgentPublishStatus(java.lang.String agentPublishStatus) {
this.agentPublishStatus = agentPublishStatus;
}
/** publish_time
*发布时间
/**
* publish_time
* 发布时间
*/
private java.util.Date publishTime;
public java.util.Date getPublishTime(){
public java.util.Date getPublishTime() {
return this.publishTime;
}
public void setPublishTime(java.util.Date publishTime){
public void setPublishTime(java.util.Date publishTime) {
this.publishTime = publishTime;
}
/** preamble
*开场白
/**
* preamble
* 开场白
*/
private java.lang.String preamble;
public java.lang.String getPreamble(){
public java.lang.String getPreamble() {
return this.preamble;
}
public void setPreamble(java.lang.String preamble){
public void setPreamble(java.lang.String preamble) {
this.preamble = preamble;
}
/** variable_structure
*变量结构
/**
* variable_structure
* 变量结构
*/
private List<Variable> variableStructure;
public List<Variable> getVariableStructure(){
public List<Variable> getVariableStructure() {
return this.variableStructure;
}
public void setVariableStructure(List<Variable> variableStructure){
public void setVariableStructure(List<Variable> variableStructure) {
this.variableStructure = variableStructure;
}
/** featured_questions
*推荐问
/**
* featured_questions
* 推荐问
*/
private java.lang.String[] featuredQuestions;
public java.lang.String[] getFeaturedQuestions(){
public java.lang.String[] getFeaturedQuestions() {
return this.featuredQuestions;
}
public void setFeaturedQuestions(java.lang.String[] featuredQuestions){
public void setFeaturedQuestions(java.lang.String[] featuredQuestions) {
this.featuredQuestions = featuredQuestions;
}
/** communication_turn
*对话上下文保存轮次 0-100
/**
* communication_turn
* 对话上下文保存轮次 0-100
*/
private java.lang.Integer communicationTurn;
public java.lang.Integer getCommunicationTurn(){
public java.lang.Integer getCommunicationTurn() {
return this.communicationTurn;
}
public void setCommunicationTurn(java.lang.Integer communicationTurn){
public void setCommunicationTurn(java.lang.Integer communicationTurn) {
this.communicationTurn = communicationTurn;
}
/** continuous_question_status
*追问状态 默认-default 自定义-customizable 关闭-close
/**
* continuous_question_status
* 追问状态 默认-default 自定义-customizable 关闭-close
*/
private java.lang.String continuousQuestionStatus;
public java.lang.String getContinuousQuestionStatus(){
public java.lang.String getContinuousQuestionStatus() {
return this.continuousQuestionStatus;
}
public void setContinuousQuestionStatus(java.lang.String continuousQuestionStatus){
public void setContinuousQuestionStatus(java.lang.String continuousQuestionStatus) {
this.continuousQuestionStatus = continuousQuestionStatus;
}
/** continuous_question_system
*追问prompt
/**
* continuous_question_system
* 追问prompt
*/
private java.lang.String continuousQuestionSystem;
public java.lang.String getContinuousQuestionSystem(){
public java.lang.String getContinuousQuestionSystem() {
return this.continuousQuestionSystem;
}
public void setContinuousQuestionSystem(java.lang.String continuousQuestionSystem){
public void setContinuousQuestionSystem(java.lang.String continuousQuestionSystem) {
this.continuousQuestionSystem = continuousQuestionSystem;
}
/** continuous_question_turn
*追问轮次 1-5
/**
* continuous_question_turn
* 追问轮次 1-5
*/
private java.lang.Integer continuousQuestionTurn;
public java.lang.Integer getContinuousQuestionTurn(){
public java.lang.Integer getContinuousQuestionTurn() {
return this.continuousQuestionTurn;
}
public void setContinuousQuestionTurn(java.lang.Integer continuousQuestionTurn){
public void setContinuousQuestionTurn(java.lang.Integer continuousQuestionTurn) {
this.continuousQuestionTurn = continuousQuestionTurn;
}
/** knowledge_ids
*知识库ID
/**
* knowledge_ids
* 知识库ID
*/
private java.lang.Integer[] knowledgeIds;
public java.lang.Integer[] getKnowledgeIds(){
public java.lang.Integer[] getKnowledgeIds() {
return this.knowledgeIds;
}
public void setKnowledgeIds(java.lang.Integer[] knowledgeIds){
public void setKnowledgeIds(java.lang.Integer[] knowledgeIds) {
this.knowledgeIds = knowledgeIds;
}
/** large_model
*问答模型
/**
* large_model
* 问答模型
*/
private java.lang.String largeModel;
public java.lang.String getLargeModel(){
public java.lang.String getLargeModel() {
return this.largeModel;
}
public void setLargeModel(java.lang.String largeModel){
public void setLargeModel(java.lang.String largeModel) {
this.largeModel = largeModel;
}
/** top_p
*对话模型 多样性 [0-1.00]
/**
* top_p
* 对话模型 多样性 [0-1.00]
*/
private java.lang.Float topP;
public java.lang.Float getTopP(){
public java.lang.Float getTopP() {
return this.topP;
}
public void setTopP(java.lang.Float topP){
public void setTopP(java.lang.Float topP) {
this.topP = topP;
}
/** temperature
*对话模型 温度 [0-1.00]
/**
* temperature
* 对话模型 温度 [0-1.00]
*/
private java.lang.Float temperature;
public java.lang.Float getTemperature(){
public java.lang.Float getTemperature() {
return this.temperature;
}
public void setTemperature(java.lang.Float temperature){
public void setTemperature(java.lang.Float temperature) {
this.temperature = temperature;
}
/** unit_ids
*组件ID
/**
* unit_ids
* 组件ID
*/
private java.lang.String[] unitIds;
public java.lang.String[] getUnitIds(){
public java.lang.String[] getUnitIds() {
return this.unitIds;
}
public void setUnitIds(java.lang.String[] unitIds){
public void setUnitIds(java.lang.String[] unitIds) {
this.unitIds = unitIds;
}
/** is_long_memory
*是否开启长期记忆 1、Y 是 2、N 否
/**
* is_long_memory
* 是否开启长期记忆 1、Y 是 2、N 否
*/
private java.lang.String isLongMemory;
public java.lang.String getIsLongMemory(){
public java.lang.String getIsLongMemory() {
return this.isLongMemory;
}
public void setIsLongMemory(java.lang.String isLongMemory){
public void setIsLongMemory(java.lang.String isLongMemory) {
this.isLongMemory = isLongMemory;
}
/**
* is_document_parsing
* 是否开启文档解析 1、Y 是 2、N 否
*/
private java.lang.String isDocumentParsing;
public java.lang.String getIsDocumentParsing() {
return this.isDocumentParsing;
}
/** is_deleted
*是否删除 1、Y 是 2、N 否
public void setIsDocumentParsing(java.lang.String isDocumentParsing) {
this.isDocumentParsing = isDocumentParsing;
}
/**
* is_deleted
* 是否删除 1、Y 是 2、N 否
*/
private java.lang.String isDeleted;
public java.lang.String getIsDeleted(){
public java.lang.String getIsDeleted() {
return this.isDeleted;
}
public void setIsDeleted(java.lang.String isDeleted){
public void setIsDeleted(java.lang.String isDeleted) {
this.isDeleted = isDeleted;
}
/** CREATOR
*创建人
/**
* CREATOR
* 创建人
*/
private java.lang.String creator;
public java.lang.String getCreator(){
public java.lang.String getCreator() {
return this.creator;
}
public void setCreator(java.lang.String creator){
public void setCreator(java.lang.String creator) {
this.creator = creator;
}
/** CREATED_TIME
*创建时间
/**
* CREATED_TIME
* 创建时间
*/
private java.util.Date createdTime;
public java.util.Date getCreatedTime(){
public java.util.Date getCreatedTime() {
return this.createdTime;
}
public void setCreatedTime(java.util.Date createdTime){
public void setCreatedTime(java.util.Date createdTime) {
this.createdTime = createdTime;
}
/** MODIFIER
*修改人
/**
* MODIFIER
* 修改人
*/
private java.lang.String modifier;
public java.lang.String getModifier(){
public java.lang.String getModifier() {
return this.modifier;
}
public void setModifier(java.lang.String modifier){
public void setModifier(java.lang.String modifier) {
this.modifier = modifier;
}
/** MODIFIED_TIME
*修改时间
/**
* MODIFIED_TIME
* 修改时间
*/
private java.util.Date modifiedTime;
public java.util.Date getModifiedTime(){
public java.util.Date getModifiedTime() {
return this.modifiedTime;
}
public void setModifiedTime(java.util.Date modifiedTime){
public void setModifiedTime(java.util.Date modifiedTime) {
this.modifiedTime = modifiedTime;
}
......
......@@ -378,6 +378,23 @@ public class BizAgentApplicationInfoModel extends BaseModelClass implements Seri
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
*是否删除 1、Y 是 2、N 否
*/
......
......@@ -344,6 +344,19 @@ public class BizAgentApplicationPublishModel extends BaseModelClass implements S
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
*是否删除 1、Y 是 2、N 否
*/
......
......@@ -21,6 +21,7 @@ select distinct
unit_ids,
variable_structure,
is_long_memory,
is_document_parsing,
is_deleted,
CREATOR,
CREATED_TIME,
......
......@@ -285,18 +285,18 @@ public class AgentApplicationInfoQueryItem extends BaseItemClass implements Seri
}
/** temperature
*对话模型 温度 [0-1.00]
/**
* temperature
* 对话模型 温度 [0-1.00]
*/
private java.lang.Float temperature;
@Column(name = "temperature")
public java.lang.Float getTemperature(){
public java.lang.Float getTemperature() {
return this.temperature;
}
public void setTemperature(java.lang.Float temperature){
public void setTemperature(java.lang.Float temperature) {
this.temperature = temperature;
}
......@@ -347,6 +347,23 @@ public class AgentApplicationInfoQueryItem extends BaseItemClass implements Seri
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
......
......@@ -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.rest.AgentApplicationInfoRest;
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.constant.CommonConstant;
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.knowledge.aggregate.KnowledgeService;
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.function.LargeModelFunctionEnum;
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.value_memory.GetValueMemory;
import cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer.MemoryVariableWriter;
import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.data.model.PagingInfo;
import cn.hutool.core.collection.ListUtil;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -34,7 +30,6 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.Collator;
import java.util.*;
import java.util.stream.Collectors;
......@@ -217,7 +212,7 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
List<Integer> kdIds = knowledgeService.getKdIdsByKnowledgeInfoIds(infoEntity.getKnowledgeIds());
//配置对话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();
......@@ -227,8 +222,8 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
//调用应用服务
agentApplicationInfoService.callAgentApplication(agentId, dialogueId, model,
infoEntity.getUnitIds(), agentSystem, kdIds.toArray(new Integer[0]), infoEntity.getCommunicationTurn(), topP,
temperature, dto.getMessages(), tools, httpServletResponse);
agentSystem, kdIds.toArray(new Integer[0]), infoEntity.getCommunicationTurn(), topP,
temperature, dto.getMessages(), tools, dto.getFileUrls(), httpServletResponse);
} catch (Exception e) {
httpServletResponse.setContentType("text/event-stream");
PrintWriter writer = httpServletResponse.getWriter();
......@@ -319,7 +314,7 @@ public class AgentApplicationInfoRestImpl implements AgentApplicationInfoRest {
public List<AgentApplicationValueMemoryDto> getVariableList(String agentId) {
List<AgentApplicationValueMemoryDto> result = new ArrayList<>();
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();
if (MapUtils.isEmpty(map)) {
if (CollectionUtils.isEmpty(variableStructure)) {
......
......@@ -213,6 +213,7 @@ public class BizAgentApplicationInfoServiceImpl extends BaseServiceImpl
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");
}
model.setIsDocumentParsing(entity.getIsDocumentParsing());
model.setIsLongMemory(entity.getIsLongMemory());
model.setTemperature(entity.getTemperature());
model.setTopP(entity.getTopP());
......
......@@ -190,5 +190,6 @@ public class BizAgentApplicationPublishServiceImpl extends BaseServiceImpl
if (ArrayUtils.isNotEmpty(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;
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.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 org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ArrayUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class AgentApplicationUtils {
public class AgentApplicationToolsBuilder {
/**
* 构造Agent应用 记忆函数配置
* 构造Agent应用 函数配置
*
* @param variableStructures
* @param isLongMemory
* @param identifier
* @param agentId
* @param variableStructures 记忆变量
* @param isLongMemory 是否开启长期记忆
* @param identifier 标识符
* @param agentId 应用id
* @param unitIds 插件id
* @param isDocumentParsing 是否开启文档解析
* @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<>();
//开启对话变量
if (CollectionUtils.isNotEmpty(variableStructures)) {
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);
tools.add(tool);
//初始化变量函数
Map<Object, Object> map = GetMemoryVariable.get(identifier + ":" + agentId);
Map<Object, Object> map = MemoryVariableWriter.get(identifier + ":" + agentId);
if (MapUtils.isEmpty(map)) {
List<Variable> variableStructure = variableStructures;
for (Variable variable : variableStructure) {
......@@ -55,7 +59,29 @@ public class AgentApplicationUtils {
Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class);
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;
}
}
......@@ -131,4 +131,31 @@ public class DocumentLoad {
doc.close();
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 {
/**
* 调用 已发布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生成
......
......@@ -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.BizAgentApplicationPublishService;
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.XLangConstant;
import cn.com.poc.common.service.RedisService;
......@@ -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.LargeModelResponse;
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.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.data.model.PagingInfo;
......@@ -87,7 +87,7 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
private RedisService redisService;
@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();
if (userBaseEntity == null) {
......@@ -112,9 +112,6 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
// 构造对话参数
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();
BizAgentApplicationDialoguesRecordEntity inputRecord = new BizAgentApplicationDialoguesRecordEntity();
......@@ -126,6 +123,9 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
inputRecord.setTimestamp(inputTimestamp);
bizAgentApplicationDialoguesRecordService.save(inputRecord);
//配置对话function
List<Tool> tools = AgentApplicationToolsBuilder.buildFunctionConfig(infoEntity.getVariableStructure(), infoEntity.getIsLongMemory(), dialogsId, agentId, infoEntity.getUnitIds(), infoEntity.getIsDocumentParsing());
// 记录输出时间戳
BizAgentApplicationDialoguesRecordEntity outputRecord = new BizAgentApplicationDialoguesRecordEntity();
......@@ -137,8 +137,8 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
//对话
String output = agentApplicationInfoService.callAgentApplication(agentId, dialogsId, infoEntity.getLargeModel(),
infoEntity.getUnitIds(), infoEntity.getAgentSystem(), kdIdList.toArray(new Integer[0]), infoEntity.getCommunicationTurn(),
infoEntity.getTopP(), infoEntity.getTemperature(), messages, tools, httpServletResponse);
infoEntity.getAgentSystem(), kdIdList.toArray(new Integer[0]), infoEntity.getCommunicationTurn(),
infoEntity.getTopP(), infoEntity.getTemperature(), messages, tools, fileUrls, httpServletResponse);
//保存对话记录
outputRecord.setContent(output);
......@@ -382,12 +382,12 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
//开启对话变量
if (CollectionUtils.isNotEmpty(infoEntity.getVariableStructure())) {
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);
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)) {
List<Variable> variableStructure = infoEntity.getVariableStructure();
for (Variable variable : variableStructure) {
......
package cn.com.poc.expose.dto;
import java.util.List;
public class AgentApplicationDto {
private String dialogsId;
......@@ -32,4 +34,13 @@ public class AgentApplicationDto {
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 {
Assert.notNull(dto.getAgentId());
Assert.notNull(dto.getDialogsId());
try {
agentApplicationService.callAgentApplication(dto.getAgentId(), dto.getDialogsId(), dto.getInput(), httpServletResponse);
agentApplicationService.callAgentApplication(dto.getAgentId(), dto.getDialogsId(), dto.getInput(), dto.getFileUrls(), httpServletResponse);
} catch (Exception e) {
httpServletResponse.setContentType("text/event-stream");
PrintWriter writer = httpServletResponse.getWriter();
......
......@@ -3,7 +3,7 @@ package cn.com.poc.support.dgTools;
import cn.com.poc.common.constant.FmxParamConfigConstant;
import cn.com.poc.common.utils.ListUtils;
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.AbstractRequest;
import cn.com.poc.support.dgTools.request.ProjectTokenRequest;
......@@ -117,8 +117,8 @@ public class DgtoolsAbstractHttpClient {
}
HttpUriRequest httpUriRequest = post
.setHeader(DgtoolsApiConstants.JSON_HEADER)
.setUri(dgtoolsDomainurl + DgtoolsApiConstants.BASE_URL + url)
.setHeader(DgtoolsApiRoute.JSON_HEADER)
.setUri(dgtoolsDomainurl + DgtoolsApiRoute.BASE_URL + url)
.setEntity(new StringEntity(json, StandardCharsets.UTF_8))
.build();
DgtoolsApiResult dgtoolsApiResult = LocalHttpClient.executeJsonResult(httpUriRequest, DgtoolsApiResult.class);
......
......@@ -4,7 +4,7 @@ import cn.com.poc.common.constant.FmxParamConfigConstant;
import cn.com.poc.common.constant.MkpRedisKeyConstant;
import cn.com.poc.common.service.RedisService;
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.result.ProjectTokenResult;
import cn.com.poc.support.dgTools.service.AuthorizationService;
......@@ -51,8 +51,8 @@ public class AuthorizationServiceImpl implements AuthorizationService {
request.setProjectKey(projectKey);
request.setProjectSecret(projectSecret);
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.PAY_HEADER);
ProjectTokenResult projectTokenResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.GET_APP_TOKEN, request, headers);
headers.add(DgtoolsApiRoute.PAY_HEADER);
ProjectTokenResult projectTokenResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.GET_APP_TOKEN, request, headers);
return projectTokenResult.getAppToken();
}
......
......@@ -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.member.service.DemandAuthService;
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 com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
......@@ -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.");
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
OpenAiResult openAiResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_OPENAI_CREATE_IMAGE, request, headers);
headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
OpenAiResult openAiResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.AI_OPENAI_CREATE_IMAGE, request, headers);
if (openAiResult != null) {
GenerationsResult generationsResult = JSONObject.parseObject(openAiResult.getMessage(), GenerationsResult.class);
return generationsResult;
......@@ -114,10 +114,10 @@ public class AICreateImageServiceImpl implements AICreateImageService {
Assert.isTrue(request.getNum() <= 6 && request.getNum() >= 1, "图片生成数量,支持1-6张");
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduGetImageResult baiduGetImageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_CREATE_IMAGE, request, headers);
headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduGetImageResult baiduGetImageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.AI_BAIDU_CREATE_IMAGE, request, headers);
if (baiduGetImageResult != null) {
GenerationsResult generationsResult = new GenerationsResult();
List<ImgUrl> imgUrls = baiduGetImageResult.getData().getImgUrls();
......@@ -150,10 +150,10 @@ public class AICreateImageServiceImpl implements AICreateImageService {
}
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduGetImageV2Result baiduGetImageV2Result = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_CREATE_IMAGE_V2, request, headers);
headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduGetImageV2Result baiduGetImageV2Result = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.AI_BAIDU_CREATE_IMAGE_V2, request, headers);
if (baiduGetImageV2Result != null) {
if (FAILED.equals(baiduGetImageV2Result.getData().getTaskStatus())) {
......@@ -195,10 +195,10 @@ public class AICreateImageServiceImpl implements AICreateImageService {
Assert.notNull(request.getPrompt(), "文生图配置异常,请联系开发人员");
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduAISailsText2ImageResult imageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_SAILS_TEXT_CREATE_IMAGE, request, headers);
headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
BaiduAISailsText2ImageResult imageResult = dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.AI_BAIDU_SAILS_TEXT_CREATE_IMAGE, request, headers);
if (imageResult == null) {
throw new I18nMessageException("exception/middle.platform.is.unresponsive");
}
......@@ -234,10 +234,10 @@ public class AICreateImageServiceImpl implements AICreateImageService {
String jsonBody = dgToolsAbstractHttpClient.buildJson(request);
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse httpResponse = httpClient.execute(RequestBuilder.create(POST)
.setUri(DOMAIN_URL + DgtoolsApiConstants.BASE_URL + DgtoolsApiConstants.DgtoolsAI.AI_BAIDU_SAILS_IMAGE_CREATE_TEXT)
.addHeader(DgtoolsApiConstants.JSON_HEADER)
.addHeader(DgtoolsApiConstants.AI_HEADER)
.addHeader(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()))
.setUri(DOMAIN_URL + DgtoolsApiRoute.BASE_URL + DgtoolsApiRoute.DgtoolsAI.AI_BAIDU_SAILS_IMAGE_CREATE_TEXT)
.addHeader(DgtoolsApiRoute.JSON_HEADER)
.addHeader(DgtoolsApiRoute.AI_HEADER)
.addHeader(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()))
.setEntity(new StringEntity(jsonBody, StandardCharsets.UTF_8))
.build()
);
......
......@@ -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.member.service.DemandAuthService;
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.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.RequestBuilder;
......@@ -70,12 +70,12 @@ public class AIDialogueServiceImpl implements AIDialogueService {
@Override
public FunctionCallResult functionCall(FunctionCallResponse response) {
String url = DgtoolsApiConstants.DgtoolsAI.FUNCTION_CALL;
String url = DgtoolsApiRoute.DgtoolsAI.FUNCTION_CALL;
response.setApiKey(API_KEY);
List<Header> headers = new ArrayList<Header>() {{
add(DgtoolsApiConstants.JSON_HEADER);
add(DgtoolsApiConstants.AI_HEADER);
add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
add(DgtoolsApiRoute.JSON_HEADER);
add(DgtoolsApiRoute.AI_HEADER);
add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
}};
return dgToolsAbstractHttpClient.doRequest(url, response, headers);
}
......@@ -84,10 +84,10 @@ public class AIDialogueServiceImpl implements AIDialogueService {
String jsonBody = dgToolsAbstractHttpClient.buildJson(request);
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse httpResponse = httpClient.execute(RequestBuilder.create(POST)
.setUri(DOMAIN_URL + DgtoolsApiConstants.BASE_URL + DgtoolsApiConstants.DgtoolsAI.LARGE_MODEL)
.addHeader(DgtoolsApiConstants.JSON_HEADER)
.addHeader(DgtoolsApiConstants.AI_HEADER)
.addHeader(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()))
.setUri(DOMAIN_URL + DgtoolsApiRoute.BASE_URL + DgtoolsApiRoute.DgtoolsAI.LARGE_MODEL)
.addHeader(DgtoolsApiRoute.JSON_HEADER)
.addHeader(DgtoolsApiRoute.AI_HEADER)
.addHeader(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()))
.setEntity(new StringEntity(jsonBody, StandardCharsets.UTF_8))
.build()
);
......@@ -97,11 +97,11 @@ public class AIDialogueServiceImpl implements AIDialogueService {
}
private LargeModelDemandResult largeModelRequest(LargeModelDemandResponse request) {
String url = DgtoolsApiConstants.DgtoolsAI.LARGE_MODEL;
String url = DgtoolsApiRoute.DgtoolsAI.LARGE_MODEL;
List<Header> headers = new ArrayList<Header>() {{
add(DgtoolsApiConstants.JSON_HEADER);
add(DgtoolsApiConstants.AI_HEADER);
add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
add(DgtoolsApiRoute.JSON_HEADER);
add(DgtoolsApiRoute.AI_HEADER);
add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
}};
return dgToolsAbstractHttpClient.doRequest(url, request, headers);
}
......
package cn.com.poc.thirdparty.resource.demand.ai.aggregate.impl;
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.thirdparty.resource.demand.ai.aggregate.DemandKnowledgeService;
import cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.*;
......@@ -33,7 +33,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
TrainKnowledgeRequest request = new TrainKnowledgeRequest();
request.setDocumentUrl(fileURL);
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) {
throw new I18nMessageException("exception/abnormal.knowledge.base.training");
}
......@@ -46,7 +46,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
TrainKnowledgeRequest request = new TrainKnowledgeRequest();
request.setDocumentUrl(fileURL);
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) {
throw new I18nMessageException("exception/abnormal.knowledge.base.training");
}
......@@ -58,7 +58,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
Assert.notBlank(knowledgeId);
TrainKnowledgeStatusRequest request = new TrainKnowledgeStatusRequest();
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) {
throw new I18nMessageException("exception/abnormal.training.status.of.knowledge.base.acquisition");
}
......@@ -70,7 +70,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
Assert.notBlank(knowledgeId);
DelKnowledgeRequest request = new DelKnowledgeRequest();
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) {
throw new I18nMessageException("exception/delete.knowledge.base.exception");
}
......@@ -89,7 +89,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
searchKnowledgeRequest.setQuery(query);
searchKnowledgeRequest.setKnowLedgeIds(knowledgeIds);
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) {
throw new I18nMessageException("exception/query.knowledge.base.exception");
}
......@@ -104,7 +104,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
GetKnowledgeChunkInfoRequest request = new GetKnowledgeChunkInfoRequest();
request.setKnowledgeIds(knowledgeIds);
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
......@@ -113,7 +113,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
request.setKnowledgeId(knowledgeId);
request.setChunkRelationId(chunkRelationId);
request.setIsOpen(isOpen);
dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.OPEN_KNOWLEDGE_CHUNK, request, getHeaders());
dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.OPEN_KNOWLEDGE_CHUNK, request, getHeaders());
}
@Override
......@@ -121,7 +121,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
UpsertChunkInfoRequest request = new UpsertChunkInfoRequest();
request.setKnowledgeId(knowledgeId);
request.setChunkRelationId(chunkRelationId);
dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.DELETE_KNOWLEDGE_CHUNK, request, getHeaders());
dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.DELETE_KNOWLEDGE_CHUNK, request, getHeaders());
}
@Override
......@@ -130,7 +130,7 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
request.setKnowledgeId(knowledgeId);
request.setChunkRelationId(chunkRelationId);
request.setChunkContent(content);
dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.DgtoolsAI.UPDATE_KNOWLEDGE_CHUNK_DOC, request, getHeaders());
dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.DgtoolsAI.UPDATE_KNOWLEDGE_CHUNK_DOC, request, getHeaders());
}
@Override
......@@ -139,14 +139,14 @@ public class DemandKnowledgeServiceImpl implements DemandKnowledgeService {
request.setKnowledgeId(knowledgeId);
request.setChunkSort(chunkSort);
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() {
List<Header> headers = new ArrayList<>();
headers.add(DgtoolsApiConstants.JSON_HEADER);
headers.add(DgtoolsApiConstants.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
headers.add(DgtoolsApiRoute.JSON_HEADER);
headers.add(DgtoolsApiRoute.AI_HEADER);
headers.add(new BasicHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
return headers;
}
}
......@@ -8,7 +8,14 @@ import java.util.List;
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 {
*/
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;
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.memory_variable_writer.MemoryVariableWriterFunction;
import cn.com.poc.thirdparty.resource.demand.ai.function.value_memory.SetValueMemoryFunction;
public enum LargeModelFunctionEnum {
set_long_memory(SetLongMemoryFunction.class),
set_value_memory(SetValueMemoryFunction.class),
memory_variable_writer(MemoryVariableWriterFunction.class),
html_reader(HtmlReaderFunction.class),
document_reader(DocumentReaderFunction.class),
bing_web_search(null),
;
private Class<? extends AbstractLargeModelFunction> function;
......@@ -24,4 +27,13 @@ public enum LargeModelFunctionEnum {
public void setFunction(Class<AbstractLargeModelFunction> 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;
import java.util.Map;
import java.util.Set;
public class GetLongMemory {
public class LongMemory {
public static List<LongMemoryEntity> get(String key) {
RedisService redisService = SpringUtils.getBean(RedisService.class);
......
......@@ -4,28 +4,33 @@ 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.DateUtils;
import cn.com.poc.common.utils.JsonUtils;
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 com.google.gson.Gson;
import com.sun.org.apache.regexp.internal.RE;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 长期记忆
*/
@Service
@Component
public class SetLongMemoryFunction extends AbstractLargeModelFunction {
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天有效期
......@@ -57,43 +62,45 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction {
@Override
public List<String> getLLMConfig() {
Map<String, Object> config = new HashMap<>();
Map<String, Object> function = new HashMap<>();
Map<String, Object> content = new HashMap<>();
content.put("type", "string");
content.put("description", "内容的详细说明");
Map<String, Object> properties = new HashMap<>();
properties.put("content", content);
Map<String, Object> parameters = new HashMap<>();
parameters.put("type", "object");
parameters.put("properties", properties);
List<String> required = new ArrayList<>();
required.add("content");
parameters.put("required", required);
function.put("name", "set_long_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;
// Map<String, Object> config = new HashMap<>();
// Map<String, Object> function = new HashMap<>();
//
// Map<String, Object> content = new HashMap<>();
// content.put("type", "string");
// content.put("description", "内容的详细说明");
//
// Map<String, Object> properties = new HashMap<>();
// properties.put("content", content);
//
// Map<String, Object> parameters = new HashMap<>();
// parameters.put("type", "object");
// parameters.put("properties", properties);
//
// List<String> required = new ArrayList<>();
// required.add("content");
// parameters.put("required", required);
//
//
// function.put("name", "set_long_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;
return ListUtil.toList(JsonUtils.serialize(functionLLMConfig));
}
@Override
public List<String> getVariableStructureLLMConfig(List<Variable> variableStructure) {
throw new I18nMessageException("exception/variable.structure.configuration.is.not.currently.supported");
public List<String> getLLMConfig(List<Variable> variableStructure) {
return this.getLLMConfig();
}
}
......@@ -6,7 +6,7 @@ import cn.com.poc.common.utils.SpringUtils;
import java.util.Map;
public class GetMemoryVariable {
public class MemoryVariableWriter {
public static Map<Object, Object> get(String key) {
String redisKey = MemoryVariableWriterConstants.REDIS_PREFIX + key + ":" + BlContext.getCurrentUserNotException().getUserId().toString();
......@@ -17,4 +17,16 @@ public class GetMemoryVariable {
Map<Object, Object> result = redisService.hmget(redisKey);
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;
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.com.yict.framemax.core.i18n.I18nMessageException;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONException;
import cn.hutool.json.JSONObject;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
......@@ -18,36 +22,20 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Component
public class MemoryVariableWriterFunction extends AbstractLargeModelFunction {
private final String DESC = "该方法参考key字段给出的内容键,来保存对应的内容值,该方法不可进行查询";
private final String LLM_JSON_SCHEMA = "{\n" +
" \"description\": \"" + DESC + "\",\n" +
" \"type\": \"function\",\n" +
" \"function\": {\n" +
" \"name\": \"memory_variable_writer\",\n" +
" \"parameters\": {\n" +
" \"type\": \"array\",\n" +
" \"properties\": {\n" +
" \"key\": {\n" +
" \"type\": \"string\",\n" +
" \"enum\": ${variableStructure},\n" +
" \"description\": \"内容键\"\n" +
" },\n" +
" \"value\": {\n" +
" \"type\": \"string\",\n" +
" \"description\": \"内容值\"\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
" }";
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig
.FunctionLLMConfigBuilder()
.name("memory_variable_writer")
.description(DESC)
.parameters(new Parameters("array")
.addProperties("key", new Properties("string", "内容键"))
.addProperties("value", new Properties("string", "内容值"))
).build();
private final Long expireTime = 30 * 60 * 24L; // 30天有效期
@Resource
private RedisService redisService;
......@@ -77,6 +65,8 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction {
} else {
setMap(new JSONObject(content), result);
}
// 30天有效期
long expireTime = 30 * 60 * 24L;
redisService.hmset(contentKey, result, expireTime);
return "SUCCESS";
}
......@@ -98,18 +88,16 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction {
}
@Override
public List<String> getVariableStructureLLMConfig(List<Variable> variableStructure) {
public List<String> getLLMConfig(List<Variable> variableStructure) {
List<String> enumList = new ArrayList<>();
for (Variable variable : variableStructure) {
enumList.add(variable.getKey());
}
String enums = JsonUtils.serialize(enumList);
String configStr = LLM_JSON_SCHEMA.replace("${variableStructure}", enums);
List<String> resultList = new ArrayList<>();
resultList.add(configStr);
return resultList;
this.functionLLMConfig.getFunction().getParameters().addProperties("key", new Properties("string", "内容键", enumList));
return ListUtil.toList(JsonUtils.serialize(functionLLMConfig));
}
private boolean isJsonArray(String json) {
try {
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.HttpHeaders;
......@@ -10,7 +10,7 @@ import org.apache.http.message.BasicHeader;
*
* @author Roger Wu
*/
public interface DgtoolsApiConstants {
public interface DgtoolsApiRoute {
/**
* 中台路由
......
package cn.com.poc.thirdparty.resource.demand.clickhouse.service.impl;
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.service.DataReportService;
import cn.com.poc.thirdparty.resource.demand.member.service.DemandAuthService;
......@@ -33,11 +33,11 @@ public class DataReportServiceImpl implements DataReportService {
private void dataReport(WebBrowseHarvestEntity request) {
List<Header> headers = new ArrayList<Header>() {{
add(DgtoolsApiConstants.JSON_HEADER);
add(DgtoolsApiConstants.CKHOUSE_HEADER);
add(new BasicHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, demandAuthService.getToken()));
add(DgtoolsApiRoute.JSON_HEADER);
add(DgtoolsApiRoute.CKHOUSE_HEADER);
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;
import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResponse;
import cn.com.poc.thirdparty.resource.demand.member.entity.DemandAuthResult;
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.springframework.stereotype.Service;
......@@ -28,7 +28,7 @@ public class DemandAuthApi {
*/
public DemandAuthResult getToken(DemandAuthResponse response) {
List<Header> headers = new LinkedList<>();
headers.add(DgtoolsApiConstants.MEMBER_HEADER);
return dgToolsAbstractHttpClient.doRequest(DgtoolsApiConstants.MemberPlatform.GET_PLATFORM_TOKEN, response, headers);
headers.add(DgtoolsApiRoute.MEMBER_HEADER);
return dgToolsAbstractHttpClient.doRequest(DgtoolsApiRoute.MemberPlatform.GET_PLATFORM_TOKEN, response, headers);
}
}
......@@ -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.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.RequestBuilder;
import org.springframework.beans.factory.annotation.Value;
......@@ -24,10 +24,10 @@ public class DemandMemberApi {
*/
public String createDemandMember(String token) {
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setUri(dgtoolsDomainurl + DgtoolsApiConstants.BASE_URL + DgtoolsApiConstants.MemberPlatform.CRAETE_DEMAND_MEMBER)
.setHeader(DgtoolsApiConstants.JSON_HEADER)
.setHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, token)
.setHeader(DgtoolsApiConstants.MEMBER_HEADER)
.setUri(dgtoolsDomainurl + DgtoolsApiRoute.BASE_URL + DgtoolsApiRoute.MemberPlatform.CRAETE_DEMAND_MEMBER)
.setHeader(DgtoolsApiRoute.JSON_HEADER)
.setHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, token)
.setHeader(DgtoolsApiRoute.MEMBER_HEADER)
.build();
return LocalHttpClient.executeJsonResult(httpUriRequest, String.class);
}
......@@ -37,10 +37,10 @@ public class DemandMemberApi {
*/
public DemandMemberResult searchDemandMember(String demandMemberId, String token) {
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setUri(dgtoolsDomainurl + DgtoolsApiConstants.BASE_URL + DgtoolsApiConstants.MemberPlatform.SEARCH_DEMAND_MEMBER)
.setHeader(DgtoolsApiConstants.JSON_HEADER)
.setHeader(DgtoolsApiConstants.HEADER_X_PLATFORM_AUTHORIZATION, token)
.setHeader(DgtoolsApiConstants.MEMBER_HEADER)
.setUri(dgtoolsDomainurl + DgtoolsApiRoute.BASE_URL + DgtoolsApiRoute.MemberPlatform.SEARCH_DEMAND_MEMBER)
.setHeader(DgtoolsApiRoute.JSON_HEADER)
.setHeader(DgtoolsApiRoute.HEADER_X_PLATFORM_AUTHORIZATION, token)
.setHeader(DgtoolsApiRoute.MEMBER_HEADER)
.addParameter("memberId", demandMemberId)
.build();
return LocalHttpClient.executeJsonResult(httpUriRequest, DemandMemberResult.class);
......
......@@ -72,3 +72,4 @@ collect.limit.message=Click too fast, do not repeat the operation
sms.limit.message=Do not send it again. Try again later
phone.is.exist=The mobile number already exists
email.is.exist=The email already exists
file.load.error=File loading failure
\ No newline at end of file
......@@ -72,3 +72,4 @@ collect.limit.message=\u70B9\u51FB\u8FC7\u5FEB,\u8BF7\u52FF\u91CD\u590D\u64CD\u4
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
email.is.exist=\u8BE5\u90AE\u7BB1\u5DF2\u5B58\u5728
file.load.error=\u6587\u4EF6\u52A0\u8F7D\u5931\u8D25
......@@ -72,3 +72,4 @@ collect.limit.message=\u9EDE\u64CA\u904E\u5FEB\uFF0C\u8ACB\u52FF\u91CD\u8907\u64
sms.limit.message=\u8ACB\u52FF\u91CD\u8907\u767C\u9001\uFF0C\u7A0D\u5F8C\u91CD\u8A66
phone.is.exist=\u8A72\u624B\u6A5F\u865F\u5DF2\u5B58\u5728
email.is.exist=\u8A72\u90F5\u7BB1\u5DF2\u5B58\u5728
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