万得AI-可比公司分析

Polar Sponsor
爱发电 赞助
.NET 9.0

调用万得 Alice Agent 的「可比公司分析」专业技能,可为上市公司快速生成机构级可比公司分析报告,自动筛选同行业可比公司,提取经营指标、估值倍数(PE、PB、EV/EBITDA 等)和统计基准,输出 Excel 表格与文字分析,帮助用户判断目标公司相对同行的估值水平和经营表现。首次使用前需访问 https://alice.wind.com.cn/settings?tab=account 注册并登录 Alice 账户,获取专属 API Key,并在首次调用时输入“请调用 Wind可比公司分析 ski

Comps Analysis(可比公司分析)

功能概述

Comps Analysis(可比公司分析)是一项面向实际任务的技能,主要用于通过 alice-comps-analysis 调用万得 Alice Agent,针对上市公司一键生成机构级可比公司分析报告(Excel 表格 + 文字分析);核心原则 :基础设施交给脚本处理;

核心要点

  • Agent 只负责把用户的研究对象拼成一句自然语言 prompt 传入;
  • 默认就执行 Comps Analysis 技能,无需也不要再指定其它。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Comps Analysis(可比公司分析)

通过 alice-comps-analysis 调用万得 Alice Agent,针对上市公司一键生成机构级可比公司分析报告(Excel 表格 + 文字分析)。

核心原则:基础设施交给脚本处理;Agent 只负责把用户的研究对象拼成一句自然语言 prompt 传入。默认就执行 Comps Analysis 技能,无需也不要再指定其它 Skill。 任务完成后,只将 CLI stdout 中的 agentResult.value 原文原样交给用户;CLI 静默下载的附件(reportFullFile=)仅告知完整路径,禁止加载文件内容展示给用户。

宿主 Agent:执行任何 shell 命令前必须先读同目录 AGENT.md(一页执行契约,与 IDE 无关,随 skill 包发布)。

技能介绍

帮你快速构建机构级可比公司分析表(Comps Analysis),自动筛选同行业可比公司,提取关键运营指标、估值倍数(PE、PB、EV/EBITDA 等),并进行统计基准对比分析,输出专业的 Excel 分析表格。

适用于投资分析、并购估值、IPO 定价、行业研究、投资组合评估等场景。支持 A 股、港股、美股等全球主要市场的上市公司。

适用场景

场景 解决的问题
投资分析 评估标的相对同行的估值水平,辅助买卖判断
并购估值 以可比公司估值倍数为基准,支撑交易定价
IPO 定价 参考同行估值区间,为新股发行定价提供依据
行业研究 对比同行业公司的经营效率与估值水平
投资组合评估 检查组合中标的相对行业的估值偏离度
估值对标分析 量化标的与同行在 PE/PB/EV/EBITDA 等倍数上的差异

核心能力

  1. 可比公司筛选

    • 基于行业分类、主营业务、市值规模等维度自动筛选可比公司
    • 支持用户指定可比公司范围
    • 覆盖 A 股、港股、美股等全球主要市场
  2. 经营指标对比

    • 营业收入、净利润、毛利率、净利率等盈利指标
    • 营收增速、利润增速等成长性指标
    • ROE、ROA 等回报率指标
    • 资产负债率、有息负债率等杠杆指标
  3. 估值倍数对比

    • PE(市盈率)、PB(市净率)、PS(市销率)
    • EV/EBITDA、EV/Revenue
    • 前瞻 PE / 前瞻 PB(基于一致预期)
    • 估值倍数的历史分位数
  4. 统计基准分析

    • 均值、中位数、标准差
    • 25 分位 / 75 分位区间
    • 标的相对同行的溢价 / 折价分析
    • 异常值识别与剔除
  5. 行业细分对标

    • 按细分行业分组对比
    • 按市值区间分层对比
    • 按地区 / 市场分层对比

试试这样问

  • "帮我做一份宁德时代的可比公司分析"
  • "分析特斯拉相对于同行的估值水平"
  • "比较腾讯和同行业公司的盈利能力"
  • "做一个医药行业的估值对标分析"
  • "帮我做一份贵州茅台的可比公司分析,重点看 PE 和 EV/EBITDA"
  • "比亚迪的估值相对同行是高还是低?"

输出形式

  • Agent 向用户展示的内容:CLI stdout 中的 agentResult.value 正文(服务端流式返回)
  • 自动生成的结构化内容包含:核心结论、估值定位、经营指标对比、估值倍数对比、统计基准
  • 输出 Excel 表格 + 文字分析报告,Excel 含可比公司经营指标与估值倍数对比表
  • 部分场景下 CLI 会静默把完整报告附件下载到用户 Downloads/ 文件夹或 -d 指定目录(供用户本地查阅);Agent 向用户展示时只用 agentResult.value,不要粘贴附件正文
  • 数据受限时在对应模块明确标注

