forked from erwinmsmith/SOMAS
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtool_interface.py
More file actions
59 lines (49 loc) · 1.69 KB
/
tool_interface.py
File metadata and controls
59 lines (49 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from abc import ABC, abstractmethod
class BaseToolkit(ABC):
@abstractmethod
def get_tools(self):
"""获取所有可用工具"""
pass
@abstractmethod
def validate_tool(self, tool_name):
"""验证工具是否可用"""
pass
@abstractmethod
def execute_tool(self, tool_name, params):
"""执行指定工具"""
pass
class CustomToolkit(BaseToolkit):
def __init__(self):
self.tools = {
# 示例工具
"search": {
"description": "搜索知识库",
"params": {"query": "搜索关键词"}
},
"calculate": {
"description": "执行计算",
"params": {"expression": "数学表达式"}
}
}
def get_tools(self):
return self.tools
def validate_tool(self, tool_name):
return tool_name in self.tools
def execute_tool(self, tool_name, params):
if not self.validate_tool(tool_name):
raise ValueError(f"工具{tool_name}不存在")
# 实际工具执行逻辑
if tool_name == "search":
return self._search(params["query"])
elif tool_name == "calculate":
return self._calculate(params["expression"])
def _search(self, query):
# 实现搜索逻辑
return {"result": f"搜索结果: {query}"}
def _calculate(self, expression):
# 实现计算逻辑
try:
from ast import literal_eval
return {"result": str(literal_eval(expression))}
except (ValueError, SyntaxError) as e:
return {"error": f"计算错误: {str(e)}"}