import requests def retrieval_from_knowledge_base( query: str, topk: int ) -> str: """ Retrieval for knowledge from the knowledge base based on the specified query and returns the topk results. Parameters: query (str): The query for knowledge retrieval. topk (int): The number of top results to return, default is 3. Returns: str: The result of the knowledge retrieval in JSON format. """ url = 'http://100.85.52.31:7080/v1/chat-messages' headers = { 'Authorization': f'Bearer app-uJgo3TQKcS1O9PMCDHko71Fp', 'Content-Type': 'application/json' } data = { "inputs": {"topK": topk}, "query": query, "response_mode": "blocking", "user": "tangger", "files": [] } response = requests.post(url, headers=headers, json=data) if response.status_code == 524: print("Server is not responding. Please try again later. Maybe GPU was down in the container.") return None try: result = response.json() except ValueError: return [{"error": "Response is not in JSON format"}] useful_results = [] try: answer = eval(result.get("answer", "[]")) for item in answer: metadata = item.get("metadata", {}) useful_info = { "id": metadata.get("document_id"), "title": item.get("title"), "content": item.get("content"), "metadata": None, "embedding": None, "score": metadata.get("score") } useful_results.append(useful_info) except Exception as e: return [{"error": f"Error processing result: {e}", "status": "TERMINATE"}] if useful_results == []: useful_results = "NULL" return str(useful_results) def search_from_oqmd_by_composition(composition: str) -> str: """ Search materials from OQMD database by chemical composition. Args: composition (str): Chemical composition string. Example: "CsPbBr3" Returns: str: JSON string containing material data or error message """ # 构建请求参数 param = { 'composition': composition } tool_endpoint = "http://100.84.94.73:8020" try: # 发送请求到/oqmd/search路由 response = requests.get( tool_endpoint + "/oqmd/search", params=param ) response.raise_for_status() return str(response.json()['data']) except requests.exceptions.RequestException as e: return f"Error: {str(e)}" def scheme_convert_to_json(): return """ 转换合成方案时,必须严格遵守如下预定义的JSON格式,每个JSON结构的字段必须填充完整,即使有些字段留空: ```json { "workflow": [ { "step_id": , "description": "", "actions": [ { "action_id": , "action_type": "", "materials": [{"name": "", "amount": , "unit": ""}], "containers": [{"type": "", "capacity": "", "unit": "", "additional_parameters": {"material_of_construction": "", "shape": ""}}], "equipment": [{"name": "", "parameters": {"": , "": }}], "output": "" } ], "dependencies": [""], "step_output": "" } ... ] } ``` ### JSON结构字段说明 1. workflow 类型: 数组; 说明: 包含所有步骤的列表; 限制: 每个步骤都是一个对象,且顺序重要。 2. step_id 类型: 整数; 说明: 步骤的唯一标识符,用于区分不同的步骤; 限制: 必须唯一,不能重复。 3. description 类型: 字符串; 说明: 对步骤的简要描述,说明步骤的目的或内容。限制: 描述应清晰简洁,避免冗长。 4. actions 类型: 数组; 说明: 包含该步骤中所有动作的列表。限制: 每个动作都是一个对象,且顺序可能影响执行顺序。 5. action_id 类型: 字符串; 说明: 动作的唯一标识符,用于区分不同的动作。限制: 在同一步骤内必须唯一。 6. action_type 类型: 字符串; 说明: 动作的类型,例如 "add_material", "ultrasonicate", "centrifuge"。限制: 必须是预定义的类型之一。 7. materials 类型: 数组; 说明: 使用的材料列表,每个材料包含名称、数量和单位。限制: 每个材料对象必须包含 "name", "amount", 和 "unit" 字段。 8. containers 类型: 数组; 说明: 使用的容器列表,每个容器包含类型、容量、单位和附加参数。限制: 每个容器对象必须包含 "type", "capacity", 和 "unit" 字段,"additional_parameters" 为可选。 9. equipment 类型: 数组; 说明: 使用的设备列表,每个设备包含名称和参数。限制: 每个设备对象必须包含 "name" 字段,"parameters" 为可选,根据设备需要填充。 10. output 类型: 字符串; 说明: 动作的输出标识符,用于后续步骤的输入。限制: 标识符应唯一且有意义。 11. dependencies 类型: 数组; 说明: 依赖的前一步骤的 "step_id" 列表。限制: 每个依赖项必须是有效的 "step_id"。 12. step_output 类型: 字符串; 说明: 步骤的输出标识符,用于后续步骤的输入。限制: 标识符应唯一且有意义。 """ def default_func(): return "Approved. Proceed as planned!"