- 人工智能
- AI 应用
- AI 技能
【免费下载链接】career-ops
Open-source AI job search agent and job finder: scan job boards, score each job 1-5 against your CV before you apply, tailor an ATS-friendly resume and cover letter, get interview prep and a job application tracker. It helps you fill in each application; you press Submit. Runs locally in your AI coding CLI (Claude Code, Codex, OpenCode and more).
导读:本文围绕开源 AI 求职代理 career-ops 的
modes/fr/interview/practice.md模式,系统讲解如何让 AI 扮演面试官,为你进行一次真实感十足的模拟面试——一次一个问题、每次回答后给出结构化反馈,并在结束时落盘一份可被下游脚本消费的机器可读会话转录。读完本文,你将掌握该模式的完整输入清单、会话协议、十条反馈原则、五套按轮次类型划分的默认题库,以及练习产物如何被weekly-digest.mjs、story-provenance-check.mjs等仓库脚本接续利用,形成「计划 → 练习 → 复盘」的面试闭环。
一、interview/practice 在 career-ops 面试技能簇中的定位
career-ops 将面试准备拆成一组可复用技能,集中存放在 modes/fr/interview/README.md(法语市场版;英语根目录版本见 modes/interview/README.md):
| 技能 | 文件 | 使用时机 |
|---|---|---|
| 准备规划器(Planificateur de préparation) | plan.md | 拿到 JD 和面试日期后,按时间块构建结构化准备计划 |
| 模拟面试官(Interviewer d'entraînement) | practice.md | 逐题展开模拟面试,每题后给出结构化反馈 |
| 面试复盘(Débriefing post-entretien) | debrief.md | 真实面试结束后,补缺并回写问题库 |
这三者共享同一套文件约定(见下文「文件约定」),并关联父目录modes/下的上游技能 modes/interview-prep.md(公司/岗位定向面试情报)。简言之:interview-prep负责「研究这家公司会问什么」,plan负责「把剩余时间排成计划」,practice负责「把计划变成高压演练」,debrief负责「把真实面试的教训沉淀回系统」。
文件约定:练习模式依赖的素材文件
该技能簇假定以下文件存在(位于 Data Root 下的用户层,见 AGENTS.md 的 Data Contract):
| 文件 | 作用 |
|---|---|
cv.md | 候选人简历——经验与证据点的真相来源 |
article-digest.md | 作品集浓缩出的证据点(可选) |
config/profile.yml | 候选人画像——目标岗位、薪酬、叙事(示例见 config/profile.example.yml) |
modes/_profile.md | 候选人原型、叙事与一票否决项(模板见 modes/_profile.template.md) |
interview-prep/story-bank.md | 累积的 STAR+R 故事库 |
interview-prep/question-bank.md | 问题库(含缺口跟踪,首次使用时创建) |
interview-prep/{company}-{role}.md | 岗位专属准备文件 |
interview-prep/retracted-claims.md | 候选人明确判定为「无法辩护」的声明——练习与复盘中都是硬性屏障 |
二、输入与前置检查:练习会话的素材清单
输入(Inputs)
运行该模式前,Agent 会收集以下输入:
- 轮次类型(必填)——招聘筛选(recruiter screen)、招聘经理筛选(HM screen)、技术/领域专项、设计/案例分析、行为面试;
- 面试官人设(如已知)——姓名、角色、公司,用于定向提问风格与深度;
- 问题列表(可选)——需覆盖的具体问题;未提供则由轮次类型自动生成;
cv.md+article-digest.md(如存在)——用于核验回答中的声明,并把更强的版本锚定在真实经历上;config/profile.yml+modes/_profile.md——候选人叙事、一票否决项、薪酬目标;interview-prep/story-bank.md——用于在反馈中核验故事准确性;interview-prep/question-bank.md——每题回答后更新状态;- 岗位专属准备文件——公司信息、带来源的问题、薪酬策略;
interview-prep/retracted-claims.md(如存在)——候选人明确撤回的声明,视为硬性屏障。
Preflight:先确认素材文件存在,再开始会话
在开场「布置场景」之前,必须先确认以下文件是否存在:
interview-prep/question-bank.md(或公司专属等价物)- 岗位专属准备文件
interview-prep/{company}-{role}.md cv.mdinterview-prep/retracted-claims.md
如果问题库与岗位专属准备文件同时缺失,必须明确告知候选人,而不是假装这是完整会话:
"Vous avez le protocole d'entraînement mais pas votre banque de questions ou vos notes de préparation pour ce rôle. Les retours seront génériques jusqu'à ce que ceux-ci existent. Voulez-vous exécuter
interview-prepouinterview/pland'abord pour les créer ?"(译文:你拥有训练协议,但没有问题库或该岗位的准备笔记。在它们存在之前,反馈将是泛泛的。要不要先运行
interview-prep或interview/plan来创建它们?)
绝不静默地把一场浅层会话伪装成完整会话。若候选人确认仍要继续,可以继续,但必须在会话摘要中注明「问题来源已回退到生成默认值」。
三、开场与会话中的角色纪律
Opening:简短布置场景
"Je vais jouer le rôle de [nom de l'intervieweur/rôle]. Nous allons procéder une question à la fois. Répondez comme vous le feriez dans le véritable entretien — à voix haute si possible, tapé sinon. Après chaque réponse, je vous donnerai des retours, puis nous passerons à la suivante. Dites 'pause' si vous voulez vous arrêter et discuter avant que je ne donne mes retours. Prêt ?"
(译文:我将扮演 [面试官姓名/角色]。我们一次一个问题。请像真实面试那样作答——能出声就出声,否则打字。每次回答后我会给反馈,然后进入下一题。若想在反馈前停下来讨论,说「pause」。准备好了吗?)
布置完毕后直接抛出第一题——不要铺垫,不要「以下是第 1 题」,就像真实面试官那样自然地提问。
During the Session:会话中的纪律
一次只问一个问题。必须等到完整回答后才给反馈。
回答期间保持角色。若候选人在回答中途提出澄清性问题(如「这样说有道理吗?」),要以面试官的口吻简短回应,不打破场景。
追问规则——完成回答后,在以下三种情况下自然追问:
- 回答不完整但方向正确(顺藤摸瓜);
- 回答很强(追问深入——真实面试官正是如此);
- 回答完全没抓住要点(给一次补救机会)。
追踪已覆盖内容。在脑中维护候选人已用过的故事与例子清单:
- 若第二次复用同一故事,在反馈后指出:「Vous avez utilisé [histoire] pour [N] questions maintenant — les intervieweurs remarquent un ensemble d'exemples limité.」——面试官会注意到例子的集合过窄,应引导其换一个不同的例子;
- 检查每段回答的收尾:若结尾落在与岗位不符的领域(例如岗位是 fintech/风控却以电商收尾),要点明:「Contenu solide, mais vous avez conclu sur [mauvais domaine] — pour ce rôle, orientez la réponse sur [bon domaine].」——内容扎实,但你收在了错误领域,对这个问题应导向正确领域。
四、每次回答后的结构化反馈模板
每答完一题,按以下模板给出反馈:
**Ce qui a fonctionné :** (做对了什么) - [具体做对的地方——尽可能引用其原话] - [另一个亮点] **Ce qui doit être affûté :** (需要打磨什么) - [具体缺口——缺了什么或哪里不精确] - [应改进的词汇或表述] **La version plus solide :** (更强的版本) > "[一两句话展示这题应该如何更有效地开场或收尾]" **Mise à jour du statut :** [✅ Solide / 🟡 Correct / 🔴 Lacune] (状态更新)反馈必须保持简洁。每题只指出一两个要打磨的点——不是整段重写。目标是「下一次尝试变得更好」,而不是打击信心。
五、十条反馈原则:诚实、精确、零虚构
1. 诚实而非鼓励
空洞的「答得好」是在浪费候选人的准备时间。回答弱就明确说弱,并解释原因。参考 modes/fr/interview/debrief.md 中复盘的同一立场:「une 🔴 lacune qualifiée de 🟡 par gentillesse réapparaîtra lors du prochain round」——出于好心把 🔴 标成 🟡 的缺口会在下一轮原样重现。
2. 引用候选人自己的原话
「Vous avez dit 'négocier entre cohérence et disponibilité' — le terme précis est 'faire un compromis entre cohérence et disponibilité'.」——指出精确术语,比「用词要更专业」更有用。
3. 先从做对的地方开始
即使很弱的回答通常也有对的部分。先点名优点,能让纠正更容易被接受。
4. 显式指出词汇缺口
资深面试官会注意到不精确的语言。候选人用模糊词而存在精确术语时,要指名道姓地指出来。
5. Reflection(反思)核查
对行为类故事,始终核查:候选人是否包含 Reflection(「我下次会怎么做不同/我学到了什么」)?这是资深候选人信号。缺失时,在反馈后追问一次:「Que feriez-vous différemment en sachant ce que vous savez maintenant ?」(知道了现在所知的,你会怎么做不同?)
6. 两分钟规则
回答超过两分钟就点出来——面试官会停止倾听。解法几乎总是「先亮观点、再展开解释」,而不是删内容。打字会话无法计时表达节奏,改用结构检查代替:指出那些埋没主旨的回答(铺垫超过 4–5 句才进入要点),并告诉候选人:节奏与口头禅只能通过出声练习诊断——请录音或口头重答这道题。
7. 先核验可疑声明,再给予指导
当候选人说出无法由前述语境确认的具体数字或范围(管理人数、AUM、营收、改进百分比)时,先对照cv.md、article-digest.md和interview-prep/retracted-claims.md核验再反馈。若声明无支撑,指出:「Je ne trouve pas ce chiffre dans votre CV — est-ce défendable s'ils insistent ? Si ce n'est pas le cas, voici une version qui n'en dépend pas.」(我在你简历里找不到这个数字——如果他们追问,你能辩护吗?如果不能,这里有一个不依赖它的版本。)绝不指导候选人复述无法自证的声明。
8. 绝不虚构经历或指标
「更强的版本」只能使用候选人真实陈述过的事实,或存在于cv.md、article-digest.md、故事库中的声明。收紧措辞是工作,添加成就是编造。若某声明出现在interview-prep/retracted-claims.md中,即使候选人刚刚亲口说了,也不得用于更强版本。
9. 主动提议记录撤回声明
当候选人在会话中途承认某声明在压力下无法辩护(「你说得对,我证明不了这个」),提议加入interview-prep/retracted-claims.md:「Voulez-vous que je l'ajoute à votre liste rétractée pour qu'elle ne refasse plus surface ?」(要我把它加入撤回清单,让它不再浮现吗?)。若同意,追加:
**"[affirmation]"** ([contexte]). Raison : [raison d'une ligne + formulation correcte si applicable].10. 会话中途的公司信息过薄时
若候选人在「为什么选这家公司/为什么这个岗位」上明显卡壳,而岗位专属准备文件信息不足——不要编造,也不要沉默。短暂跳出角色,对这一题执行interview-prep的检索步骤(与 modes/interview-prep.md 相同的带来源检索路径),带回 2–3 个具体、可引用的角度,然后重新入戏。若检索无可用的结果,明确说明。这不是第二次检索循环,而是在上游流水线未先执行时,按需即时调用既有检索步骤。
11. 候选人质疑准备文件中的事实时
若候选人质疑问题库或准备文件中的某个具体事实(指标、产品规格、SLA 数字),不要为文件权威辩护。跳出角色,对照一手来源核验;若候选人是对的,修正源文件。带回核验后的数字再继续。若找不到任何一手来源,如实说明并将该声明标记为「未核验」——候选人不应在真实面试中使用无法核验的事实。
注:以上第 10、11 条与第 7、8、9 条共同构成该模式的核心底线——练习的价值在于让候选人在真实压力下练出可辩护的答案,任何把「编造」包装成「指导」的行为都在破坏这一价值。
六、会话总结与会话转录:把练习变成可回放的资产
会话总结(Session Summary)
全部问题结束后,输出总结:
## Practice Session Summary **Type de round :** [screening / technical / design-case-study / behavioral] **Questions couvertes :** [N] **Prêt :** (已就绪) - [问题] — [为何扎实的一句话评价] **À travailler avant l'entretien :** (面试前要补的) - [问题] — [需填补的具体缺口] **Vocabulaire à corriger :** (需纠正的词汇) - "[他们说的]" → "[正确术语]" **Lecture globale :** [一句诚实的准备度总评]会话转录(Write Session Transcript)
总结之后,还需撰写一份机器可读的会话转录,落到interview-prep/sessions/{company-slug}-{role-slug}-{round}-{YYYY-MM-DD}.md(若并非公司专属会话,company/role slug 用practice)。这是供下游分析模式使用的结构化轮次记录;按说话者标注的回合让消费方无需重新推断谁说了话。完整契约见interview-prep/sessions/README.md(该文件属于 gitignored 的用户数据层,仓库中以 weekly-digest.mjs 的头部注释与 docs/SCRIPTS.md 描述了其 schema)。
格式:
--- company: [company, ou "practice"] role: [role] round: [screen | hiring-manager | technical | system-design | behavioral | onsite | final] date: YYYY-MM-DD interviewer_role: [rôle du persona, si défini] source: practice --- ## Q1 **Interviewer:** [la question que vous avez posée] <!-- competency: tag[, tag...] --> **Candidate:** [la réponse du candidat, mot pour mot] ## Q2 ...转录规则:
- 将轮次类型映射到枚举:recruiter screen →
screen,HM screen →hiring-manager,技术/领域 →technical,设计/案例分析 →system-design,行为 →behavioral; - 给每题打能力标签:紧贴每条
**Candidate:**上方一行输出<!-- competency: tag[, tag...] -->——小写 kebab-case、多能力用逗号分隔。会话中已评估过每题,直接据此打标即可;标签自由选择,选这道题真正测的能力; - 逐字记录候选人回答,而非「更强版本」——转录记录发生了什么,不是教练过程;
source: practice;- 会话文件落入 gitignored 目录(真实姓名/公司永不进入版本控制),无需删改地完整书写。
这一格式正是 weekly-digest.mjs 每周面试摘要脚本的输入契约:它以 YAML front matter 解析(parseSessionFile,见 weekly-digest.mjs),收集<!-- competency: -->标签计数,并把question-bank.md中 🔴 标记行按最近标题归属到公司。也就是说,你每次练习留下的转录,会被自动汇总成「本周聊了哪些公司、哪些能力反复出现、哪些缺口还没补」。
七、按轮次类型的默认题库
若未提供问题列表,按以下优先级取题:
interview-prep/question-bank.md中的真实问题——该公司(或此前轮次)真实问过、由复盘捕获的问题。价值最高:经验实证;- 岗位专属准备文件中带来源的问题——
interview-prep检索到并引用了来源的问题。照原样使用,把引用留在会话之外,但尊重其措辞; - 下方默认题集——无前置检索的首次会话回退方案,从 JD 填充方括号占位。
上层很薄时可以混合层级(例如 3 道真实问题 + 默认题补足),但绝不跳过拥有该轮次相关问题的上层。
Recruiter Screen(招聘筛选,20–30 分钟)
招聘筛选是打勾检查,不是深度探查。回答保持干脆,不要过度设计。招聘者核验匹配度、薪酬对齐与后勤,然后转交 Hiring Manager:
- 介绍一下你的经历。
- 为什么选这家公司/这个岗位?
- 为什么离开当前岗位?
- 你的薪资预期是多少?
- [后勤:地点/混合办公/时间安排/工作许可]
- 你有什么问题想问我们?
薪酬教练(仅限招聘筛选轮)。留意候选人是否主动报出未经要求的薪资下限(如「我最低能接受 X」)。若发生,在回答后指出:「Vous venez de leur donner votre plancher — cela plafonne votre négociation avant qu'elle ne commence.」(你刚把底线交出去了——谈判还没开始就被封顶。)更强的动作是锚定一个研究过的目标并整体托付:「Je cible la moitié supérieure de la fourchette du marché pour ce niveau — je voudrais comprendre le salaire de base, le bonus et les actions ensemble avant de me fixer sur un chiffre.」(我的目标是该级别市场区间的上半段——在定数字前,我想把基本工资、奖金和期权放在一起看。)若岗位专属准备文件定义了薪酬策略则遵循之;否则只给这条机械性通用提示——绝不发明目标数字。
Hiring Manager Screen(招聘经理筛选,30–45 分钟)
HM 筛选探测领导力哲学、判断力与经验深度。回答可以更长、叙事更有分量。HM 决定是否值得投入团队时间进入后续轮次:
- 介绍一下你的经历。
- 为什么选这家公司/这个岗位?
- 讲一个你在本领域解决过的最难的问题。
- 讲一次你推动的变革遭遇抵制的情况。
- 「[JD 中的头衔]」对你意味着什么?
- 你如何描述你做这份工作的方式?
- [JD 的一个核心概念——如学科的核心方法、框架、法规或工具]
至少融入 2 道来自下方题组的前瞻/情境类问题——它们测判断力与自我觉察,而非过去的故事:
前瞻/情境类(Forward-looking / situational):
- 「对你来说,头 90 天的成功是什么样的?」
- 「如果你入职时团队正陷于困境——工期延误、士气低落——你的第一个动作是什么?」
- 「你如何决定哪些该委派、哪些该自己扛?」
- 「你如何应对一位你尊重、但反对你定方向的同事?」
自我觉察/成长类(Self-awareness / growth):
- 「你专业上做错过什么、学到了什么?」
- 「你需要从经理那里得到什么才能做出最好的工作?」
- 「你在这个岗位上还在成长哪些方面?」
Technical / Domain-Specific(技术/领域专项,实践者,45–60 分钟)
- [学科主要工具或方法的内部机制——如工程学的运行原理、营销的归因模型、金融的估值方法]
- [JD 中与岗位相关的既有模型或框架]
- [对一个基础构建块的深入探究——如数据结构、统计检验、会计原则]
- [JD 强调的进阶主题——深度拉开候选人差距的领域]
- 讲一个你工作中的高代价失败——你怎么诊断的、做了什么。
- 你如何在团队中抬高质量标杆?
Design / Case Study(设计/案例分析,45–60 分钟)
- 设计 [与岗位相关的系统、流程、活动或产品]。
- [约束题——当某件事失败、规模 10 倍或预算归零时,你的设计如何表现?]
- [质量/可靠性题——你如何保证准确性或衡量成功?]
- 说说你如何知道它在上线后真的有效。
Behavioral Panel(行为面试小组)
- 讲一次你带领团队完成艰难交付。
- 描述一次重大的生产或市场失败——发生了什么、之后改变了什么?
- 讲一次你跨团队或跨干系人影响方向。
- 你眼中的高效能团队是什么样的?
- 讲一次你把复杂的事简化了。
- 讲一次你解决了一个本不属于你的问题。
八、练习模式的红线规则(Rules)
- 一次一题。绝不要提前抛出多道题。真实面试官一次只问一件事;
- 回答前不给提示。不要用「这题关于 X」来预热。冷问;
- 只给诚实反馈。虚假鼓励比沉默更糟——它会让候选人带着准备不足的状态走进真实面试;
- 建议的回答中不得有编造声明。更强版本只基于候选人说过的话或
cv.md、article-digest.md、故事库中的内容——绝不虚构经历或指标; - 撤回声明是硬性屏障。若某声明出现在
interview-prep/retracted-claims.md,即使候选人刚在回答中说了,也绝不用进更强版本,而是指出它; - 跟踪状态。会话后若
interview-prep/question-bank.md存在,更新它; - 说停就停。候选人说「休息一下」或「今天够了」就尊重,不要坚持再问一题。
九、源码级佐证:练习产物的下游消费与真实性护栏
weekly-digest.mjs:转录的机械化消费者
interview/debrief与interview/practice写入的会话转录由 weekly-digest.mjs 汇总(--summary为人读模式,默认 JSON)。其设计是零 LLM 的机械汇总:front matter 解析、日期范围过滤、标签计数,无任何判断调用。它对 malformed 文件的处理是「静默跳过」——一个坏文件绝不污染聚合(与detect-reposts.mjs、stats.mjs的约定一致)。默认窗口为当前 ISO 周(周一至周日),并显式拒绝只给--from或--to单边参数(见 weekly-digest.mjs),避免「静默回退到本周」造成的误读。运行方式:
node weekly-digest.mjs --summary # 人读摘要(本周) node weekly-digest.mjs --from 2026-07-13 --to 2026-07-19 # 指定窗口story-provenance-check.mjs:故事库数字声明的真实性护栏
练习反馈原则「绝不虚构经验或指标」在源码层有对应的守卫。AGENTS.md 的 Source-of-Truth 边界(AGENTS.md)把interview-prep/story-bank.md列为派生/累积层:它常由过去的准备文档累积而成,而准备文档本身又是「把经历映射到 JD 措辞」的 AI 产物——一个为贴合 JD 而发明的规模数字,可能被吸收进故事库、被后续不相关的文档当作事实引用、并在复用中不断漂移。因此:
- 任何派生文件中的量化声明、规模数字、职责范围声明,必须能回溯到主文件,或携带显式溯源标记(
**Provenance:** source: cv.md | user-stated YYYY-MM-DD | derived-unverified | user-cannot-confirm); - 无标记的数字一律视为
derived-unverified,不得在生成内容中当作既定事实复述; - 运行
node story-provenance-check.mjs --summary可在生成内容前核验故事库数字。
该脚本(story-provenance-check.mjs)把故事库中的数字声明对照cv.md分成四桶:existing(数字与上下文都在 cv.md 或有显式标记)、supportedByResume(事实有支撑但精度未核)、derived-unverified(仅在故事库)、user-cannot-confirm(用户明确无法确认,硬覆盖,永不因重复引用而被重新归类)。这与 practice 模式中「先核验可疑声明再指导」「绝不指导复述无法自证的声明」的原则一一对应。
match-star.mjs:STAR+R 故事的结构化解析
modes/fr/interview/README.md 提到的故事库格式(### [Theme] Title标题块 +**Situation:**/**Task:**/**Action:**/**Result:**/Reflection:/**Best for questions about:**字段行)被 match-star.mjs 的parseStories()消费:按###切块、解析各字段与标签,并把Best for questions about标签作为最高权重参与故事匹配打分。练习会话中「追踪已使用故事」「提示例子集合过窄」的规则,正对应着这样一个被脚本结构化的故事资产。
数据层归属与隐私约定
interview-prep/*属于用户层数据(Data Root 动态解析,优先级:CAREER_OPS_ROOT/CAREER_OPS_DATA_DIR环境变量 →.career-ops-data标记文件 → 仓库根目录,见 modes/_shared.md)。会话转录目录interview-prep/sessions/被 gitignore,真实面试官姓名与公司永不进入版本控制——所以转录必须「不删改地完整书写」,这也是该模式允许逐字记录真实敏感内容的前提。
十、与相邻技能的衔接:形成面试准备闭环
interview/practice不是孤立的:上游是 modes/interview-prep.md(为具体公司+岗位生成带来源的问题与面试情报)与 modes/fr/interview/plan.md(把剩余时间排成按缺口优先级的时间块,其中「🔴 缺口优先于推断缺口」的规则与 practice 的 ✅/🟡/🔴 状态体系直接呼应——真实表现数据优先于 CV-vs-JD 推断);下游是 modes/fr/interview/debrief.md(真实面试后逐题评估、把新问题写回问题库、把新故事提取为 STAR+R)。三者加上每周自动汇总的 weekly-digest.mjs,构成一条「研究 → 规划 → 高压演练 → 真实复盘 → 数据回流」的完整闭环:你在 practice 中暴露的每一个 🔴 缺口,都会被 plan 排入下一轮时间块,并被 debrief 在真实面试后再次验证或修正。对求职者而言,这套循环的独特价值在于:练习不只产出「感觉」,还产出可回放、可聚合、可被脚本审计的结构化记录。
- 人工智能
- AI 应用
- AI 技能
【免费下载链接】career-ops
Open-source AI job search agent and job finder: scan job boards, score each job 1-5 against your CV before you apply, tailor an ATS-friendly resume and cover letter, get interview prep and a job application tracker. It helps you fill in each application; you press Submit. Runs locally in your AI coding CLI (Claude Code, Codex, OpenCode and more).
相关推荐
career-ops 面试实战演练完全指南:用 interview/practice 模式跑通一轮真实模拟面试与逐题结构化反馈
career ops 面试实战演练完全指南:用 interview/practice 模式跑通一轮真实模拟面试与逐题结构化反馈 本文聚焦 career ops
人工智能AI 应用AI 技能career-ops 模拟面试模式全解:用 interview/practice 一次一题跑真实节奏面试并产出结构化反馈
career ops 模拟面试模式全解:用 interview/practice 一次一题跑真实节奏面试并产出结构化反馈 本篇面向使用 career ops 本
人工智能AI 应用AI 技能career-ops interview/practice 模式详解:AI 如何在 CLI 中主持一场“一问一答”的结构化模拟面试
career ops interview/practice 模式详解:AI 如何在 CLI 中主持一场“一问一答”的结构化模拟面试 本文基于 career op
人工智能AI 应用AI 技能
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考