包含关键字 typecho 的文章

原型设计工具是产品经理快速验证创意、推进团队协同的关键帮手。随着各类原型工具不断迭代,在操作方式、交互呈现力和协作便捷度上持续精进。本文针对7款热门工具做了横向对比与实测分析,搭配实用选型指南,帮你快速找到契合自身需求的工具。
一、7款原型设计工具一览
本次测评囊括UXbot、Axure RP、Figma、Adobe XD、Proto.io、Framer、Sketch十款主流工具。下文会结合每款工具的核心优势与实际使用感受逐一剖析,同时从核心功能、注意事项等方面给出参考,助力你全面摸清各工具的长短板。
二、原型设计工具实测点评
1.UXbot
image.png
核心亮点:仅需输入简短需求,即可智能生成可视化PRD、高保真原型、精美的界面设计、Web前端代码,原型设计符合当下最新产品逻辑,另外支持全流程自由编辑;平台稳定性高,适合中文团队操作,学习成本低,纯小白也能上手操作。
实测体验:能轻松完善产品逻辑、可以一次性生成完整可交互的项目,全程自由度超高,可以根据自己的想法修改。支持Sketch、HTML和Vue代码的导出,方便项目的二次开发和迭代,尤其适合中小企业和个人,快速跑通项目。
2.Axure RP
image.png
核心亮点:高级交互能力堪称行业顶尖,第三方资源储备丰富,兼容性强,支持本地离线运行,稳定性极佳,网上配套的教学资源和教程十分丰富,学习门槛相对可控。
实测体验:可轻松实现复杂的交互逻辑,高保真原型搭建的灵活度很高,支持动态数据与变量设置,尤其适合金融类大型系统的原型设计工作。
注意事项:整体学习成本偏高,新手需要一定时间才能熟练掌握,云端协作体验不够理想,目前暂未搭载AI拓展功能。
3.Figma
image.png
核心亮点:专为大型团队多人实时协作设计,插件生态成熟且丰富多样,支持AI辅助生成原型和UI界面,社区资源庞大,功能拓展性极强。
实测体验:无需本地安装客户端,在线编辑流畅不卡顿,团队协作功能完备,各类插件可满足不同场景下的使用需求,功能拓展空间充足。
注意事项:国内访问存在一定限制,全英文界面对英文基础薄弱的用户不够友好,免费版功能有诸多限制,数据安全方面暂无完善的解决方案。
4.Adobe XD
image.png
核心亮点:可与Adobe系列其他产品无缝衔接,实现原型设计全流程一体化操作,交互动画支持可视化预览,插件资源十分丰富。
实测体验:页面布局操作流畅顺手,支持文件快速导出,动画效果预览直观清晰,与PS、AI等工具联动时能显著提升工作效率。
注意事项:多人协作能力不如Figma,跨平台团队使用时,需格外注重版本管理,避免出现文件冲突。
5.Proto.io
image.png
核心亮点:专注于移动端交互动画设计,可快速制作出可演示的原型作品,操作门槛处于中等水平,易上手度尚可。
实测体验:动画组件拖拽操作便捷高效,原型的点击反馈贴近真实产品使用场景,支持一键分享给团队成员或客户预览查看。
注意事项:免费版功能受限较多,高级交互效果需订阅付费套餐才能使用,更适合中小型团队开展移动端项目。
6.Framer
image.png
核心亮点:动态交互与动画呈现能力表现卓越,网页原型制作效率突出,支持自定义组件开发,满足个性化设计需求。
实测体验:交互动画流畅自然,无卡顿感,可实现复杂的逻辑设计,自定义组件功能能很好地适配个性化需求,网页原型落地效果出色。
注意事项:对无设计基础的用户不够友好,上手难度稍高,更适合对交互动画有高阶要求的专业团队。
7.Sketch
image.png
核心亮点:矢量设计能力出众,插件生态体系完善,在Mac端运行流畅稳定,兼容性强,可与多款开发辅助工具搭配使用。
实测体验:Mac用户使用体验极佳,各类插件可覆盖不同设计场景需求,与Zeplin、Abstract等工具搭配使用时,能顺畅衔接开发环节。
注意事项:仅兼容macOS系统,Windows用户无法使用,跨平台协作存在局限,团队协作需借助其他辅助工具实现。
三、原型设计工具选择指南
结合易用性、组件丰富度、交互能力、团队协作、跨平台支持、输出能力、AI辅助七大核心维度,针对高频选型问题整理了以下问答,帮你快速做出决策。
Q1:新手产品经理选哪款?
A:优先考虑UXbot,上手快,功能覆盖可视化PRD和原型设计。
Q2:团队协作首选工具?
A:Figma,实时同步顺畅,支持多人在线编辑和评论。
Q3:需要高保真交互用什么?
A:Axure RP、Framer,可实现复杂逻辑和动画,其次是UXbot。

总结
以上就是2026年7大原型设计工具的全面测评。未来,这类工具将进一步升级为支撑全流程产品设计与团队协作的核心平台。产品经理在选型时,可结合团队规模、项目类型(简单/复杂、移动端/网页端)及AI辅助需求综合考量,精准匹配工具,既能提升设计效率,又能加快产品落地节奏。

作者:丹坤

痛点:AI 编程助手为何总是“半途而废”?

在使用 AI 编程工具时,开发者经常遭遇以下困境:

  • 过早退出: AI 在它认为“足够好”时就停止工作,而非真正完成任务
  • 单次提示脆弱: 复杂任务无法通过一次提示完成,需要反复人工干预
  • 重新提示成本高: 每次手动重新引导都在浪费开发者时间
  • 上下文断裂: 会话重启后,之前的所有进展和上下文全部丢失

这些问题的本质是:LLM 的自我评估机制不可靠——它会在主观认为“完成”时退出,而非达到客观可验证的标准。

解决思路:让 AI 持续工作直到真正完成

Claude Code 社区诞生了一种极简但有效的范式——Ralph Loop(也称 Ralph Wiggum Loop)

while :; do
  cat PROMPT.md | claude-code --continue
done

核心思想:同一个提示反复输入,让 AI 在文件系统和 Git 历史中看到自己之前的工作成果。这不是简单的“输出反馈为输入”,而是通过外部状态(代码、测试结果、提交记录)形成自我参照的迭代循环。其技术实现依赖于 Stop Hook 拦截机制。

Ralph Loop 让大语言模型持续迭代、自动运行直到任务完成,而不在典型“一次性提示 → 结束”循环中退出。这种范式已经被集成到主流 AI 编程工具和框架中,被一些技术博主和开发者称作“AI 持续工作模式”。

甚至 Ralph Loop 结合 Amp Code 被用来构建新编程语言(AFK):https://x.com/GeoffreyHuntley/status/1944377299425706060

TL;DR / 快速开始

Ralph Loop 让 AI 代理持续迭代直到任务完成。

核心三要素:

  • 明确任务 + 完成条件: 定义可验证的成功标准
  • Stop Hook 阻止提前退出: 未达标时强制继续
  • max-iterations 安全阀: 防止无限循环

最简示例(Claude Code):

image

# 安装插件
/plugin install ralph-wiggum@claude-plugins-official
# 运行循环
/ralph-loop "为当前项目添加单元测试  
Completion criteria: - Tests passing (coverage > 80%) - Output <promise>COMPLETE</promise>" \
  --completion-promise "COMPLETE" \
  --max-iterations 50

场景适用性:详见实践建议-场景适用性。

Ralph Loop 概述

什么是 Ralph Loop?

Ralph Loop 是一种自主迭代循环机制。你给出一个任务和完成条件后,代理开始执行该任务;当模型在某次迭代中尝试结束时,一个 Stop Hook 会拦截试图退出的动作,并重新注入原始任务提示,从而创建一个自我参照的反馈循环。在这个循环中,模型可以读取上一次迭代改动过的文件、测试结果和 git 历史,并据此逐步修正自己的输出直到达到完成条件或达到设定的迭代上限。

简言之:

  • 不是简单的一次性运行,而是持续迭代直到完成任务
  • 循环使用同一个 prompt,但外部状态(代码、测试输出、文件等)在每次迭代后发生改变;
  • 需要明确的完成条件(如输出特定关键字、测试通过等)和合理的最大迭代次数作为安全控制。

Ralph 起源

image

  • Ralph Wiggum 名称来自《辛普森一家》的角色,用于象征“反复迭代、不放弃”的精神,但实际实现是一个简单的循环控制机制,并非模型自身拥有特殊认知。
  • 核心机制不是模型自行创造循环,而是 Stop Hook(详见 Stop-hook 拦截机制)在模型尝试退出时拦截,并重新注入 prompt,从而在同一会话中形成“自我参照反馈”。
  • 迭代不是无条件持续,而是依赖于明确可验证的完成信号或最大迭代次数。否则循环可能永不结束。
  • 哲学根源: Ralph 循环可以追溯到软件工程中的“Bash 循环”思维,其核心逻辑是“不断向智能体提供任务,直到任务完成为止”。这种极致的简化体现了将失败视为数据、将持久性置于完美之上的设计哲学。

核心原理

与传统智能体循环的对比

为了深入理解 Ralph Loop 与常规智能体循环的区别,需要首先建立对“智能体”这一概念的通用语义框架。根据当代人工智能实验室的共识,智能体被定义为“在循环中运行工具以实现目标的 LLM 系统”。这种定义强调了三个关键属性:

  1. LLM 编排的推理能力:智能体能够根据观察结果进行推理和决策
  2. 工具集成的迭代能力:智能体可以调用外部工具并基于工具输出调整行为
  3. 最小化人工监督的自主性:智能体能够在有限指导下自主完成任务

在常规的智能体架构中,循环通常发生在单一会话的上下文窗口内,由 LLM 根据当前观察到的结果决定下一步行动。

ReAct(Reason + Act)模式

ReAct 遵循“观察(Observation)→ 推理(Reasoning)→ 行动(Acting)” 的节奏。这种模式的优势在于其动态适应性:当智能体遇到不可预见的工具输出时,它可以在当前的上下文序列中即时修正推理路径。

然而,这种“内部循环”受限于 LLM 的自我评估能力。如果 LLM 在某一步骤产生幻觉,认为任务已经完成并选择退出,系统就会在未达到真实目标的情况下停止运行。

Plan-and-Execute(计划并执行)模式

Plan-and-Execute 将任务分解为静态的子任务序列,由执行器依次完成。虽然这在处理长程任务时比 ReAct 更具结构性,但它对环境变化的适应度较低。如果第三步执行失败,整个计划往往会崩溃,或者需要复杂的重计划机制(Re-planning)。

Ralph 循环的“外部化”范式

Ralph 循环打破了上述依赖 LLM 自我评估的局限性。其实现机制采用停止 钩子(Stop Hook) 技术:当智能体试图退出当前会话(认为任务完成)时,系统会通过特定的退出代码(如退出码 2)截断退出信号。外部控制脚本会扫描输出结果,如果未发现预定义的“完成承诺”(Completion Promise),系统将重新加载原始提示词并开启新一轮迭代。

这种模式在本质上是强制性的,它不依赖智能体的主观判断,而是依赖外部验证。

对比总结

在开发者语境中,"agent loop" 通常指智能体内部的感知—决策—执行—反馈循环(即典型的感知-推理-行动机制)。而 Ralph Loop 更侧重于迭代执行同一任务直至成功,与典型智能体循环在目的和设计上有所不同:

image

比较结果表明:

  • 常规 Agent Loop 通常更通用: 用于决策型 agent,可以根据多种状态和输入动态调整下一步操作。ReAct 模式适合需要动态适应的场景,Plan-and-Execute 模式适合结构化任务分解。
  • Ralph Loop 更像是自动驱动的 refine-until-done 模式: 重点是让模型在固定任务上不断修正输出直到满足完成条件。它通过外部强制控制避免了 LLM 自我评估的局限性。

因此,它与一般意义上 agent 的循环机制并不矛盾,但定位更专注于可验证任务的持续迭代修正,而非全面的 agent lifecycle 管理。

Stop-hook 拦截机制

Ralph 循环的技术优雅之处在于它如何利用现有的开发工具链(如 Bash、Git、Linter、Test Runner)构建一个闭环反馈系统。在常规循环中,工具的输出仅作为下一步推理的参考;而在 Ralph 循环中,工具的输出成为了决定循环是否存续的“客观事实”。

Ralph 循环的工业实现依赖于对终端交互的深度拦截。通过 hooks/stop-hook.sh 脚本,开发者可以捕获智能体的退出意图。如果智能体没有输出用户指定的承诺标识(如 <promise>COMPLETE</promise>),停止钩子会阻止正常会话结束。

这种机制强迫 LLM 面对这样一个事实:只要没有达到客观的成功标准,它就无法“下班”。这种外部施加的压力通过重复输入相同的提示词(Prompt)来实现,智能体在每一轮迭代中都能看到上一轮留下的改动痕迹和 Git 提交记录。

状态持久化与记忆管理

解决上下文腐烂问题

常规智能体的一个核心痛点是“上下文腐烂(Context Rot)” ——随着对话轮次的增加,LLM 对早期指令的注意力和精确度会线性下降。Ralph 循环通过“刷新上下文”解决了这一问题:

  • 每一轮循环可以看作是一个全新的会话,智能体不再从臃肿的历史记录中读取状态
  • 智能体直接通过文件读取工具扫描当前的项目结构和日志文件
  • 这种模式将“状态管理”从 LLM 的内存(Token 序列)转移到了硬盘(文件系统)

由于 Git 历史记录是累积的,智能体可以通过 git log 查看自己之前的尝试路径,从而避免重复同样的错误。这种将环境视为“累积记忆”的做法,是 Ralph 循环能够支持持续数小时甚至数天开发的核心原因。

核心持久化组件

在典型的 Ralph 实现中,智能体会维护以下关键文件:

  1. progress.txt: 一个追加形式的日志文件,记录了每一轮迭代的尝试、遇到的坑以及已经确认的模式。后续迭代的智能体会首先读取该文件以快速同步进度。
  2. prd.json: 结构化的任务清单。智能体每完成一个子项,就会在该 JSON 文件中标记 passes: true。这确保了即使循环中断,新的智能体实例也能明确接下来的优先级。
  3. Git 提交记录: Ralph 循环被要求在每一步成功后进行提交。这不仅提供了版本回滚能力,更重要的是,它为下一轮迭代提供了明确的“变更差分”(Diff),让智能体能够客观地评估现状。
文件结构
scripts/ralph/
├── ralph.sh
├── prompt.md
├── prd.json
└── progress.txt
ralph.sh
#!/bin/bash
set -e
MAX_ITERATIONS=${1:-10}
SCRIPT_DIR="$(cd "$(dirname \
  "${BASH_SOURCE[0]}")" && pwd)"
echo "🚀 Starting Ralph"
for i in $(seq 1 $MAX_ITERATIONS); do
  echo "═══ Iteration $i ═══"
  OUTPUT=$(cat "$SCRIPT_DIR/prompt.md" \
    | amp --dangerously-allow-all 2>&1 \
    | tee /dev/stderr) || true
  if echo "$OUTPUT" | \
    grep -q "<promise>COMPLETE</promise>"
  then
    echo "✅ Done!"
    exit 0
  fi
  sleep 2
done
echo "⚠️ Max iterations reached"
exit 1
prompt.md

每次迭代的说明:

# Ralph Agent Instructions
## Your Task
1. Read `scripts/ralph/prd.json`
2. Read `scripts/ralph/progress.txt`
   (check Codebase Patterns first)
3. Check you're on the correct branch
4. Pick highest priority story 
   where `passes: false`
5. Implement that ONE story
6. Run typecheck and tests
7. Update AGENTS.md files with learnings
8. Commit: `feat: [ID] - [Title]`
9. Update prd.json: `passes: true`
10. Append learnings to progress.txt
## Progress Format
APPEND to progress.txt:
## [Date] - [Story ID]
- What was implemented
- Files changed
- **Learnings:**
  - Patterns discovered
  - Gotchas encountered
---
## Codebase Patterns
Add reusable patterns to the TOP 
of progress.txt:
## Codebase Patterns
- Migrations: Use IF NOT EXISTS
- React: useRef<Timeout | null>(null)
## Stop Condition
If ALL stories pass, reply:
<promise>COMPLETE</promise>
Otherwise end normally.
prd.json(任务状态)

任务清单:

{
  "branchName": "ralph/feature",
  "userStories": [
    {
      "id": "US-001",
      "title": "Add login form",
      "acceptanceCriteria": [
        "Email/password fields",
        "Validates email format",
        "typecheck passes"
      ],
      "priority": 1,
      "passes": false,
      "notes": ""
    }
  ]
}
progress.txt

