
企業財報電話會議是觀察AI落地的重要窗口。越來越多的公司在股東電話會議中提到AI但高層說“AI提升生產力”和現實中AI真正影響運營之間往往隔著一段需要定量分析的證據鏈。這篇文章從一個可以落地的分析視角來拆解這件事用 Python 和大型語言模型把財報電話會議文本轉化為可追蹤、可驗證的 AI 生產力信號。你會看到一張完整的分析管線包括數據準備、文本清洗、AI 相關語句召回、生產力維度分類、指標設計、結果驗證和生產化改造整個過程可以在本地復現也可以擴展成自動化分析服務。1. 財報電話會議中的AI敘事為什么值得做技術分析1.1 從“提到AI”到“AI影響生產力”的語義斷層財報電話會議Earnings Call是上市公司管理層與分析師之間的公開對話通常包含 CEO、CFO 對經營成果的陳述和分析師提問。近幾年“AI”這個詞在電話會議中被頻繁提及但這并不等于公司已經在用 AI 改善生產力。這里存在一個語義斷層管理層可以說“我們正在利用 AI 提升客戶滿意度”也可能說“AI 相關云服務收入同比增長 30%”。前者是模糊的愿景敘述后者是相對可驗證的經營結果。如果只統計“AI”出現次數會把兩類完全不同的信息混在一起。技術分析要做的事情就是把“提到 AI”的句子進一步拆分成幾個維度是否涉及具體的生產力場景例如自動化流程、降低客服成本、輔助編程、供應鏈預測。是否提到可以觀察的證據例如節省工時、縮短交付周期、人員結構調整、收入增量。是否包含時間、部門、產品或財務指標還是停留在“戰略布局”層面。這一層拆解本質上是一次文本分類和信息抽取任務。輸入是電話會議的逐字稿文本輸出是結構化的“AI 生產力信號”片段方便后續按公司、按季度、按行業做趨勢分析。1.2 分析目標把敘事文本轉成可驗證信號如果把財報電話會議當成一個非結構化數據集每一句話都是一個樣本。分析管線的整體目標可以定義成輸入一段會議文本輸出該文本中與“AI 生產力”相關的關鍵證據列表每條證據至少包含原始語句、所屬公司、會議日期、涉及的生產力維度、證據強度、情感傾向。這樣做的價值在于分析師不必再人工翻閱幾十份 PDF 逐字稿投資研究團隊可以批量跟蹤“AI 從戰略敘事走向實際運營”的季度變化產品團隊也可以透過公開信息判斷競品在 AI 自動化上的進展。從技術實現上這條管線并不需要一開始就做得非常復雜。先用規則做候選句召回再用大模型做細粒度判斷最后用人工抽樣評估效果是起步階段最穩妥的方案。下面用一個最小可運行案例來搭建這條管線。為了讓讀者能直接看到輸入輸出本文示例會使用公開的會議記錄片段和模擬數據實際項目中請替換成你自己獲取的授權數據。2. 搭建文本分析環境依賴、模型與數據來源2.1 Python環境與核心依賴建議使用 Python 3.10 或更高版本。核心依賴分成四類數據處理、NLP 基礎能力、大模型接口、可視化。依賴庫用途安裝方式pandas表格數據處理pip install pandasnumpy數值計算pip install numpyjieba中文分詞可選pip install jiebaopenai兼容大模型 API 調用pip install openaimatplotlib指標趨勢圖pip install matplotlibpyyaml配置文件讀取pip install pyyaml建議先創建一個獨立虛擬環境避免和系統 Python 環境相互污染。python -m venv venv source venv/bin/activate # Windows 下使用 venv\Scripts\activate pip install pandas numpy openai matplotlib pyyaml jieba這里有一個容易忽略的點openai庫本身并不局限于官方接口很多國產大模型服務商都提供“OpenAI 兼容”的 HTTP 接口只需要修改base_url和api_key。示例代碼會統一使用這種兼容模式方便切換模型供應商。2.2 大模型接入方式與成本控制大模型在本項目中負責兩個任務語義判斷和信息抽取。考慮到財報電話會議是英文會議記錄占多數但中文媒體轉寫的會議摘要也大量存在至少要讓模型同時支持中英文。接入方式建議用環境變量保存密鑰不要在代碼里寫死export LLM_API_KEYyour_api_key_here export LLM_BASE_URLhttps://your-llm-endpoint.example.com/v1 export LLM_MODELyour-model-name在 Python 中讀取import os api_key os.getenv(LLM_API_KEY) base_url os.getenv(LLM_BASE_URL) model os.getenv(LLM_MODEL, gpt-4o-mini) from openai import OpenAI client OpenAI(api_keyapi_key, base_urlbase_url)成本控制的核心是減少 Token 消耗。財報電話會議全文可能長達數萬詞如果每個句子都調用一次大模型費用和耗時都不可控。推薦做法是先做規則召回只把“疑似涉及 AI 的句子”送入大模型把調用量壓縮一個數量級。后續代碼中會體現這一策略。2.3 數據獲取的合規路徑公開渠道可以獲取財報電話會議逐字稿的來源包括美國 SEC EDGAR 系統中部分公司會提交包含電話會議內容的 8-K 附件。財經數據供應商提供的電話會議文本數據集。公司投資者關系網站公開的財報電話會議記錄 PDF。學術或研究機構發布的金融文本數據集。需要注意這些來源的許可證與使用限制不完全相同。用于學習研究時盡量選擇明確授權公開的數據。如果是商業用途要核對服務條款。原始文本既可以是 CSV 文件也可以是 JSON 文件下面是兩種常見結構。CSV 示例company,ticker,date,quarter,speaker,text Acme Corp,ACM,2024-11-01,Q3 2024,CEO,Our AI-driven recommendation engine has reduced response time by 30%. Acme Corp,ACM,2024-11-01,Q3 2024,CFO,We expect automation to lower operating costs in the next fiscal year.JSON 示例[ { company: Acme Corp, ticker: ACM, date: 2024-11-01, quarter: Q3 2024, speaker: CEO, text: Our AI-driven recommendation engine has reduced response time by 30%. } ]進入代碼之前需要先確認字段完整性。項目代碼可以加一個簡單校驗函數import pandas as pd required_cols [company, ticker, date, quarter, speaker, text] def load_transcripts(path): df pd.read_csv(path) missing [col for col in required_cols if col not in df.columns] if missing: raise ValueError(f缺少必要字段: {missing}) df[text] df[text].astype(str) return df這樣在數據加載階段就能發現字段缺失問題而不是等到分析時才發現某條記錄是空字符串。3. 預處理財報電話會議文本從原始文本到可分析片段3.1 原始文本的特點財報電話會議的原始文本通常來自自動語音識別或人工轉寫存在幾個典型問題包含大量填充詞例如 “um”、“uh”、“well”、“you know”。有主持人提示語例如 “Operator: Your next question comes from...”。一句話可能被換行或標點切割成多段尤其是英文逗號、分號混在一起。中英文混排時標點和空格不規范。如果直接把這整段文本送入模型會讓召回結果噪聲很大。所以預處理要按“會議 ID - 發言片段 - 句子”的層級拆分。3.2 分句與片段化策略可以用re.split按句號、問號、感嘆號分句但需要注意小數點、縮寫詞造成的誤切。英文中 “Mr.”、“e.g.” 這類縮寫如果直接按句號切分會把一句完整的話拆成兩段。一個簡單策略是先用正則做保守切分再做合并。示例代碼import re def split_sentences(text: str) - list[str]: # 保護常見縮寫 text re.sub(r\b(Mr|Ms|Dr|e\.g|i\.e|vs)\., r\1DOT, text) parts re.split(r(?[.!?。])\s, text.strip()) cleaned [] for part in parts: part part.replace(DOT, .) if part.strip(): cleaned.append(part.strip()) return cleaned這里用DOT占位符保留縮寫中的句點避免把一句話切碎。對于中文文本如果原始語料沒有明確標點可以先使用jieba分詞或模型做斷句但生產項目中更推薦使用專門的句子分割模型或高質量轉寫工具。3.3 數據清洗規則數據清洗按順序執行刪除主持人操作語例如 “Your line is open.”、“Please go ahead.”。刪除純數字、時間戳、音頻轉寫標識。合并由于換行導致的半句話。統一全角和半角標點。去除多余空格但保留句子內部換行信息用于后續定位。清洗函數示例def clean_text(text: str) - str: text re.sub(r\s, , text) text text.replace(’, ).replace(“, ).replace(”, ) text re.sub(r\[.*?\], , text) # 刪除轉寫方括號內容 text re.sub(r\(.*?\), , text) # 根據場景決定是否刪除括號 return text.strip()需要說明刪除括號內容并不總是安全的。如果括號中是分析師姓名或職位可以刪如果是財務數據如 “(GAAP EPS: $1.20)”刪掉會丟失關鍵證據。建議把這一步作為可配置項不要寫死。預處理完成后把每條句子打上會議和發言者信息生成一個長表供下一步召回使用。def build_sentence_df(df: pd.DataFrame) - pd.DataFrame: rows [] for _, row in df.iterrows(): for sent in split_sentences(clean_text(row[text])): rows.append({ company: row[company], ticker: row[ticker], date: row[date], quarter: row[quarter], speaker: row[speaker], sentence: sent }) return pd.DataFrame(rows)4. 設計AI生產力信號提取管線4.1 第一步規則召回AI相關語句為了控制大模型調用量先用關鍵詞規則把候選句召回。這里需要覆蓋英文和中文常見表達。英文關鍵詞可以包括ai,artificial intelligence,machine learning,deep learning,automation,intelligent,copilot,agent,generative ai,nlp,computer vision。中文關鍵詞包括人工智能、AI、大模型、機器學習、自動化、智能體、算法、模型。注意大小寫問題。AI是全大寫詞但ai也可能是某些單詞的一部分例如said中并不包含ai但email包含ai。召回時需要按詞邊界匹配。import re AI_KEYWORDS [ r\bai\b, r\bartificial intelligence\b, r\bmachine learning\b, r\bdeep learning\b, r\bautomation\b, r\bintelligent\b, r\bcopilot\b, r\bagent\b, r\bgenerative ai\b, r\bnlp\b, r\bcomputer vision\b, r人工智能, r大模型, r機器學習, r自動化, r智能體, r算法, r智能 ] def recall_candidates(sentence: str) - bool: lower sentence.lower() for pattern in AI_KEYWORDS: if re.search(pattern, lower): return True return False召回階段寧可多召回也不要漏掉關鍵句。因為后面有大模型做細粒度判斷召回多一些只會增加少量成本漏掉則會直接丟失信號。4.2 第二步LLM判斷生產力維度候選句進入大模型后需要讓它輸出結構化 JSON。這里的關鍵是定義清楚分類維度。可以把“生產力信號”分成五個維度維度含義示例句效率提升明確提到速度、響應時間、人均產出變化AI客服降低了平均響應時間成本優化提到成本下降、運營費用減少、資源利用率提升自動化幫助我們減少外包支出收入貢獻提到AI直接或間接帶來收入AI相關訂閱收入同比增長20%人員與組織提到編制、崗位、技能變化我們重新培訓客服團隊使用AI助手戰略與研發提到研發投入、產品路線、合作投資公司計劃在2025年擴大AI研發預算大模型只需要判斷“這句話是否包含上述維度的生產力證據”并輸出證據強度等級high、medium、low、none。none表示提到了 AI 但只是愿景或泛泛而談沒有生產力證據。Prompt 設計示例SYSTEM_PROMPT 你是一個嚴謹的財報文本分析助手。 你的任務是從一句話中判斷它是否包含 AI 或自動化對生產力影響的證據。 判斷維度 - efficiency: 效率提升 - cost: 成本優化 - revenue: 收入貢獻 - people: 人員與組織 - strategy: 戰略與研發 輸出 JSON 格式 { contains_evidence: true, dimension: efficiency, strength: high, reason: 簡要說明判斷依據 } 規則 1. 如果只是提到 AI 但沒有具體影響strength 為 lowcontains_evidence 為 false。 2. 如果提到了時間、比例、金額、人員數量等可驗證信息strength 可設為 high。 3. 不要自行補充原文不存在的信息。 調用模型時把候選句放入 user 消息。為了提升穩定性可以設置temperature0并輸出約束到 JSON。def analyze_sentence(sentence: str) - dict: completion client.chat.completions.create( modelmodel, temperature0, response_format{type: json_object}, messages[ {role: system, content: SYSTEM_PROMPT}, {role: user, content: fSentence: {sentence}} ] ) content completion.choices[0].message.content import json return json.loads(content)4.3 第三步防止AI幻覺的驗證機制大模型在分類時可能產生幻覺常見有兩種模型把原文沒有的數據補充到理由里。模型因為過度擬合訓練數據把 “AI strategy” 錯誤分類成 “high impact”。在提示詞中約束只能引用原文是第一步。第二步是在后處理中做校驗檢查strength字段是否在合法枚舉中。如果strength high要求理由里必須出現原文中的數字、百分比、時間詞否則降級為medium。如果contains_evidencefalse但是該句命中多個生產力關鍵詞標記為待人工復核。示例校驗函數def validate_result(original_sentence: str, parsed: dict) - dict: allowed_strength {high, medium, low, none} strength parsed.get(strength, none) if strength not in allowed_strength: parsed[strength] none if strength in {high, medium}: # 關鍵字校驗high 強度必須包含數字證據 has_number bool(re.search(r\d(\.\d)?%?, original_sentence)) has_evidence_word any(w in original_sentence.lower() for w in [ increase, reduce, decrease, improve, saving, time, cost, revenue, 提升, 降低, 減少, 收入, 成本 ]) if not (has_number or has_evidence_word): parsed[strength] low parsed[flag] weak_evidence return parsed4.4 核心代碼實現下面這段主流程把召回、分析、校驗串起來。實際項目中建議增加緩存避免重復調用 API。def extract_ai_productivity_signals(sentence_df: pd.DataFrame, batch_size: int 10) - pd.DataFrame: results [] candidate_count 0 for _, row in sentence_df.iterrows(): sentence row[sentence] if not recall_candidates(sentence): continue candidate_count 1 parsed {} try: parsed analyze_sentence(sentence) except Exception as exc: parsed { contains_evidence: None, dimension: unknown, strength: none, reason: fAPI_ERROR: {exc} } parsed validate_result(sentence, parsed) results.append({**row, **parsed}) if len(results) % batch_size 0: print(f已處理 {len(results)} 條候選句) print(f候選句總數: {candidate_count}) return pd.DataFrame(results)這一段邏輯并不復雜但已經能形成一個最小閉環。你只需要準備一個 CSV 文件運行后就能得到包含dimension和strength的 DataFrame。5. 構建可量化的AI生產力指標5.1 指標定義與計算邏輯提取出的結構化結果可以聚合成若干指標。本文定義四個核心指標。首先是 AI 提及密度。它計算每篇電話會議中“提到 AI 的句子數”占“總句子數”的比例用來衡量管理層討論 AI 的活躍程度。def ai_mention_density(group: pd.DataFrame) - float: total len(group) if total 0: return 0.0 ai_sentences group[sentence].apply(recall_candidates).sum() return round(ai_sentences / total, 4)其次是生產力信號占比。它只統計被模型標記為contains_evidenceTrue的句子數占 AI 相關句子數的比例。這個指標比單純提 AI 更接近“AI 是否真實作用于運營”。def productivity_signal_ratio(group: pd.DataFrame) - float: ai_candidates group[group[sentence].apply(recall_candidates)] if len(ai_candidates) 0: return 0.0 evidence_count ai_candidates[ai_candidates[contains_evidence] True].shape[0] return round(evidence_count / len(ai_candidates), 4)第三是證據強度得分。對strength做加權打分high3medium2low1none0。可以看出一家公司從“口頭提AI”到“給出數據證據”的進階程度。第四是維度分布。統計五大維度分別出現多少次用于判斷公司當前 AI 落地的側重點是降本、增效還是創收。def dimension_distribution(df: pd.DataFrame) - pd.Series: evidence_df df[df[contains_evidence] True] return evidence_df[dimension].value_counts()5.2 指標解釋和閾值選擇指標不能只給數值還要解釋業務含義。指標計算口徑數值偏低數值偏高AI提及密度AI句子數 / 總句子數業務與AI關聯弱敘事驅動明顯需要進一步看證據生產力信號占比有效性證據句 / AI候選句多數只是戰略口號AI已進入具體業務環節證據強度得分high3, medium2, low1缺少量化描述存在時間、金額、比例等可驗證數據閾值沒有統一標準。用于橫向比較時建議分行業分季度看相對變化。一家傳統零售公司的 AI 提及密度可能一直低于科技公司但若它連續兩個季度從 0.5% 升到 1.5%同時生產力信號占比同步提升就是一個值得追蹤的信號。5.3 可視化輸出把時間序列繪制成折線圖方便觀察變化趨勢。import matplotlib.pyplot as plt def plot_trend(summary_df: pd.DataFrame, metric: str, title: str): plt.figure(figsize(10, 5)) plt.plot(summary_df[date], summary_df[metric], markero) plt.title(title) plt.xlabel(會議日期) plt.ylabel(metric) plt.xticks(rotation45) plt.tight_layout() plt.savefig(f{metric}_trend.png) plt.show()這里summary_df是按季度匯總后的指標表。如果公司數量較多可以先篩選 top N 公司再繪圖避免圖形過于擁擠。6. 運行驗證與結果解讀6.1 小樣本人工標注在把自動分析結果用于任何正式研究前必須做人工抽樣驗證。建議從輸出結果中隨機抽取 50 到 100 條記錄由兩個人分別標注最后計算一致率。標注界面可以是一張簡單的表格包含原始句子、模型判斷維度、證據強度、人工判斷。人工標注主要看三個問題這句話是否真的涉及 AI 生產力。模型判斷的維度是否正確。證據強度是否和原文描述的量化程度匹配。計算準確率時把“模型判斷維度與人工一致”記為正確。如果兩輪標注結果不一致需要重新定義 prompt 或規則。6.2 輸出示例與口徑說明假設輸入文本是Our AI-powered support bot has reduced average response time from 4 hours to 30 minutes.模型可能輸出{ contains_evidence: true, dimension: efficiency, strength: high, reason: 原文提到了響應時間從4小時下降到30分鐘量化證據充分。 }這里strengthhigh是合理的因為有明確數字和時間單位。但需要注意這只能說明管理層提到了結果并不代表財務數據已經驗證。分析口徑要寫成“電話會議中披露的 AI 生產力聲明”而不是“AI 真實生產力提升”。在結果報告中必須區分這兩個口徑否則會把敘事當成事實。6.3 常見偏差和修正方案自動分析容易出現系統性偏差。偏差一是語言偏差。英文語料中AI匹配規則較穩定但中文語料中“智能”一詞使用范圍很廣例如“智能制造能力”“智能化轉型”這些詞不一定代表 AI 生產力證據。修正方法是增加否定詞或場景詞過濾或單獨訓練一個二分類器。偏差二是行業偏差。銀行和制造商會用“算法”“模型”指代傳統統計模型而不是生成式 AI。可以在召回階段加入llm、generative ai、大模型等更明確的詞并允許人工配置行業詞典。偏差三是時間偏差。一段話可能在回顧過去的 AI 投入效果也可能在描述未來計劃。模型默認不會區分時態所以 prompt 應加入一個time_horizon字段輸出past、present、future之一。這在投資分析中尤其重要因為未來規劃不能算已實現的生產力。def classify_time(sentence: str) - str: past_words [已, 完成, 降低, 提升, 節省, reduced, improved, saved] future_words [計劃, 預計, 將, will, plan, expect, goal] lower sentence.lower() if any(w in lower for w in future_words): return future if any(w in lower for w in past_words): return past return present這個簡單函數可以作為兜底更精確的做法是讓模型輸出time_horizon字段。7. 常見問題排查從API報錯到信號誤判下面這張表總結了運行本管線時最常遇到的問題按“現象 - 原因 - 檢查方式 - 處理建議”列出。問題現象常見原因檢查方式處理建議API 返回 401 或 403API Key 錯誤、沒有讀取環境變量檢查環境變量是否生效打印 key 前綴確認 key 寫入正確的 shell 環境不要在代碼中硬編碼輸出不是合法 JSON模型返回了 Markdown 或額外解釋打印模型原始返回內容在 prompt 中增加response_format后處理中增加 JSON 解析兜底候選句數量極其少關鍵詞規則太嚴格或文本為空打印sentence列統計放寬關鍵詞確認清洗沒有誤刪全部內容高比例contains_evidencetrue模型過于寬松喜歡給出肯定判斷抽樣人工標注調整 prompt 規則增加none示例高比例strengthlow原文多是戰略表述缺少量化證據檢查原始語料是否只包含管理層主旨發言同時檢查分析師問答部分里面經常有更具體的數字中文文本召回效果差關鍵詞沒有覆蓋“大模型”“智能體”檢查分詞和關鍵詞列表增加中文領域詞表必要時增加同義詞映射結果不穩定重復運行不同temperature 不為 0 或模型非確定性固定 temperature0固定隨機種子對同一批數據跑多次并做多數投票費用增長過快每句話都調用 API沒有做召回統計調用次數先做規則召回再對候選句調用模型使用緩存排查順序可以按“數據 - 規則 - 模型 - 校驗 - 聚合”推進。不要先懷疑模型先確認數據清洗是否正確再確認召回規則是否覆蓋了常見表達最后才調整模型參數。8. 從分析原型到生產級應用8.1 學習環境與生產環境的差距本地跑通原型只需要一個 CSV 和 Jupyter Notebook但生產環境需要另外考慮四件事。第一是調度。財報電話會議通常按季度集中發布需要定時任務自動抓取新文本并觸發分析流程。可以使用 Airflow、Dagster 或最簡單的事件觸發函數甚至 GitHub Actions 定時運行腳本。第二是存儲。原始文本、模型輸出、人工標注結果要分別落庫。推薦使用 PostgreSQL 或更輕量的 DuckDB。表結構至少包含transcript_id、sentence_id、analysis_id、model_version、raw_output。第三是監控。每天記錄 API 調用量、失敗數、Token 消耗、人工復核隊列長度。大模型輸出質量會隨模型版本變化需要記錄模型版本號否則無法定位結果漂移。第四是安全合規。不要把會議文本直接發送到不受控的外部模型除非已經獲得數據公開授權。企業內部私有化部署模型時還要做好訪問控制和日志審計。8.2 引入AI Agent后的自動化擴展當分析需求變多后可以考慮把流程拆成多個 Agent 任務數據采集 Agent定時訪問數據源下載新增電話會議 PDF 或文本。文本解析 Agent把 PDF 轉成結構化文本并按發言者分句。信號提取 Agent調用大模型輸出證據列表。人工復核 Agent把低置信度結果推送給審核隊列。報表 Agent生成季度趨勢報告并推送到企業微信、釘釘或郵件。每個 Agent 本質上是原來的一個小函數只是加上了狀態管理、重試和任務隊列。這樣做的收益是讓不同崗位的人只關注自己負責的環節降低大模型調用出問題時的排查范圍。8.3 回歸測試與模型更新生產環境不能每次改 prompt 后就直接上線。要把一批已經人工標注好的句子作為回歸測試集例如 200 條覆蓋五個維度的樣本。改 prompt 后先用這批樣本跑指標對比只有當準確率和召回率沒有顯著下降時才進入正式流程。最好把回歸測試集成到 CI/CD 中。每次更新 prompt 或切換模型時自動執行一遍回歸測試并輸出一個對比報告。這個機制對于依賴大模型的分析系統尤其重要因為模型行為并不完全可控。8.4 實踐建議清單環境檢查Python 版本、依賴包版本、API 地址和模型名稱都記錄在一個配置文件中。數據檢查加載后執行空值、重復項、編碼格式檢查中文編碼統一為 UTF-8。召回檢查統計每篇電話會議召回候選句數量并設定上下界低于閾值要告警。模型檢查先跑 5 條樣例對比輸出結構和 prompt 定義是否一致。人工復核對強度為 high 的記錄優先復核因為這類記錄對結論影響最大。版本記錄每次運行都保存模型版本、prompt 版本、運行時間、原始輸出。成本優化對同一會議多次分析使用緩存按會議 ID 和模型版本建立唯一鍵。結果解釋所有指標都要附帶口徑說明避免把“管理層披露”寫成“實際提升”。這篇文章的核心思路是把 AI 敘事拆成可以反復計算和驗證的信號。從關鍵詞召回到大模型分類再到強度校驗每一步都服務于一個目標降低把“嘴上的 AI”誤當成“業務里的 AI”的風險。下一步你可以根據自己的數據源繼續擴展比如加入股票收益分析、同行業橫向對比、管理層語氣分析或者用更細粒度的事件抽取模型識別 AI 投資金額和產品發布時間。對剛入門的讀者建議先用一兩家公司的小數據集跑通完整流程再逐步擴大范圍。