import pandas from langchain_core.tools import tool from rag.rag_service import RagSummarizeService import random from utils.config_handler import agent_conf from utils.path_tool import get_abs_path from utils.logger_handler import logger import os rag = RagSummarizeService() user_ids = [str(i) for i in range(1001, 1011, 1)] month_arr = [f"2025-{str(i).zfill(2)}" for i in range(1, 13, 1)] external_data = {} @tool(description="向量存储中检索参考资料") def rag_summarize(query: str) -> str: return rag.rag_summarize(query) @tool(description="获取指定城市天气,消息以字符串方式返回") def get_weather(city: str) -> str: return f"城市{city}天气为晴天,温度为26摄氏度,湿度50%,南风1级,AQI21,最近6小时降雨概率极低" @tool(description="获取用户所在城市名称,以纯字符串形式返回") def get_user_location() -> str: return random.choice(["深圳", "合肥", "杭州"]) @tool(description="获取用户ID,以纯字符串形式返回") def get_user_id() -> str: return random.choice(user_ids) @tool(description="获取当前月份,以纯字符串形式返回") def get_current_month() -> str: return random.choice(month_arr) def generate_external_data(): """得到用户字典, { "user_id": { "month": {"特征: ..., "效率:} } }""" if not external_data: external_data_path = agent_conf['external_data_path'] external_data_path = get_abs_path(external_data_path) if not os.path.exists(external_data_path): raise FileExistsError(f"外部文件{external_data_path}不存在") with open(external_data_path, 'r', encoding='utf-8') as f: for line in f.readlines(): arr = line.strip().split(',') user_id = arr[0].replace('"', "") feature = arr[1].replace('"', "") efficiency = arr[2].replace('"', "") consumables = arr[3].replace('"', "") comparison = arr[4].replace('"', "") time = arr[5].replace('"', "") if user_id not in external_data: external_data[user_id] = {} external_data[user_id][time] = { "特征": feature, "效率": efficiency, "耗材": consumables, "对比": comparison, } return external_data @tool(description="从外部系统获取用户使用记录,以春字符串形式返回,如果未检索到,返回空字符串") def fetch_external_data(user_id: str, month: str) -> str: generate_external_data() try: return external_data[user_id][month] except KeyError: logger.warning(f"[fetch_external_data]未检索到用户:{user_id}在{month}的使用数据") return "" @tool(description="无入参,无返回值,调用后自动触发中间件,自动为报告生成动态场景上下文" "+") def fill_context_for_report(): return "fill_context_for_report已调用" # if __name__ == '__main__': # user_id = "1005" # month = "2025-06" # res = fetch_external_data(user_id, month) # print(res)