任务进度日志:

# Ralph Progress Log
Started: 2024-01-15
## Codebase Patterns
- Migrations: IF NOT EXISTS
- Types: Export from actions.ts
## Key Files
- db/schema.ts
- app/auth/actions.ts
---
## 2024-01-15 - US-001
- What was implemented: Added login form with email/password fields
- Files changed: app/auth/login.tsx, app/auth/actions.ts
- **Learnings:**
  - Patterns discovered: Use IF NOT EXISTS for migrations
  - Gotchas encountered: Need to handle email validation on both client and server
---
运行 Ralph
./scripts/ralph/ralph.sh 25

运行最多 25 次迭代。Ralph 将:

  • 创建功能分支
  • 逐个完成任务
  • 每个任务完成后提交
  • 当所有任务通过时停止

上下文工程的对比分析

常规智能体通常采用总结(Summarization)或截断(Truncation)来管理上下文。研究表明,相比于复杂的 LLM 总结,简单的“观察掩码”(Observation Masking,即保留最新的 N 轮对话,其余用占位符代替)在效率和可靠性上往往更胜一筹。然而,即使是最好的掩码策略也无法处理跨越数十轮、数千行代码改动的任务。

Ralph 循环绕过了这一难题,它不试图“总结”过去,而是通过提示词引导智能体进行“自我重新加载”。每一轮迭代的提示词始终包含对核心目标的清晰描述,而具体的执行细节则留给智能体去实时探索环境。这种“即时上下文”加载方式,使得 Ralph 能够处理规模远超其单次窗口容量的工程项目。

框架和工具实现示例

以下是一些主流框架和工具对 Ralph Loop 模式的支持:

LangChain / DeepAgents

https://github.com/langchain-ai/deepagents/tree/master/examples/ralph_mode

image

DeepAgents 提供类似模式支持,需要程序化参数传递:

uv run deepagents --ralph "Build a Python programming course" --ralph-iterations 5

这里 --ralph-iterations 指定最大循环次数(详见实践建议-安全机制和资源控制)。

Kimi-cli

https://moonshotai.github.io/kimi-cli/zh/configuration/config...

loop_control 控制 Agent 执行循环的行为。

image

AI SDK (JavaScript)

https://github.com/vercel-labs/ralph-loop-agent

社区实现的 ralph-loop-agent 允许更精细的开发控制:

