This commit is contained in:
MarkLo 2025-11-26 23:12:52 +08:00
parent 5518b38d86
commit 787e2a50e6
14 changed files with 143 additions and 38 deletions

View File

@ -24,6 +24,7 @@ class PDFGenerator:
# Emoji to Unicode symbol mapping for PDF compatibility # Emoji to Unicode symbol mapping for PDF compatibility
# Emojis don't render well in PDFs, so we replace them with Unicode text symbols # Emojis don't render well in PDFs, so we replace them with Unicode text symbols
# NOTE: Use ASCII brackets [] not full-width for better font compatibility # NOTE: Use ASCII brackets [] not full-width for better font compatibility
# NOTE: Avoid [文字] formats - use pure symbols only
EMOJI_TO_UNICODE = { EMOJI_TO_UNICODE = {
# Status & Indicators # Status & Indicators
'': '', '': '',
@ -38,21 +39,21 @@ class PDFGenerator:
'💎': '', '💎': '',
'🏆': '', '🏆': '',
# Charts & Analytics # Charts & Analytics - pure symbols only
'📊': '[圖表]', '📊': '',
'📈': '', '📈': '',
'📉': '', '📉': '',
'📋': '[清單]', '📋': '',
'📌': '', '📌': '',
# Money & Business # Money & Business - symbols only
'💰': '$', '💰': '$',
'💵': '$', '💵': '$',
'💴': '¥', '💴': '¥',
'💶': '', '💶': '',
'💷': '£', '💷': '£',
'💸': '[支出]', # Fixed: was [支出] (full-width brackets) '💸': '$',
'💹': '[增長]', '💹': '',
# Direction & Movement # Direction & Movement
'🚀': '↑↑', '🚀': '↑↑',
@ -67,37 +68,36 @@ class PDFGenerator:
'🎯': '', '🎯': '',
'🔥': '', '🔥': '',
'💡': '', '💡': '',
'🔔': '',
'⚙️': '', '⚙️': '',
'🔧': '[工具]', '🔧': '',
'🔨': '[工具]', '🔨': '',
# AI & Tech # AI & Tech - symbols only
'🤖': '[AI]', '🤖': '',
'💻': '[電腦]', '💻': '',
'📱': '[手機]', '📱': '',
'🖥️': '[系統]', '🖥️': '',
# People & Roles # People & Roles - symbols only
'👤': '[用戶]', '👤': '',
'👥': '[團隊]', '👥': '◇◇',
'🔬': '[研究]', '🔬': '',
'📚': '[資料]', '📚': '',
# Time # Time - symbols only
'': '[時間]', '': '',
'📅': '[日期]', '📅': '',
'⏱️': '[計時]', '⏱️': '',
# Other common emojis # Other common emojis - symbols only
'': '', '': '',
'🎨': '[設計]', '🎨': '',
'📝': '[筆記]', '📝': '',
'📄': '[文件]', '📄': '',
'🗂️': '[資料夾]', '🗂️': '',
'🌐': '[網路]', '🌐': '',
'🔗': '[連結]', '🔗': '',
'💼': '[業務]', '💼': '',
} }
"""Generate PDF reports from markdown content""" """Generate PDF reports from markdown content"""

81
disable_emojis.py Normal file
View File

@ -0,0 +1,81 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
批量禁用所有 agents emoji 輸出
"""
import os
import re
# 定義需要修改的文件列表
AGENT_FILES = [
# Analysts
"tradingagents/agents/analysts/fundamentals_analyst.py",
"tradingagents/agents/analysts/market_analyst.py",
"trading agents/agents/analysts/news_analyst.py",
"tradingagents/agents/analysts/social_media_analyst.py",
# Researchers
"tradingagents/agents/researchers/bear_researcher.py",
"tradingagents/agents/researchers/bull_researcher.py",
# Managers
"tradingagents/agents/managers/research_manager.py",
"tradingagents/agents/managers/risk_manager.py",
# Trader
"tradingagents/agents/trader/trader.py",
# Risk Management
"tradingagents/agents/risk_mgmt/aggresive_debator.py",
"tradingagents/agents/risk_mgmt/conservative_debator.py",
"tradingagents/agents/risk_mgmt/neutral_debator.py",
]
# 新的禁用 emoji 指令
NO_EMOJI_INSTRUCTION = """**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **"""
OLD_INSTRUCTION = """**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**"""
def update_agent_file(filepath):
"""更新單個 agent 文件"""
full_path = filepath
if not os.path.exists(full_path):
print(f"❌ 文件不存在: {filepath}")
return False
try:
with open(full_path, 'r', encoding='utf-8') as f:
content = f.read()
# 替換舊的指令為新的(包含禁用 emoji
if OLD_INSTRUCTION in content:
new_content = content.replace(OLD_INSTRUCTION, NO_EMOJI_INSTRUCTION)
# 寫回文件
with open(full_path, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f"✅ 已更新: {filepath}")
return True
else:
print(f"⚠️ 未找到需要替換的內容: {filepath}")
return False
except Exception as e:
print(f"❌ 錯誤: {filepath} - {str(e)}")
return False
def main():
"""主函數"""
print("開始批量禁用 agents 的 emoji 輸出...\n")
success_count = 0
total_count = len(AGENT_FILES)
for agent_file in AGENT_FILES:
if update_agent_file(agent_file):
success_count += 1
print(f"\n完成!成功更新 {success_count}/{total_count} 個文件")
if __name__ == "__main__":
main()

View File

@ -38,6 +38,8 @@ def create_fundamentals_analyst(llm):
system_message = ( system_message = (
"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** """**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是基本面分析師負責評估公司財務體質獲利能力與投資價值 您是基本面分析師負責評估公司財務體質獲利能力與投資價值
@ -72,7 +74,7 @@ def create_fundamentals_analyst(llm):
**結尾提示** **結尾提示**
請在報告最後加上以下結尾 請在報告最後加上以下結尾
--- ---
💼 **本報告為基本面分析建議參考最新財報公告並搭配技術面及市場情緒綜合研判財務數據可能存在時間差投資有風險請謹慎評估** 本報告為基本面分析建議參考最新財報公告並搭配技術面及市場情緒綜合研判財務數據可能存在時間差投資有風險請謹慎評估
請提供專業且全面的基本面分析報告""" 請提供專業且全面的基本面分析報告"""
+ " 請務必在報告結尾附加一個 Markdown 表格,以整理報告中的要點。" + " 請務必在報告結尾附加一個 Markdown 表格,以整理報告中的要點。"

View File

