Commit a52d8ff3 authored by alex yao's avatar alex yao

feat: Agent应用-文档解析更换为文档理解function

parent f6c732b9
......@@ -60,9 +60,9 @@ public class AgentApplicationTools {
tools.add(tool);
}
//开启文档解析
//开启文档解析-文档理解
if (CommonConstant.YOrN.Y.equals(isDocumentParsing)) {
String functionName = LargeModelFunctionEnum.document_reader.name();
String functionName = LargeModelFunctionEnum.document_understanding.name();
String llmConfig = LargeModelFunctionEnum.valueOf(functionName).getFunction().getLLMConfig().get(0);
Tool tool = JsonUtils.deSerialize(llmConfig, Tool.class);
tools.add(tool);
......
......@@ -2,6 +2,7 @@ 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.document_understanding.DocumentUnderstandIngFunction;
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;
......@@ -11,9 +12,12 @@ public enum LargeModelFunctionEnum {
memory_variable_writer(MemoryVariableWriterFunction.class),
html_reader(HtmlReaderFunction.class),
document_reader(DocumentReaderFunction.class),
document_understanding(DocumentUnderstandIngFunction.class),
bing_web_search(null),
;
private Class<? extends AbstractLargeModelFunction> function;
LargeModelFunctionEnum(Class<? extends AbstractLargeModelFunction> function) {
......
package cn.com.poc.thirdparty.resource.demand.ai.function.document_understanding;
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.entity.dialogue.Message;
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.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.poc.thirdparty.service.LLMService;
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 javax.annotation.Resource;
import java.io.File;
import java.util.List;
@Component
public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction {
@Resource
private LLMService llmService;
private final String MODEL = "Doubao-pro-128k";
private final String TEMPLATE = "## 任务\n" +
"你的任务是根据用户提出的问题,并且对于当前长文档内容理解,支持信息检索、摘要总结、文本分析能力。提取或者总结文档中与内容相关的内容。\n" +
"\n" +
"## 文档内容\n" +
"${document_content}" +
"\n" +
"## 用户问题\n" +
"${question}";
private final String DESC = "长文档内容理解,支持信息检索、摘要总结、文本分析能力。";
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig
.FunctionLLMConfigBuilder()
.name("document_understanding")
.description(DESC)
.parameters(new Parameters("object")
.addProperties("question", new Properties("string", "提炼用户的问题"))
.addProperties("file_url", new Properties("string", "doc、docx、pdf、txt、md文件地址"))
).build();
@Override
public String doFunction(String content, String identifier) {
if (StringUtils.isBlank(content)) {
return StringUtils.EMPTY;
}
JSONObject jsonObject = JSON.parseObject(content);
String question = jsonObject.getString("question");
String fileUrl = jsonObject.getString("file_url");
File file = DocumentLoad.downloadURLDocument(fileUrl);
String documentContent = DocumentLoad.documentToText(file);
Message message = new Message();
message.setRole("user");
message.setContent(TEMPLATE.replace("${document_content}", documentContent).replace("${question}", question));
LargeModelResponse largeModelResponse = new LargeModelResponse();
largeModelResponse.setModel(MODEL);
largeModelResponse.setMessages(new Message[]{message});
largeModelResponse.setStream(false);
largeModelResponse.setUser("Document_Understanding");
LargeModelDemandResult largeModelDemandResult = llmService.chat(largeModelResponse);
return largeModelDemandResult.getMessage();
}
@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;
import cn.com.poc.agent_application.entity.Variable;
import cn.com.poc.thirdparty.resource.demand.ai.function.document_understanding.DocumentUnderstandIngFunction;
import cn.com.yict.framemax.core.spring.SingleContextInitializer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
import java.util.List;
import java.util.UUID;
import static org.apache.poi.hslf.record.RecordTypes.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = SingleContextInitializer.class)
@WebAppConfiguration
public class DocumentUnderstandingFunctionTest {
@Resource
DocumentUnderstandIngFunction documentUnderstandIngFunction;
@Test
public void testDoFunction() {
String content = "{\"file_url\": \"https://gsst-poe-sit.gz.bcebos.com/data/20241127/1732704249980.docx\",\"question\":\"駕駛執照上的二維碼內載有什麼資料?\"}";
String identifier = UUID.randomUUID().toString();
String RESULT = documentUnderstandIngFunction.doFunction(content, identifier);
System.out.println(RESULT);
}
@Test
public void testGetDesc() {
System.out.println(documentUnderstandIngFunction.getDesc());
}
@Test
public void testGetLLMConfig() {
System.out.println(documentUnderstandIngFunction.getLLMConfig());
}
@Test
public void testGetLLMConfigToVariableStructure() {
List<Variable> variableStructure = Mockito.mock(List.class);
System.out.println(documentUnderstandIngFunction.getLLMConfig(variableStructure));
}
}
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