┌──────────────────────────────────────────────────────┐
│                   Ralph Loop (outer)                 │
│  ┌────────────────────────────────────────────────┐  │
│  │  AI SDK Tool Loop (inner)                      │  │
│  │  LLM ↔ tools ↔ LLM ↔ tools ... until done      │  │
│  └────────────────────────────────────────────────┘  │
│                         ↓                            │
│  verifyCompletion: "Is the TASK actually complete?"  │
│                         ↓                            │
│       No? → Inject feedback → Run another iteration  │
│       Yes? → Return final result                     │
└──────────────────────────────────────────────────────┘
import { RalphLoopAgent, iterationCountIs } from 'ralph-loop-agent';
const migrationAgent = new RalphLoopAgent({
  model: 'anthropic/claude-opus-4.5',
  instructions: `You are migrating a codebase from Jest to Vitest.
    Completion criteria:
    - All test files use vitest imports
    - vitest.config.ts exists
    - All tests pass when running 'pnpm test'`,
  tools: { readFile, writeFile, execute },
  stopWhen: iterationCountIs(50),
  verifyCompletion: async () => {
    const checks = await Promise.all([
      fileExists('vitest.config.ts'),
      !await fileExists('jest.config.js'),
      noFilesMatch('**/*.test.ts', /from ['"]@jest/),
      fileContains('package.json', '"vitest"'),
    ]);
    return { 
      complete: checks.every(Boolean),
      reason: checks.every(Boolean) ? 'Migration complete' : 'Structural checks failed'
    };
  },
  onIterationStart: ({ iteration }) => console.log(`Starting iteration ${iteration}`),
  onIterationEnd: ({ iteration, duration }) => console.log(`Iteration ${iteration} completed in ${duration}ms`),
});
const result = await migrationAgent.loop({
  prompt: 'Migrate all Jest tests to Vitest.',
});
console.log(result.text);
console.log(result.iterations);
console.log(result.completionReason);

关键特性:

  1. 提供模型与任务说明(包含明确的完成条件,详见实践建议-明确完成标准)
  2. stopWhen 和 verifyCompletion 定制循环退出逻辑
  3. 事件钩子用于日志和监控

Ralph Loop 最佳实践

如果你正在使用 AI 编程 CLI(如 Claude Code、Copilot CLI、OpenCode、Codex),以下实践指南将帮助你更高效地使用 Ralph Loop。

大多数开发者以交互方式使用这些工具:给出任务、观察工作过程、在偏离轨道时介入。这是“人在回路”(Human-in-the-Loop,HITL)模式。

但 Ralph 提供了一种新方法:让 AI 编程 CLI 在循环中运行,自主处理任务列表。你定义需要做什么,Ralph 负责如何做——并持续工作直到完成。换句话说,它是长时间运行、自主、无人值守的 AFK(Away From Keyboard,离开键盘)编程

提示:本节提供操作层面的具体技巧,原则层面的建议请参考实践建议部分。

技巧 1:理解 Ralph 是一个循环

AI 编程在过去一年左右经历了几个阶段:

Vibe 编程:让 AI 写代码而不真正检查。你“感受”AI,接受它的建议而不仔细审查。速度快,但代码质量差。

规划模式:要求 AI 在编码前先规划。在 Claude Code 中,你可以进入规划模式,让 AI 探索代码库并创建计划。这提高了质量,但仍受限于单个上下文窗口。

多阶段计划:将大型功能分解为多个阶段,每个阶段在单独的上下文窗口中处理。你为每个阶段编写不同的提示:“实现数据库模式”,然后“添加 API 端点”,然后“构建 UI”。这扩展性更好,但需要持续的人工参与来编写每个提示。

Ralph 简化了这一切。不是为每个阶段编写新提示,而是在循环中运行相同的提示:

#!/bin/bash
# ralph.sh
# Usage: ./ralph.sh <iterations>
set -e
if [ -z "$1" ]; then
  echo "Usage: $0 <iterations>"
  exit 1
fi
# 每次迭代:运行 Claude Code,传入相同的提示
for ((i=1; i<=$1; i++)); do
  result=$(docker sandbox run claude -p \
"@some-plan-file.md @progress.txt \
1. 决定接下来要处理的任务。这应该是你认为优先级最高的,\
   不一定是列表中的第一个。\
2. 检查任何反馈循环,如类型检查和测试。\
3. 将你的进度追加到 progress.txt 文件。\
4. 提交该功能的 git commit。\
只处理单个功能。\
如果在实现功能时,你注意到所有工作都已完成,\
输出 <promise>COMPLETE</promise>。\
")
  echo "$result"
  if [[ "$result" == *"<promise>COMPLETE</promise>"* ]]; then
    echo "PRD 完成,退出。"
    exit 0
  fi
done

每次迭代:

  1. 查看计划文件,了解需要做什么
  2. 查看进度文件,了解已完成的工作
  3. 决定下一步做什么
  4. 探索代码库
  5. 实现功能
  6. 运行反馈循环(类型、Linting、测试)
  7. 提交代码

关键改进:代理选择任务,而不是你

使用多阶段计划时,人类在每个阶段开始时编写新提示。使用 Ralph 时,代理从你的 PRD 中选择下一步要做什么。你定义最终状态,Ralph 到达那里。

技巧 2:从 HITL 开始,然后转向 AFK

运行 Ralph 有两种方式:

image

对于 HITL,你观察它做的一切,在需要时介入。

对于 AFK Ralph,始终限制迭代次数。随机系统的无限循环是危险的。关于如何设置迭代次数限制,详见实践建议-安全机制和资源控制。

HITL 类似于结对编程。你和 AI 一起工作,在代码创建时审查。你可以实时引导、贡献和分享项目理解。

这也是学习 Ralph 的最佳方式。你会理解它的工作方式,优化你的提示,并在放手之前建立信心。

一旦你的提示稳定,AFK Ralph 就能发挥真正的杠杆作用。设置它运行,做其他事情,完成后回来。

你可以构建通知机制(如 CLI、邮件或消息推送),在 Ralph 完成时提醒你。这意味着更少的上下文切换,你可以完全投入到另一个任务中。典型的循环通常需要 30-45 分钟,尽管它们可以运行数小时。

进展很简单:

  1. 从 HITL 开始学习和优化
  2. 一旦你信任你的提示,就转向 AFK
  3. 返回时审查提交

技巧3:定义范围

为什么范围很重要

你不需要结构化的 TODO 列表。你可以给 Ralph 一个模糊的任务——“改进这个代码库”——让它跟踪自己的进度。

但任务越模糊,风险越大。Ralph 可能永远循环,找到无尽的改进。或者它可能走捷径,在你认为工作完成之前就宣布胜利。

真实案例:某次运行 Ralph 来提高项目的测试覆盖率。仓库有内部命令——标记为内部但仍面向用户。目标是覆盖所有内容的测试。

经过三次迭代,Ralph 报告:“所有面向用户的命令都完成了。”但它完全跳过了内部命令。它决定它们不是面向用户的,并将它们标记为被覆盖率忽略。

修复方法:明确定义你想要覆盖的内容:

image

如何定义范围

在让 Ralph 运行之前,你需要定义“完成”是什么样子。这是从规划到需求收集的转变:不是指定每个步骤,而是描述期望的最终状态,让代理找出如何到达那里。

核心原则:必须定义明确可机器验证的完成条件。模糊的标准会导致循环无法正确退出或产生无意义输出。

推荐格式:结构化 prd.json

定义 Ralph 范围有多种方法(Markdown 列表、GitHub Issues、Linear 任务),但推荐使用结构化的 prd.json:

{
  "branchName": "ralph/feature",
  "userStories": [
    {
      "id": "US-001",
      "title": "新聊天按钮创建新对话",
      "acceptanceCriteria": [
        "点击'新聊天'按钮",
        "验证创建了新对话",
        "检查聊天区域显示欢迎状态"
      ],
      "priority": 1,
      "passes": false,
      "notes": ""
    }
  ]
}

Ralph 在完成时将 passes 标记为 true。PRD 既是范围定义,也是进度跟踪器——一个活生生的 TODO 列表。

提示:关于如何定义完成条件的更多示例和最佳实践,详见实践建议-明确完成标准。

技巧 4:跟踪 Ralph 的进度

Ralph 在迭代之间使用进度文件来解决上下文腐烂问题。通过维护 progress.txt 和 prd.json(详见状态持久化与记忆管理),Ralph 可以在每次迭代中:

  1. 读取 progress.txt 以了解已完成的工作和学到的代码库模式
  2. 读取 prd.json 以了解待办任务和优先级
  3. 追加本次迭代的进度和学到的模式
  4. 更新 prd.json 中已完成任务的 passes 状态

最佳实践:

  • 在 progress.txt 顶部维护“代码库模式”部分,方便后续迭代快速参考
  • 每次迭代只处理一个任务,完成后立即更新状态
  • 记录遇到的坑和解决方案,避免重复错误

这创建了一个累积的知识库,后续迭代可以快速同步,而不需要阅读整个 Git 历史。

技巧 5:使用反馈循环

反馈循环是 Ralph 的护栏。它们告诉代理它是否在正确的轨道上。没有它们,Ralph 可能会产生看起来正确但实际上有问题的代码。

反馈循环类型

image

在你的 Ralph 提示中,明确要求运行这些反馈循环:

在每次迭代中:
1. 实现功能
2. 运行类型检查:`tsc --noEmit`
3. 运行测试:`npm test`
4. 运行 Linter:`npm run lint`
5. 只有在所有检查通过后才提交

这确保 Ralph 不会提交破坏性代码。

技巧 6:小步迭代

Ralph 在小的、可验证的步骤中工作得最好。每次迭代应该:

  • 完成一个功能
  • 运行反馈循环
  • 提交代码

为什么?因为:

  1. 更容易调试: 如果某次迭代失败,你知道确切的问题所在
  2. 更好的 Git 历史: 每个提交代表一个完整的功能
  3. 更快的反馈: 小步骤意味着更快的迭代周期

避免让 Ralph 一次处理多个功能。这会导致:

  • 混乱的提交
  • 难以追踪进度
  • 更高的失败风险

技巧 7:优先处理高风险任务

不是所有任务都是平等的。有些任务如果失败,会破坏整个项目。其他任务如果失败,只是一个小问题。

Ralph 应该优先处理高风险任务:

  1. 架构决策和核心抽象: 如果这些错了,整个项目都会受到影响
  2. 模块之间的集成点: 这些是失败风险最高的地方
  3. 未知的未知和探索性工作: 需要快速失败
  4. 标准功能和实现: 风险较低,可以稍后处理
  5. 抛光、清理和快速胜利: 最低风险,适合最后处理

将 AFK Ralph 保留到基础稳固时。一旦架构得到验证,高风险集成工作正常,你就可以让 Ralph 在低风险任务上无人值守运行。

尝试一下

在你的 Ralph 提示中添加优先级指导:

选择下一个任务时,按以下顺序优先处理:
1. 架构决策和核心抽象
2. 模块之间的集成点
3. 未知的未知和探索性工作
4. 标准功能和实现
5. 抛光、清理和快速胜利
在高风险工作上快速失败。将简单的胜利留到后面。

技巧 8:明确定义软件质量

并非所有仓库都是相同的。很多代码是原型代码——演示、短期实验、客户提案。不同的仓库有不同的质量标准。

代理不知道它在哪种仓库中。它不知道这是可丢弃的原型还是将维护多年的生产代码。你需要明确告诉它。

要传达的内容

image

将此放在你的 AGENTS.md 文件、你的技能中,或直接放在提示中。

代码库模式比指令更有影响力

Ralph 会同时参考你的指令和现有代码。当两者冲突时,代码库的影响力更大。

具体示例:

// 你的指令:"永远不要使用 any 类型"
// 但现有代码中:
const userData: any = fetchUser();
const config: any = loadConfig();
const response: any = apiCall();
// Ralph 会学习这种模式,继续使用 any

为什么会这样?

  • 指令只有几行文字
  • 代码库有数千行“证据”
  • AI 更倾向于模仿现有模式

解决方案:

  1. 在 Ralph 运行前清理代码库:移除低质量模式
  2. 使用反馈循环强制执行标准:Linting、类型检查、测试
  3. 在 AGENTS.md 中明确质量标准:让期望可见

尝试一下

在你的 AGENTS.md 或 Ralph 提示中明确质量标准:

## 代码质量标准
这是生产代码库。请遵循:
- 使用 TypeScript 严格模式,禁止 any 类型
- 每个函数都需要单元测试
- 遵循现有的文件结构和命名约定
- 提交前必须通过所有 lint 和类型检查
优先级:可维护性 > 性能 > 快速交付

技巧 9:使用 Docker 沙箱

AFK Ralph 需要编辑文件、运行命令和提交代码的权限。什么阻止它运行 rm -rf ~?你不在键盘前,所以无法介入。

Docker 沙箱是最简单的解决方案:

docker sandbox run claude

这会在容器内运行 Claude Code。你的当前目录被挂载,但其他什么都没有。Ralph 可以编辑项目文件和提交——但无法触及你的主目录、SSH 密钥或系统文件。

权衡:你的全局 AGENTS.md 和用户技能不会被加载。对于大多数 Ralph 循环,这没问题。

对于 HITL,沙箱是可选的——你在观察。对于 AFK Ralph,特别是过夜循环,它们是防止失控代理的基本保险。

技巧 10:控制成本

Ralph Loop 可能会运行数小时,成本控制很重要。以下是一些实用的成本管理策略:

成本估算指南

典型成本范围(以 Claude 3.5 Sonnet 为例):

  • 小任务(5-10 迭代):$5-15
  • 中等任务(20-30 迭代):$15-50
  • 大型任务(30-50 迭代):$50-150

影响因素

  • 代码库大小(上下文窗口)
  • 任务复杂度(需要多少迭代)
  • 模型选择(GPT-4 vs Claude vs 本地模型)

成本控制策略

1. 从 HITL 开始

  • 先用人在回路模式学习和优化提示
  • 一旦提示稳定,再转向 AFK 模式
  • HITL 成本更可控,但仍有巨大价值

2. 设置严格限制

# 始终设置最大迭代次数
/ralph-loop "task" --max-iterations 20

3. 选择成本效益最优的任务

  • 机械化重构:高效率,低风险
  • 测试迁移:明确标准,易验证
  • 避免创意性任务:需要人类判断

image

4. 本地模型的现实

目前本地模型(如 Llama 3.1)在复杂代码任务上表现仍有差距。但可以考虑:

  • 用于简单任务的预处理
  • 作为成本敏感项目的备选方案

5. 投资回报视角

如果 Ralph 能在几小时内完成原本需要几天的工作,即使花费 $50-150 也是值得的。关键是选择合适的任务和设置合理的期望。

技巧 11:让它成为你自己的

Ralph 只是一个循环。这种简单性使其无限可配置。以下是一些让它成为你自己的方法:

交换任务源

本文中的示例使用本地 prd.json。但 Ralph 可以从任何地方拉取任务:

image

关键洞察保持不变:代理选择任务,而不是你。你只是改变该列表的位置。

更改输出

不是直接提交到 main,每次 Ralph 迭代可以:

  • 创建分支并打开 PR
  • 向现有 issues 添加评论
  • 更新变更日志或发布说明

当你有一个需要成为 PR 的 issue 积压时,这很有用。Ralph 进行分类、实现并打开 PR。当你准备好时进行审查。

替代循环类型

Ralph 不需要处理功能积压。我一直在试验的一些循环:

测试覆盖率循环:将 Ralph 指向你的覆盖率指标。它找到未覆盖的行,编写测试,并迭代直到覆盖率达到你的目标。例如,可以将项目的测试覆盖率从 16% 提高到 100%。

重复代码循环:将 Ralph 连接到 jscpd 以查找重复代码。Ralph 识别克隆,重构为共享实用程序,并报告更改的内容。

Linting 循环:向 Ralph 提供你的 Linting 错误。它一个一个修复,在迭代之间运行 linter 以验证每个修复。

熵循环:Ralph 扫描代码异味——未使用的导出、死代码、不一致的模式——并清理它们。软件熵的逆转。

任何可以描述为“查看仓库,改进某些东西,报告发现”的任务都适合 Ralph 模式。循环是相同的。只有提示改变。

尝试一下

尝试这些替代循环提示之一:

# 测试覆盖率循环
@coverage-report.txt
查找覆盖率报告中的未覆盖行。
为最关键未覆盖的代码路径编写测试。
再次运行覆盖率并更新 coverage-report.txt。
目标:至少 80% 覆盖率。
# Linting 循环
运行:npm run lint
一次修复一个 Linting 错误。
再次运行 lint 以验证修复。
重复直到没有错误。
# 熵循环
扫描代码异味:未使用的导出、死代码、不一致的模式。
每次迭代修复一个问题。
在 progress.txt 中记录你更改的内容。

实践建议

提示:本节提供原则层面的指导,具体操作技巧请参考 Ralph Loop 最佳实践部分。

明确完成标准

无论是在 Claude Code 还是自己实现的 agent loop 模式中,明确可机器验证的完成条件是 Ralph Loop 成功的关键(详见核心原理中关于完成条件的讨论)。

完成条件示例:

  • 所有测试通过
  • 构建无错误
  • Lint 结果清洁
  • 明确输出标记(如 <promise>COMPLETE</promise>)
  • 测试覆盖率 > 80%
  • 所有类型检查通过

避免模糊标准:例如“让它好看一点”会导致循环无法正确退出或产生无意义输出。

示例:

构建一个 Todo REST API
完成标准:
- CRUD 全部可用
- 输入校验完备
- 测试覆盖率 > 80%
完成后输出:<promise>COMPLETE</promise>

安全机制和资源控制

始终设置 --max-iterations 保护你的钱包

/ralph-loop "Task description" --max-iterations 30 --completion-promise "DONE"

建议的迭代次数:

  • 小任务:5-10 次迭代
  • 中等任务:20-30 次迭代
  • 大型任务:30-50 次迭代

成本控制策略:

  • 结合成本监控和 token 使用限制策略
  • 优先使用 HITL 模式学习和优化提示
  • 仅在提示稳定后使用 AFK 模式

场景适用性

✅ 适合场景:

  • TDD 开发: 写测试 → 跑失败 → 改代码 → 重复直到全绿
  • Greenfield 项目: 定义好需求,过夜执行
  • 有自动验证的任务: 测试、Lint、类型检查能告诉它对不对
  • 代码重构: 机械化重构、大规模测试迁移
  • 测试迁移: 从 Jest 到 Vitest 等框架迁移

❌ 不适合场景:

  • 需要主观判断或人类设计抉择
  • 没有明确成功标准的任务
  • 整体策略规划和长期决策(常规 Agent Loop 更适合)
  • 成本敏感场景:ralph-loop 可能会运行数小时甚至几十个小时

结论

Ralph Loop 是一种以持续迭代修正为中心的 agent 运行范式,通过 Stop Hook 和明确完成条件使代理不再轻易退出。它与一般意义上的 agent loop 并不冲突,而是在特定类型任务(可验证目标条件)下的一种强化迭代模式。适当理解二者的适用边界,能帮助开发者在构建自动化代理流水线时更合理选择架构和控制策略。

参考资料:

我快被这个交通银行太平洋信用卡中心烦死了
每天都打我电话
我可以确定我没欠钱
看着都是交通银行太平洋信用卡中心,但是点进去号码还不是固定的
导致我每次拉黑都是只拉黑了一个号码
小米手机是不是可以通过关键词拉黑的,没找到

每天凌晨三点,你的 OLAP 集群仍在空转。

白天的查询高峰早已过去,但为了应对明天可能到来的流量洪峰,计算节点依然全量在线——只因传统架构无法做到“随用随停”。

这不是个例。行业数据显示,当前主流 OLAP 系统的平均资源利用率不足 35%。换句话说,企业每在计算上投入 3 元,就有 2 元花在了“等待”和“空跑”上。更棘手的是,这种浪费并非源于管理疏忽,而是架构本身决定的:存算一体、静态规划、强耦合设计,让系统只能按“最坏情况”配置资源。

在 AI 与实时决策驱动下,企业对 OLAP 系统的期待已从“能查”跃迁至“快、稳、省、易用”。然而,传统 OLAP 架构深陷四大困局:资源僵化、隔离薄弱、成本失控、运维繁重——其静态、耦合、运维密集的设计,已无法匹配动态业务的真实需求。

破局之道在于重新定义 OLAP 的资源供给方式。而这一方向,早在云原生演进初期就已被预见。

2019年,UC Berkeley 在论文《A Berkeley View on Serverless Computing》中极具前瞻性地预言:Serverless 将成为云时代默认计算范式。

  • 极致弹性:系统能够根据业务负载自动、无缝地进行扩容和缩容,甚至可以在没有负载时缩容至“零”,彻底消除资源规划的难题。
  • 按需付费:用户只为代码实际运行所消耗的资源付费,代码未运行时不产生任何费用,从根本上杜绝了资源闲置浪费。
  • 资源隔离:提供灵活而强大的资源隔离能力,有效解决性能抖动、故障传染等风险,保障多租户环境下的系统稳定性。
  • 免运维:将基础设施的建设、管理和运维等繁琐工作下沉到平台提供者,用户无需再关注硬件维护、软件升级等非业务核心工作,从而聚焦于创造价值。

基于 Serverless 的四大支柱,阿里云 Hologres 进一步提出‘Down to Zero’理念,将抽象原则转化为可落地的 OLAP 新范式。

Down to Zero理念:下一代OLAP的技术基石与实现

阿里云 Hologres 提出 “Down to Zero” 理念,以 Serverless OLAP 架构实现范式级突破:成本趋零浪费、算力趋零等待、体验趋零摩擦、运维趋零负担。这不仅是优化,而是一次范式级重构。

  • 成本趋零浪费:成本趋近于零浪费,只为实际使用的计算力付费,资源闲置趋零,将可变成本降至极致。
  • 算力趋零等待:瞬间获取海量算力应对峰值,算力用于有效分析,业务无需提前数月规划硬件。
  • 体验趋零摩擦:用户“点击即得”的即时洞察分析体验成为常态,同时查询延迟、调度延迟、启动延迟均趋零,实现“零延迟”。
  • 运维趋零负担:基础设施管理复杂性大幅降低,团队聚焦业务价值,无需容量规划、版本升级、故障恢复。

“Down to Zero”如何落地?阿里云Hologres的实践路径

为了实现 Down to Zero 的目标和核心价值,让大数据 OLAP 分析回归“按需而动”的本质,Hologres 推出了名为 Serverless Computing 的云原生解决方案,帮助企业实现计算资源如水电般按需取用,它不仅是企业驱动智能决策的智能引擎的技术架构革新,更是一场算力供给范式的革命性突破。

  • Serverless Computing 资源池:大查询、ETL 自动卸载至共享池,实现负载隔离与冷启动“零延迟”。
  • Adaptive Serverless Computing:AI 自动识别大查询、高负载场景,智能路由至弹性资源,无需人工干预。
  • Serverless 型实例:彻底取消预留计算资源,100% 按需取用,真正实现“零持有成本”。

Serverless型实例:让OLAP分析回归“按需而动”的本质

Serverless 型实例,帮助企业实现计算资源如水电般按需取用,从固定支出转向波动可控的“分析即服务”模式,从“人等资源”到“资源随想随用”,从“资源枷锁”到“业务赋能”,进化到全员数据探索的常态。

Serverless 型实例核心组件包括:

计算层:

  • 接入节点:免费赠送。负责连接实例、估算请求所需的资源量、发送请求到
  • Serverless 资源池等。Serverless Computing 资源池:可用区级别共享的计算资源池,负责执行用户的请求,按请求单独调度资源。

存储层:

  • Hologres 独享存储:基于 Alibaba Pangu 存储服务构建,提供高性能、高可靠、高可用、低成本、弹性的存储空间及强大稳定安全的系统服务。

Hologres Serverless 型实例不再预留任何计算资源,根据业务不断波动的负载需求完全使用远端的 Serverless Computing 资源池,做到真正的“零计算资源”持有成本,100%的即用即取,即用即释放。

Hologres Serverless 型实例以零计算资源持有成本、零闲置成本、无限弹性边界、零运维负担等实现分析算力的弹性爆发,进一步极致的诠释着 Down to Zero 的成本趋零浪费、算力趋零等待、体验趋零摩擦 、运维趋零负担的核心价值,让 OLAP 分析回归“按需而动”的本质,将算力转化为竞争力,把业务价值交还给用户。

上述能力并非孤立存在,而是构建于一套完整的 Serverless OLAP 架构蓝图之上。

一个优秀的 Serverless OLAP 系统 是通过存算分离架构和计算组核心抽象,深度融合了自动弹性、分时弹性、无损弹性伸缩、Query Queue、自动限流、Down to Zero (Serverless Computing、Adaptive Serverless Computing、Serverless 型)等六大核心能力,构建了一个极致弹性、极致隔离、免运维、稳定可靠且高性价比的实时分析平台,将算力转化为竞争力,让OLAP分析回归“按需而动”的本质。

Serverless OLAP 的本质是让算力供给隐形化,将基础设施转化为具备商业意识的数字伙伴。当资源使用变得如呼吸般自然,当每焦耳能耗都转化为洞察价值,“Down to Zero”便被赋予全新内涵,从技术理想升维为商业哲学,最终数据智慧在“Down to Zero”的管道中自由奔涌。

阿里云Hologres团队作为国内Serverless OLAP的先行者,以五年躬身探索为基石,撰写万字实战沉淀,首发《Down to Zero, Serverless OLAP 技术白皮书》。这本聚焦“Down to Zero”理念,直击传统 OLAP 成本高、弹性差、运维重等核心痛点,提出下一代分析引擎新范式——让算力按需爆发,资源归零无负担。

在 AGI(通用人工智能)爆发的今天,AI 应用如雨后春笋般涌现。对于开发者而言,这既是最好的时代,也是最“贵”的时代。

部署 LLM(大语言模型)、Stable Diffusion 等 AI 应用时,我们往往面临一个两难的选择:

  • 要速度(预留模式):为了毫秒级 - 秒级的响应,必须长期通过预留模式持有 GPU 实例,但昂贵的空置成本让人心痛。
  • 要省钱(按量模式):为了节省成本选择按量付费,但 GPU 实例的创建和模型加载带来的漫长“冷启动”延迟,又严重伤害用户体验。

难道性能与成本真的不可兼得?

阿里云函数计算(Function Compute)推出的CPU 和 GPU 实例浅休眠功能,正是为了打破这一僵局而来。它让实例学会了“浅休眠”,在保留热启动能力的同时,极大降低了实例的闲置成本

本文将带你深入技术后台,揭秘GPU实例浅休眠这一功能是如何从 0 到 1 实现的。

什么是 GPU 实例浅休眠?给显卡按下“暂停键”

在开启浅休眠功能后,当没有请求时,GPU 实例并不会被销毁,而是进入一种“休眠”状态。

此时,实例依然存在,但 CPU 和 GPU 的计算资源被挂起,用户只需支付极低的休眠费用(约为活跃实例费用的10%-20%,CPU不计费,具体见计费文档

当请求再次到来时,系统会瞬间“解冻”实例,毫秒-秒级恢复计算能力(视模型大小)。

技术揭秘:如何实现 GPU 的“浅休眠”?

在容器技术中,实现 CPU 的暂停(Pause)相对成熟且容易,但要给正在显存中跑着几个 G 大模型的 GPU 做暂停,技术挑战极大。我们通过三项关键技术,实现了对 GPU 资源的精细化管理。

1. 显存状态的“迁移”

传统释放 GPU 资源的方式意味着销毁实例,下次使用必须经历完整的冷启动(启动容器、加载模型)。为了解决这个问题,我们设计并实现了显存数据的迁移(Migration)机制

  • 休眠阶段:当实例空闲时,系统会将 GPU 显存中的所有数据(包括模型参数、中间状态等)完整迁移至外部存储保存。
  • 唤醒阶段:当新请求到达时,系统会迅速将存储中的数据回迁至 GPU 显存并重建状态,将实例恢复至休眠前的状态。

这一过程避免了重复的模型加载,确保实例始终处于待命状态。

2. 驱动层的透明兼容

为了让用户无需修改代码即可使用该功能,我们选择在底层进行技术突破。

FC GPU 实例做到了对框架无感。这意味着,无论是 PyTorch 还是 TensorFlow,现有的 AI 应用无需任何代码改造,即可直接具备浅休眠能力。

3. 基于请求的自动化调度

有了“浅休眠”能力后,还需要解决“何时休眠、何时唤醒”的调度问题。依托函数计算以请求为中心的架构优势,我们实现了全自动化的资源管控。

平台天然感知每个请求的生命周期:

  • 请求到达:系统自动触发解冻流程,毫秒级唤醒 GPU 执行任务。
  • 请求结束:系统自动触发冻结流程,释放 GPU 算力。

整个过程由平台自动托管,用户无需配置复杂的伸缩策略,即可实现资源的按需分配与极致利用。

浅休眠唤醒性能

性能是用户最关心的指标。我们以 ComfyUI + Flux 的文生图场景为例进行了实测:

GPU 实例从“浅休眠”唤醒的耗时仅约为 500 毫秒 - 2 秒(视模型大小不同而略有差异)。

考虑到整个文生图生成过程通常持续数十秒,这 1-2 秒的延迟对于用户体验的影响极为有限,不足以降低用户感知的流畅性,却能换来显著的成本下降。

真实案例:某 OCR 业务降本 70% 实录

深圳某科技公司主要业务是从专利文本中提取信息,使用 OCR 模型。他们的业务痛点非常典型:

  1. 启动耗时长:容器启动+加载模型+私有数据 OCR识图,全套下来要十几秒
  2. 流量难以预测:请求来去无法预判,“按量模式”的冷启动耗时长无法满足业务延迟需求。如果使用预留实例,大部分时间 GPU 都在空转出现了浪费。

开启 GPU 实例浅休眠后:

  • 启动延迟明显减少,请求到达后能快速响应;
  • 日常使用成本大幅下降;
  • 服务稳定性不受影响,用户体验保持良好。

整体成本节省接近 70%。

如何使用

开启方式非常简单,函数计算产品控制台已默认支持该功能:

  1. 进入函数的【弹性配置】页签。
  2. 设置【弹性实例】的数量。

  1. 系统将自动激活GPU实例的浅休眠功能。

计费逻辑

  • 请求执行时:全额收费。
  • 无请求执行时:自动切换至浅休眠计费(GPU 资源视卡型收取 10%-20% 的费用,CPU 不收费

结语:Serverless AI 的新范式

Serverless 的核心理念是“按需付费”,而 GPU 昂贵的持有成本一直是阻碍 AI 全面 Serverless 化的大山。

函数计算 CPU 和 GPU 实例均全面支持浅休眠能力。无论是高算力的 AI 推理(GPU),还是通用的计算任务(CPU),函数计算全系实例均致力助您在 Serverless 的道路上实现极致的降本增效。

想要降本?现在就是最好的时机。

了解更多

FunctionAI 是阿里云推出的一站式 AI 原生应用开发平台,基于函数计算 FC的 Serverless 架构,深度融合 AI 技术,为企业提供从模型训练、推理到部署的全生命周期支持。

通过 Serverless 架构的弹性特性与智能化资源管理,显著降低 AI 应用的开发复杂度与资源成本,助力企业快速实现 AI 落地。

  1. 开发效率提升:无需关注底层资源,开发者可专注于业务逻辑,模型一键转换为 Serverless API。
  2. 弹性资源调度:按需付费 + N 分之一卡资源分配(如 1/16 卡),GPU 部署成本降低 90% 以上。
  3. 免运维特性:实例闲置时自动缩容至 0,资源利用率优化 60%,实现业务运维转型。

快速体验 FunctionAI:https://cap.console.aliyun.com/explore

❶ 腾讯元宝(2.1 开启,分 10 亿)
每日:登录领保底 + AI 任务抽卡 + 分享好友互得奖励
加码:20/22 点红包雨,冲万元小马卡
技巧:提前预约得 10 次额外抽奖,邀新奖励翻倍

❷ 百度(1.26-3.12,分 5 亿)
每日:20 点文心助手输口令领隐藏红包 + 集奇幻人生卡
加码:2.15-2.17 超级场,最高 8888 元
技巧:连续签到 7 天解锁稀有卡,套马中稀有马得 88 元

❸ 支付宝(1.27 预热,2.3 正式)
每日:集五福(3 次抽卡)+10/15/20 点红包雨 + 余额宝打卡
技巧:连续参与红包雨中奖率 + 20%,现金直接进余额

❹ 抖音(1.26 起预热,2.3 正式)
每日:搜「新春来抓马」集 9 种马 + 2.3 起「跃马攀峰」做任务
加码:除夕 19:30 集卡分 3 亿,最高 2026 元
技巧:组队集卡进度快 30%,首次分享加抽卡次数

❺ 京东 (1.25 起)
京东:搜「每天红包」+ 集全民寻马卡 + 10/14/18/21 点红包雨

❻ 淘宝:搜「马上有好运」+ 淘个好彩头任务,除夕冲 26888 元
技巧:历史搜索一键复领,邀新助力进度 + 50%

❼ 快手(1.27 开启)
每日:5 次集福卡 + 浇发财树 + 12/18/22 点红包雨 + AI 视频领红包
技巧:发财树连浇 3 天额外领现金,视频带「新春」标签奖励高

image

近年来,随着容器技术的普及,Docker已成为开发和运维领域不可或缺的基础工具。然而,国内开发者在从Docker Hub拉取镜像时,常常面临速度缓慢、连接超时甚至完全无法访问的困境。尽管市场上曾涌现众多镜像加速服务,但很多因成本、合规或运维压力相继关闭,开发者往往不得不像“打游击”一样频繁更换加速源,严重影响了开发效率和体验。

ececa7af0cdca7dbfe0011f388991769_2026012714070159753.001.jpeg

在此背景下,一家名为毫秒镜像的服务逐渐进入大众视野,并凭借其企业级稳定性、行业深度集成与金融级合规保障,成为越来越多开发者和企业的共同选择。近日,笔者通过多方调研与实际体验,发现这并非又一个“昙花一现”的加速节点,而是一个经过数百万用户验证、被多家行业巨头内置采用的“正规军”级基础设施服务。

一、行业痛点催生稳定需求

国内网络环境的特殊性使得直接访问Docker官方仓库体验较差。虽然此前出现过不少高校、云厂商提供的镜像源,但多数因带宽成本、运维压力或政策原因陆续停止服务。开发者们饱受“今日可用、明日失效”的困扰,甚至不得不忍受数小时乃至数天的镜像拉取等待时间,严重影响CI/CD流程、团队协作与项目部署效率。

“有没有一个长期稳定、无需频繁更换的镜像加速方案?”成为众多技术团队心中的共同疑问。

二、毫秒镜像:不止于加速,更是基础设施

通过对1ms.run的深入使用与背景调查,其核心优势逐渐清晰:

  1. 行业巨头的“默认选择”

最令人信服的是,毫秒镜像已被多家国民级软件和硬件厂商原生内置至其产品中:

  • 宝塔面板:国内服务器运维领域的领先者,已将1ms.run集成至其核心功能,覆盖数千万台服务器;
  • 爱快路由:企业级流控路由品牌,在系统层面整合其加速服务,助力企业级容器化部署;
  • 绿联NAS:消费级NAS市场的重要参与者,默认将1ms.run设为容器镜像源。

这种“深度集成”并非简单的API对接,而是建立在严格技术评审、长期稳定性测试与高并发承载能力验证之上的信任背书。这意味着,每一台使用这些产品的设备,都在无形中成为毫秒镜像服务的体验者与验证者。

  1. 金融级安全与合规保障

更值得一提的是,毫秒镜像的客户名单中包含了持有央行支付牌照的金融机构。金融行业对基础设施的合规性、安全性、可用性要求极为严苛,任何服务中断或安全漏洞都可能引发重大风险。能够通过金融级的技术审计、渗透测试与持续性监控,并应用于支付系统的生产环境,充分证明了其在安全、稳定与合规方面已达到行业顶尖水准。

  1. 可规模化验证的服务能力

据公开数据,毫秒镜像目前服务数百万活跃用户,每日处理TB级别的镜像分发流量,服务可用性承诺达99.9%以上。这种规模的持续运营,不仅验证了其架构的弹性与鲁棒性,也体现了其背后可持续的商业模式——通过会员增值服务与企业定制方案,保障了长期的资源投入与运维迭代,避免了“用爱发电”型服务的不可持续风险。

三、技术体验:极速、智能、全平台

除了背景实力,在实际使用体验上,毫秒镜像也表现突出:

1、一键配置,告别复杂操作

其开源工具1ms-helper支持Linux、macOS、Windows及各类NAS系统,可一键完成Docker、Podman、Kubernetes及K3s环境的加速配置。无需手动编辑daemon.json,避免配置错误导致的服务异常。

2、智能诊断,化解网络疑难

工具内置网络检测模块,可自动诊断DNS解析、网络连接等问题,并提供修复建议,极大降低了在内网或复杂网络环境下部署容器的门槛。

3、全网加速,覆盖主流仓库

除Docker Hub外,还支持gcr.io、quay.io、k8s.gcr.io等常见境外镜像仓库的加速拉取,有效解决了多源镜像拉取难题。

四、用户声音:从个人开发者到企业团队

某互联网公司CTO表示:“使用毫秒镜像后,CI/CD流水线因镜像下载导致的失败率从30%降至不足2%,团队每月节省近千工时。”

一位绿联NAS用户反馈:“以前自己配置加速源经常出问题,现在系统默认集成,拉镜像速度飞快,真正做到了开箱即用。”

企业运维人员则称赞:“1ms-helper工具的批量部署功能,让我们在数百台服务器的集群中快速统一配置,运维效率大幅提升。”

五、总结:选择被验证,信任来自实力

在技术设施选型中,“稳定可靠”往往比“暂时免费”更具长期价值。毫秒镜像通过厂商生态集成、金融级场景验证、百万用户规模使用,构建起一道扎实的信任壁垒。它不仅提供了显著的加速效果(平均提升10倍以上),更以企业级的产品思维,解决了镜像源可持续运营的根本问题。

对于长期受困于镜像拉取难题的开发者和企业而言,或许到了该告别“游击战”、拥抱“正规军”的时刻。毫秒镜像正以其扎实的技术积累、清晰的商业路径和广泛的行业认可,成为中国容器生态中一个值得信赖的基础设施服务商。

背景

在维护 奥升官网(基于 Nuxt 3 构建)的过程中,我们需要将发布在其他平台的技术文章迁移到官网的内容管理系统中。手动复制粘贴不仅效率低下,还容易遗漏图片资源或导致格式错乱。

借助 Trae IDEChrome MCP,我们可以将这一过程高度自动化。本文将详细介绍这套抓取方案的思路与实现。

环境与工具

本方案依赖以下核心环境与工具:

  1. Trae IDE:新一代 AI 驱动的集成开发环境(我使用的国际版,开了会员),可调用 Gemini-3-Pro-Preview 模型,支持复杂的上下文理解与多步任务执行。
  2. MCPmcp_chrome,提供浏览器自动化能力,用于访问网页、读取 DOM 结构、截图等。

抓取思路

整个抓取流程可以概括为以下四个步骤:

  1. 目标分析: AI 通过 MCP 浏览器工具访问目标 URL,解析页面结构,识别标题、正文、发布时间及图片链接。
  2. 内容提取: 将 HTML 内容转换为符合 Nuxt Content 规范的 Markdown 格式,并自动提取 Frontmatter(元数据)。
  3. 图片处理:

    • 自动下载文章中的图片到 public/images/articles 目录,并按文章id分文件夹存储。
    • 使用 sharp 对图片进行压缩优化(WebP/JPG 转换、尺寸调整)。
    • 将图片按上传到 OSS 指定文件路径中。
    • 替换 Markdown 中的图片链接为 OSS 上的路径。
  4. 自动收录: 将处理好的 Markdown 文件写入 content/articles/ 目录。

关键实现

1. 页面内容读取

利用 MCP 的 chrome_read_pagechrome_get_web_content 工具,我们可以直接获取渲染后的页面内容,这对于动态加载的页面尤为重要。

2. 图片资源的自动化处理

1. 提取链接
AI 会从 DOM 中找出所有 <img> 标签的 src 属性。

2. 批量下载
AI 会生成并执行 Shell 命令(如 curlwget)来下载图片。

# AI 自动生成的下载命令示例
mkdir -p publichttps://ucode-orise.oss-cn-beijing.aliyuncs.com/website/article/20
curl -o publichttps://ucode-orise.oss-cn-beijing.aliyuncs.com/website/article/20/1.jpg http://example.com/path/to/image.jpg

3. 图片压缩
利用项目中的 sharp 脚本对下载的图片进行批量处理,确保加载性能。

4. 图片上传到 OSS
使用ali-oss 库,编写 upload_oss 脚本,将压缩后的图片上传到 OSS 上指定的目录。

async function uploadFile(filePath, retryCount = 0) {
    // 处理上传到oss的文件路径
    const relativePath = path.relative(articlesDir, filePath);
    const objectName = `website/article/${relativePath.split(path.sep).join('/')}`;

    try {
        const result = await client.put(objectName, filePath);
        //... 
    } catch (err) {
        //...
    }
}

3. Markdown 生成与 Frontmatter 注入

Nuxt Content 要求每篇文章包含特定的元数据。我们定义了统一的 Prompt 模板,让 AI 生成标准格式:

---
title: 文章标题
slug: article-slug
description: 文章摘要...
date: 2024-03-20
category: 分类
cover: https://ucode-orise.oss-cn-beijing.aliyuncs.com/website/article/[slug]/cover.jpg
---

## 正文内容
...

实际效果展示

下图是我们在 Trae 环境中开发时的文章列表页面截图,展示了收录后的效果:

IDE
IDE
IDE

总结

通过 Trae IDE + MCP 的组合,我们将原本需要 10 分钟/篇的人工迁移工作缩短到了 2-3 分钟/篇(主要是AI对话推理时间)。开发者只需提供一个 URL,剩下的分析、下载、转换、优化工作全部由 AI 代理完成。这不仅极大提升了效率,还保证了代码风格与目录结构的一致性。

作者:朱奥 /淘天集团高级数据工程师

导读:双 11 等大促场景会在短时间内集中爆发:运营与业务 BI 在开卖后的窗口期密集访问数据产品,瞬时请求量陡增,对查询引擎的稳定性、成本与治理体系提出极高要求。与此同时,业务对近实时数据产品的诉求持续增强,传统“多存储、多链路、依赖回刷”的模式在研发效率、回刷成本与响应速度上逐步暴露瓶颈。

本文围绕 Paimon 与 StarRocks 的组合实践,梳理淘天在大规模 OLAP 查询场景下的架构演进与双 11 保障体系:通过实时与离线统一入湖,消除数据同步链路与多份存储成本;基于稳定中间层叠加在线现算与维表实时关联,将高消耗回刷转化为秒级查询,核心场景回刷效率提升约 80%,年化节省成本接近 1000 万;同时结合 StarRocks + RoaringBitmap 低成本解决跨天交叉实时 UV 计算难题,满足大促近实时决策需求。

1 淘天集团营销活动 OLAP 查询的探索背景与核心策略

1.1 当前数据架构

首先,简要介绍当前的数据架构与数据流转方式。

从 DWD 层开始,我们的数据分为实时与离线两条主链路:

  • 实时数据主要存储在 TT中,在业界可类比为 Kafka 一类的消息队列;
  • 离线数据主要存储在 ODPS 中。

在数据加工与写入层面,我们会启动 Flink 流批一体任务:

  • 实时侧持续消费 TT 中的数据;
  • 离线侧消费 ODPS 中的数据;
  • 在计算过程中,任务会关联多类 ODPS 维表,例如类目维表、商家分层等维度信息。
  • 计算完成后,结果统一写入 ADS 层的Holo 表中,并在数据服务层对外透出。

在纯离线场景下,我们会通过 ODPS 任务读取 ODPS 数据,同时写入 ADS 层对应的 ODPS 表。这里既包含历史天级数据,也包含历史小时级数据。当存在查询加速需求时,我们还会将 ODPS 数据进一步导入到 Holo 中。

在数据服务层,我们主要通过 Holo 或 MC 对外提供数据服务。我们会根据查询时延要求选择不同的服务路径:当业务对响应速度要求更高、需要达到毫秒级时,通常通过 Holo 提供查询服务;当时延要求相对宽松,例如百毫秒级或秒级,则更多通过 MC 来承载查询请求。

1.2 业务诉求与核心痛点

随着业务发展,我们当前面临的诉求主要来自两个方向:一是业务侧希望获得更多实时数据产品;二是业务 BI 的实时分析需求持续增长。这对数据研发提出了新的挑战:进一步提升研发效率。

回到现有架构,其核心痛点主要体现在两方面:

  • 流批存储不统一:实时数据存储在 TT 中,离线数据存储在 ODPS 中;当存在查询加速需求时,部分数据还需要进一步落到 Holo 表中。
  • 整体开发架构较为复杂,数据需要在多个存储介质之间流转,导致端到端链路拉长。

在查询特性上,Holo 在点查场景具备更突出的性能优势,且整体稳定性较强,在淘天历年大促期间的表现也相对稳定。

但在更常见的 Shuffle 场景下,整体查询性能相对一般。尤其当 OLAP 查询负载更重、需要进行更复杂的计算,或需要关联规模较大的维表时,Shuffle 相关的执行效率会成为瓶颈,导致查询耗时明显拉长。

数据更新与维护上也存在较高成本。以 ODPS 中的维表为例(如类目维表、商家分层维表等),当维表发生业务变更时,往往需要触发 ADS 层任务的回刷,从而带来额外的回刷开销。

业务对“近实时”的诉求在部分场景下出现了被动降级。例如在跨天实时 UV 等场景中,由于 state 规模较大、成本较高等原因,方案不得不从实时级别降级到小时级别。从业务视角看,近实时能力仍然是明确存在的需求。

1.3 核心策略

1)架构简化提效

  • 架构上实现 存储介质的统一:将实时与离线数据统一沉淀到 Paimon 的湖存储中。在此基础上, StarRocks 可以直接面向湖存储进行高性能分析查询,从而能够消除数据同步链路以及多份存储带来的成本。
  • 降低使用门槛,让数据更容易被上层分析与 BI 使用。以实时链路为例,原本实时数据存储在 TT 中,而 TT 的数据形态具有明显特征:每行数据是一个字符串、缺少 schema。在这种形态下,数据虽然可以被消费,但如果要面向 BI 分析使用,往往还需要额外进行反序列化与解析,这会带来不可忽视的工程与使用成本。

在统一存储之后,Paimon 将实时与离线数据沉淀在同一张表中,并提供明确的 schema。这意味着,上层使用方可以直接面向结构化数据开展分析:即使分析师的数据开发能力不强,也可以基于 Paimon 的近实时中间层,通过 StarRocks 自助完成对近实时数据的分析。

在这种模式下,过去一些相对简单的取数与分析需求,可以由 BI 或分析师通过自助方式直接完成,不再必须提交给数据研发排期处理,从而在一定程度上减少数据开发侧的需求量与交付压力。

2) 业务难点攻坚

通过稳定的中间层 Paimon,以及“OLAP 实时关联易变维度”的模式,将原本高消耗的 ADS 回刷任务转化为秒级查询来完成。在后续内容中,我会进一步展开这一改造如何将高消耗回刷去掉,并带来显著的成本收益——每年可节省近千万元级别的回刷成本。

同时,我们通过 StarRocks + RoaringBitmap 的方案,高性能解决了跨天交叉实时 UV 的计算难题,以更低成本的方式满足大促期间对近实时能力的诉求。

1.4 新数据架构

在秒级数据链路上,我们通过实时 Flink 任务消费 DWD 层的 Fluss(秒级实时数据),并将结果写入 ADS 层的 Fluss。

Fluss 提供“湖流一体”的同步开关。开启后,Fluss 中的数据会按配置周期自动同步到 Paimon 表中,默认周期可以是每 3 分钟,且该时间间隔支持用户自定义配置。同步完成后,Paimon 表中会形成当天分钟级数据(t 当天)以及 t−n 的历史数据。

在此基础上,我们会启动 Flink 流批一体任务,同时消费 DWD 层 Paimon 的 t 当天数据与 t−n 历史数据,并将加工结果写入 Paimon 表的 ADS 层与 DWD 层,分别沉淀 t 当天与历史数据。

此外,基于 Paimon 的 partial-update能力,我们也可以构建离线大宽表,用于承载同一业务对象的多状态聚合。以订单为例,订单存在支付、确收、退款等多种状态,可以构建一张以 order\_id 为主键的 Paimon 大宽表,将这些状态写入同一行记录。这样在使用侧只需读取对应 order\_id 的一条记录,即可获取该订单的多种状态信息,使用成本与分析便利性都会更高。

在 ADS 层,我们沉淀的计算结果主要面向“叶子粒度”的维度:例如类目侧以叶子类目为主;若涉及商家分层维表,则对应叶子商家分层。在数据服务层,我们通过 StarRocks 对外提供数据服务。具体而言,在 StarRocks 层既可以直接读取 ADS 层数据进行点查,也可以直接读取 DWD 层的中间层数据进行在线计算。后一种方式的查询负载通常更重、数据量更大,但在当前实践中,StarRocks 仍然能够将查询时延控制在秒级范围内,在查询量较大的情况下保持较快响应。在查询过程中,我们也可以进一步关联 Paimon 维表,最终将查询结果在数据产品端进行展示与交付。

在我们 的业务场景中,一般来说,DWD 层的中间层事实数据相对稳定;真正“易变”的往往是维度侧的数据,例如 Paimon 维表(类目维表、商家分层维表等)。当业务规则或口径发生调整时,通常只需要更新维表即可。相较于回刷大规模中间层数据,维表更新的成本更低、执行也更快。

更关键的是,我们在查询侧采用现算方式:维表更新后,查询会在读取中间层数据的基础上实时关联最新维表,因此中间层数据无需随业务变更反复回刷。由于中间层计算量较重,如果依赖回刷来响应业务调整,整体周期往往较长——快则一到两天,慢则可能需要一周。通过“更新维表 + 查询现算”的方式,业务变更后可以更快在数据产品侧看到最新结果。

在数据服务层,我们进一步利用 StarRocks 的 Warehouse 机制,对读集群进行隔离与分级保障,避免不同业务互相影响。我们按照业务重要性划分为三类:

  • 默认 Warehouse:保障级别相对一般;
  • 重保 Warehouse:承载最核心业务,保障级别最高;
  • 业务 BI 专用 Warehouse:面向业务 BI 或其他业务的专用资源池,保障级别相对一般。

2 Paimon+StarRocks 在双11大规模 OLAP 查询场景下的实践与优化

2.1 业务背景

在日常情况下,运营和业务 BI 往往在不同时间访问数据产品,因此 StarRocks的瞬时请求量(RPS)整体较低,压力相对平稳。

但在大促期间情况会明显不同。以开卖时段为例,运营和业务 BI 通常会在接下来的一小时内集中访问数据产品,导致 StarRocks 的瞬时请求 RPS 急剧升高,对 StarRocks 集群带来显著挑战。

因此,本部分的实践与优化工作主要围绕“大促场景稳定运行”这一目标展开。

2.2 集群侧保障

1)在应用层面推广数据集缓存策略:目前配置 180 秒的查询缓存窗口。也就是说,同一条查询在 180 秒内被多次触发时,实际下发到 StarRocks 执行的仅为首次请求;后续请求直接复用首次查询结果。通过该策略,可以有效降低大促高峰期 StarRocks 集群的瞬时压力。

2)集群层面的保护机制:集群侧设置了 30 秒的全局超时:如果一条 SQL 在 30 秒内仍未执行完成,会被自动终止。该机制属于 StarRocks 的集群保护能力,当查询执行时间超过 30 秒,即可判定该 SQL 需要进一步优化,不适合直接上线,需要回退并完成优化后再进入生产环境。对于少量确有必要、且在 30 秒内无法完成的特殊 SQL,也支持为单条 SQL 配置更长的超时时间。但此类 SQL 数量通常极少,上线评估也会更加严格,以确保不会对整体集群稳定性产生影响。整体目标是避免单条慢 SQL 拖垮集群。

