Commit 964a0b97 authored by alex yao's avatar alex yao

feat:优化长文理解插件

parent db979b24
...@@ -30,11 +30,7 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction { ...@@ -30,11 +30,7 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction {
private final String MODEL = "qwen-long"; private final String MODEL = "qwen-long";
private final String TEMPLATE = "# 工作规范:\n 1.工作流程:①对提供的文档内容进行理解,支持信息检索、摘要总结、文本分析。②根据用户提出的问题,提取或者总结文档中与问题相关的内容。2.工作限制:①要将问题与文档内容精准匹配,在理解文档时要带着问题去理解 \n\n" + private final String TEMPLATE = "# 工作规范:\n 1.工作流程:①对提供的文档内容进行理解,支持信息检索、摘要总结、文本分析。②根据用户提出的问题,提取或者总结文档中与问题相关的内容。2.工作限制:①要将问题与文档内容精准匹配,在理解文档时要带着问题去理解 \n\n";
"## 文档内容\n" +
"${document_content}\n" +
"## 用户问题\n" +
"${question}";
private final String DESC = "仅支持文档doc、docx、pdf、txt、md、xlsx、csv、xls,解析长文档内容理解,支持信息检索、摘要总结、文本分析能力,不可解析网页"; private final String DESC = "仅支持文档doc、docx、pdf、txt、md、xlsx、csv、xls,解析长文档内容理解,支持信息检索、摘要总结、文本分析能力,不可解析网页";
...@@ -52,15 +48,13 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction { ...@@ -52,15 +48,13 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction {
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) {
result.setFunctionResult(StringUtils.EMPTY); result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY); result.setPromptContent(StringUtils.EMPTY);
if (StringUtils.isBlank(content)) {
return result; return result;
} }
JSONObject jsonObject = JSON.parseObject(content); JSONObject jsonObject = JSON.parseObject(content);
if (!jsonObject.containsKey("question") || !jsonObject.containsKey("file_url")){ if (!jsonObject.containsKey("question") || !jsonObject.containsKey("file_url")){
result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY);
return result; return result;
} }
...@@ -70,16 +64,28 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction { ...@@ -70,16 +64,28 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction {
String documentContent; String documentContent;
try { try {
documentContent = DocumentLoad.documentToText(file); documentContent = DocumentLoad.documentToText(file);
if(StringUtils.isBlank(documentContent)){
return result;
}
} catch (Exception e) { } catch (Exception e) {
documentContent = StringUtils.EMPTY; return result;
} }
Message systemMessage = new Message();
systemMessage.setRole("system");
systemMessage.setContent(TEMPLATE);
Message fileContentMessage = new Message();
fileContentMessage.setRole("system");
fileContentMessage.setContent(documentContent);
Message message = new Message(); Message message = new Message();
message.setRole("user"); message.setRole("user");
message.setContent(TEMPLATE.replace("${document_content}", documentContent).replace("${question}", question)); message.setContent(question));
LargeModelResponse largeModelResponse = new LargeModelResponse(); LargeModelResponse largeModelResponse = new LargeModelResponse();
largeModelResponse.setModel(MODEL); largeModelResponse.setModel(MODEL);
largeModelResponse.setMessages(new Message[]{message}); largeModelResponse.setMessages(new Message[]{systemMessage,fileContentMessage,message});
largeModelResponse.setStream(false); largeModelResponse.setStream(false);
largeModelResponse.setUser("Document_Understanding"); largeModelResponse.setUser("Document_Understanding");
LargeModelDemandResult largeModelDemandResult = llmService.chat(largeModelResponse); LargeModelDemandResult largeModelDemandResult = llmService.chat(largeModelResponse);
......
...@@ -36,6 +36,8 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction { ...@@ -36,6 +36,8 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction {
private final String DESC = "长文档理解,适合用于文档内容长、文件大的文档,结合用户问题与文档理解的插件,仅支持文档doc、docx、pdf、txt、md、xlsx、csv、xls"; private final String DESC = "长文档理解,适合用于文档内容长、文件大的文档,结合用户问题与文档理解的插件,仅支持文档doc、docx、pdf、txt、md、xlsx、csv、xls";
private final String SYSTEM_PROMPT = "# 工作规范:\n 1.工作流程:①对提供的文档内容进行理解,支持信息检索、摘要总结、文本分析。②根据用户提出的问题,提取或者总结文档中与问题相关的内容。2.工作限制:①要将问题与文档内容精准匹配,在理解文档时要带着问题去理解 \n\n";
private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig private final FunctionLLMConfig functionLLMConfig = new FunctionLLMConfig
.FunctionLLMConfigBuilder() .FunctionLLMConfigBuilder()
.name("long_document_reader") .name("long_document_reader")
...@@ -49,15 +51,13 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction { ...@@ -49,15 +51,13 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction {
@Override @Override
public AbstractFunctionResult<String> doFunction(String content, String identifier) { public AbstractFunctionResult<String> doFunction(String content, String identifier) {
AbstractFunctionResult<String> result = new AbstractFunctionResult<>(); AbstractFunctionResult<String> result = new AbstractFunctionResult<>();
if (StringUtils.isBlank(content)) {
result.setFunctionResult(StringUtils.EMPTY); result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY); result.setPromptContent(StringUtils.EMPTY);
if (StringUtils.isBlank(content)) {
return result; return result;
} }
JSONObject jsonObject = JSON.parseObject(content); JSONObject jsonObject = JSON.parseObject(content);
if (!jsonObject.containsKey("question") || !jsonObject.containsKey("file_url")) { if (!jsonObject.containsKey("question") || !jsonObject.containsKey("file_url")) {
result.setFunctionResult(StringUtils.EMPTY);
result.setPromptContent(StringUtils.EMPTY);
return result; return result;
} }
...@@ -68,11 +68,11 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction { ...@@ -68,11 +68,11 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction {
try { try {
documentContent = DocumentLoad.documentToText(file); documentContent = DocumentLoad.documentToText(file);
} catch (Exception e) { } catch (Exception e) {
documentContent = StringUtils.EMPTY; return result;
} }
Message systemMessage = new Message(); Message systemMessage = new Message();
systemMessage.setRole("system"); systemMessage.setRole("system");
systemMessage.setContent("任务是对文档和用户问题进行分析"); systemMessage.setContent(SYSTEM_PROMPT);
Message documentMessage = new Message(); Message documentMessage = new Message();
documentMessage.setRole("system"); documentMessage.setRole("system");
...@@ -87,7 +87,7 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction { ...@@ -87,7 +87,7 @@ public class LongDocumentReaderFunction extends AbstractLargeModelFunction {
largeModelResponse.setModel(MODEL); largeModelResponse.setModel(MODEL);
largeModelResponse.setMessages(messages); largeModelResponse.setMessages(messages);
largeModelResponse.setStream(false); largeModelResponse.setStream(false);
largeModelResponse.setUser("Document_Understanding"); largeModelResponse.setUser("Long_Document_Reader");
LargeModelDemandResult largeModelDemandResult = llmService.chat(largeModelResponse); LargeModelDemandResult largeModelDemandResult = llmService.chat(largeModelResponse);
if (largeModelDemandResult == null) { if (largeModelDemandResult == null) {
result.setFunctionResult(StringUtils.EMPTY); result.setFunctionResult(StringUtils.EMPTY);
......
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