💡 使用提示

  • 直接说出目标公司名称即可,系统会自动筛选可比公司
  • 如需指定特定的可比公司范围或指标,请在提问时说明
  • 本技能仅支持上市公司分析

Agent 调用红线(必读)

Agent 调用本技能时,一律用下列单条命令(CLI 内部自旋直到拿到结果)。按操作系统选写法——禁止在 Windows PowerShell 里用 cd ... && node ...(&& 会 ParserError,命令根本不会执行)。

Windows PowerShell(Trae / Cursor 默认 shell,一律用方案 A):

= 本 SKILL.md 所在目录的绝对路径(例:C:Users<用户名>.agentsskills)。

# ✅ 方案 A(唯一推荐):aca.ps1 绝对路径,无需 cd,自带 UTF-8 代码页
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" --prompt "" --no-wait
# ❌ 禁止:PowerShell 5.x 不支持 &&,整条命令解析失败
cd "" && node scripts/cli.mjs --prompt "..." --no-wait

# ❌ 禁止:裸 node 相对路径(易因 cwd 不对而失败;且无 UTF-8 包装)
Set-Location ""; node scripts/cli.mjs --prompt "..." --no-wait

macOS / Linux(bash / zsh):

cd /path/to/alice-comps-analysis && node scripts/cli.mjs --prompt "" --no-wait

判定与红线(CLI 程序层已强制,但 Agent 仍须能识别这些信号、不被 stdout 文案误导):

信号 含义 / Agent 必须怎么做
stdout 含 ALICE_COMPS_ANALYSIS_DONE taskId=... promptHash=... reportFile=... reportFullFile=... attachmentFile=... 唯一真正完成信号;必须先核对 promptHash= 与本次 --prompt 一致,再以 stdout 中的 agentResult.value 原文交付用户(stdout 被截断时读 reportFile= 兜底);若有 reportFullFile= 必须把绝对路径转告用户;若有 attachmentFile= 也必须把绝对路径转告用户
stdout 含 ALICE_SESSION_LOG=(Windows 管道场景) live 中文可能乱码;只读 stdout 打印的该 path(含完整 promptHash);禁止 view_folder logs/;读前核对 ALICE_SESSION_LOG_BOUNDARY promptHash= 与 PROMPT_HASH= 一致
stdout 含 ALICE_POLL_HEARTBEAT status=working 轮询中心跳
同一 taskId 多进程同时 completed CLI 对附件 URL 跨进程加锁 + tasks.json 去重;只下载 1 份,后续进程复用 reportFullFile=;禁止因此读 download/ 附件内容展示给用户
退出码 0 但没有 DONE 行 视为未完成;不要凭印象编造报告(strict 模式默认会改成 6)
退出码 4 / 6 进程未输出 DONE(触顶 / 沙箱被杀);用相同 prompt 再发一次 --no-wait 续接,禁止连发多条、禁止 --new
退出码 11(check-conflict 子命令命中冲突) 主调用前预检发现已有同/相似 prompt 的 running 任务;必须把 stdout 列出的任务列给用户,由用户在续接 / --new / 取消 三选一。对用户说:「已经有一条相同或相似的分析正在执行中,你想怎么处理?」
退出码 12(check-conflict 命中可重放 completed) 24h 内已有相似措辞的 completed 任务(另一 Agent 可能已跑完);必须把 REPLAY_CANDIDATE 列给用户,由用户在「查看已有结果 / 重新分析 / 取消」三选一。对用户说:「最近已经有一条相同或相似的分析结果,你想怎么处理?」禁止直接读 download/ 同名报告
退出码 77(status 误读风险) 本地无此 prompt 记录,但存在相似 completed;禁止扫 tasks.json / download/ 猜报告,须 check-conflict 或阻塞 --no-wait 等 DONE
退出码 76(主调用相似度命中) 10min 内已有相似 prompt 任务;按 stderr 引导续接,禁止换 prompt 重试
退出码 75(并发 / 额度满) 立即停止,告知用户「当前分析任务较多,请稍等 5-15 分钟后再试」;禁止换 prompt / --new 绕过
退出码 78(环境受限,无法保存任务状态) 当前环境无法保存任务状态(未开启完全访问权限);未向服务端发请求;告知用户「当前环境无法运行可比公司分析,请在工具中开启完全访问权限后重试」;禁止换 prompt / --new / 反复重试

