Skip to content

Commit 34d9dc6

Browse files
committed
Merge branch 'huiben'
2 parents 9187ae9 + 04814f0 commit 34d9dc6

File tree

2 files changed

+434
-0
lines changed

2 files changed

+434
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.xiaozhi.dialogue.llm.tool.function;
2+
3+
import cn.hutool.core.map.MapUtil;
4+
import cn.hutool.core.util.RandomUtil;
5+
import com.xiaozhi.communication.common.ChatSession;
6+
import com.xiaozhi.dialogue.llm.ChatService;
7+
import com.xiaozhi.dialogue.llm.tool.ToolCallStringResultConverter;
8+
import com.xiaozhi.dialogue.llm.tool.ToolsGlobalRegistry;
9+
import com.xiaozhi.dialogue.service.HuiBenService;
10+
import jakarta.annotation.Resource;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
import org.springframework.ai.chat.model.ToolContext;
14+
import org.springframework.ai.tool.ToolCallback;
15+
import org.springframework.ai.tool.function.FunctionToolCallback;
16+
import org.springframework.ai.tool.metadata.ToolMetadata;
17+
import org.springframework.stereotype.Component;
18+
19+
import java.util.Map;
20+
21+
@Component
22+
public class PlayHuiBenFunction implements ToolsGlobalRegistry.GlobalFunction {
23+
private static final Logger logger = LoggerFactory.getLogger(PlayHuiBenFunction.class);
24+
25+
@Resource
26+
private HuiBenService huiBenService;
27+
28+
ToolCallback toolCallback = FunctionToolCallback
29+
.builder("func_playHuiBen", (Map<String, String> params, ToolContext toolContext) -> {
30+
ChatSession chatSession = (ChatSession) toolContext.getContext().get(ChatService.TOOL_CONTEXT_SESSION_KEY);
31+
Integer num = MapUtil.getInt(params, "num");
32+
try {
33+
if (num == null || num < 5 || num > 1100) {
34+
num = RandomUtil.randomInt(5, 1100);
35+
}
36+
huiBenService.playHuiBen(chatSession, num);
37+
return "尝试播放绘本《" + num + "》";
38+
39+
} catch (Exception e) {
40+
logger.error("播放绘本异常,绘本编号: {}", num, e);
41+
return "绘本播放失败";
42+
}
43+
})
44+
.toolMetadata(ToolMetadata.builder().returnDirect(true).build())
45+
.description("绘本播放助手,需要用户提供绘本数字编号")
46+
.inputSchema("""
47+
{
48+
"type": "object",
49+
"properties": {
50+
"num": {
51+
"type": "integer",
52+
"description": "要播放的绘本数字编号"
53+
}
54+
},
55+
"required": ["num"]
56+
}
57+
""")
58+
.inputType(Map.class)
59+
.toolCallResultConverter(ToolCallStringResultConverter.INSTANCE)
60+
.build();
61+
62+
@Override
63+
public ToolCallback getFunctionCallTool(ChatSession chatSession) {
64+
return toolCallback;
65+
}
66+
}

0 commit comments

Comments
 (0)