olivebot/agent/tools/getOnRunLinkage.py
xszyou 01c19c13e8 工作愉快
*实现agent ReAct与LLM chain自动切换逻辑✓

聊天窗区分任务消息✓

修复删除日程bug✓

优化远程音频逻辑✓

等待处理引入加载中效果✓

优化prompt以解决日程任务递归调用问题✓

修复一次性日程清除的bug✓
2023-12-25 22:13:09 +08:00

64 lines
2.0 KiB
Python

import os
from typing import Any
from itertools import groupby
from langchain.tools import BaseTool
import tools.IotmService as IotmService
class getOnRunLinkage(BaseTool):
name = "getOnRunLinkage"
description = "此工具用于查询农业箱当前在运行的联动"
def __init__(self):
super().__init__()
async def _arun(self, *args: Any, **kwargs: Any) -> Any:
# 用例中没有用到 arun 不予具体实现
pass
def _run(self, para: str) -> str:
logs = IotmService.get_on_run_linkage()
desc_list = {
'co2_S36': '二氧化碳',
'light_bh1': '箱内的光照强度',
'air_S37': '污染气体',
'nh3_S37': '氨气',
'temperature_MP14': '箱外温度',
'temperature_MP21': '箱内温度',
'humidity_MP14': '箱外湿度',
'humidity_S34': '箱内土壤的湿度',
}
infos = {}
logs.sort(key=lambda x: (x['label'], x['port']))
for (sensor_type, port), group in groupby(logs, key=lambda x: (x['label'], x['port'])):
group_infos = []
for val in group:
onoff = '开启设备开关' if val['onoff'] == 1 else '关闭设备开关'
info = {
'max': val['maxVal'],
'min': val['minVal'],
'onoff': onoff,
}
if float(val['keeptime']) > 0:
info["持续时间(若需执行开启设备,持续时间过后执行关闭),单位为分钟"] = val['keeptime']
if float(val['delaytime']) > 0:
info["执行后下次检查相距时间,单位为分钟"] = val['delaytime']
group_infos.append(info)
key_str = f"{sensor_type}_{port}"
infos[desc_list.get(key_str, 'Unknown')] = group_infos
return infos
if __name__ == "__main__":
tool = getOnRunLinkage()
info = tool.run("")
print(info)