五大红线(违反任一条都会导致重复消耗积分 / 编造结果 / 向用户交付错误数据):

  1. 阻塞等待 CLI 进程结束——禁止 check_command_status / Start-Sleep 替代。
  2. 不要换 prompt 重试——"分析X" 与 "分析X,关注Y" 会被识别为相似任务直接 exit=76。
  3. 没有 DONE 行 = 未完成——不要把 STATUS=COMPLETED 文案、tasks.json 中 running 记录或 download/ 目录 mtime 当成"完成"。
  4. 禁止手动翻目录猜报告——不要用 view_folder / view_files 扫 download/、results/ 或 logs/;若 CLI 未完成,stdout 会出现 ALICE_ARTIFACT_GUARD / ALICE_POLL_HEARTBEAT / ALICE_MISLEAD_RISK / ORPHAN_DOWNLOAD_CANDIDATE 提示,这些只是警告,不是可交付的报告路径。
  5. 交付 agentResult.value + 告知报告路径——将 CLI stdout 中的 agentResult.value 原文交给用户;禁止自行总结、摘录、重写表格或「用自己的话」复述。若 stdout 被沙箱截断,读取 DONE 行 reportFile= 落盘正文(跳过 HTML 注释头)。DONE 含 reportFullFile= 时必须告知完整路径(行内代码格式,如 `C:UsersshiyongDownloads宁德时代可比公司分析报告.md`),让用户知道文件保存在哪;DONE 含 attachmentFile= 时也必须告知完整路径(如 `C:UsersshiyongDownloads宁德时代可比公司分析报告.xlsx`)。禁止加载 reportFullFile= / attachmentFile= 文件内容展示给用户——agentResult.value 已是面向用户的核心分析摘要,完整报告和数据附件供用户本地查阅,不需要 Agent 读取并展示。

完整步骤、异常处理、典型现场复盘见下方 Agent 调用流程 与 常见问题。

环境要求

1. Node.js 18+

CLI 基于 Node.js(18+ 自带 fetch)。node -v 检查,未达标到 nodejs.org 下载。

2. 获取并配置 WIND_API_KEY

获取:浏览器打开 万得 Alice → 设置 → 账户,在「API Key」一栏点「生成」/「复制」(失效或泄漏点「重置」会让旧 Key 立即作废)。

写入(推荐用 CLI 子命令):

# Windows(方案 A)
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" apikey-set 
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" apikey-get
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" apikey-clear
# macOS / Linux
node scripts/cli.mjs apikey-set     # 写入(KEY 裸值,不加引号)
node scripts/cli.mjs apikey-get          # 查看是否已配置 + 脱敏末四位
node scripts/cli.mjs apikey-clear        # 清除

CLI 把 Key 写到 ~/.wind-alice/config.env(Windows %USERPROFILE%.wind-aliceconfig.env),dotenv 格式单行 WIND_API_KEY=...——这是唯一受支持的位置。历史无后缀的 ~/.wind-alice/config 仍可读取,apikey-set 会自动迁移。

手动写入(无 Node 运维场景):

# macOS / Linux
mkdir -p ~/.wind-alice && printf 'WIND_API_KEY=...n' > ~/.wind-alice/config.env && chmod 600 ~/.wind-alice/config.env
# Windows PowerShell
New-Item -ItemType Directory -Force "$env:USERPROFILE.wind-alice" | Out-Null
"WIND_API_KEY=..." | Set-Content -Encoding ascii "$env:USERPROFILE.wind-aliceconfig.env"

安全:CLI 不读环境变量,也不读 skill 目录内的 config.json——避免 Key 残留在 shell 历史 / CI 日志 / 提交记录。apikey-set / apikey-get stdout 仅回显脱敏 Key;macOS/Linux 会自动把文件权限收到 600。

CLI 调用说明

Windows Agent 一律用方案 A:aca.ps1 写绝对路径,无需 cd。macOS / Linux 在 SKILL.md 所在目录下用 node scripts/cli.mjs(可用 cd ... &&)。

Windows PowerShell 语法(Agent 必读)

Trae / Cursor 在 Windows 上默认使用 PowerShell 5.x,不支持 &&。Agent 只能用方案 A:

# ✅ 方案 A(唯一写法)
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" --prompt "帮我做一份金三江的可比公司分析报告" --no-wait
# ❌ 禁止
cd "" && node scripts/cli.mjs --prompt "..."
Set-Location ""; node scripts/cli.mjs --prompt "..."

其他注意:

  • 替换为本技能目录绝对路径;路径含空格时必须加双引号。
  • 禁止在命令末尾拼接 undefined 等无效 token(部分 Agent 工具 bug)。
  • bash 的 && 仅适用于 macOS / Linux,不要在 Windows PowerShell 里照搬。

中文乱码(Windows 必读)

根因:Node 输出 UTF-8 字节,Trae / PowerShell 5.x 管道捕获时默认按 GBK 解码 → live 输出变成 鏈繘绋嬪皢闃诲...,不是 CLI 坏了。

三层防护(由 CLI 自动提供):

  1. scripts/aca.ps1:调用前切 UTF-8 代码页(Windows Agent 优先用它代替裸 node)。

  2. ALICE_SESSION_LOG=:非 TTY 管道场景下,CLI 会把全部输出 tee 到 ~/.wind-alice/logs/.session.log(完整 64 位 promptHash,UTF-8 BOM)。只能读 stdout 打印的那条路径,禁止 view_folder logs/ 扫描:

    # ✅ 从本次 CLI stdout 复制 ALICE_SESSION_LOG= 的完整路径
    Get-Content -Path "$env:USERPROFILE.wind-alicelogs.session.log" -Encoding UTF8 -Tail 200 -Wait
    
    # ❌ 禁止:按 mtime 挑「最新」或只认 12 位前缀——不同 prompt(同公司)会落在不同文件
    
  3. 落盘 .md(results/、Downloads/、--detach 日志)均带 UTF-8 BOM,Get-Content 即使不写 -Encoding UTF8 通常也能正确显示。