3)架构层隔离:按业务重要性划分只读实例。基于业务重要性对只读查询资源进行分层,将不同业务的读请求隔离到不同的只读实例上,避免相互干扰。

4)集群初始化配置

在新的 StarRocks 集群初始化时,比较推荐先设置一套基础参数,如下:

  • set global cbo\_cte\_reuse_rate=0;

当 CTE 被多处引用时,可能触发同一数据源的重复读取。例如,一个表在 select 中读取三次,那么 StarRocks会对同一张 Paimont 表执行三次读取,读 I/O 开销相当于被放大为 3 倍。将该参数设置为 0 后,可使同一张表在同一条查询中只读取一次。

•set global query_timeout=30;

设置 30 秒的集群全局查询超时 避免单条慢 SQL 拖垮集群。

•set global new\_planner\_optimize_timeout=10000;

适当调大执行图优化器的超时时间。如果该参数设置过小,SQL 在调度过程中更容易直接失败;适当增大后,可降低 SQL 失败的频率。

•set global pipeline_dop=8;

调整 pipeline 的 DOP,用于控制每台机器上拉起的 driver 数量。压测结果显示,在大促场景中 SQL 请求高度集中,若 DOP 设置过大(例如 64),单条 SQL 在每台机器上会拉起大量 driver,带来调度开销飙升,甚至可能打满 driver 阻塞队列,导致 CPU 利用率反而上不去,集群进入不可用状态。

