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

feat:优化长文理解插件

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