禁止:因 live 乱码就改 prompt 重试、连发多条 CLI、或手工 Start-Sleep 轮询 tasks.json。

查看 --detach 日志(避免中文乱码)

~/.wind-alice/logs/.log 由 CLI 以 UTF-8 写入。PowerShell 5.x 的 Get-Content 默认按 GBK 解码,会把 UTF-8 中文显示成 鏈繘绋嬪皢闃诲... 这类乱码——不是日志坏了,是读法错了。

# ✅ 正确:显式指定 UTF-8
Get-Content -Path "$env:USERPROFILE.wind-alicelogs969e4c647aae.log" -Encoding UTF8 -Tail 50 -Wait

# ❌ 错误:省略 -Encoding UTF8,中文 Windows 上几乎必乱码
Get-Content -Path "...969e4c647aae.log" -Tail 50 -Wait

自新版 CLI 起,--detach 创建的日志文件会写入 UTF-8 BOM,部分环境下即使不写 -Encoding UTF8 也能正常显示;仍建议 Agent 始终带 -Encoding UTF8。

命令行调用

# Windows(方案 A)
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" --prompt "" --no-wait [-d ""] [--new]
# macOS / Linux
node scripts/cli.mjs --prompt "" --no-wait [-d ""] [--new]

参数

参数 说明
--prompt, -p 用户提问(研究对象 + 关注角度,自然语言)。必填;CLI 自动加 使用「可比公司分析」技能: 前缀,Agent 不要再加
--no-wait Agent 默认必带——CLI 内部自旋 tasks/get 直到终态。默认 60s 一次探针、每轮 30min、全程 60min;到轮上限 CLI 自动续轮;Agent 禁止外层 Start-Sleep 或连发多条
-d, --download-dir 报告附件落地目录;不传则用户 Downloads/ 文件夹(Windows %USERPROFILE%Downloads)。不存在自动创建;同名冲突自动加 (1) 后缀,绝不覆盖
--new 用户明确要求并行新建时清除本地记录后新建;须先 check-conflict 询问用户
--continue-session 显式请求延续上一次多轮会话上下文(opt-in)。默认每次 CLI 调用视为全新会话,contextId 每次新生成,避免跨 Agent / 跨话题的 context 污染。宿主 Agent 判定为同一会话追问时(省略式追问 / 明确承接前文 / 代词指代等)应自动加此参数,不再要求用户显式说「接着刚才那个话题继续」。若上次调用在 30min idle window 内,CLI 会复用上次落盘的 contextId;否则退化为新会话。与 --new 正交:--new 决定是否新建 taskId、--continue-session 决定是否复用 contextId
--new-session 显式强制新建会话上下文(与默认行为一致,保留兼容旧脚本)。与 --continue-session 同时给时以 --new-session 为准
--session-scope 宿主 Agent 会话隔离标识(推荐始终传入)。同一 OS 用户下 Cursor / Trae 等宿主 Agent 默认共享 ~/.wind-alice/current-session.json;不隔离会出现"A Agent 的续接读到 B Agent 的 contextId"这类跨宿主污染。传入 后按 current-session..json 隔离到宿主自己的文件。也可用环境变量 WIND_ALICE_SESSION_SCOPE 统一设置(命令行 --session-scope 优先)。非法字符(空格 / 冒号 / 路径分隔符 / 中文等)自动替换成 _,长度上限 64
--once 配合 --no-wait,单次探针;仅脚本调试,Agent 禁止外层循环
--no-strict 关闭 strict 模式(默认开启:未输出 DONE 行时 exit=0 改成 6);Agent 禁止传
--watch-interval / --watch-timeout / --watch-absolute-max 自旋节奏与上限调优(秒),通常默认即可
--help, -h 查看帮助

已废弃:--watch / -w(--no-wait 默认即内部自旋)。

调用示例

# Windows(方案 A)
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" -p "帮我做一份宁德时代的可比公司分析" --no-wait
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" -p "比较腾讯和同行业公司的盈利能力" --no-wait
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" -p "做一个医药行业的估值对标分析" --no-wait -d "D:reportscredit"
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" -p "重新分析宁德时代" --no-wait --new   # 仅用户说"重新跑"才加
# macOS / Linux
node scripts/cli.mjs -p "帮我做一份宁德时代的可比公司分析" --no-wait
node scripts/cli.mjs -p "比较腾讯和同行业公司的盈利能力" --no-wait
node scripts/cli.mjs -p "做一个医药行业的估值对标分析" --no-wait -d "/reports/credit"
node scripts/cli.mjs -p "重新分析宁德时代" --no-wait --new