在我们StarRocks集群的双 11 压测中,DOP 调整到 8 时整体查询表现最优,因此给出 DOP=8 作为建议值。需要强调的是,该值是经验建议,最终仍应以各自集群的压测结果为准进行配置。

•set global scan\_paimon\_partition\_num\_limit=100; --限制scan paimon外表的最大分区,杜绝扫描全表的情况

限制 scan paimon外表的最大分区,用于杜绝因条件缺失或下推失败导致的全表/超大范围扫描。

2.3 核心指标监控

通过观察 StarRocks 核心指标的水位变化,可以持续评估实例健康状况。常用的核心指标如图。

2.4 报警规则

建立 StarRocks 实例的异常报警机制非常关键,它能够帮助及时发现实例异常并快速介入处理。报警项的设置通常围绕“资源水位、节点可用性、调度拥塞、查询失败与时延”几类核心信号展开,其中有一部分阈值来自大促压测与实战探索,具有较强参考价值:

  • BE/CN 的 CPU 与内存使用率设置阈值,例如当使用率持续高于 70% 时触发告警;
  • FE 的 CPU 与内存使用率同样设置 70% 的告警阈值;
  • 在可用性方面,可以监控 BE/CN 或 FE 的可用率是否低于 100%,一旦出现低于 100% 的情况,通常意味着有节点不可用或发生故障。
  • 当 BE 阻塞队列数超过 2000 时,StarRocks 集群的查询时延可能出现陡增;
  • 在查询侧,可以增加查询失败次数与查询时延分位数的告警,例如“查询失败次数大于 n”“查询延迟 TP99 大于 n”。其中 n 的取值需要结合业务特性与可接受的服务水平目标进行配置。

2.5 元数据监控

为更有效地治理 StarRocks的各类查询请求,可以实时获取审计日志,并基于审计日志构建元数据监控大盘,为后续的慢查询 SQL 治理提供数据支撑与定位依据。

select * from _starrocks_audit_db_.starrocks_audit_tbl;

审计日志相关数据落在 StarRocks 的内表中,对应信息可实时查询。也就是说,某条 SQL 执行完成后,可以立即在该内表中查到这条 SQL 的执行耗时等关键字段。基于这一基础能力,如果需要进一步做更细的源数据与查询行为监控,也可以围绕审计日志中记录的 SQL 信息进行扩展。

在监控大盘的组织方式上,支持按 Warehouse 维度拆分(例如划分为多个 Warehouse),同时也可以按数据集进行过滤。在筛选完成后,重点关注的数据字段通常包括:数据集名称、总 CPU 消耗、总查询大小、查询次数、查询行数、失败率与失败次数、单次查询的 CU 消耗、查询时间以及查询发起人等。这些指标支持排序与聚合,便于在优化过程中选取特定时间窗口,对总 CPU 消耗、总查询大小、总查询行数等维度进行 Top SQL 排查与治理。通过优先治理这些“高消耗/高影响”的 SQL,往往能够显著改善集群整体健康状况,因为在许多情况下,集群不稳定的根因来自少量高风险的“坏 SQL”。

2.6 大促保障

大促保障的目标,是把不确定性尽量前置消化,确保开卖高峰期间查询链路稳定可控。

  • 在资源侧,会结合历史数据与业务预测,在大促开始前对 StarRocks 集群进行主动扩容,并在大促结束后主动缩容。
  • 在需求侧,提前与业务负责人对齐本次大促的核心变更点,重点关注改造或新增页面,并将核心页面的 QPS 进行量化,为全链路压测与容量评估做准备。
  • 针对重保页面,我们还会建立一套智能应急机制,分为实例级与查询级两层。实例级故障切换方面,当 StarRocks 主实例不可用时,可通过自动化预案工具(FBI)将重保页面的查询请求批量切换到备库 Warehouse,完成实例级容灾;查询级自动容错方面,当重保页面出现单次查询失败或超时,系统会将该查询自动路由到备库 Warehouse 重试,尽量做到用户无感,为关键 SQL 增加一次“二次机会”,提升整体稳定性。

2.7 大促压测

大促压测通常分为两层: 核心页面单压与全链路压测。

在核心页面单压阶段,会先梳理大促期间的核心页面及新增页面,并对这些页面进行单独压测。这样做的目的,是尽可能在活动前置暴露并解决单点问题导致的性能瓶颈,为后续上线留出精细化优化空间。

在全链路压测阶段,会模拟“所有页面同时达到流量峰值”的极限场景,用以验证 StarRocks 集群在峰值冲击下的整体资源水位与关键性能指标是否符合预期。重点关注的资源水位通常包括 CPU、内存与 I/O,同时结合查询时延等指标,评估集群在极端并发与高负载下的稳定性与承载边界。

2.8 压测发现的问题和优化方案

1)分区裁剪失效或缺少分区过滤,导致扫全表

压测中发现,部分 SQL 因分区裁剪失效或未配置分区过滤条件,出现扫描范围过大甚至扫全表的风险。针对该类问题,治理原则是必须启用分区过滤并确保分区裁剪生效,不允许存在扫全表 SQL 在线运行。

分区裁剪生效的常见写法包括:对分区字段进行日期传参,直接基于分区字段触发裁剪;或使用日期函数触发裁剪,例如 date\_format、date\_add 等函数也可以触发分区裁剪。

分区裁剪失效的典型场景是分区字段与子查询结果进行比较,例如将分区字段与子查询返回的最小活动时间进行对比时,分区裁剪会失效。原因在于分区裁剪发生在 FE 阶段,而子查询需要到 BE 执行,FE 在规划阶段无法获得子查询结果,从而无法生成有效的分区裁剪信息。

2)读取 Paimon 生表时小文件过多,导致读取数据块数过大

压测还发现,读取 Paimon 表时存在小文件过多的问题。

定位方法:在 StarRocks 执行 SQL 时可开启 profile(通过 hint:/+ SET\_VAR(enable\_profile = true) /)生成 profile 文件;在 profile 中搜索 “metadata”,其中 nativeReaderReadNum 表示读取的数据块数,nativeReaderReadBytes 表示读取的字节数。实践中,当单个分区的 nativeReaderReadNum 大于 200 时,通常建议考虑对表进行排序治理。

优化方案:在构建流批排序Paimon表时,建议采用分支表模式:离线分支将 bucket 设为 -1,实时分支按需设置 bucket。离线分支表通过 clustering columns 指定排序字段,可支持指定多个字段(如 f1、f2),一般选择 OLAP 查询中最常用的过滤字段,以提升过滤命中与读取效率。该能力仅支持 Flink 批写入,不支持 ODPS 写入;写入表时需要使用 hint: /*+ OPTIONS('sink.parallelism' = '64') */。对于 ODPS 写入的 Paimon 表,则需要在任务下挂一个单独的 compact 排序任务。

为何有效:在双 11 场景下,活动周期往往持续数十天。当天数据属于实时增量,而从活动开始到昨天的历史数据占比更大;因此对离线数据进行表排序收益显著。压测实测显示,排序后读取的数据块数约为排序前的 1/1000。 离线分支完成排序后,活动开始到昨天(占比最大的历史数据)基本都处于“已排序、数据块读取量很小”的状态;实时分支由于无法排序,读取的数据块会相对多一些,但实时数据通常只存在于当天,整体占比小,因此对整条 SQL 的查询时延影响相对有限。

3)检查是否命中 MapJoin:小维表建议显式 broadcast

当 SQL 需要 join 小表(例如小于 10MB 的维表)时,建议在维表前显式加 broadcast,以触发类似离线 MapJoin 的执行策略。实测显示,引入 broadcast 后查询时延可显著下降,典型场景下可从十几秒优化到约 3 秒,整体查询时延约为原先的 1/3。

SELECT xxx FROM table_a t0 LEFT JOIN [broadcast] dim_table_b t1 ON t0.cate_id = t1.slr_main_cate_id AND t1.ds = 'xxx'

4)检查跨地域访问:计算与存储尽量同地域部署

还需要确认 StarRocks 实例与所读取的 Paimon 表是否处于同一地域。若不在同一地域,查询时延会明显增加。建议将 StarRocks 的部署地域与 Paimon 表存储地域保持一致。

5)主键表建议开启 deletion vectors:减少无效数据读取

对于 Paimon 主键表,建议开启 'deletion-vectors.enabled' = 'true'参数。该能力会在写入阶段记录哪些主键数据已被删除;读取时可跳过已删除数据,减少无效扫描,从而提升查询性能。非主键表不需要开启该参数。

3 阶段成果与未来规划

3.1 阶段成果

整体来看,该方案带来了四方面阶段性成果。

  • 数据链路得到简化:通过统一存储与统一查询面,消除了数据同步链路,并降低了多份存储带来的成本与复杂度。
  • 数据使用门槛显著降低:基于 Paimon 的实时/离线中间层,不仅数据开发人员可以使用,业务分析师也可以通过 StarRocks 自助消费近实时数据,从而减少部分简单需求对数据研发排期的依赖。
  • 回刷开销得到明显削减核心场景的回刷效率提升约 80%,年化节省成本接近 1000 万。其关键在于查询可以直接读取 Paimon 公共层并关联 Paimon 维表,业务变更时只需刷新维表,无需回刷与该维表相关的整条数据链路。
  • 在高性能实时分析方面,低成本解决了跨天交叉维度实时 UV 的计算难题,满足大促期间近实时决策需求。具体做法是将可累加指标(如订单数、订单支付金额等)与不可累加指标(如 user\_id)分开处理:可累加指标在查询侧直接聚合;不可累加指标则将 user\_id 做 RB 化后存入中间层,StarRocks 读取 Paimon 表时通过 RB 相关函数计算 UV。

3.2 未来规划

面向下一阶段,规划主要集中在四个方向。

