This commit is contained in:
aaron 2026-02-03 23:56:50 +08:00
parent f1656e8189
commit fe472d9343
2 changed files with 50 additions and 90 deletions

View File

@ -139,11 +139,17 @@ class QuestionAnalyzer:
请分析以下维度 请分析以下维度
1. **问题类型** 1. **问题类型**
- stock_analysis: 针对特定股票的分析"贵州茅台怎么样""分析比亚迪""AAPL走势" - stock_analysis: 针对**特定单只股票**的分析"贵州茅台怎么样""分析比亚迪""AAPL走势"
- market_overview: 市场整体分析"最近有什么投资机会""现在适合买股票吗" **注意**如果用户问的是"板块""行业""概念股"这不是stock_analysis而是market_overview
- market_overview: 市场整体分析行业板块分析投资机会"最近有什么投资机会""商业航天板块怎么样""新能源行业走势""现在适合买股票吗"
- knowledge: 金融知识问答"什么是MACD""如何看K线图" - knowledge: 金融知识问答"什么是MACD""如何看K线图"
- chat: 一般对话"你好""在吗" - chat: 一般对话"你好""在吗"
**重要**判断是stock_analysis还是market_overview的关键
- 如果提到具体的公司名称或股票代码 stock_analysis
- 如果提到"板块""行业""概念""赛道""领域" market_overview
- 如果问"哪些股票""什么机会" market_overview
2. **用户关注维度**如果是stock_analysis 2. **用户关注维度**如果是stock_analysis
分析用户想了解哪些方面 分析用户想了解哪些方面
- price_trend: 价格走势涨跌情况最新价格 - price_trend: 价格走势涨跌情况最新价格

View File

@ -1197,40 +1197,27 @@ MA60{f"{ma['ma60']:.2f}" if ma['ma60'] else '计算中'}
intent_analysis: Dict[str, Any], intent_analysis: Dict[str, Any],
message: str message: str
) -> Dict[str, Any]: ) -> Dict[str, Any]:
"""处理宏观金融问题""" """处理宏观金融问题(智能模式)"""
keywords = intent_analysis.get('keywords', [])
description = intent_analysis.get('description', '') description = intent_analysis.get('description', '')
keywords = intent_analysis.get('keywords', [])
logger.info(f"处理宏观问题: {description}") logger.info(f"[智能模式] 处理宏观问题: {description}")
try: try:
# 使用LLM进行分析基于Tushare数据和公开信息 # 使用智能、自然的prompt
prompt = f"""你是一位专业的金融分析师。用户询问了宏观金融问题。 prompt = f"""你是一位专业的金融分析师。用户询问了宏观金融问题。
用户问题{message} 用户问题{message}
问题分析{description} 请用自然专业的语言回答用户的问题不要使用固定的格式或标题而是像和朋友聊天一样直接回答用户关心的内容
关键词{', '.join(keywords)}
请基于你的金融知识和市场经验给出专业且易懂的分析 要求
- 直接回答用户的问题不要添加"【宏观市场分析】"等标题
## 市场现状分析 - 根据问题的具体内容调整回答的重点
简要说明当前市场整体情况和主要影响因素分段说明每个要点独立成段 - 语言自然专业但易懂
- 如果用户问的是短期趋势重点讲短期如果问的是投资机会重点讲机会
## 趋势判断 - 控制在300-500
- 短期趋势1-2 - 最后声明"以上分析仅供参考,不构成投资建议。"
- 中期展望1-3个月
## 投资建议
- 具体的投资策略建议
- 需要关注的风险点
写作要求
1. 语言简洁专业但易懂避免过度修饰
2. 分析要客观理性基于事实和数据
3. 每个分析点独立成段段落之间用空行分隔
4. 控制在400-500
5. 最后声明"以上分析仅供参考,不构成投资建议。股市有风险,投资需谨慎。"
""" """
analysis = await self._call_llm_async( analysis = await self._call_llm_async(
@ -1241,29 +1228,17 @@ MA60{f"{ma['ma60']:.2f}" if ma['ma60'] else '计算中'}
if analysis: if analysis:
return { return {
"message": f"【宏观市场分析】\n\n{analysis}", "message": analysis,
"metadata": {"type": "macro_analysis"} "metadata": {"type": "macro_analysis"}
} }
except Exception as e: except Exception as e:
logger.error(f"宏观问题处理失败: {e}") logger.error(f"宏观问题处理失败: {e}")
# 降级方案:提供友好的引导 # 降级方案
return { return {
"message": f"""我理解您想了解:{description} "message": f"抱歉,我暂时无法回答这个问题。您可以问我具体股票或指数的分析。",
"metadata": {"type": "error"}
目前我可以帮您
📊 分析具体股票的走势和投资价值
📈 查看大盘指数如上证指数深证成指
📚 解答金融投资相关问题
您可以更具体地问我比如
"现在上证指数怎么样"
"分析一下创业板的走势"
"最近哪些行业比较热门"
请告诉我您想了解什么""",
"metadata": {"type": "guide"}
} }
async def _handle_knowledge_question( async def _handle_knowledge_question(
@ -1271,34 +1246,24 @@ MA60{f"{ma['ma60']:.2f}" if ma['ma60'] else '计算中'}
intent_analysis: Dict[str, Any], intent_analysis: Dict[str, Any],
message: str message: str
) -> Dict[str, Any]: ) -> Dict[str, Any]:
"""处理金融知识问答""" """处理金融知识问答(智能模式)"""
description = intent_analysis.get('description', '') description = intent_analysis.get('description', '')
keywords = intent_analysis.get('keywords', [])
logger.info(f"处理知识问答: {description}") logger.info(f"[智能模式] 处理知识问答: {description}")
# 直接使用LLM回答 # 使用智能、自然的prompt
prompt = f"""你是一位专业的金融教育专家。用户询问了金融知识问题。 prompt = f"""你是一位专业的金融教育专家。用户询问了金融知识问题。
用户问题{message} 用户问题{message}
请用通俗易懂的语言解释这个概念或回答这个问题 请用自然通俗的语言回答用户的问题不要使用固定的格式"## 核心概念"而是像老师给学生讲解一样直接清晰地解释
## 核心概念 要求
- 清晰定义和解释 - 直接回答问题不要添加"【金融知识解答】"等标题
- 用通俗易懂的语言避免过多专业术语
## 实际应用 - 如果必须用专业术语简单解释一下
- 如何在投资中应用 - 可以举例子帮助理解
- 注意事项 - 控制在200-400
## 举例说明
- 用简单的例子帮助理解
写作要求
1. 语言通俗易懂避免过多专业术语
2. 如果使用专业术语要简单解释
3. 控制在300-400
4. 重点是帮助用户理解而不是炫耀知识
""" """
try: try:
@ -1310,7 +1275,7 @@ MA60{f"{ma['ma60']:.2f}" if ma['ma60'] else '计算中'}
if answer: if answer:
return { return {
"message": f"【金融知识解答】\n\n{answer}", "message": answer,
"metadata": {"type": "knowledge"} "metadata": {"type": "knowledge"}
} }
@ -1327,46 +1292,35 @@ MA60{f"{ma['ma60']:.2f}" if ma['ma60'] else '计算中'}
intent_analysis: Dict[str, Any], intent_analysis: Dict[str, Any],
message: str message: str
) -> Dict[str, Any]: ) -> Dict[str, Any]:
"""处理一般对话,智能引导用户""" """处理一般对话(智能模式)"""
description = intent_analysis.get('description', '') description = intent_analysis.get('description', '')
logger.info(f"处理一般对话: {description}") logger.info(f"[智能模式] 处理一般对话: {description}")
# 使用LLM生成友好的引导回复 # 使用智能、自然的prompt
prompt = f"""你是一位专业且友好的金融智能助手。用户发来了一条消息,但不够具体 prompt = f"""你是一位专业且友好的金融智能助手。用户发来了一条消息
用户消息{message} 用户消息{message}
问题分析{description}
你的任务是 请用自然友好的语言回应用户不要使用固定的格式而是像真人对话一样
1. 如果是问候"你好""在吗"友好回应并介绍你的能力
2. 如果问题不明确"帮我""看看"礼貌地询问用户想了解什么
3. 如果可能与金融相关但不具体给出具体的提问示例引导用户
你可以提供的服务 要求
📊 股票分析 - 分析个股走势技术指标基本面 - 如果是问候"你好"友好回应并简单介绍你能做什么
📈 市场观察 - 解读大盘走势行业热点投资机会 - 如果问题不明确礼貌地询问用户想了解什么
📚 知识问答 - 解答金融投资相关问题 - 语言自然友好不要太正式
- 控制在100-200
回复要求 """
1. 语气友好专业但不生硬
2. 简洁明了不要太长150字以内
3. 给出2-3个具体的提问示例
4. 不要使用"抱歉""无法理解"等负面词汇
5. 用emoji让回复更友好但不要过度使用
直接返回回复内容不要有其他格式"""
try: try:
reply = await self._call_llm_async( response = await self._call_llm_async(
messages=[{"role": "user", "content": prompt}], messages=[{"role": "user", "content": prompt}],
temperature=0.8, temperature=0.8,
max_tokens=400 max_tokens=500
) )
if reply: if response:
return { return {
"message": reply, "message": response,
"metadata": {"type": "chat"} "metadata": {"type": "chat"}
} }