附件用 WIND_API_KEY 自动鉴权下载到 Downloads/ 或 -d 目录(CLI 在 DONE 行给出 reportFullFile= 路径仅供落盘核对);Agent 交付用户时只用 agentResult.value,不要展示下载附件内容。

子命令

只读 / 配置类,不消耗服务端额度:

子命令 用途
apikey-set / apikey-get / apikey-clear 写入 / 查看(脱敏)/ 清除 ~/.wind-alice/config.env 中的 API Key
status --prompt 查询本地 tasks.json 中该 prompt 最近一条任务的落盘路径
check-conflict --prompt 主调用前的并发预检:检测是否有同/相似 prompt 的 running 任务。无冲突 → exit=0;命中 → exit=11,stdout 列出 EXISTING_TASK ...,Agent 必须把详情列给用户、由用户三选一(attach / --new / 取消)。详见调用流程第 5 步

Agent 调用流程

上方「调用红线」已给出退出码识别与禁止动作;本节是分步操作流程。唯一推荐命令永远是 --no-wait,CLI 内部自旋直到完成。

1. 识别意图

用户提问命中以下任一场景即可调用:可比公司分析 / 估值对比 / 同行经营指标对比 / 估值对标 / PE/PB/EV/EBITDA 对比。

2. 构造 prompt

把研究对象(公司名 / 简称 / 代码)和关注维度拼成一句自然语言。不要加 使用「...」技能: 前缀,CLI 内部已自动注入。

3. 解析下载目录意图

扫描用户对话中是否说过"下载到 X / 保存到 X / 放到 X 目录"。

  • 命中 → 用 -d "" 传入(多次指定取最近一次,含空格的路径必须加双引号)。
  • 未命中 → 不要传该参数;CLI 落到用户 Downloads/ 文件夹。

4. 告知用户耗时

Alice 可比公司分析通常 2-15 分钟。调用前必须用一句话告诉用户这个耗时,并禁止中途取消或重复发起。

推荐话术:「好的,我来帮你分析。可比公司分析通常需要 2–15 分钟,请稍等。」

5. 冲突预检(必做,避免与另一个 Agent 撞车)

主调用前先跑一条快速预检(纯本地查询,不发请求、不消耗额度)。

对用户说:「先确认一下没有重复任务……」

# Windows(方案 A)
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" check-conflict --prompt ""
# macOS / Linux
node scripts/cli.mjs check-conflict --prompt ""
  • 退出码 0:无 running 冲突、无 24h 内可重放的 completed(含同 prompt 本地 completed),主调用 --no-wait 将向服务端新建分析。

  • 退出码 11:检测到已有 running 任务(ALICE_CONFLICT_CHECK kind=exact|similar),必须停下来询问用户。stdout 会逐行列出 EXISTING_TASK matchKind=... taskId=... elapsed=... promptPreview=...——把这些信息原样告诉用户,让用户三选一。对用户说:「已经有一条相同或相似的分析正在执行中,你想怎么处理?」

    • (A) 续接已有任务(推荐,最快):用户原 prompt + --no-wait(CLI 会自动续接 running 任务)。
    • (B) 另外新建一条分析:加 --new --no-wait(须先经用户明确确认)。
    • (C) 取消本次提问。

    禁止 Agent 自作主张选 attach 或 --new;必须让用户裁决。

  • 退出码 12:无 running 冲突,但 24h 内已有相似 completed 或同 prompt 本地 completed(kind=replay_available + REPLAY_CANDIDATE)。未经确认直接 --no-wait 会 重放本地结果(ALICE_NO_SERVER_CALL=1,不发请求)。必须停下来询问用户。对用户说:「最近已经有一条相同或相似的分析结果,你想怎么处理?」

    • (A) 查看已有结果(推荐):用 stdout 里 REPLAY_CANDIDATE 的 原 promptPreview 执行 --no-wait(CLI 会 replay_completed)。
    • (B) 重新做一次分析:当前 prompt + --new --no-wait(必须 --new)。
    • (C) 取消。

    禁止在 exit=12 时直接 view_files 打开 REPLAY_CANDIDATE_REPORT path=——该文件绑定的是旧 promptHash,不是用户本次措辞的结果。

  • 退出码 2:参数错误(通常是 prompt 缺失),按命令行错误处理。

这一步是处理"用户在多个 Agent 同时问相同问题"的关键。即便 Agent 跳过预检直接跑第 6 步,主路径在相似 prompt 上仍会兜底 exit=76、相同 prompt 上会自动 attach;但只有走预检 Agent 才能在动作发生之前让用户介入。

6. 执行命令并阻塞等待

对用户说:「已提交分析,正在等待结果,请稍候……」(禁止说「CLI 自旋」「进程」「shell」等技术细节)。