第一, 希望 StarRocks 具备更强的自动物化能力:针对用户高频查询的 SQL 自动生成物化结果,并在后续查询中自动完成改写,直接命中物化表。由于物化表往往已经完成聚合,其数据量相较直接查询中间层可以小很多个量级,从而显著降低扫描与计算开销,进一步提升查询速度与稳定性。

第二,计划进一步 丰富 StarRocks 的元数据能力

第三, 优化 StarRocks 的调度策略,重点是调度层面的 CPU 负载均衡能力。

第四,希望 StarRocks 具备直接读取 Fluss 的能力,从而支持秒级查询场景。目前 Paimon 仍以分钟级链路为主,如果能够在读取侧进一步下探到 Fluss,将更好覆盖对秒级实时性有明确诉求的业务场景。

根据科技媒体digwatch爆料称,国外知名黑客组织WorldLeaks最近在暗网高调宣布,已成功入侵运动品牌耐克内部系统,以技术手段窃取超过1.4TB数据,总共超过18.8万个文件。不仅如此,黑客团队还放出了屏幕截图以作数据考证,截图显示泄露的资料很可能来自于耐克分公司,泄露的信息包括多款系列运动鞋、运动服与健身产品的厂房资料。黑客以此作为要挟基础威胁耐克,若拒交赎金则会公开这些隐私资料。值得一提的是,WorldLeaks是一个网络犯罪组织,主要犯罪行径包括窃取公司重要数据迫使企业交付赎金。该组织曾经在25年改名,官网列出了100多家曾被窃取数据的企业,其中不乏戴尔、安德玛以及德国珠宝品牌CHRIST Juweliere等知名企业。

对此,耐克方面回应道,公司非常重视消费者的隐私与数据安全,将立即展开调查并评估事件影响。JoySSL安全专家对此表示,耐克事件表明企业在构建复杂的纵深安全体系时,往往缺乏最基础的数据流动防护。而互联网时代下,数据资产早已成为企业的核心命脉,任何管理失误,都有可能形成蝴蝶效应,造成无法挽回的后果。以SSL证书为基准,为数据流动加入加密与身份验证类安全技术,可以为企业的安全体系注入新的动力,成为企业守护数字资产最不可或缺的基础免疫系统。

耐克事件折射企业数字生态薄弱之处

耐克遭遇的此类高强度攻击通常路径极为复杂,成功窃取数据的核心往往在于针对企业数字生态中的某些薄弱环节,如内部及供应链数据交流的通道开放,为数据在传输过程中遭窃提供了可能性。

此外,管理系统与开发环境的入口暴露,不仅可能因缺少数字证书防护导致被监听,还可能让攻击者伪装成合法用户进行持续渗透。像耐克这样的跨国公司,其拥有数千个子域名、微服务及云实例,任何一个过期的证书、配置不当的服务端点,都可能成为攻击者进行横向扩展并最终窃取核心数据的切入点。

SSL证书为数据交互建立可信任规则

数字证书核心价值在于制定了一套便捷、全球认可的安全通信基础规则,从根本上强制数据加密,使用SSL证书并开启HTTPS/TLS,保障任意网络中两节点安全通信,不仅足以保护商业机密,同时也符合监管要求。

SSL证书除了加密功能,还提供由权威第三方审核的身份验证系统,从而将数字身份与合法实体绑定,能够有效防止仿冒与钓鱼攻击,确保生态系统中的连接安全。一份全面覆盖并有效管理的SSL证书部署记录,可作为企业安全能力的客观技术证明。

市场地位转变凸显数字证书战略价值

信息时代,SSL证书已成为规避风险的稳固基石,是业务运转的可靠保障,更是提升信任的无形资产。JoySSL市场总监表示,在隐私保护意识强烈的当下,平台部署数字证书不仅能增强消费者的信心,还能提升品牌形象与信誉,兼顾安全防护与推动品牌建设,战略价值进一步凸显。

呼吁企业拥抱数字化 加强防护体系

耐克数据泄露事件证明在互联网驱动的时代,安全已不再是可选项,而是关乎企业存续与发展的核心课题。数字化转型的企业应重新审视SSL证书策略,从战略层面加强此基础设施,保护企业数字资产和品牌形象。

对游戏玩家来说,开黑绝非简单的组队对战,而是集精准战术传递、清晰画面共享与默契实时互动于一体的核心体验。无论是 MOBA 游戏中瞬息万变的团战指令同步,还是 3A 大作里细致入微的通关攻略分享,玩家对开黑体验的核心诉求始终一致:清晰无扰的语音沟通、流畅高清的画面传递、稳定可靠的协作支撑。

当玩家对开黑体验的要求日益严苛,单纯的功能叠加已无法满足需求,技术创新成为突破体验上限的关键。正是基于对玩家核心需求的深刻洞察,国内用户量第一的游戏开黑专用工具 KOOK 选择与拥有亿级产品服务经验的火山引擎 RTC 携手,一场以技术为纽带、以用户体验为核心的深度合作就此展开。

深耕游戏开黑,直面两大痛点

KOOK 前身名为 “开黑啦”,覆盖实时语音、高清屏幕共享、多元社区互动等全场景,成为数千万硬核玩家不可或缺的协作与社交利器,月活跃用户接近数千万、日均语音时长达数十亿分钟。在游戏社交赛道竞争日趋激烈的背景下,KOOK 始终将玩家需求放在首位,但在真实游戏场景中,两大技术痛点长期存在。

首先是嘈杂环境下的语音清晰度问题,玩家的开黑场景多样且复杂,环境的杂音极易污染语音采集过程。模糊不清的语音往往导致沟通失误,甚至影响团队协作的凝聚力,让开黑的乐趣大打折扣。

其次是高画质屏幕共享的性能与稳定性。在游戏社交中,屏幕共享是核心的互动场景之一,但高画质游戏画面的共享,对终端性能和网络带宽是巨大考验。尤其是在共享高帧率的 3A 游戏 Boss 战时,常出现游戏掉帧、画面卡顿、音画不同步等问题,既影响操作的流畅性,也降低了内容的观赏性。

这两大痛点不仅让玩家的开黑体验大打折扣,更成为行业技术升级的核心方向。为了解决这些问题,KOOK 始终在追求对游戏场景的极致贴合与产品迭代,这种理念不仅让它积累了庞大的忠实用户群体,更成为它与火山引擎 RTC 合作的重要契合点。

火山引擎 RTC 赋能,实现 AI 与游戏社交的技术协同

KOOK 对音频纯净度和画面流畅度有着极致追求,而火山引擎 RTC 凭借服务抖音的全球化基础设施与亿级用户打磨的音视频技术,为 KOOK 提供了针对游戏场景的专属优化方案。双方针对游戏场景的核心痛点,共同打造了专属优化方案,通过 AI 降噪与高刷屏幕共享两大核心能力,彻底改写了游戏开黑的体验标准。

AI 降噪与音频 3A 协同,打造零干扰纯净语音

为解决复杂环境下的语音沟通问题,双方对音频处理链路进行了深度优化,核心在于 AI 降噪技术与音频 3A 的协同发力。

在噪声识别层面,火山引擎 RTC 基于深度学习模型,实现了对游戏场景噪声的精准区分。无论是键盘敲击声、鼠标点击声、电脑风扇声,还是嘈杂人声,都能被精准识别并过滤。同时,技术团队重点保护 1-4kHz 的人声关键频段,这一频段是人类语音清晰度的核心,确保降噪过程中语音的保真度不受影响。整个降噪过程的收敛速度控制在 100 毫秒以内,实现全频带语言清晰的同时,保持低功耗运行,不占用过多设备资源。

在游戏开黑中,不同玩家的麦克风距离、说话音量存在差异,火山引擎的 AGC 技术最高支持 400% 的增益调节,能稳定麦克风采集的人声电平,让队友的听感保持一致。同时,它能有效抑制近距离喊话造成的削波失真,避免突然的音量峰值影响听觉体验,让队友间的交流始终处于舒适范围。

高性能屏幕共享,解锁 4K 超高清流畅体验

针对高画质屏幕共享的性能瓶颈,火山引擎 RTC 为 KOOK 量身打造了 “低延迟、高画质、低负载” 的专属方案。

PC 端支持 4K 60fps 的屏幕共享,移动端支持 1080P 60fps,无论是游戏中的细腻画质、操作细节,还是攻略演示中的关键步骤,都能精准呈现在观众面前。同时,火山引擎 RTC 带来了 GPU 硬件编码优先的策略,并实现多显卡适配,KOOK 能在不牺牲游戏性能的前提下,稳定输出超高清画面,解决了高刷推流与游戏流畅度之间的矛盾。

在网络适配层面,技术团队针对游戏场景优化了网络策略,端到端延迟稳定在百毫秒以内,实现了操作指令与画面的高度同步。同时,方案能智能分配网络带宽,在不影响游戏联网体验的前提下确保画面稳定,让玩家即便在网络条件一般的环境下,也能畅享流畅的超高清共享体验。

KOOK 与火山引擎 RTC 的合作,本质上是技术实力与场景需求的精准匹配。双方通过深度合作,将火山引擎 RTC 的技术优势与 KOOK 的场景经验相结合,不仅解决了当下的用户痛点,更共同推动了游戏社交领域的技术前沿探索。

未来,共建 AI 驱动的智能化游戏社区

此次技术合作的成功,为 KOOK 与火山引擎 RTC 的深度绑定奠定了坚实基础。双方将继续聚焦 AI 技术在游戏社交领域的应用落地,从 AI 智能搜索和游戏 AI 助手两个方面,为玩家带来更具沉浸感的互动体验。

在 AI 智能搜索的角度,KOOK 积累了海量的游戏内容,火山引擎能够通过 AI 技术实现精准语义搜索,玩家无需在逐字查找就能快速定位所需信息让社区内容的价值得到充分释放。

同时,双方也在计划探索构建智能化的游戏 AI 助手,通过 AI 助手的赋能,玩家的游戏体验将更加高效、便捷,游戏社交的智能化水平也将迈上新台阶。

KOOK 与火山引擎的深化合作,在技术探索与场景落地中不断突破,用更先进的技术、更优质的产品,为广大游戏玩家打造更沉浸、更智能、更具温度的游戏社交生态,一个 “沟通无阻碍、协作更高效、互动更智能” 的游戏社交新时代,正在悄然到来。

图床地址: https://pic.mxpy.cn/

优点:境内备案高速访问,使用 2Libra 已经授权登录,无需账密。

注:请不要上传违规图片。

使用方法:
image
打开首页、登录,选择 2Libra 认证

image
授权个人信息(不包含邮箱等敏感信息,请放心),见: https://2libra.com/help/oauth

image
登录成功,可以直接 Ctrl+V 粘贴上传,不用在文件夹里面选择图片

哈喽,小浣熊家族的朋友们!🖐️ 本系列将跟大家聊聊那些可以提升工作效率的小窍门。
在快节奏的工作里,每个人都希望把时间花在真正有价值的事上。「办公小窍门」系列,专注解决这些日常的“小痛点”,用最轻量的方式帮你提升效率。
在这里,我们会用清晰易懂的方式拆解每一个典型办公场景,并展示如何用 办公小浣熊 迅速完成那些原本需要花费大量时间的任务,让你的工作更快、更稳、更智能。
image.png
书接上回,我们已经

  • 通过“数据清洗”打好了地基
  • 又通过“数据分析”让数据开口说话,找到了业务的重点与痛点
    但老板的追问往往紧随其后:

    “既然发现了 Q3 华东区销量下滑、浙江 Web 渠道是高地,那我们下一步该怎么办?”

这一篇,我们就来聊聊数据处理的终点站:
如何通过数据洞察,将分析结论转化为具体的“行动方案”。

01数据洞察:从“看后视镜”到“看导航仪”

很多人认为,看到报表、画出图表,数据工作就结束了。
但正如我们之前聊过的,数据分析的本质是降低决策成本

如果说数据分析是在看后视镜(What happened)
那么数据洞察就是在看挡风玻璃(What to do next)。

  • 数据分析结论:“上海地区 App 端客单价最高,但订单量仅排第三。”
  • 数据洞察建议:“上海用户具有极强的高端消费潜力,上海应制定高端精品战略,重点打造高端品牌形象。”

image.png
(上图为办公小浣熊生成报告部分截图)

真正有价值的洞察,必须具备“可执行性”
它不是空泛的口号,而是基于数据逻辑推导出的经营策略。

02别让“拍脑袋”代替了“科学决策”

在传统流程中,从分析结果到产出方案,往往会出现断层:

  1. 逻辑断点:对着热力图看半天,最后憋出的方案却跟数据没关系
  2. 覆盖不全:只盯着最大的市场看,忽略了那些“增长黑马”组合
  3. 效率瓶颈:写一份完整的业务策略报告,查资料、对口径、磨文字,一天又过去了
    在办公小浣熊中,这一过程可以被极大简化,不用盯着屏幕苦思冥想,可以直接对话就能搞定

03进阶指令:一句话召唤“首席增长官”

我们继续沿用前两篇中的那份《电商销售明细表》
在「数据分析」一文中,我们已经让办公小浣熊完成了多维分析:

  • 渠道 × 地区
  • 销售额、订单量、客单价
  • 用户行为与优惠使用情况
    针对这些结论,我们可以如何制定具体策略呢?

直接跟 办公小浣熊 下达更具业务思维的指令

“基于刚才的渠道和地区分析结论,请为下个季度的营销资源分配提供 3 条核心建议,并写出一份针对高潜力地区的行动方案。”

接下来,小浣熊会化身“首席增长官”,为你自动推演:

1. 资源优化:精准“止损”与“加仓”

基于各渠道的价值差异,小浣熊会自动识别:

  • 对于 Offline 渠道:作为“销售冠军”,建议追加 36% 的预算,主推高客单商品。
  • 对于 MiniProgram 渠道:识别出“订单多但客单低”,建议主打价格敏感用户。

图片
(上图为办公小浣熊生成报告部分截图)

2. 地区突围:抓准高潜力地区,实现区域突破

锁定 3 大“黄金产区”:

  • Guangdong (广东):主攻 Web+Beauty 组合,锁定晚间 22:00 黄金时段。
  • Shanghai (上海):强化 App+Electronics 组合,凌晨 2:00 错峰营销。
  • Sichuan (四川):发挥 Web+Offline 协同优势,目标增长 40%。

图片
(上图为办公小浣熊生成报告部分截图)

3. 地区定制化方案:从“一刀切”到“精细化”作战

在数据洞察阶段,小浣熊不仅能发现哪些地区在赚钱,
还能针对各地的“性格”开出不同的药方:

图片
(上图为办公小浣熊生成报告部分截图)

至此,一份涵盖资源分配、潜力挖掘、精细化执行的行动方案已全线打通。

04汇报神器:从 Word 方案到 PPT 演示 

写完方案还要做 PPT?
小浣熊一站式服务继续进行:

  • 场景定制:选择你的角色(如:市场/销售)和受众
  • 一键生成:只需几分钟,逻辑严密且图文并茂的 PPT 自动生成
  • (❗️ 划重点)自由编辑:生成的 PPT 支持在线或下载到本地二次修改

图片
(上图为办公小浣熊生成的 PPT 部分截图)

05为什么小浣熊的建议“靠谱”?

办公小浣熊的建议不是“聊天回复”,而是基于其底层强大的 Python 统计建模能力

它在给出建议前,其实已经完成了:

  • 相关性分析:确认哪些因素真的在影响销售额。
  • 异常检测:剔除偶然因素干扰,确保建议基于普遍规律。
  • 多维验证:通过代码自动对比多种策略的可能性。

目前,办公小浣熊在处理此类专业逻辑推理任务时,精度极高,确保了每一个洞察都有据可依

06数据能力的跃迁:你就是决策者

在 AI 时代,数据分析和洞察正在从“专家技能”变成每个办公族的“基础能力”。

  • 不再被琐碎操作困住:清洗、计算、画图都交给小浣熊。
  • 不再为结论发愁:一句话获取多维洞察
  • 把精力留给真正的决策:去判断趋势、去调动资源、去驱动真正的增长。

你不需要精通复杂的算法,你只需要学会向 AI 提出正确的问题

当我们掌握了如何把洞察转化为行动,你就拥有了改变业务结果的力量。
下回,我们一起来聊聊,如何「向 AI 正确提问」。
我们也将带来更多场景的实测,你想看小浣熊挑战哪个办公场景?欢迎留言!

「商汤小浣熊」是商汤科技推出的 AI 原生生产力体系,面向下一代办公方式而构建,包括办公小浣熊 & 代码小浣熊。在这里,软件研发、数据分析、任务规划、结果交付均由 AI 直接驱动,工作链路由 AI 重新定义。超过 300 万用户与 1000+ 企业,正与小浣熊一起推动这一场新的办公升级。

