C#中的类与对象
2026/9/23 13:24:27
在职场向上汇报与团队协作中,一个最残酷的现实是:“不同岗位的管理者,对同一份技术产出的关注焦点有着云泥之别”:
Fiber 时间切片或Proxy 响应式;如果周报生成器只能输出一种固定风格的模板,就无法满足真实职场的多样化汇报诉求。
为了实现**“同一份原始 Commit 日志,一键动态转换为‘硬核技术流’、‘业务价值流’或‘敏捷高管摘要流’”**,我们在底层构建了一套多受众 Prompt 动态组装引擎(Multi-Audience Prompt Synthesizer)。
[ 用户输入的原始 Commit 日志与工作碎片 ] │ ▼ (受众模式路由器 Audience Router) ┌─────────────────────────────────────────────────────────────┐ │ 模式 A: 【技术架构流 (Tech-First)】 │ │ - 角色: 资深架构师 | 重点: 性能指标、架构重构、边界防御 │ ├─────────────────────────────────────────────────────────────┤ │ 模式 B: 【业务价值流 (Business-First)】 │ │ - 角色: 商业产品总监 | 重点: 转化率提升、用户体验、按期交付 │ ├─────────────────────────────────────────────────────────────┤ │ 模式 C: 【高管极简流 (Executive-TLDR)】 │ │ - 角色: VP/CEO | 重点: 三句话成果、一个核心指标、零风险承诺 │ └──────────────────────────────┬──────────────────────────────┘ │ ▼ (流式渲染输出结构化 Markdown) [ 一键导出对应受众的专属视角周报 ]// src/services/multiAudiencePrompts.ts export type AudienceType = 'tech_leader' | 'business_manager' | 'executive_summary'; export const AUDIENCE_PROMPTS: Record<AudienceType, { role: string; instructions: string }> = { // 1. 技术主管视角 (面向架构师/研发总监) tech_leader: { role: '你是一位资深前端/全栈架构师。请以硬核、严谨、深度的技术语言编写研发周报。', instructions: ` 【内容重心】: - 突出架构重构、并发性能调优、内存安全与设计模式应用; - 必须包含具体的量化技术指标(如 QPS 提升、LCP 耗时从 X 降至 Y、体积缩减百分比); - 严禁空洞套话,多使用专业的工程术语(如 Proxy 响应式、分布式锁、Shadow DOM 隔离)。 【排版结构】: 1. 🎯 本周核心架构攻坚与突破 2. 🛠️ 关键技术难点与排障深度复盘 3. 📊 性能基准测试与量化度量 4. 🚀 下周底层演进与技术债务清偿规划 ` }, // 2. 业务主管视角 (面向产品总监/业务线负责人) business_manager: { role: '你是一位精通业务价值转化的技术合伙人。请将技术成果翻译为清晰的商业价值语言。', instructions: ` 【内容重心】: - 坚决避免深奥晦涩的底层代码术语,全面转化为“用户体验改善、功能交付进度与商业转化提升”; - 重点突出每个功能对业务指标的推动作用(如微信一键支付大幅降低购买摩擦力、离线秒开提升留存); - 明确标注业务交付里程碑(如 100% 具备全量上线条件)。 【排版结构】: 1. 💡 业务功能交付与关键价值产出 2. 📈 用户体验与核心业务数据提升 3. 🤝 跨部门业务协同与产品支持 4. 🗓️ 下周业务特性排期与里程碑承诺 ` }, // 3. 高管极简流 (面向 CEO / VP) executive_summary: { role: '你是一位战略技术顾问。请为 CEO 编写一份在 60 秒内即可扫视完毕的极简高管决策摘要。', instructions: ` 【内容重心】: - 极致精简!总字数控制在 250 字以内; - 采用 “三句话核心成果 + 一个关键数字指标 + 零风险交付状态” 呈现; - 重点突出研发团队对公司战略目标的落地保障。 【排版结构】: - 🚀 【本周核心战果】:3 条精炼要点 - 📊 【关键效能指标】:1 个最重要的量化收益 - 🛡️ 【交付健康度】:绿色健康(无阻断风险) ` } };// src/services/reportAudienceAdapter.ts import OpenAI from 'openai'; import { AUDIENCE_PROMPTS, AudienceType } from './multiAudiencePrompts'; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); export async function generateAudienceReport(rawLogs: string, audience: AudienceType) { const config = AUDIENCE_PROMPTS[audience] || AUDIENCE_PROMPTS.tech_leader; const response = await openai.chat.completions.create({ model: 'gpt-4o-mini', temperature: 0.3, messages: [ { role: 'system', content: `${config.role}\n\n${config.instructions}` }, { role: 'user', content: `【我的原始工作记录与提交日志】:\n${rawLogs}` } ] }); return response.choices[0].message.content; }在周报工作台上方,提供一键受众切换 Tab:
// 受众切换 Tab 栏 export const AudienceSwitchBar: React.FC<{ active: AudienceType; onChange: (t: AudienceType) => void; }> = ({ active, onChange }) => ( <div className="flex items-center space-x-1.5 p-1 bg-slate-100 rounded-xl"> <button onClick={() => onChange('tech_leader')} className={`px-3 py-1 text-xs font-bold rounded-lg transition-all ${ active === 'tech_leader' ? 'bg-white text-blue-600 shadow-sm' : 'text-slate-500 hover:text-slate-900' }`} > 🛠️ 技术主管视角 </button> <button onClick={() => onChange('business_manager')} className={`px-3 py-1 text-xs font-bold rounded-lg transition-all ${ active === 'business_manager' ? 'bg-white text-blue-600 shadow-sm' : 'text-slate-500 hover:text-slate-900' }`} > 📈 业务主管视角 </button> <button onClick={() => onChange('executive_summary')} className={`px-3 py-1 text-xs font-bold rounded-lg transition-all ${ active === 'executive_summary' ? 'bg-white text-blue-600 shadow-sm' : 'text-slate-500 hover:text-slate-900' }`} > ⚡ CEO 极简摘要 </button> </div> );