# Windows(方案 A)
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" --prompt "" --no-wait [-d ""]
# macOS / Linux
node scripts/cli.mjs --prompt "" --no-wait [-d ""]
  • 必须前台运行,阻塞等待该命令返回,读完整 stdout/stderr 与退出码。
  • 禁止 fire-and-forget 写法:Start-Process(含 -NoNewWindow)、| Out-Null、nohup、后台 job 等。
  • 禁止用 check_command_status / Start-Sleep / 轮询下载目录 / 轮询 tasks.json 替代等待 CLI 进程结束。
  • 禁止在命令末尾拼接 undefined 或其它无效参数;只传 SKILL 列出的参数。
  • 终端必须配置 ≥1200 秒(20min) 超时;若做不到(典型于 Trae run_command 数十秒就 kill),跳到下方第 8 步「沙箱被 kill 后的续接」即可——--no-wait 模式天然为此设计。

7. 判定完成的唯一标准

stdout 含 ALICE_COMPS_ANALYSIS_DONE taskId=... promptHash=... reportFile=... reportFullFile=... attachmentFile=... 行 + 退出码 0。同时满足才算完成;promptHash= 必须与本次 --prompt 对应(CLI 启动时会打印 PROMPT_HASH= 供核对)。

以下情况一律视为未完成(即使 exit=0):

  • 只有 ALICE_COMPS_ANALYSIS_STATUS=COMPLETED / [任务已受理] / state=submitted,没有 DONE 行;
  • 退出码 6(strict 兜底,进程被沙箱杀)或 76(重复提交防护)。

8. 沙箱被 kill 后的续接(Trae / Codex 等受限终端)

为何像「卡住」:可比公司分析要 2–15 分钟,而 Trae/Cursor run_command 常只有 60–120s 超时。Agent 若用 check_command_status 轮询而非阻塞等待,终端会先杀 CLI(exit 4/6),服务端任务却仍在跑——results/ 尚未生成,Agent 误判为卡住。此时对用户说:「分析仍在进行中,我继续等待……」,不要向用户提及超时、被杀等技术细节。

首选:终端超时 ≥1200s,只发一条 --no-wait 阻塞等到 DONE。

无法拉长超时时,用 --detach 再续接:

powershell ... aca.ps1 --prompt "" --detach
powershell ... aca.ps1 --prompt "<和首次完全一致的 prompt>" --no-wait

退出码 4 或 6(未见到 DONE)——任务在服务端可能仍在跑。处理方式:

# Windows(方案 A)
powershell -NoProfile -ExecutionPolicy Bypass -File "scriptsaca.ps1" --prompt "<和首次完全一致的 prompt>" --no-wait
# macOS / Linux
node scripts/cli.mjs --prompt "<和首次完全一致的 prompt>" --no-wait
  • 默认每 60s 探针一次;每轮最长 30min,CLI 自动续轮;全程最长 60min。
  • 退出码 4 触顶时:再发一次相同命令续接;禁止连发多条、禁止 --new。
  • 探针输出 state=submitted 是正常排队,不要因为连续几次 submitted 就 --new 或换 prompt。
  • 禁止 check_command_status、Test-Path results/、Get-Content 扫 logs 猜进度——CLI 未输出 DONE 前这些都不能当交付依据。
  • replay_completed 时 CLI 会把 agentResult.value 重新打印到 stdout;Agent 应读 stdout 原样交付,禁止 view_files 打开 results/ 后自行概括。

9. 交付给用户:只要 agentResult.value(必看)

CLI 完成任务后,Agent 只向用户交付服务端 agentResult.value,不要展示下载附件。

