|
@@ -24,7 +24,7 @@ sys.path.insert(0, root_dir)
|
|
|
|
|
|
|
|
from utils.qwen_client import QwenClient
|
|
from utils.qwen_client import QwenClient
|
|
|
from utils.gemini_client import generate_text
|
|
from utils.gemini_client import generate_text
|
|
|
-from knowledge_v2.tools_library import call_tool, save_tool_info, get_all_tool_infos, get_tool_info, get_tool_params
|
|
|
|
|
|
|
+from knowledge_v2.tools_library import call_tool, save_tool_info, get_all_tool_infos, get_tool_info, get_tool_params, default_call_hot_tool
|
|
|
from knowledge_v2.multi_search_knowledge import get_knowledge as get_multi_search_knowledge
|
|
from knowledge_v2.multi_search_knowledge import get_knowledge as get_multi_search_knowledge
|
|
|
from knowledge_v2.cache_manager import CacheManager
|
|
from knowledge_v2.cache_manager import CacheManager
|
|
|
|
|
|
|
@@ -59,6 +59,83 @@ class FunctionKnowledge:
|
|
|
with open(prompt_path, 'r', encoding='utf-8') as f:
|
|
with open(prompt_path, 'r', encoding='utf-8') as f:
|
|
|
return f.read().strip()
|
|
return f.read().strip()
|
|
|
|
|
|
|
|
|
|
+ def call_default_hot_tool(self, combined_question: str, input_info: str) -> str:
|
|
|
|
|
+ """
|
|
|
|
|
+ 调用默认的热榜工具
|
|
|
|
|
+ :param combined_question: 组合问题
|
|
|
|
|
+ :param input_info: 输入的需求信息
|
|
|
|
|
+ :return: 热榜数据分析结果
|
|
|
|
|
+ """
|
|
|
|
|
+ logger.info(f"[步骤0] 调用默认热榜工具...")
|
|
|
|
|
+
|
|
|
|
|
+ try:
|
|
|
|
|
+ # 尝试从缓存获取
|
|
|
|
|
+ if self.use_cache:
|
|
|
|
|
+ cached_data = self.cache.get(combined_question, 'function_knowledge', 'default_hot_tool_result.json')
|
|
|
|
|
+ if cached_data:
|
|
|
|
|
+ result = cached_data.get('analysis_result', cached_data.get('result', ''))
|
|
|
|
|
+ logger.info(f"✓ 使用缓存的热榜分析结果")
|
|
|
|
|
+ return result
|
|
|
|
|
+
|
|
|
|
|
+ # 加载提取参数prompt
|
|
|
|
|
+ extract_params_prompt = self._load_prompt("function_default_hot_tool_extract_params_prompt.md")
|
|
|
|
|
+ extract_params_prompt = extract_params_prompt.replace('{input_info}', input_info)
|
|
|
|
|
+
|
|
|
|
|
+ # 调用大模型生成参数
|
|
|
|
|
+ logger.info(" → 调用Gemini提取热榜工具参数...")
|
|
|
|
|
+ params_text = generate_text(prompt=extract_params_prompt)
|
|
|
|
|
+ params_json_str = self.extract_and_validate_json(params_text)
|
|
|
|
|
+
|
|
|
|
|
+ if not params_json_str:
|
|
|
|
|
+ logger.error("✗ 默认热榜工具参数提取失败")
|
|
|
|
|
+ return "默认热榜工具参数提取失败"
|
|
|
|
|
+
|
|
|
|
|
+ # 解析参数
|
|
|
|
|
+ params = json.loads(params_json_str)
|
|
|
|
|
+ category = params.get('category', '全部')
|
|
|
|
|
+ rankDate = params.get('rankDate')
|
|
|
|
|
+
|
|
|
|
|
+ logger.info(f"✓ 提取参数成功: category={category}, rankDate={rankDate}")
|
|
|
|
|
+
|
|
|
|
|
+ # 调用默认热榜工具
|
|
|
|
|
+ logger.info(" → 调用默认热榜工具...")
|
|
|
|
|
+ hot_data = default_call_hot_tool(category=category, rankDate=rankDate)
|
|
|
|
|
+
|
|
|
|
|
+ if not hot_data or (isinstance(hot_data, str) and len(hot_data.strip()) == 0):
|
|
|
|
|
+ logger.warning("⚠ 热榜工具返回数据为空")
|
|
|
|
|
+ return "热榜工具返回数据为空,无法进行分析"
|
|
|
|
|
+
|
|
|
|
|
+ logger.info(f"✓ 获取热榜数据成功,数据长度: {len(hot_data)} 字符")
|
|
|
|
|
+
|
|
|
|
|
+ # 分析热榜数据
|
|
|
|
|
+ logger.info(" → 调用Gemini分析热榜数据...")
|
|
|
|
|
+ analyze_prompt = self._load_prompt("function_default_hot_tool_result_analzye_prompt.md")
|
|
|
|
|
+ analyze_prompt = analyze_prompt.replace('{input_info}', input_info).replace('{hot_data}', hot_data)
|
|
|
|
|
+
|
|
|
|
|
+ analysis_result = generate_text(prompt=analyze_prompt)
|
|
|
|
|
+ analysis_result = analysis_result.strip()
|
|
|
|
|
+
|
|
|
|
|
+ logger.info(f"✓ 热榜数据分析完成")
|
|
|
|
|
+
|
|
|
|
|
+ # 保存到缓存
|
|
|
|
|
+ if self.use_cache:
|
|
|
|
|
+ cache_data = {
|
|
|
|
|
+ "extract_params_prompt": extract_params_prompt,
|
|
|
|
|
+ "params": params,
|
|
|
|
|
+ "hot_data": hot_data,
|
|
|
|
|
+ "analyze_prompt": analyze_prompt,
|
|
|
|
|
+ "analysis_result": analysis_result
|
|
|
|
|
+ }
|
|
|
|
|
+ self.cache.set(combined_question, 'function_knowledge', 'default_hot_tool_result.json', cache_data)
|
|
|
|
|
+
|
|
|
|
|
+ return analysis_result
|
|
|
|
|
+
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ logger.error(f"✗ 调用默认热榜工具失败: {e}")
|
|
|
|
|
+ import traceback
|
|
|
|
|
+ logger.error(traceback.format_exc())
|
|
|
|
|
+ return f"调用默认热榜工具失败: {str(e)}"
|
|
|
|
|
+
|
|
|
def generate_query(self, question: str, post_info: str, persona_info: str) -> str:
|
|
def generate_query(self, question: str, post_info: str, persona_info: str) -> str:
|
|
|
"""
|
|
"""
|
|
|
生成查询语句
|
|
生成查询语句
|
|
@@ -436,6 +513,10 @@ class FunctionKnowledge:
|
|
|
combined_question = input_info
|
|
combined_question = input_info
|
|
|
|
|
|
|
|
try:
|
|
try:
|
|
|
|
|
+ # 步骤0: 调用默认的热榜工具
|
|
|
|
|
+ default_hot_result = self.call_default_hot_tool(combined_question, input_info)
|
|
|
|
|
+ logger.info(f"✓ 默认热榜工具结果: {default_hot_result}")
|
|
|
|
|
+
|
|
|
# 步骤1: 生成Query
|
|
# 步骤1: 生成Query
|
|
|
# query = self.generate_query(question, post_info, persona_info)
|
|
# query = self.generate_query(question, post_info, persona_info)
|
|
|
|
|
|
|
@@ -556,27 +637,19 @@ class FunctionKnowledge:
|
|
|
if __name__ == "__main__":
|
|
if __name__ == "__main__":
|
|
|
# 测试代码
|
|
# 测试代码
|
|
|
|
|
|
|
|
- input_info = """1.已知信息账号人设:
|
|
|
|
|
--账号的品类:宠物表情包账号
|
|
|
|
|
--人设里能和该贴匹配的点:
|
|
|
|
|
-鼓励式猫咪表情包-猫咪考试祝福
|
|
|
|
|
-推广饮品品牌-推广餐饮品牌
|
|
|
|
|
-互动粉丝-互动特点人群
|
|
|
|
|
-拟人化猫咪形象-拟人化猫咪形象
|
|
|
|
|
-表情包式图文-表情包式视觉风格
|
|
|
|
|
-情景化植入-强关联场景植入
|
|
|
|
|
--账号聚出来的pattern模式:
|
|
|
|
|
-模式1: 拟人化穿搭+趣味分享意图, 萌宠主题内容+拟人化主体,视觉构图版式....
|
|
|
|
|
-模式2:校园学生人设+商业推广意图,商业产品推厂+场景化产品植入
|
|
|
|
|
-模式3:日常生活演绎+萌宠主题内容+图文叙事结构
|
|
|
|
|
-模式4:视觉隐喻+趣味分享意图+视觉构图版式
|
|
|
|
|
-
|
|
|
|
|
-2.待寻找点:
|
|
|
|
|
--社交媒体解构贴中未与账号人设匹配的信息
|
|
|
|
|
-考试祝福
|
|
|
|
|
-
|
|
|
|
|
-3.帖子创作日期:2025-11-07
|
|
|
|
|
-"""
|
|
|
|
|
|
|
+ input_info = """账号背景
|
|
|
|
|
+- 账号品类:宠物表情包账号
|
|
|
|
|
+- 选题模式:
|
|
|
|
|
+ - 模式1:聚焦于拟人化穿搭内容灵感,借助拟人化主体与视觉构图版式的关键特征,最终实现趣味分享意图并呈现萌宠主题内容。
|
|
|
|
|
+ - 模式2:以校园学生人设为内容灵感,运用场景化产品植入的方式,以实现商业推广意图和商业产品推广为主要目的。
|
|
|
|
|
+ - 模式3:聚焦于日常生活演绎,借助图文叙事结构的表现形式,以呈现萌宠主题内容及实现趣味分享意图为核心导向。
|
|
|
|
|
+ - 模式4:以视觉隐喻作为主要的内容灵感来源,结合视觉构图版式的关键特征进行呈现,最终达成趣味分享意图与多元生活趣闻的内容目的。
|
|
|
|
|
+
|
|
|
|
|
+帖子解构信息
|
|
|
|
|
+- 灵感点:猫咪考试祝福
|
|
|
|
|
+- 目的点:推广餐饮品牌、互动特定人群、饺子品牌、考试祝福
|
|
|
|
|
+- 关键点:拟人化猫咪形象、表情包式视觉风格、强关联场景植入、祈福式指令文案
|
|
|
|
|
+- 创作日期:2025-11-07"""
|
|
|
|
|
|
|
|
try:
|
|
try:
|
|
|
agent = FunctionKnowledge()
|
|
agent = FunctionKnowledge()
|