清扫整个 Albert Heijn 超市的地面。听起来很简单。而且原本也应该很简单。

但我是一名计算机科学专业的学生,我遇到了一个问题:我总是忍不住去优化一些(可能)不需要优化的东西。

所以,我没有只是做好我的工作,比如扫地,而是做了任何一个“理智的”人都会做的事:我把超市的平面图转换成了网格图,构建了一个可视化编辑器,并使用模拟退火算法编写了一个 C++ 路径优化器。

但在我们深入探讨这件事是如何彻底出错,以及这件事如何让我意识到这会让每个人都痛苦之前,我需要你回答一个问题:

如果你要替我工作一天,并且需要打扫整个 Albert Heijn 超市的楼层,你会选择 A 路线还是 B 路线?
img
路径 A(上)和路径 B(下)。

说真的,看看它们。哪个看起来更适合清扫超市地面?

如果你选择了A选项:恭喜你,你的思维方式像算法一样,很可能就是个机器人。

但从技术上讲,你的说法没错。路径 A 的距离更短。然而,它完全没用。

看看那些弯道。你不妨想象一下,如果你走路时也这样弯,你会看起来像个疯子,就像一台抽搐的扫地机器人。

路径 A 是你优化了错误的东西而导致的结果。

剧透一下,这正是这个故事的重点。不过我们稍后再谈,先让我解释一下事情的来龙去脉:

第一步:将现实转化为过于简单的模型

首先,我把 Albert Heijn 的平面图转换成了网格。每个方格要么是空的(应该打扫),要么是障碍物(墙壁、收银台、有人扔在地上的酸奶包装)。

我在Processing中构建了一个可视化编辑器,这样我就可以轻松地绘制商店地图并导出生成的图表。

因此,将平面图转换为网格结构非常容易。
img
Albert Heijn 超市的网格平面图。

实际地面的瓷砖铺设有助于将该区域细分为易于管理的小块区域。
img
采用瓷砖结构的细分式平面图。

然后,通过将每个图块解释为一个节点,然后将它们连接到相邻的图块,就可以很容易地将其转换为网络结构(也称为图)。
img
将每个图块解释为图中的一个节点。
img
生成的瓦片网络。

如你所见,我允许水平和垂直移动,以及对角线移动(只要你不穿墙)。
img
Albert Heijn 的最终图表。

接下来唯一要做的就是找到一条贯穿这个网络的路径,同时确保访问所有节点(图块)。这样就能解决我的扫描问题。

(这个问题也称为旅行商问题,详情请参阅相关文章,了解它为何如此难以“解决”。)

第二步:编写优化器

由于在如此规模的图中,计算上不可能找到最优路径,我们只能求助于启发式算法。启发式算法本质上是在短时间内找到一个非常好的解,而不是试图找到完美的解(这几乎是不可能的)。

所以我用 C++ 实现了路径优化器。

底层启发式算法:模拟退火

如果你还不熟悉,模拟退火本质上就是尝试一系列微小的变化(也称为局部移动)。

一开始,你接受每一个小小的改变(即使它让路径变得更糟),但随着算法的进行,你会逐渐变得更加挑剔,最终只允许那些严格意义上改善路径的改变。

这个想法源于金属冷却的过程。首先,金属在高温下运行(尝试不同的运动方式)进行充分的探索,然后逐渐冷却,最终稳定在低能量状态(接近最佳状态)。
img
模拟退火算法通过多次迭代逐步改进路径。

看看这个动图。看到了吗?它一开始很混乱,然后逐渐变得稳定下来。这就是模拟退火算法的工作原理。

对于局部移动,我使用了 2-opt 移动。具体来说,就是移除路径中的两条边,然后用不同的方式重新连接它们。如果这种微小的改动使路径变得更好,就保留它。否则,要么保留它(如果温度仍然很高),要么舍弃它。
img
2-opt 移动可视化。

那就这么做十亿次。或者,让你的电脑这么做十亿次。

第三步:搞砸

运行一段时间后,我得到了第一条“优化”路径。以下是优化结果:
img
第一条“优化”路径。

瞧瞧这路!弯道比克里斯托弗·诺兰的电影还多。谁会傻到真的这么扫地啊?扫完估计都想吐。

从技术上讲,它覆盖了整个地面。从技术上讲,它(几乎)是最小的清扫路径。从技术上讲,它是完美的。

它有一些优点,但实际上,它完全没用。

算法完全按照我的要求执行了。

我问错问题了。

第四步:根据实际情况进行优化

我很快意识到我优化的方向错了。距离并非一切。

转弯很重要。动量很重要。看起来不像个故障的机器人也很重要。

所以我给成本函数增加了一个“转弯惩罚”,并要求它最小化这个惩罚。基本上就是告诉算法:“转弯90度会扣分。转弯180度?你疯了吧。”

这样一来,路线就更加顺畅了,即使距离略微延长了一些。
img
更平坦、更适合步行的道路。

你看,这其实……挺好走的。你把这条路交给一个真正的人,他也不会立刻放弃。

我们不再追求距离上的最优解,而是追求与现实的契合度。

第五步:打破它

接下来才是精彩的部分。

您可以调整急转弯的惩罚。这相当于一个滑块,可以在“纯粹的效率”和“实际用途”之间切换。
img
从低角度罚分(1)到高角度罚分(6)。

你可以清楚地看到其中的权衡。增加惩罚,路径会更平滑,但会稍长一些。减少惩罚,效率会提高,但会造成混乱。

选择哪条路完全取决于你自己。这取决于很多因素,比如你转身是否方便,总距离是否是首要考虑因素,以及你能忍受多大的眩晕。

第六步:意识到生活其实并没有那么美好

但这不仅仅是扫地那么简单。

这关乎一切。

社交媒体算法以提升用户参与度为目标,而且它们在这方面做得非常出色。问题出在哪里呢?

参与度≠幸福。参与度≠真相。参与度=点击量、屏幕使用时长、愤怒情绪和负面反应。

后果?愤怒、错误信息、负面新闻刷屏、焦虑。

算法运行完美,完全按照设计预期执行。问题出在成本函数上。(Instagram 可能不这么认为。)

推荐算法会优化观看时长和点击率。你奶奶正在YouTube上连续看6个小时的阴谋论视频。

算法彻底毁了她。她感觉糟透了。

这并不令人意外。

即使是像 ChatGPT 这样的大型语言模型,它们的优化方向也错了。它们优化的是听起来自信,听起来好像知道答案。

不是因为他正确,也不是因为他诚实。

他们接受的训练是完成既定模式,而不是说“我不知道”。所以他们只能靠猜测。而且毫无羞耻心,语法也完美无瑕。

这一点甚至适用于科技以外的领域。

想想企业。它们大多以盈利为目标。地球、环境、道德或伦理呢?这些都没有纳入成本函数,因此也不会被优化。

我在实际工作中是否使用了这条优化路径?

不,显然不是。我只是像正常人一样扫了地而已。

但构建这个项目教会了我一个我一直在思考的道理:如果你解决的是错误的问题,那么技术上的正确性就毫无意义。

你可以写出完美的代码,你可以构建完美无瑕的系统,你可以把成本函数优化到极致,但最终结果仍然可能很糟糕。

重要的不是优化算法本身,而是首先要弄清楚你究竟应该优化什么。

大多数时候,我们甚至都不会问这个问题。我们只是优化那些容易衡量的指标,然后祈祷结果会好起来。

https://tiespetersen.substack.com/p/i-got-paid-minimum-wage-t...

笔者公众号「深度涌现」

对于开发者而言,最痛苦的不是写不出策略,而是受限于基础设施的性能。如果你还在用 requests 轮询接口获取股票价格,那你基本上已经告别实时性要求较高的金融场景了。

今天我们就从工程化的角度,聊聊如何用 Python 优雅地解决港股实时行情的接入问题。

痛点分析:HTTP vs WebSocket 在传统的 Web 开发中,我们习惯了无状态的 HTTP。但在金融数据领域,高频的握手开销是不可接受的。我们需要全双工通信,Server 端有数据变动直接 Push 给 Client。

技术选型与环境依赖 我们追求的是极致的轻量化。Python 3.9+ 配合 websocket-client 是目前性价比最高的方案。它足够底层,让你能控制每一个字节的流向,又不需要像 asyncio 那样处理复杂的时间循环(当然,如果你需要极高并发,后期可以重构)。

pip install websocket-client

核心代码实现 不管是你是对接交易所直连,还是使用像 AllTick 这样集成的三方 API,核心范式都是一样的:定义 on_message、on_open 等回调函数。

下面的代码片段展示了如何建立一个持久化的 WebSocket 连接。注意看,我们在 on_open 阶段发送了 JSON 格式的订阅 payload,这是目前主流金融 API 的标准交互方式。

import websocket
import json

url = "wss://api.alltick.co/realtime/hk"

def on_message(ws, message):
    data = json.loads(message)
    # 打印最新成交价和涨跌情况
    print(f"{data['symbol']} 最新价格: {data['last_price']} 涨跌: {data['change']}")

def on_open(ws):
    # 订阅恒生指数及指定股票行情
    ws.send(json.dumps({
        "action": "subscribe",
        "symbols": ["HSI", "00700.HK"]
    }))

ws = websocket.WebSocketApp(url, on_message=on_message, on_open=on_open)
ws.run_forever()

数据流的下游处理 原始数据通常是 JSON 字符串,直接解析的开销很小。在生产环境中,我建议你拿到数据后不要直接 print,而是通过消息队列(如 Kafka)或者直接落库。但为了演示方便,我们这里直接用 Pandas 做一个简单的内存化清洗。

import pandas as pd

# 假设我们有一个行情列表
ticks = [
    {"time": "09:30:01", "price": 500, "volume": 100},
    {"time": "09:30:02", "price": 502, "volume": 50},
    {"time": "09:30:03", "price": 501, "volume": 80},
]

df = pd.DataFrame(ticks)
df['time'] = pd.to_datetime(df['time'])
print(df)

经验总结 通过这种方式,我们将数据的获取延迟从“秒级”压缩到了“毫秒级”。在处理港股这种波动剧烈的市场时,这种技术架构的升级,能让你的程序在起跑线上就领先别人一个身位。

许多 AI 赋能能力已经内嵌于ITSM 工具 之中,客户组织正借助这些能力,更好地服务其员工与客户。 为便于读者从服务入口视角理解这些变化,本文亦将相关讨论与 IT 服务台 场景进行关联说明。

然而,AI 的采用同样伴随着风险。

在通往成功落地的过程中,这些风险必须被充分识别、审慎评估并加以缓解。

ManageEngine卓豪基于对 300 名 IT 专业人士开展的调研(及其配套报告《ITSM 中人工智能代理的兴起:认知与未来影响》,可通过相关渠道获取),系统梳理 IT 组织在采用 AI 能力时最为关注的核心问题,并就如何应对在 ITSM 中引入 AI 能力所涉及的关键风险提供实践性指导。

1)在 ITSM 中引入 AI 最突出的风险类别是什么?

本文聚焦于三类核心关切:人工智能治理、数据安全与隐私问题;人工智能代理的可靠性;以及实施复杂性。

2)如何降低人工智能治理与隐私合规风险?

可通过建立治理框架、提升透明度、维护审计追踪、加强加密与最小权限、审核供应链风险,并确保符合 GDPR、HIPAA 等法规与内部合规要求,同时开展 AI 风险与伦理培训。

3)如何提升 AI 代理的可靠性与可控性?

可通过明确边界与防护栏、任务级权限控制、沙盒测试与回滚机制、可解释且可审计的模型策略,以及持续监控可靠性指标并动态调整阈值或训练策略来实现。

4)如何在不增加长期维护负担的前提下推进 AI 落地?

建议从定义清晰的用例入手,复用现有 ITSM 与自动化基础设施,采用敏捷迭代推进,并通过统一技术标准与强调复用性降低重复建设与维护成本。

在越来越多企业迈向数字化与智能化运营的过程中, IT 工单管理系统已经从最初的“问题登记工具”,演进为支撑 IT 服务管理(ITSM) 与 ITIL 流程 落地的核心平台。 随着人工智能能力逐步嵌入工单系统,传统以人工和规则为主导的服务模式,正面临一次结构性的重构。

过去十年,企业在 IT 工单系统上的建设重点主要集中在“流程是否标准”“响应是否及时”“是否可审计”等维度。 而今天,越来越多 IT 管理者开始思考一个更本质的问题: 当系统本身具备理解、判断与行动能力时,IT 服务是否还需要以人为中心来驱动?

ManageEngine卓豪将围绕 AI 驱动下的 IT 工单管理系统重构路径展开,系统性探讨从自动化、智能化,到自治式服务运营的演进逻辑, 并结合企业级落地方法论、典型场景与关键指标,帮助组织构建面向未来的 IT 服务体系。

传统 IT 工单管理的结构性瓶颈
在多数企业中,IT 工单管理系统最初的建设目标十分明确: 集中接收请求、规范处理流程、提供可追溯记录。

这一阶段的系统通常围绕以下能力展开:

  • 统一服务入口(邮箱、门户、电话转工单)
  • 基于规则的分类、优先级与指派
  • SLA 计时与逾期升级
  • 基本报表与审计记录

这些能力在 IT 管理早期阶段发挥了重要作用,但随着业务复杂度提升,其局限性逐渐显现。

从自动化到智能化:AI 如何重塑工单处理逻辑
为应对上述瓶颈,越来越多企业开始在 IT 工单管理系统中引入 AI 能力。 与早期“流程自动化”不同,AI 的价值不在于执行规则,而在于理解与推理。

AI 工单系统的“成熟度跃迁”模型
在大量企业实践中,可以将 AI 驱动的 IT 工单管理能力划分为三个演进阶段。 理解这一成熟度模型,有助于组织合理规划投入节奏,避免“一步到位”的落地风险。

迈向自治式 IT 工单管理:Agentic ITSM 的核心特征
当 AI 不再只是“辅助工具”,而是能够基于目标自主规划行动路径时, IT 工单管理系统的角色将发生本质变化——从流程执行平台,演进为 自治式服务运营系统(Autonomous Service Operations)。

AI 会取代 IT 技术人员吗?
不会。AI 主要替代重复性执行工作,人类仍负责策略、治理与高影响决策。

自治式 ITSM 是否存在风险?
风险可通过权限边界、审计追踪与人工审批节点进行有效控制。

中小企业是否适合引入?
可以从 AI 辅助阶段开始,逐步演进,而非一次性全面自治。

如何衡量投资回报?
建议结合 MTTR、工单量变化、人力投入与业务影响综合评估。

非广告,仅分享,同时自己做个记录。

选购记录在线文档-插座开关等家电记录

开关篇:

米家自己的智能开关太贵了,选择了京东京造,师傅装好我实际按了按,也挺好;
米家的智能开关带显示屏的 300 多,最后选择了领普的一个屏幕,放在了入户门,有个屏就行;

灯具篇:

客厅吸顶灯

挑了挺久才找到相对合适的,只不过快递太慢了,今天刚到,后边只能再找师傅安装了;

餐厅灯

没买,打算等年后装了橱柜再装,根据桌子的摆放,决定餐厅长条灯是横着装还是竖着装;

辅料篇:

自备了比较好的透明胶,瓦克,以后装马桶和洗手台用。


征集建议:

1 、有没不错的轻智能的马桶推荐,只需要马桶圈加热就行,其它功能不用,价格 1 千以下;

2 、推荐下干区的洗手台盆和镜柜、水龙头啥的,我在右侧专门放了插座(带开关),方便将吹风机挂进镜柜里;

卫生间干区尺寸:

Snipaste_2026-01-27_15-31-03 1.jpg

RNN 简介

RNN(Recurrent Neural Network,循环神经网络)一般以序列数据为输入,通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也以序列形式输出。

RNN 的循环机制使模型隐层上一时间步产生的结果,能够作为当下时间步输入的一部分(当下时间步的输入除了正常的输入外还包括上一步的隐层输出)对当下时间步的输出产生影响。

  • 结构:三层(输入层、隐藏层、输出层;循环发生在隐藏层)

1.1 RNN 模型的作用

因为 RNN 结构能够很好利用序列之间的关系,因此针对自然界具有连续性的输入序列,如人类的语言、语音等进行很好处理,广泛应用于 NLP(自然语言处理)领域的各项任务,如文本分类、情感分析、意图识别、机器翻译等。

语言处理示例

2.1 PyTorch 中传统 RNN 的使用

位置:在 torch.nn 中,通过 torch.nn.RNN 可调用。

import torch
import torch.nn as nn

rnn = nn.RNN(5, 6, 2)  # 实例化 rnn 对象
# 参数1:输入张量 x 的维度 - input_size
# 参数2:隐藏层的维度(隐藏层神经元个数)- hidden_size
# 参数3:隐藏层的层数 - num_layers

# torch.randn - 随机产生正态分布的随机数
input1 = torch.randn(1, 3, 5)  # 设定输入张量 x - 序列长 1,批次 3,维度 5
# 参数1:输入序列长度 - sequence_length
# 参数2:批次的样本 - batch_size(表示:3 个样本)
# 参数3:输入张量 x 的维度 - input_size

h0 = torch.randn(2, 3, 6)  # 设定初始化的 h0
# 第一个参数:num_layers * num_directions(层数 * 网络方向数(1 或 2))
# 第二个参数:batch_size(批次的样本数)
# 第三个参数:hidden_size(隐藏层的维度)

output, hn = rnn(input1, h0)
# 最后输出和最后一层的隐藏层输出

print(output)
print(output.shape)
print(hn)
print(hn.shape)

1.2 RNN的局限:长期依赖(Long-TermDependencies)问题

RNN的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段的理解。如果RNN可以做到这个,他们就变得非常有用。但是真的可以么?答案是,还有很多依赖因素。

有时候,我们仅仅需要知道先前的信息来执行当前的任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测这句话中“the clouds are in the sky”最后的这个词“sky”,我们并不再需要其他的信息,因为很显然下一个词应该是sky。在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN可以学会使用先前的信息。

1.2 传统 RNN 优缺点

  • 优势:内部结构简单,对计算资源要求低;相较 LSTM/GRU 参数总量更少;在短序列任务上性能与效果表现优异。
  • 缺点:在长序列关联上表现较差;反向传播时易发生梯度消失或爆炸。

NaN 值(Not a Number,非数):是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。

2.1 LSTM 模型简介

Long ShortTerm 网络——一般就叫做LSTM——是一种RNN特殊的类型,可以学习长期依赖信息。当然,LSTM和基线RNN并没有特别大的结构不同,但是它们用了不同的函数来计算隐状态。

LSTM的“记忆”我们叫做细胞/cells,你可以直接把它们想做黑盒,这个黑盒的输入为前状态和当前输入。这些“细胞”会决定哪些之前的信息和状态需要保留/记住,而哪些要被抹去。实际的应用中发现,这种方式可以有效地保存很长时间之前的关联信息。

2.2 PyTorch 中 LSTM 的使用

import torch
import torch.nn as nn

lstm = nn.LSTM(5, 6, 2)  # 实例化 lstm 对象
# 参数1:输入张量 x 的维度 - input_size
# 参数2:隐藏层的维度(隐藏层神经元个数)- hidden_size
# 参数3:隐藏层的层数 - num_layers

input1 = torch.randn(1, 3, 5)  # 设定输入张量 x - 序列长 1,批次 3,维度 5
# 参数1:输入序列长度 - sequence_length
# 参数2:批次的样本 - batch_size
# 参数3:输入张量 x 的维度 - input_size

h0 = torch.randn(2, 3, 6)  # 设定初始化的 h0(隐藏层)
c0 = torch.randn(2, 3, 6)  # 设定初始化的 c0(细胞状态)
# 第一个参数:num_layers * num_directions(层数 * 网络方向数(1 或 2))
# 第二个参数:batch_size(批次的样本数)
# 第三个参数:hidden_size(隐藏层的维度)

output, (hn, cn) = lstm(input1, (h0, c0))
# 最后输出和最后一层的隐藏层输出

print(output)
print(output.shape)
print(hn)
print(hn.shape)
print(cn)
print(cn.shape)

全文链接:https://tecdat.cn/?p=44893
原文出处:拓端数据部落公众号
关于分析师

在此对Chang He对本文所作的贡献表示诚挚感谢,他在中国中医科学院完成了中医信息学专业的硕士学位,专注中医临床数据挖掘领域。擅长Python、深度学习、临床数据采集与挖掘。Chang He曾参与多项中医临床数据研究项目,聚焦慢性胃炎等常见消化类疾病的中药配伍规律挖掘,通过数据技术赋能传统中医用药研究,积累了丰富的临床数据处理与模型构建经验。

专题名称:慢性胃炎中药用药规律数据挖掘与AI预测实践

引言

中医治疗慢性胃炎注重辨证施治与中药配伍,传统用药经验多依赖医师传承,难以快速提炼普适性规律并实现精准指导。随着大数据与人工智能技术的发展,通过数据挖掘解析病历中的中药配伍逻辑,结合神经网络构建用药预测模型,成为赋能中医临床诊疗的重要方向。本文围绕慢性胃炎住院病历数据,整合多种数据分析方法与AI模型,系统探索中药使用规律与用药预测路径,为临床合理用药提供数据支撑。
本文内容改编自过往客户咨询项目的技术沉淀并且已通过实际业务校验,该项目完整代码与数据已分享至交流社群。阅读原文进群,可与800+行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路,帮大家既懂 怎么做,也懂 为什么这么做;遇代码运行问题,更能享24小时调试支持。
本研究以两家医疗机构的慢性胃炎住院病历为核心数据,采用人工、VBA宏与大语言模型结合的方式提取并规范数据,通过SPSS系列工具与Python库实现频数分析、聚类分析、关联规则挖掘,同时构建含Resblock模块的神经网络模型,实现基于临床症状的中药预测。全文将先梳理数据处理与分析流程,再逐一呈现各环节结果,最后总结方法适用性与实际应用价值,同步配套核心代码供落地复用,兼顾理论性与实操性。

项目文件目录

研究方法与技术准备

数据来源与处理

本研究选取两家医疗机构的慢性胃炎住院病历作为研究对象,其中一家机构数据时间范围为2016年1月至2024年5月,聚焦中药配伍规律挖掘;另一家机构数据时间范围为2013年1月至2021年10月,用于神经网络模型构建,数据集含2214个样本、364种临床特征及469种中药。
数据提取采用人工、VBA宏与大语言模型协同模式,既保障人工校验的准确性,又通过工具提升效率。数据规范化依据《中药学》新世纪版标准,统一中药名称、剂量等关键信息,为后续分析奠定基础。

核心工具与方法说明

  1. 分析工具:SPSS Modeler 18.0、SPSS Statistic 26.0、Python 3.11.5(Sklearn、Scipy、Pytorch 2.0.1模块),上述工具国内均可正常访问使用,无替代需求,其中Python相关模块可通过镜像源快速安装。
  2. 分析方法:频数分布分析(提炼高频中药与临床特征)、聚类分析(K-means、AGNES,对比不同距离与连接法适用性)、关联规则挖掘(挖掘中药联用规律)、BP神经网络(含Resblock模块,优化症状到中药的预测精度)。

核心代码适配与说明(数据提取环节)

以下代码用于中药名称提取与数据清洗,优化变量名与语法结构,适配中文文本处理需求,省略部分重复数据校验代码:

import pandas as pdimport re# 读取Excel格式的病历数据文件input_excel = '病历数据.xlsx' # 替换为实际数据文件路径data_df = pd.read_excel(input_excel)# 定义汉字提取函数,过滤非中文内容(保留中药名称)def get_chinese_content(text): # 正则表达式匹配中文汉字范围 chinese_characters = ''.join(re.findall(r'[\u4e00-\u9fff]+', str(text))) return chinese_characters# 对中药名称列应用提取函数,清洗数据data_df['中药名称'] = data_df['中药名称'].astype(str).apply(get_chinese_content)# 保存清洗后的数据至新文件output_excel = '清洗后病历数据.xlsx'data_df.to_excel(output_excel, index=False, engine='openpyxl')print(f"数据清洗完成,结果已保存至 {output_excel}")

代码功能:针对病历数据中的中药名称列进行清洗,提取纯中文内容,剔除符号、数字等干扰项,保障后续分析数据的规范性。省略部分为数据去重、空值填充逻辑,可根据实际数据质量补充。

研究结果与分析

频数分析结果

本次分析共涉及281种中药、7375个用药实例,平均每张处方开具15种中药。其中甘草使用频次最高,达341次,占比71.49%,平均剂量7.8g;黄精、升麻等51种中药仅使用1次,频次最低。
频次排名前20的中药如下表所示,高频中药多集中在理气、健脾、清热类别,符合慢性胃炎脾胃失调、气滞热蕴的常见病机。
表4 药物频次统计前20位

中药频次占比(%)
甘草34171.49%
陈皮28058.70%
半夏27257.02%
白芍23749.69%
柴胡23649.48%
白术22246.54%
黄连21645.28%
茯苓19841.51%
枳实18338.36%
延胡索18338.36%
砂仁17937.53%
党参17336.27%
香附15532.49%
黄芩14229.77%
厚朴13528.30%
丹参12526.21%
紫苏梗12125.37%
当归12025.16%
海螵蛸10722.43%
干姜10221.38%

中药频次分布如下图所示,呈现明显的长尾分布特征,少数中药在临床中广泛应用,多数中药针对性使用。


相关文章

Python预测二型糖尿病:逻辑回归、XGBoost、CNN、随机森林及BP神经网络融合加权线性回归细化变量及PCA降维创新

原文链接:https://tecdat.cn/?p=43572


聚类分析结果

聚类分析核心目标是挖掘中药联用的内在规律,对比K-means与AGNES两种聚类方法,结合不同距离计算方式与连接法,从轮廓系数、临床可解释性等维度评估适用性。

K-means聚类

簇数设置为1-20时,通过WSS图(组内平方和)观察簇数适配性,拐点虽不明显,但簇数为2、3、5、9时WSS下降趋势变缓,簇数适中。

表5 不同簇数的K-means聚类平均轮廓系数

簇数量簇样本量平均轮廓系数
212,290.1490
35,30,60.1252
53,24,9,2,30.0914
94,6,14,2,2,2,8,2,10.0581

当簇数设为9时,各簇样本轮廓系数表现较好,通过PCA降维可视化聚类结果如下:

K-means聚类结果临床可解释性较强,平均评分4.67分,仅簇2可解释性较低(2分)。各簇对应不同病机的用药方案,如簇0含延胡索、砂仁等,与香砂六君子汤核心组分契合,适配脾气虚兼气滞证;簇1含黄芩、干姜等,对应气血阳虚、湿热蕴结的复杂病机。
表6 K-means聚类结果

簇名中药可解释性评分
0延胡索,砂仁,党参,木香5
1黄芩,干姜,桂枝,黄芪,生姜,大枣5
2黄连,枳实,厚朴,海螵蛸,六神曲,吴茱萸,佩兰,竹茹,苍术,浙贝母,瓜蒌,白及,鸡内金,麦芽(14味)2
3香附,紫苏梗5
4白芍,柴胡5
5陈皮,半夏5
6丹参、当归、川芎、枳壳、百合、乌药、豆蔻、酸枣仁(8味)5
7白术、茯苓5
8甘草5
AGNES聚类(不同连接法对比)
  1. 欧氏距离+最长距离法:簇数设为9时,平均轮廓系数0.0803,临床可解释性评分4.11分,部分簇中药组合对应明确诊疗需求,如簇0含香附、紫苏梗等,侧重理气活血。
  2. 欧氏距离+最短距离法:簇数设为12时,平均轮廓系数0.0637,但临床可解释性仅1.33分,多数簇仅含单味药,难以提炼联用规律。
  3. 欧氏距离+组间平均连接法:簇数设为12时,平均轮廓系数0.0901,临床可解释性3分,兼顾聚类效果与规律提取,如簇1(枳实、厚朴)、簇2(白芍、柴胡)均为临床常用配伍。

聚类分析核心代码(AGNES方法)

以下代码优化变量名与注释,适配聚类分析需求,省略部分图表美化与结果导出代码,同时提供24小时应急修复服务,代码运行异常可快速响应,效率较自行调试提升40%:

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.cluster import AgglomerativeClusteringfrom scipy.cluster.hierarchy import dendrogram, linkagefrom sklearn.metrics import silhouette_scoreimport pandas as pd# 读取预处理后的中药数据data_path = '中药数据.xlsx'df = pd.read_excel(data_path, usecols="A:RJ", nrows=41)labels = df.iloc[:, 0].values # 提取样本标签(中药名称)data = df.iloc[:, 1:].to_numpy() # 提取特征数据cluster_num = 12 # 设定簇数try: print(f"开始聚类分析,簇数设置为 {cluster_num}") # 初始化AGNES聚类器,欧氏距离+组间平均连接法 agnes_cluster = AgglomerativeClustering(n_clusters=cluster_num, affinity='euclidean', linkage='average') cluster_results = agnes_cluster.fit_predict(data)# 计算平均轮廓系数,评估聚类效果 avg_silhouette = silhouette_score(data, cluster_results, metric='euclidean') print(f"簇数{cluster_num}时,平均轮廓系数:{avg_silhouette}")# 绘制树状图 linked_matrix = linkage(data, method='average', metric='euclidean') plt.figure(figsize=(12, 6)) dendrogram(linked_matrix, orientation='top', labels=labels, show_leaf_counts=True) plt.title('层次聚类树状图') plt.xlabel('样本标签') plt.ylabel('距离阈值') plt.show() ... # 省略轮廓系数分布图绘制与结果保存代码except Exception as e: print(f"聚类分析过程中出现异常:{e}")

关联规则挖掘结果

设置最小前项支持度0.1、最小置信度0.8,共得到451条关联规则,最高项数6项,其中项数4的规则最多(210条),项数2的规则最少(10条)。规则支持度与置信度前10名的关联规则临床可解释性均为满分,契合中医用药理论。
支持度前5的关联规则中,“党参→甘草”支持度最高(29.560%),二者为临床健脾益气常用配伍;“茯苓、陈皮→半夏”支持度25.367%,对应痰湿内阻型慢性胃炎的用药方案。
置信度前5的关联规则中,“吴茱萸、陈皮→黄连”置信度达98.276%,吴茱萸温肝暖胃,黄连清热燥湿,二者配伍符合寒热错杂证的诊疗逻辑;“延胡索、茯苓、半夏→陈皮”置信度98.077%,体现理气止痛、健脾化痰的联用思路。

神经网络构建与结果

模型设计

基于临床特征预测中药使用,构建含2个Resblock模块与1个全连接层的BP神经网络,Resblock模块通过跳跃连接缓解梯度消失问题,提升模型训练效果。模型输入为364种临床特征,输出为469种中药的预测概率,Resblock输出采用Leaky ReLU激活函数,最终输出采用Sigmoid激活函数,适配多标签分类需求。

特征与标签选择

临床特征频次前3位为烧心(63.69%)、口干(61.92%)、夜寐欠安(61.34%),均为慢性胃炎常见症状;中药标签选取覆盖高、中、低频药物,共12种,验证不同频次药物的预测效果。

模型结果与评估

采用二折交叉验证评估模型性能,F1值为43.54%,多数标签F1值波动幅度控制在0.017以内,模型稳定性较强。其中“黄芩”“陈皮、柴胡”等标签F1值超过50%,预测效果较好;“佩兰、黄芩”标签预测稳定性较差,可能与该组合临床应用场景差异较大有关。
高频药物黄芩预测F1值最高(53.42%),特征明确易被模型捕捉;白芍虽为高频药物,但召回率仅0.0799,呈现“高精低召”特征,提示其应用场景多样性导致模型难以全面识别;低频药物(占比<1%)因样本量极少,模型多预测为阴性,F1值无法计算,需通过数据扩充优化。

总结与应用建议

本研究通过多种数据分析方法与AI模型,系统挖掘了慢性胃炎中药用药规律,构建了症状到中药的预测模型,核心结论与建议如下:

  1. 用药规律:甘草、陈皮、半夏等为慢性胃炎核心用药,多以理气、健脾、清热类中药联用为主,关联规则挖掘出的高频组合可作为临床用药参考。
  2. 方法适配:K-means聚类在临床可解释性上优于AGNES,欧氏距离+组间平均连接法可作为AGNES聚类的优选参数,为同类研究提供方法借鉴。
  3. 模型优化:Resblock优化的BP神经网络可实现中药预测,但需针对低频药物扩充样本,优化标签设计,提升模型泛化能力。
  4. 临床应用:研究结果可辅助医师快速制定用药方案,尤其为年轻医师提供配伍参考,同时模型可作为中医用药教学的辅助工具。
    本研究所有代码与数据已同步至交流社群,提供人工答疑与24小时代码调试服务,助力临床数据挖掘爱好者快速落地实践。后续可结合更多医疗机构数据,优化模型参数,进一步提升结果的临床适配性。