来源 路径 / 信号 内容 Agent 该怎么用
首选 CLI stdout 中的 agentResult.value: 行 服务端流式返回的可比公司分析正文 原样交给用户(去掉行首 agentResult.value: 前缀即可);CLI 已自动去掉 ### …完整报告 标题及含 /project/ 的不可点击附件行;其余正文禁止改写
兜底 reportFile= → ~/.wind-alice/results/.md agentResult.value 落盘副本(沙箱 stdout 被截断时用) DONE 后若 stdout 读不全,读此文件正文部分(跳过 注释头)原样输出
必须告知路径 reportFullFile= / REPORT_FULL_FILE= → Downloads/*.md CLI 静默下载的完整 Markdown 附件 必须告知完整路径(行内代码格式);禁止加载文件内容展示给用户(agentResult.value 已是面向用户的核心分析摘要,完整报告附件供用户本地查阅)
必须告知路径 attachmentFile= → Downloads/*.xlsx 等 CLI 静默下载的数据附件(Excel 等) 必须告知完整路径(行内代码格式);禁止加载文件内容展示给用户
ALICE_ARTIFACT_GUARD 等 stdout 警告 防误读提示 不是可交付正文;阻塞等到 DONE

正确流程(成功场景):

  1. stdout 出现 ALICE_COMPS_ANALYSIS_DONE 且 promptHash= 与本次 PROMPT_HASH= 一致;
  2. 从 CLI stdout 提取全部 agentResult.value: 正文,原样呈现给用户(CLI 已自动去掉 ### …完整报告 与 /project/ 附件行);其余正文禁止改写;
  3. 若 stdout 被沙箱截断、读不全,再读 DONE 行 reportFile= 兜底文件的正文部分;
  4. DONE 含 reportFullFile= 和/或 attachmentFile= 时,必须告知路径:
    • 告知完整路径:把 reportFullFile= 的完整绝对路径告知用户,使用行内代码格式(如 `C:UsersshiyongDownloads宁德时代可比公司分析报告.md`),让用户知道文件保存在哪;
    • 告知附件路径:把 attachmentFile= 的完整绝对路径同样告知用户(如 `C:UsersshiyongDownloads宁德时代可比公司分析报告.xlsx`),让用户知道 Excel 文件保存在哪;
    • 禁止加载文件内容展示给用户:agentResult.value 已是面向用户的核心分析摘要,完整报告附件(reportFullFile=)和数据附件(attachmentFile=)供用户本地查阅,Agent 不应读取并展示其内容。
    • 禁止只说「已下载」「可本地查阅」等空话而不告知具体路径;
    • 注意:agentResult.value 正文仍按原规则从 stdout 提取(或截断时读 reportFile= 兜底),不要从 reportFullFile= / attachmentFile= 附件中读取来替代。
  5. 禁止把 results/ 称为「完整报告」——results/ 只是 agentResult.value 摘要副本,不是服务端 /project/*.md 附件。

转告路径:禁止空话 vs 必须写清

对用户说法 对错
「完整报告文件已下载。」 ❌ 未说明路径
「Alice 还生成了详细的可下载 Markdown 报告供你本地查阅。」 ❌ 未说明路径
「报告已保存到 Downloads 目录。」 ❌ 未给出具体文件名
「完整报告已保存到:C:Users...Downloads永辉超市可比公司分析报告.md」 ✅ 路径可见,用户可本地查阅
「完整报告已保存到:C:Users...报告.md」+ Agent 用 Read 加载文件内容展示给用户 ❌ 禁止加载 reportFullFile= 内容展示,agentResult.value 已是核心摘要
「完整报告已保存到:报告.md」 ❌ vscode:// 链接在大多数 Agent 聊天中无法点击打开
「报告已保存到 Downloads 目录。」 ❌ 未给出具体文件名

路径易混(必记):

用户可能听到的说法 实际路径 对错
「完整报告在 results/」 ~/.wind-alice/results/.md ❌ 错误——这是摘要副本,不是完整附件
「完整报告在 Downloads/」 %USERPROFILE%Downloads*.md 或 -d 指定目录 ✅ 正确(以 DONE 行 reportFullFile= 为准)
「完整报告已由后台落盘,位于 results/」 同上 ❌ 严重误导(永辉超市现场 Agent 原话)

典型错误(永辉超市复盘):(1) Agent 连发多条 CLI 未等到 DONE,读 results/.md 后自行概括成表格——数字会被改错;(2) 收尾告诉用户「完整报告在 %USERPROFILE%.wind-aliceresults」——**路径说反了**,完整附件实际在 %USERPROFILE%Downloads(DONE 行 reportFullFile=)。正确做法:阻塞等到 DONE → 输出 agentResult.value 原文 → 禁止概括 → 若附言文件路径,只引用 reportFullFile=,不把 results/ 当完整报告。禁止加载 reportFullFile= 文件内容展示给用户。

10. 任务调度 / 续接 / 强制新建

  • 默认(--no-wait):同 prompt 有 running → 自动续接;本地 completed → 重放落盘结果(replay_completed,不消耗新额度);无记录 → 新建。
  • 默认(阻塞 SSE,无 --no-wait):同 prompt 有 running → 续接;本地 completed → 清除后提交新分析;无记录 → 新建。
  • --new:用户明确要求并行新建;须先 check-conflict 询问用户。
  • prompt 必须和首次提交时完全一致(trim + 折叠空白后哈希相同),否则可能命中退出码 76(相似 prompt 检测)。

防重复扣费:沙箱 kill 后 Agent 只应再发一条 --no-wait 续接。若本地已是 completed,CLI 会直接输出 DONE(重放),不会再调 message/stream。连发多条时,旧版会在第二条误触发新任务——现已修复。

11. 退出码 75(并发 / 额度上限,立即停止)

stdout 含 [严重] 服务端拒绝任务 / 达到最大同步执行任务数目,或退出码 = 75 时:

  • 立即停止,告知用户「当前分析任务较多,请稍等 5-15 分钟后再试」;
  • 禁止换 prompt、--new、改 -d 这些"绕过"动作——它们仍会占用并发槽;
  • 把 stdout 里 [严重] 横幅的原文转述给用户。

任务幂等性与停止行为

CLI 跨进程在 ~/.wind-alice/tasks.json 按 taskId 记录任务,~/.wind-alice/results/.md 存每条任务的 agentResult.value 落盘副本。基于 prompt 的 promptHash(trim + 折叠空白后 SHA-256)做幂等。

  • 默认调度(--no-wait):同 prompt running → 续接;completed → 重放落盘(不新建);无记录 → 新建。
  • 默认调度(阻塞 SSE):同 prompt running → 续接;completed → 新建;无记录 → 新建。
  • --new:用户明确要求并行新建;须先 check-conflict 询问用户。
  • 状态同步:收到 agentResult → completed;服务端提示 / jsonrpc 错误 / 流静默结束 → failed;Ctrl+C → 保持 running(服务端仍在跑,下次自动续接)。
  • attach 失败自动回退:attach 模式下 60s 无 SSE / jsonrpc 错误 / 4xx → 自动删旧记录新建任务(单进程内最多 1 次)。
  • 自动清理:running > 6h 强清;completed > 7d 清;failed > 3d 清;总条数 > 200 裁到 100。

配置位置与环境变量

路径 / 变量 内容 必备
~/.wind-alice/config.env(Win: %USERPROFILE%.wind-aliceconfig.env) dotenv:WIND_API_KEY=,唯一受支持位置(不读环境变量、不读 skill 目录 config.json) ✅
~/.wind-alice/tasks.json 本地任务注册表(CLI 自动维护) 自动
~/.wind-alice/results/.md 每条任务的 agentResult.value 落盘副本(stdout 截断时 Agent 可读) 自动
WIND_ALICE_API_URL(环境变量) Alice Agent 接口地址,默认 https://alice.wind.com.cn/Weaver/ChatAgent,一般无需修改 否

兼容:历史无后缀的 ~/.wind-alice/config 仍可读取,apikey-set 会自动迁移到 config.env。

CLI 执行失败处理(核心红线)

CLI 失败时,立即停止;绝不用 WebSearch 或其它信息源拿"近似的可比公司分析"敷衍用户。

  • KEY_MISSING(仅当 exit=2 且 stderr 含 JSON "code":"KEY_MISSING" 时才成立):按「环境要求」检查 Key 后重试。禁止在退出码不是 2、或 stderr 没有 KEY_MISSING 字段时,凭"进程被杀""输出不完整""apikey-get 返回 missing"等迹象猜测 Key 缺失——这些与 Key 无关(典型反例:exit=6 是 strict 兜底,Key 配得好好的)。若需核实 Key 状态,用 apikey-get 并读其 JSON 的 status 字段:configured = 正常,missing = 确实缺失;禁止把 configured 读成 missing 或凭空下结论。
  • exit=75 / [严重] 服务端拒绝任务 / 达到最大同步执行任务数目:临时拒绝,等 5-15 分钟后用相同 prompt 重试;禁止换 prompt / --new,把 [严重] 原文转述给用户。
  • 服务端用户提示(体验账户 / 数据受限):原样转述,不要替换为外部信息源。
  • macOS Gatekeeper / Windows SmartScreen / 企业安全软件拦截:按系统提示放行后重试。
  • 网络 / 服务端 5xx:CLI 内置最多 10 次重连,耐心等。
  • 仍失败:向用户展示完整错误,让用户处理;绝不回退到其它信息源伪造"看似合理"的可比公司分析。

常见问题

Q1:提示「WIND_API_KEY 未配置」 / Key 失效怎么换?

A:从 万得 Alice → 设置 → 账户 复制(或点「重置」换新)Key,然后写入:Windows 用 powershell ... -File "scriptsaca.ps1" apikey-set ;macOS/Linux 用 node scripts/cli.mjs apikey-set 。apikey-get 验证脱敏末四位;apikey-clear 清除。CLI 不读环境变量与 skill 目录内 config.json——只读 ~/.wind-alice/config.env。

Q2:能否同时分析多个公司?报告附件在哪?怎么改下载目录?

A:(a) 可以——把多家主体写进同一个 prompt(建议 ≤ 5 家)。(b) 完整报告附件会静默落到 ~/Downloads/(Windows %USERPROFILE%Downloads),供用户本地查阅;Agent 不要把附件正文展示给用户。(c) 用户对话中说"下载到 X" → Agent 加 -d "X"。向用户交付时只用 stdout 的 agentResult.value 原文(截断时读 reportFile= 兜底),禁止读 Downloads/ 附件展示。

Q3:PowerShell 报 && 不是有效语句分隔符 / 中文乱码?

A:(a) PowerShell 5.x 不支持 &&——Windows 只能用方案 A(aca.ps1 绝对路径,见「调用红线」)。(b) 若 live 仍乱码,读 CLI 输出的 ALICE_SESSION_LOG= 路径(Get-Content -Encoding UTF8),或直接用 Cursor / VS Code 打开

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

0

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

0

12

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

2026.10.22

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134万人学习