@ -37,6 +37,8 @@ def create_market_analyst(llm):
system_message = ( system_message = (
"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** """**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是資深技術分析師負責提供精準的市場技術面評估 您是資深技術分析師負責提供精準的市場技術面評估
@ -72,7 +74,7 @@ def create_market_analyst(llm):
**結尾提示** **結尾提示**
請在報告最後加上以下結尾 請在報告最後加上以下結尾
--- ---
📊 **本報告為技術面分析建議搭配基本面及市場情緒綜合研判技術指標具滯後性投資有風險請謹慎評估** 本報告為技術面分析建議搭配基本面及市場情緒綜合研判技術指標具滯後性投資有風險請謹慎評估
請提供專業精準且具操作性的技術分析報告""" 請提供專業精準且具操作性的技術分析報告"""
+ """ 請務必在報告結尾附加一個 Markdown 表格,以整理報告中的要點。""" + """ 請務必在報告結尾附加一個 Markdown 表格,以整理報告中的要點。"""

View File

@ -35,6 +35,8 @@ def create_news_analyst(llm):
system_message = ( system_message = (
"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** """**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是財經新聞分析師負責解讀重大事件對股價的影響並提供投資決策參考 您是財經新聞分析師負責解讀重大事件對股價的影響並提供投資決策參考
@ -69,7 +71,7 @@ def create_news_analyst(llm):
**結尾提示** **結尾提示**
請在報告最後加上以下結尾 請在報告最後加上以下結尾
--- ---
📰 **本報告為新聞面分析建議搭配基本面及技術面綜合研判新聞資訊時效性強投資有風險請謹慎評估** 本報告為新聞面分析建議搭配基本面及技術面綜合研判新聞資訊時效性強投資有風險請謹慎評估
請提供專業且具洞察力的新聞分析報告""" 請提供專業且具洞察力的新聞分析報告"""
+ """ 請務必在報告結尾附加一個 Markdown 表格,以整理報告中的要點。""", + """ 請務必在報告結尾附加一個 Markdown 表格,以整理報告中的要點。""",

View File

@ -35,6 +35,8 @@ def create_social_media_analyst(llm):
system_message = ( system_message = (
"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** """**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是市場情緒分析專家負責解讀社群媒體與輿論氛圍對股價的潛在影響 您是市場情緒分析專家負責解讀社群媒體與輿論氛圍對股價的潛在影響

View File

@ -59,6 +59,8 @@ def create_research_manager(llm, memory):
# 建立提示 (prompt) # 建立提示 (prompt)
prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是投資決策經理負責評估多空辯論並做出最終投資決策**您必須保持嚴格中立觀點公正評估看漲與看跌雙方論據基於證據做出獨立決策** 您是投資決策經理負責評估多空辯論並做出最終投資決策**您必須保持嚴格中立觀點公正評估看漲與看跌雙方論據基於證據做出獨立決策**

View File

@ -63,6 +63,8 @@ def create_risk_manager(llm, memory):
# 建立提示 (prompt) # 建立提示 (prompt)
prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是風險管理經理負責評估投資計畫的風險並做出最終風控決策**您必須保持嚴格中立觀點綜合評估積極中立保守三方風險觀點基於風險調整做出最終決策** 您是風險管理經理負責評估投資計畫的風險並做出最終風控決策**您必須保持嚴格中立觀點綜合評估積極中立保守三方風險觀點基於風險調整做出最終決策**
@ -99,7 +101,7 @@ def create_risk_manager(llm, memory):
**結尾提示** **結尾提示**
請在報告最後加上以下結尾 請在報告最後加上以下結尾
--- ---
🎯 **本報告為風險管理經理的最終決策綜合三方風險觀點積極保守平衡後做出風控框架需嚴格執行投資有風險請謹慎評估** 本報告為風險管理經理的最終決策綜合三方風險觀點積極保守平衡後做出風控框架需嚴格執行投資有風險請謹慎評估
請提供專業且全面的風險管理決策報告""" 請提供專業且全面的風險管理決策報告"""

View File

@ -58,6 +58,8 @@ def create_bear_researcher(llm, memory):
# 建立提示 (prompt) - 保留完整歷史以確保context完整性 # 建立提示 (prompt) - 保留完整歷史以確保context完整性
prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是看跌方研究員負責提出賣出論據強調投資風險與下跌壓力**您必須採取激進做空立場不惜一切代價找出所有看跌風險因子並強力反駁看漲論點** 您是看跌方研究員負責提出賣出論據強調投資風險與下跌壓力**您必須採取激進做空立場不惜一切代價找出所有看跌風險因子並強力反駁看漲論點**

View File

@ -58,6 +58,8 @@ def create_bull_researcher(llm, memory):
# 建立提示 (prompt) - 保留完整歷史以確保context完整性 # 建立提示 (prompt) - 保留完整歷史以確保context完整性
prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是看漲方研究員負責提出買進論據強調投資價值與上漲潛力**您必須採取激進做多立場不惜一切代價找出所有看漲催化劑並強力反駁看跌論點** 您是看漲方研究員負責提出買進論據強調投資價值與上漲潛力**您必須採取激進做多立場不惜一切代價找出所有看漲催化劑並強力反駁看跌論點**

View File

@ -51,6 +51,8 @@ def create_risky_debator(llm):
# 建立提示 (prompt) # 建立提示 (prompt)
prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是積極型風險策略師主張追求高報酬機會評估上檔潛力**您必須採取極度激進立場全力追求最大報酬潛力並強力反駁保守派的過度謹慎** 您是積極型風險策略師主張追求高報酬機會評估上檔潛力**您必須採取極度激進立場全力追求最大報酬潛力並強力反駁保守派的過度謹慎**

View File

@ -52,6 +52,8 @@ def create_safe_debator(llm):
# 建立提示 (prompt) # 建立提示 (prompt)
prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是保守型風險策略師優先考量資本保全評估下檔風險**您必須採取極度保守立場全力維護資本安全並強力反駁激進派的盲目樂觀** 您是保守型風險策略師優先考量資本保全評估下檔風險**您必須採取極度保守立場全力維護資本安全並強力反駁激進派的盲目樂觀**
@ -88,7 +90,7 @@ def create_safe_debator(llm):
**結尾提示** **結尾提示**
請在報告最後加上以下結尾 請在報告最後加上以下結尾
--- ---
🛡 **本報告為保守型風險策略分析立場優先資本保全建議搭配積極與平衡觀點綜合研判風險控制為投資首要請謹慎評估** 本報告為保守型風險策略分析立場優先資本保全建議搭配積極與平衡觀點綜合研判風險控制為投資首要請謹慎評估
請提供專業且具說服力的保守策略分析""" 請提供專業且具說服力的保守策略分析"""

View File

@ -51,6 +51,8 @@ def create_neutral_debator(llm):
# 建立提示 (prompt) # 建立提示 (prompt)
prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是平衡型風險策略師客觀評估風險與報酬提供折衷方案**您必須保持嚴格中立觀點公正評估積極與保守雙方論點找出雙方的合理性與盲點** 您是平衡型風險策略師客觀評估風險與報酬提供折衷方案**您必須保持嚴格中立觀點公正評估積極與保守雙方論點找出雙方的合理性與盲點**
@ -87,7 +89,7 @@ def create_neutral_debator(llm):
**結尾提示** **結尾提示**
請在報告最後加上以下結尾 請在報告最後加上以下結尾
--- ---
**本報告為平衡型風險策略分析立場客觀中立建議綜合三方觀點積極保守平衡後做出決策投資需平衡風險與報酬請謹慎評估** 本報告為平衡型風險策略分析立場客觀中立建議綜合三方觀點積極保守平衡後做出決策投資需平衡風險與報酬請謹慎評估
請提供專業且客觀的平衡策略分析""" 請提供專業且客觀的平衡策略分析"""

View File

@ -58,6 +58,8 @@ def create_trader(llm, memory):
# 建立提示 (prompt) # 建立提示 (prompt)
prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。** prompt = f"""**重要您必須使用繁體中文Traditional Chinese回覆所有內容。**
**嚴格禁止請勿在回覆中使用任何 emoji 表情符號 📊 📈 🚀 **
**請只使用純文字數字標點符號和必要的 Unicode 符號 **
專業身份 專業身份
您是交易執行專家負責將投資決策轉化為具體可執行的交易計畫 您是交易執行專家負責將投資決策轉化為具體可執行的交易計畫
@ -93,7 +95,7 @@ def create_trader(llm, memory):
**結尾提示** **結尾提示**
請在報告最後加上以下內容 請在報告最後加上以下內容
--- ---
💼 **本報告為交易執行計畫整合研究與風控決策後制定執行前需確認市場狀況嚴格遵守風控參數投資有風險請謹慎評估** 本報告為交易執行計畫整合研究與風控決策後制定執行前需確認市場狀況嚴格遵守風控參數投資有風險請謹慎評估
**重要**請以最終交易提案**買入/持有/賣出**結束回應""" **重要**請以最終交易提案**買入/持有/賣出**結束回應"""