Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
poc-api
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
poc
poc-api
Commits
32924fb9
Commit
32924fb9
authored
Mar 20, 2025
by
alex yao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: Function 出参优化
parent
6a5bd7ff
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
218 additions
and
136 deletions
+218
-136
AgentApplicationServiceImpl.java
...plication/aggregate/impl/AgentApplicationServiceImpl.java
+11
-7
FunctionResult.java
...a/cn/com/poc/agent_application/domain/FunctionResult.java
+14
-3
AbstractFunctionResult.java
...y/resource/demand/ai/function/AbstractFunctionResult.java
+29
-0
AbstractLargeModelFunction.java
...source/demand/ai/function/AbstractLargeModelFunction.java
+1
-2
BingWebSearchFunction.java
...nd/ai/function/bing_web_search/BingWebSearchFunction.java
+2
-4
DocumentReaderFunction.java
...d/ai/function/document_reader/DocumentReaderFunction.java
+15
-5
DocumentUnderstandIngFunction.java
...document_understanding/DocumentUnderstandIngFunction.java
+11
-4
HtmlReaderFunction.java
...ce/demand/ai/function/html_reader/HtmlReaderFunction.java
+11
-4
ImageOCRFunction.java
...source/demand/ai/function/image_ocr/ImageOCRFunction.java
+7
-3
SetLongMemoryFunction.java
...demand/ai/function/long_memory/SetLongMemoryFunction.java
+9
-41
MemoryVariableWriterFunction.java
.../memory_variable_writer/MemoryVariableWriterFunction.java
+16
-9
NotificationReminderFunction.java
...n/notification_reminder/NotificationReminderFunction.java
+19
-7
DouyinTopSearchFunction.java
...emand/ai/function/top_search/DouyinTopSearchFunction.java
+9
-5
ToutiaoTopSearchFunction.java
...mand/ai/function/top_search/ToutiaoTopSearchFunction.java
+10
-5
WeiboTopSearchFunction.java
...demand/ai/function/top_search/WeiboTopSearchFunction.java
+11
-7
WebSearchFunction.java
...ource/demand/ai/function/web_seach/WebSearchFunction.java
+18
-5
WebSearchFunctionResult.java
...demand/ai/function/web_seach/WebSearchFunctionResult.java
+19
-19
DocumentReaderFunctionTest.java
...source/demand/ai/function/DocumentReaderFunctionTest.java
+4
-4
DocumentUnderstandingFunctionTest.java
...demand/ai/function/DocumentUnderstandingFunctionTest.java
+2
-2
No files found.
src/main/java/cn/com/poc/agent_application/aggregate/impl/AgentApplicationServiceImpl.java
View file @
32924fb9
...
...
@@ -34,6 +34,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.generations.BaiduAISailsT
import
cn.com.poc.thirdparty.resource.demand.ai.entity.knowledge.SearchKnowledgeResult
;
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.AbstractFunctionResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.LargeModelFunctionEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.AgentLongMemoryEntity
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.long_memory.LongMemory
;
...
...
@@ -721,7 +722,7 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
promptTemplate
=
promptTemplate
.
replace
(
"${functionName}"
,
StringUtils
.
isNotBlank
(
functionResult
.
getFunctionName
())
?
functionResult
.
getFunctionName
()
:
StringUtils
.
EMPTY
)
.
replace
(
"${functionArg}"
,
StringUtils
.
isNotBlank
(
functionResult
.
getFunctionArg
())
?
functionResult
.
getFunctionArg
()
:
StringUtils
.
EMPTY
)
.
replace
(
"${functionDesc}"
,
StringUtils
.
isNotBlank
(
functionResult
.
getFunctionDesc
())
?
functionResult
.
getFunctionDesc
()
:
StringUtils
.
EMPTY
)
.
replace
(
"${functionResult}"
,
StringUtils
.
isNotBlank
(
functionResult
.
get
FunctionResult
())
?
functionResult
.
getFunctionResul
t
()
:
StringUtils
.
EMPTY
);
.
replace
(
"${functionResult}"
,
StringUtils
.
isNotBlank
(
functionResult
.
get
PromptContent
())
?
functionResult
.
getPromptConten
t
()
:
StringUtils
.
EMPTY
);
}
return
promptTemplate
;
}
...
...
@@ -899,7 +900,8 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
break
;
}
}
toolFunction
.
setResult
(
functionResult
.
getFunctionResult
());
toolFunction
.
setArguments
(
JsonUtils
.
serialize
(
functionResult
.
getFunctionArg
()));
toolFunction
.
setResult
(
JsonUtils
.
serialize
(
functionResult
.
getFunctionResult
()));
return
toolFunction
;
}
...
...
@@ -990,13 +992,14 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
if
(
functionCallResult
!=
null
&&
functionCallResult
.
isNeed
())
{
// 执行函数返回结果
LargeModelFunctionEnum
functionEnum
=
LargeModelFunctionEnum
.
valueOf
(
functionCallResult
.
getFunctionCall
().
getName
());
String
f
unctionResult
=
functionEnum
.
getFunction
().
doFunction
(
functionCallResult
.
getFunctionCall
().
getArguments
(),
AgentApplicationTools
.
identifier
(
dialogueId
,
agentId
));
AbstractFunctionResult
abstractF
unctionResult
=
functionEnum
.
getFunction
().
doFunction
(
functionCallResult
.
getFunctionCall
().
getArguments
(),
AgentApplicationTools
.
identifier
(
dialogueId
,
agentId
));
//构造返回结果
result
.
setFunctionName
(
functionCallResult
.
getFunctionCall
().
getName
());
result
.
setFunctionArg
(
functionCallResult
.
getFunctionCall
().
getArguments
());
result
.
setFunctionDesc
(
functionEnum
.
getFunction
().
getDesc
());
result
.
setFunctionResult
(
functionResult
);
result
.
setFunctionResult
(
abstractFunctionResult
.
getFunctionResult
());
result
.
setPromptContent
(
abstractFunctionResult
.
getPromptContent
());
}
return
result
;
...
...
@@ -1007,15 +1010,16 @@ public class AgentApplicationServiceImpl implements AgentApplicationService {
if
(
functionCallResult
!=
null
&&
functionCallResult
.
isNeed
())
{
// 执行函数返回结果
LargeModelFunctionEnum
functionEnum
=
LargeModelFunctionEnum
.
valueOf
(
functionCallResult
.
getFunctionCall
().
getName
());
String
f
unctionResult
=
functionEnum
.
getFunction
().
doFunction
(
functionCallResult
.
getFunctionCall
().
getArguments
(),
AgentApplicationTools
.
identifier
(
dialogueId
,
agentId
));
if
(
StringUtils
.
isBlank
(
functionResult
))
{
AbstractFunctionResult
abstractF
unctionResult
=
functionEnum
.
getFunction
().
doFunction
(
functionCallResult
.
getFunctionCall
().
getArguments
(),
AgentApplicationTools
.
identifier
(
dialogueId
,
agentId
));
if
(
ObjectUtil
.
isNull
(
abstractFunctionResult
)
||
StringUtils
.
isBlank
(
abstractFunctionResult
.
getPromptContent
()
))
{
throw
new
BusinessException
(
"插件执行失败"
);
}
//构造返回结果
result
.
setFunctionName
(
functionCallResult
.
getFunctionCall
().
getName
());
result
.
setFunctionArg
(
functionCallResult
.
getFunctionCall
().
getArguments
());
result
.
setFunctionDesc
(
functionEnum
.
getFunction
().
getDesc
());
result
.
setFunctionResult
(
functionResult
);
result
.
setPromptContent
(
abstractFunctionResult
.
getPromptContent
());
result
.
setFunctionResult
(
abstractFunctionResult
.
getFunctionResult
());
}
return
result
;
}
...
...
src/main/java/cn/com/poc/agent_application/domain/FunctionResult.java
View file @
32924fb9
...
...
@@ -8,8 +8,17 @@ public class FunctionResult {
private
String
functionDesc
;
private
String
functionResult
;
private
Object
functionResult
;
private
String
promptContent
;
public
String
getPromptContent
()
{
return
promptContent
;
}
public
void
setPromptContent
(
String
promptContent
)
{
this
.
promptContent
=
promptContent
;
}
public
String
getFunctionName
()
{
return
functionName
;
...
...
@@ -35,11 +44,13 @@ public class FunctionResult {
this
.
functionDesc
=
functionDesc
;
}
public
String
getFunctionResult
()
{
public
Object
getFunctionResult
()
{
return
functionResult
;
}
public
void
setFunctionResult
(
String
functionResult
)
{
public
void
setFunctionResult
(
Object
functionResult
)
{
this
.
functionResult
=
functionResult
;
}
}
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/AbstractFunctionResult.java
0 → 100644
View file @
32924fb9
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
demand
.
ai
.
function
;
/**
* @author alex.yao
* @date 2025/3/20
*/
public
class
AbstractFunctionResult
<
T
>
{
private
String
promptContent
;
private
T
functionResult
;
public
String
getPromptContent
()
{
return
promptContent
;
}
public
void
setPromptContent
(
String
promptContent
)
{
this
.
promptContent
=
promptContent
;
}
public
T
getFunctionResult
()
{
return
functionResult
;
}
public
void
setFunctionResult
(
T
functionResult
)
{
this
.
functionResult
=
functionResult
;
}
}
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/AbstractLargeModelFunction.java
View file @
32924fb9
...
...
@@ -2,7 +2,6 @@ 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.entity.dialogue.Function
;
import
java.util.List
;
...
...
@@ -15,7 +14,7 @@ public abstract class AbstractLargeModelFunction {
* @param identifier 唯一标识
* @return
*/
public
abstract
String
doFunction
(
String
content
,
String
identifier
);
public
abstract
AbstractFunctionResult
doFunction
(
String
content
,
String
identifier
);
/**
* 获取函数描述
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/bing_web_search/BingWebSearchFunction.java
View file @
32924fb9
package
cn
.
com
.
poc
.
thirdparty
.
resource
.
demand
.
ai
.
function
.
bing_web_search
;
import
cn.com.poc.agent_application.entity.Variable
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
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
org.springframework.stereotype.Component
;
import
java.util.List
;
...
...
@@ -17,7 +15,7 @@ import java.util.List;
public
class
BingWebSearchFunction
extends
AbstractLargeModelFunction
{
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
doFunction
(
String
content
,
String
identifier
)
{
return
null
;
}
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/document_reader/DocumentReaderFunction.java
View file @
32924fb9
...
...
@@ -4,6 +4,7 @@ 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.AbstractFunctionResult
;
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
;
...
...
@@ -33,9 +34,12 @@ public class DocumentReaderFunction extends AbstractLargeModelFunction {
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
<
String
>
doFunction
(
String
content
,
String
identifier
)
{
AbstractFunctionResult
<
String
>
result
=
new
AbstractFunctionResult
<>();
if
(
StringUtils
.
isBlank
(
content
))
{
return
StringUtils
.
EMPTY
;
result
.
setFunctionResult
(
StringUtils
.
EMPTY
);
result
.
setPromptContent
(
StringUtils
.
EMPTY
);
return
result
;
}
StringBuilder
sb
=
new
StringBuilder
();
JSONObject
jsonObject
=
JSON
.
parseObject
(
content
);
...
...
@@ -43,7 +47,9 @@ public class DocumentReaderFunction extends AbstractLargeModelFunction {
JSONArray
jsonArray
=
jsonObject
.
getJSONArray
(
"file_urls"
);
int
size
=
jsonArray
.
size
();
if
(
size
==
0
)
{
return
StringUtils
.
EMPTY
;
result
.
setFunctionResult
(
StringUtils
.
EMPTY
);
result
.
setPromptContent
(
StringUtils
.
EMPTY
);
return
result
;
}
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
String
fileUrl
=
jsonArray
.
getString
(
i
);
...
...
@@ -51,9 +57,13 @@ public class DocumentReaderFunction extends AbstractLargeModelFunction {
sb
.
append
(
StringUtils
.
LF
).
append
(
"## Document "
).
append
((
i
+
1
)).
append
(
StringUtils
.
LF
);
sb
.
append
(
DocumentLoad
.
documentToText
(
file
));
}
return
sb
.
toString
();
result
.
setFunctionResult
(
sb
.
toString
());
result
.
setPromptContent
(
sb
.
toString
());
return
result
;
}
return
StringUtils
.
EMPTY
;
result
.
setFunctionResult
(
StringUtils
.
EMPTY
);
result
.
setPromptContent
(
StringUtils
.
EMPTY
);
return
result
;
}
@Override
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/document_understanding/DocumentUnderstandIngFunction.java
View file @
32924fb9
...
...
@@ -7,6 +7,7 @@ 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.AbstractFunctionResult
;
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
;
...
...
@@ -14,7 +15,6 @@ 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
;
...
...
@@ -53,9 +53,12 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction {
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
<
String
>
doFunction
(
String
content
,
String
identifier
)
{
AbstractFunctionResult
<
String
>
result
=
new
AbstractFunctionResult
<>();
if
(
StringUtils
.
isBlank
(
content
))
{
return
StringUtils
.
EMPTY
;
result
.
setFunctionResult
(
StringUtils
.
EMPTY
);
result
.
setPromptContent
(
StringUtils
.
EMPTY
);
return
result
;
}
JSONObject
jsonObject
=
JSON
.
parseObject
(
content
);
String
question
=
jsonObject
.
getString
(
"question"
);
...
...
@@ -77,7 +80,11 @@ public class DocumentUnderstandIngFunction extends AbstractLargeModelFunction {
largeModelResponse
.
setStream
(
false
);
largeModelResponse
.
setUser
(
"Document_Understanding"
);
LargeModelDemandResult
largeModelDemandResult
=
llmService
.
chat
(
largeModelResponse
);
return
largeModelDemandResult
.
getMessage
();
result
.
setFunctionResult
(
largeModelDemandResult
.
getMessage
());
result
.
setPromptContent
(
largeModelDemandResult
.
getMessage
());
return
result
;
}
@Override
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/html_reader/HtmlReaderFunction.java
View file @
32924fb9
...
...
@@ -4,6 +4,7 @@ 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.AbstractFunctionResult
;
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
;
...
...
@@ -28,16 +29,22 @@ public class HtmlReaderFunction extends AbstractLargeModelFunction {
.
build
();
@Override
public
String
doFunction
(
String
content
,
String
key
)
{
public
AbstractFunctionResult
<
String
>
doFunction
(
String
content
,
String
key
)
{
AbstractFunctionResult
<
String
>
result
=
new
AbstractFunctionResult
<>();
if
(
StringUtils
.
isBlank
(
content
))
{
return
"FAIL"
;
result
.
setFunctionResult
(
"FAIL"
);
result
.
setPromptContent
(
"参数为空"
);
return
result
;
}
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
content
);
String
url
=
jsonObject
.
getString
(
"url"
);
if
(
StringUtils
.
isNotBlank
(
url
))
{
return
DocumentLoad
.
loadHtml
(
url
);
String
res
=
DocumentLoad
.
loadHtml
(
url
);
result
.
setFunctionResult
(
res
);
result
.
setPromptContent
(
res
);
return
result
;
}
return
StringUtils
.
EMPTY
;
return
result
;
}
@Override
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/image_ocr/ImageOCRFunction.java
View file @
32924fb9
...
...
@@ -8,6 +8,7 @@ import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.MultiContent
;
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.AbstractFunctionResult
;
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
;
...
...
@@ -15,7 +16,6 @@ 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.JSONObject
;
import
org.apache.poi.hssf.record.DVALRecord
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
...
...
@@ -47,7 +47,8 @@ public class ImageOCRFunction extends AbstractLargeModelFunction {
private
LLMService
llmService
;
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
<
String
>
doFunction
(
String
content
,
String
identifier
)
{
AbstractFunctionResult
<
String
>
result
=
new
AbstractFunctionResult
<>();
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
content
);
Message
systemMessage
=
new
Message
();
...
...
@@ -78,7 +79,10 @@ public class ImageOCRFunction extends AbstractLargeModelFunction {
response
.
setStream
(
false
);
response
.
setUser
(
"Image_OCR"
);
LargeModelDemandResult
largeModelDemandResult
=
llmService
.
chat
(
response
);
return
largeModelDemandResult
.
getMessage
();
result
.
setPromptContent
(
largeModelDemandResult
.
getMessage
());
result
.
setFunctionResult
(
largeModelDemandResult
.
getMessage
());
return
result
;
}
@Override
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/long_memory/SetLongMemoryFunction.java
View file @
32924fb9
...
...
@@ -2,9 +2,9 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.long_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.DateUtils
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
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
;
...
...
@@ -31,9 +31,6 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction {
.
parameters
(
new
Parameters
(
"object"
).
addProperties
(
"content"
,
new
Properties
(
"string"
,
"内容的详细说明"
)))
.
build
();
// private final Long expireTime = 30 * 60 * 24L; // 30天有效期
@Resource
private
RedisService
redisService
;
...
...
@@ -50,51 +47,22 @@ public class SetLongMemoryFunction extends AbstractLargeModelFunction {
* @return
*/
@Override
public
String
doFunction
(
String
content
,
String
key
)
{
public
AbstractFunctionResult
<
String
>
doFunction
(
String
content
,
String
key
)
{
// 创建 JSONObject 对象
JSONObject
j
sonObject
=
new
JSONObject
(
content
);
JSONObject
contentJ
sonObject
=
new
JSONObject
(
content
);
// 提取 content
String
contents
=
j
sonObject
.
getStr
(
"content"
);
String
contents
=
contentJ
sonObject
.
getStr
(
"content"
);
String
contentKey
=
SetLongMemoryConstants
.
REDIS_PREFIX
+
key
;
redisService
.
hset
(
contentKey
,
DateUtils
.
getCurrTime
(),
contents
);
return
"SUCCESS"
;
AbstractFunctionResult
<
String
>
result
=
new
AbstractFunctionResult
<>();
result
.
setFunctionResult
(
"SUCCESS"
);
result
.
setPromptContent
(
"SUCCESS"
);
return
result
;
}
@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;
return
ListUtil
.
toList
(
JsonUtils
.
serialize
(
functionLLMConfig
));
}
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/memory_variable_writer/MemoryVariableWriterFunction.java
View file @
32924fb9
...
...
@@ -2,9 +2,9 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.memory_variable_writer
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.common.utils.StringUtils
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
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
;
...
...
@@ -41,32 +41,39 @@ public class MemoryVariableWriterFunction extends AbstractLargeModelFunction {
private
RedisService
redisService
;
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
<
String
>
doFunction
(
String
content
,
String
identifier
)
{
AbstractFunctionResult
<
String
>
result
=
new
AbstractFunctionResult
<>();
if
(
StringUtils
.
isBlank
(
content
)
||
StringUtils
.
isBlank
(
identifier
))
{
return
"FAIL"
;
result
.
setPromptContent
(
"FAIL"
);
result
.
setFunctionResult
(
"FAIL"
);
return
result
;
}
String
contentKey
=
MemoryVariableWriterConstants
.
REDIS_PREFIX
+
identifier
;
// 创建 JSONObject 对象
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
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
());
map
.
put
(
tempKey
,
entry
.
getValue
());
}
}
}
if
(
isJsonArray
(
content
))
{
JSONArray
jsonArray
=
new
JSONArray
(
content
);
for
(
int
i
=
0
;
i
<
jsonArray
.
size
();
i
++)
{
setMap
(
jsonArray
.
getJSONObject
(
i
),
result
);
setMap
(
jsonArray
.
getJSONObject
(
i
),
map
);
}
}
else
{
setMap
(
new
JSONObject
(
content
),
result
);
setMap
(
new
JSONObject
(
content
),
map
);
}
redisService
.
hmset
(
contentKey
,
result
);
return
"SUCCESS"
;
redisService
.
hmset
(
contentKey
,
map
);
result
.
setPromptContent
(
"SUCCESS"
);
result
.
setFunctionResult
(
"SUCCESS"
);
return
result
;
}
private
static
void
setMap
(
JSONObject
jsonObject
,
Map
<
String
,
Object
>
result
)
{
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/notification_reminder/NotificationReminderFunction.java
View file @
32924fb9
...
...
@@ -4,11 +4,11 @@ import cn.com.poc.agent_application.entity.Variable;
import
cn.com.poc.common.service.RedisService
;
import
cn.com.poc.common.utils.*
;
import
cn.com.poc.support.security.oauth.entity.UserBaseEntity
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
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.user.aggregation.MemberInfoService
;
import
cn.com.poc.user.entity.MemberInfoEntity
;
import
cn.com.poc.user.service.BizMemberInfoService
;
import
cn.hutool.core.collection.ListUtil
;
...
...
@@ -37,29 +37,41 @@ public class NotificationReminderFunction extends AbstractLargeModelFunction {
private
FunctionLLMConfig
functionLLMConfig
;
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
<
String
>
doFunction
(
String
content
,
String
identifier
)
{
AbstractFunctionResult
<
String
>
result
=
new
AbstractFunctionResult
<>();
UserBaseEntity
userBaseEntity
=
BlContext
.
getCurrentUserNotException
();
if
(
userBaseEntity
==
null
)
{
return
"FAIL"
;
result
.
setFunctionResult
(
"FAIL"
);
result
.
setPromptContent
(
"FAIL"
);
return
result
;
}
try
{
MemberInfoEntity
memberInfoEntity
=
bizMemberInfoService
.
getById
(
userBaseEntity
.
getUserId
().
intValue
());
String
email
=
memberInfoEntity
.
getEmail
();
if
(
StringUtils
.
isBlank
(
email
))
{
return
"Error 【执行失败】: 用户需要完善个人邮箱信息后再使用。"
;
result
.
setFunctionResult
(
"Error 【执行失败】: 用户需要完善个人邮箱信息后再使用。"
);
result
.
setPromptContent
(
"Error 【执行失败】: 用户需要完善个人邮箱信息后再使用。"
);
return
result
;
}
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
content
);
jsonObject
.
put
(
"email"
,
email
);
jsonObject
.
put
(
"sign"
,
UUIDTool
.
getUUID
());
Date
date
=
jsonObject
.
getDate
(
"datetime"
);
if
(
date
.
before
(
DateUtils
.
getCurrDateTime
()))
{
return
"Error 【执行失败】: 通知的日期时间已经超过当前时间。"
;
result
.
setFunctionResult
(
"Error 【执行失败】: 通知的日期时间已经超过当前时间。"
);
result
.
setPromptContent
(
"Error 【执行失败】: 通知的日期时间已经超过当前时间。"
);
return
result
;
}
long
expiredTime
=
DateUtils
.
diffTwoDate
(
date
,
DateUtils
.
getCurrDateTime
())
/
1000
;
redisService
.
set
(
NotificationReminderConstant
.
REDIS_KEY
+
jsonObject
.
toJSONString
(),
null
,
expiredTime
);
return
"SUCCESS"
;
result
.
setFunctionResult
(
"SUCCESS"
);
result
.
setPromptContent
(
"SUCCESS"
);
return
result
;
}
catch
(
Exception
e
)
{
return
"FAIL"
;
result
.
setFunctionResult
(
"FAIL"
);
result
.
setPromptContent
(
"FAIL"
);
return
result
;
}
}
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/top_search/DouyinTopSearchFunction.java
View file @
32924fb9
...
...
@@ -2,6 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.top_search;
import
cn.com.poc.agent_application.entity.Variable
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
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.tianju.api.TianApi
;
...
...
@@ -25,18 +26,21 @@ public class DouyinTopSearchFunction extends AbstractLargeModelFunction {
private
final
FunctionLLMConfig
functionLLMConfig
=
new
FunctionLLMConfig
.
FunctionLLMConfigBuilder
()
.
name
(
"douyin_search_top"
)
.
description
(
DESC
)
// .parameters(new Parameters("object").addProperties("content", new Properties("string", "内容的详细说明")))
.
build
();
@Resource
private
TianApi
tianApi
;
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
<
List
<
TianDouyinTopSearch
>>
doFunction
(
String
content
,
String
identifier
)
{
AbstractFunctionResult
<
List
<
TianDouyinTopSearch
>>
result
=
new
AbstractFunctionResult
<>();
TianCommonResult
<
TianDouyinTopSearch
>
douyinTopSearch
=
tianApi
.
getDouyinTopSearch
();
TianResult
<
TianDouyinTopSearch
>
result
=
douyinTopSearch
.
getResult
();
List
<
TianDouyinTopSearch
>
list
=
result
.
getList
();
return
JsonUtils
.
serialize
(
list
);
TianResult
<
TianDouyinTopSearch
>
searchTianResult
=
douyinTopSearch
.
getResult
();
List
<
TianDouyinTopSearch
>
list
=
searchTianResult
.
getList
();
result
.
setFunctionResult
(
list
);
result
.
setPromptContent
(
JsonUtils
.
serialize
(
list
));
return
result
;
}
@Override
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/top_search/ToutiaoTopSearchFunction.java
View file @
32924fb9
...
...
@@ -2,6 +2,7 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.top_search;
import
cn.com.poc.agent_application.entity.Variable
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
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.tianju.api.TianApi
;
...
...
@@ -25,18 +26,22 @@ public class ToutiaoTopSearchFunction extends AbstractLargeModelFunction {
private
final
FunctionLLMConfig
functionLLMConfig
=
new
FunctionLLMConfig
.
FunctionLLMConfigBuilder
()
.
name
(
"toutiao_search_top"
)
.
description
(
DESC
)
// .parameters(new Parameters("object").addProperties("content", new Properties("string", "内容的详细说明")))
.
build
();
@Resource
private
TianApi
tianApi
;
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
<
List
<
TianToutiaoTopSearch
>>
doFunction
(
String
content
,
String
identifier
)
{
AbstractFunctionResult
<
List
<
TianToutiaoTopSearch
>>
result
=
new
AbstractFunctionResult
<
List
<
TianToutiaoTopSearch
>>();
TianCommonResult
<
TianToutiaoTopSearch
>
toutiaoTopSearch
=
tianApi
.
getToutiaoTopSearch
();
TianResult
<
TianToutiaoTopSearch
>
result
=
toutiaoTopSearch
.
getResult
();
List
<
TianToutiaoTopSearch
>
list
=
result
.
getList
();
return
JsonUtils
.
serialize
(
list
);
TianResult
<
TianToutiaoTopSearch
>
toutiaoTopSearchResult
=
toutiaoTopSearch
.
getResult
();
List
<
TianToutiaoTopSearch
>
list
=
toutiaoTopSearchResult
.
getList
();
result
.
setFunctionResult
(
list
);
result
.
setPromptContent
(
JsonUtils
.
serialize
(
list
));
return
result
;
}
@Override
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/top_search/WeiboTopSearchFunction.java
View file @
32924fb9
...
...
@@ -2,10 +2,9 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.top_search;
import
cn.com.poc.agent_application.entity.Variable
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.thirdparty.resource.demand.ai.function.AbstractFunctionResult
;
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.resource.tianju.api.TianApi
;
import
cn.com.poc.thirdparty.resource.tianju.api.entity.TianCommonResult
;
import
cn.com.poc.thirdparty.resource.tianju.api.entity.TianResult
;
...
...
@@ -28,18 +27,23 @@ public class WeiboTopSearchFunction extends AbstractLargeModelFunction {
private
final
FunctionLLMConfig
functionLLMConfig
=
new
FunctionLLMConfig
.
FunctionLLMConfigBuilder
()
.
name
(
"weibo_search_top"
)
.
description
(
DESC
)
// .parameters(new Parameters("object").addProperties("content", new Properties("string", "内容的详细说明")))
.
build
();
@Resource
private
TianApi
tianApi
;
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
<
List
<
TianWeiboTopSearch
>>
doFunction
(
String
content
,
String
identifier
)
{
AbstractFunctionResult
<
List
<
TianWeiboTopSearch
>>
result
=
new
AbstractFunctionResult
<
List
<
TianWeiboTopSearch
>>();
TianCommonResult
<
TianWeiboTopSearch
>
weiboTopSearch
=
tianApi
.
getWeiboTopSearch
();
TianResult
<
TianWeiboTopSearch
>
result
=
weiboTopSearch
.
getResult
();
List
<
TianWeiboTopSearch
>
list
=
result
.
getList
();
return
JsonUtils
.
serialize
(
list
);
TianResult
<
TianWeiboTopSearch
>
tianWeiboTopSearchTianResult
=
weiboTopSearch
.
getResult
();
List
<
TianWeiboTopSearch
>
list
=
tianWeiboTopSearchTianResult
.
getList
();
result
.
setFunctionResult
(
list
);
result
.
setPromptContent
(
JsonUtils
.
serialize
(
list
));
return
result
;
}
@Override
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/web_seach/WebSearchFunction.java
View file @
32924fb9
...
...
@@ -4,6 +4,7 @@ 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.AbstractFunctionResult
;
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
;
...
...
@@ -69,9 +70,11 @@ public class WebSearchFunction extends AbstractLargeModelFunction {
}
@Override
public
String
doFunction
(
String
content
,
String
identifier
)
{
public
AbstractFunctionResult
<
List
<
WebSearchFunctionResult
>>
doFunction
(
String
content
,
String
identifier
)
{
AbstractFunctionResult
<
List
<
WebSearchFunctionResult
>>
result
=
new
AbstractFunctionResult
<>();
if
(
StringUtils
.
isBlank
(
content
))
{
return
"FAIL"
;
result
.
setPromptContent
(
"FAIL"
);
return
result
;
}
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
content
);
String
query
=
jsonObject
.
getString
(
"query"
);
...
...
@@ -86,11 +89,19 @@ public class WebSearchFunction extends AbstractLargeModelFunction {
.
setNum
(
3
)
.
execute
();
loadHTML
(
execute
,
results
);
logger
.
info
(
"web search result:{}"
,
results
.
toString
());
return
JsonUtils
.
serialize
(
results
);
logger
.
info
(
"web search result:{}"
,
results
);
StringBuilder
stringBuilder
=
new
StringBuilder
();
int
i
=
0
;
for
(
WebSearchFunctionResult
webSearchFunctionResult
:
results
)
{
stringBuilder
.
append
(
i
).
append
(
":"
).
append
(
webSearchFunctionResult
.
getContent
()).
append
(
"\n"
);
}
result
.
setPromptContent
(
stringBuilder
.
toString
());
result
.
setFunctionResult
(
results
);
return
result
;
}
catch
(
Exception
e
)
{
logger
.
error
(
"web search error:"
+
e
.
getMessage
());
return
JsonUtils
.
serialize
(
results
);
result
.
setPromptContent
(
"FAIL"
);
return
result
;
}
}
...
...
@@ -111,6 +122,8 @@ public class WebSearchFunction extends AbstractLargeModelFunction {
}
}
WebSearchFunctionResult
webSearchResult
=
new
WebSearchFunctionResult
();
webSearchResult
.
setTitle
(
item
.
getTitle
());
webSearchResult
.
setUrl
(
item
.
getLink
());
webSearchResult
.
setContent
(
htmlContent
);
results
.
add
(
webSearchResult
);
countDownLatch
.
countDown
();
...
...
src/main/java/cn/com/poc/thirdparty/resource/demand/ai/function/web_seach/WebSearchFunctionResult.java
View file @
32924fb9
...
...
@@ -6,30 +6,30 @@ package cn.com.poc.thirdparty.resource.demand.ai.function.web_seach;
*/
public
class
WebSearchFunctionResult
{
//
private String title;
//
//
private String url;
private
String
title
;
private
String
url
;
//
// private String snippet;
private
String
content
;
//
public String getTitle() {
//
return title;
//
}
//
//
public void setTitle(String title) {
//
this.title = title;
//
}
//
//
public String getUrl() {
//
return url;
//
}
//
//
public void setUrl(String url) {
//
this.url = url;
//
}
//
public
String
getTitle
()
{
return
title
;
}
public
void
setTitle
(
String
title
)
{
this
.
title
=
title
;
}
public
String
getUrl
()
{
return
url
;
}
public
void
setUrl
(
String
url
)
{
this
.
url
=
url
;
}
// public String getSnippet() {
// return snippet;
// }
...
...
src/test/java/cn/com/poc/thirdparty/resource/demand/ai/function/DocumentReaderFunctionTest.java
View file @
32924fb9
...
...
@@ -35,10 +35,10 @@ public class DocumentReaderFunctionTest {
@Test
public
void
testDoFunction
()
{
String
content
=
"{\"file_urls\": [\"https://gsst-poe-sit.gz.bcebos.com/data/20241127/1732704249980.docx\"]}"
;
String
identifier
=
UUID
.
randomUUID
().
toString
();
String
RESULT
=
documentReaderFunction
.
doFunction
(
content
,
identifier
);
assertNotNull
(
RESULT
);
//
String content = "{\"file_urls\": [\"https://gsst-poe-sit.gz.bcebos.com/data/20241127/1732704249980.docx\"]}";
//
String identifier = UUID.randomUUID().toString();
//
String RESULT = documentReaderFunction.doFunction(content, identifier);
//
assertNotNull(RESULT);
}
@Test
...
...
src/test/java/cn/com/poc/thirdparty/resource/demand/ai/function/DocumentUnderstandingFunctionTest.java
View file @
32924fb9
...
...
@@ -28,8 +28,8 @@ public class DocumentUnderstandingFunctionTest {
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
);
//
String RESULT = documentUnderstandIngFunction.doFunction(content, identifier);
//
System.out.println(RESULT);
}
@Test
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment