MCPcopy Create free account
hub / github.com/InternScience/InternAgent / get_related_tools

Function get_related_tools

internagent/mas/tools/utils.py:47–130  ·  view source on GitHub ↗

根据查询(query)从工具列表(tools)中筛选相关的工具。 使用 TF-IDF 和余弦相似度计算相关性。 返回的工具按相关性得分降序排列,并受 MAX_RETURNED_TOOLS 限制。 参数: query (Union[str, List[str]]): 查询词或查询词列表。 tools (List[Dict[str, Any]]): 工具定义的列表。 返回: List[Dict[str, Any]]: 与查询相关的工具列表(按相关性排序)。

(query: Union[str, List[str]], 
                        tools: List[Dict[str, Any]])

Source from the content-addressed store, hash-verified

45
46# Similarity threshold for tool relevance
47def get_related_tools(query: Union[str, List[str]],
48 tools: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
49 """
50 根据查询(query)从工具列表(tools)中筛选相关的工具。
51
52 使用 TF-IDF 和余弦相似度计算相关性。
53 返回的工具按相关性得分降序排列,并受 MAX_RETURNED_TOOLS 限制。
54
55 参数:
56 query (Union[str, List[str]]):
57 查询词或查询词列表。
58 tools (List[Dict[str, Any]]):
59 工具定义的列表。
60
61 返回:
62 List[Dict[str, Any]]:
63 与查询相关的工具列表(按相关性排序)。
64 """
65 MAX_RETURNED_TOOLS = 128
66 SIMILARITY_THRESHOLD = 0.1
67 if not tools:
68 return []
69
70 # 1. 标准化查询输入
71 query_string: str
72 if isinstance(query, str):
73 query_string = query
74 elif isinstance(query, list):
75 query_string = " ".join(q for q in query if isinstance(q, str))
76 else:
77 sys.stderr.write("错误:查询类型必须是 str 或 List[str]。\n")
78 return []
79
80 if not query_string.strip():
81 return []
82
83 # 2. 构建“文档”语料库 (Corpus)
84 corpus = []
85 valid_tools = []
86 for tool in tools:
87 try:
88 func_data = tool['function']
89 name = func_data.get('name', '')
90 description = func_data.get('description', '')
91 searchable_text = f"{name} {description}"
92 corpus.append(searchable_text)
93 valid_tools.append(tool)
94 except (AttributeError, TypeError, KeyError):
95 continue
96
97 if not valid_tools:
98 return []
99
100 # 3. TF-IDF 向量化
101 try:
102 vectorizer = TfidfVectorizer(stop_words='english')
103 tfidf_matrix = vectorizer.fit_transform(corpus)
104 query_vector = vectorizer.transform([query_string])

Callers 2

executeMethod · 0.90
executeMethod · 0.85

Calls 2

writeMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected