| import os
|
| from utils.logger_handler import logger
|
| 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
|
|
|
|
|
| user_ids = ["1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009", "1010",]
|
| month_arr = ["2025-01", "2025-02", "2025-03", "2025-04", "2025-05", "2025-06",
|
| "2025-07", "2025-08", "2025-09", "2025-10", "2025-11", "2025-12", ]
|
|
|
| external_data = {}
|
|
|
| rag = RagSummarizeService()
|
|
|
| @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" : {"特征": xxx, "效率": xxx, ...}
|
| "month" : {"特征": xxx, "效率": xxx, ...}
|
| "month" : {"特征": xxx, "效率": xxx, ...}
|
| ...
|
| },
|
| "user_id": {
|
| "month" : {"特征": xxx, "效率": xxx, ...}
|
| "month" : {"特征": xxx, "效率": xxx, ...}
|
| "month" : {"特征": xxx, "效率": xxx, ...}
|
| ...
|
| },
|
| "user_id": {
|
| "month" : {"特征": xxx, "效率": xxx, ...}
|
| "month" : {"特征": xxx, "效率": xxx, ...}
|
| "month" : {"特征": xxx, "效率": xxx, ...}
|
| ...
|
| },
|
| ...
|
| }
|
| :return:
|
| """
|
| if not external_data:
|
| external_data_path = get_abs_path(agent_conf["external_data_path"])
|
|
|
| if not os.path.exists(external_data_path):
|
| raise FileNotFoundError(f"外部数据文件{external_data_path}不存在")
|
|
|
| with open(external_data_path, "r", encoding="utf-8") as f:
|
| for line in f.readlines()[1:]:
|
| arr: list[str] = line.strip().split(",")
|
|
|
| user_id: str = arr[0].replace('"', "")
|
| feature: str = arr[1].replace('"', "")
|
| efficiency: str = arr[2].replace('"', "")
|
| consumables: str = arr[3].replace('"', "")
|
| comparison: str = arr[4].replace('"', "")
|
| time: str = arr[5].replace('"', "")
|
|
|
| if user_id not in external_data:
|
| external_data[user_id] = {}
|
|
|
| external_data[user_id][time] = {
|
| "特征": feature,
|
| "效率": efficiency,
|
| "耗材": consumables,
|
| "对比": comparison,
|
| }
|
|
|
|
|
| @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已调用"
|
|
|