GenSX (不一样的AI应用框架)架构学习指南

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。

GenSX 架构学习指南 🚀

👋 嗨!欢迎来到 GenSX 的学习之旅。我是你的技术教练,接下来会陪你一起深入这个有趣的项目。

在开始之前,我想说:这不是一份枯燥的技术文档,而是我在研究 GenSX 后整理的实用笔记。就像和朋友聊天一样,我会用最通俗的方式帮你理解这个项目的精髓。准备好了吗?Let's go! 💪


第一部分:项目架构深度解析(像架构师一样俯瞰全景)🔍

1. 项目架构概览

🎭 用一个类比来理解 GenSX

想象一下,你在组织一场大型音乐会。传统的做法(比如很多 LLM 框架)就像在白板上画流程图:这里有个节点代表"调音师",那里有个节点代表"灯光师",然后用箭头连接它们,还要维护一个"全局状态板"记录演出进度。

GenSX 换了个思路:它把音乐会看成一个个函数的组合。调音师是一个函数,灯光师是另一个函数,你只需要把它们组合起来:音乐会 = 调音() + 灯光() + 演出()。这就是 GenSX 的核心理念——函数式组合胜过图式编排

听起来简单吧?但别被这简单的外表迷惑了,GenSX 的强大之处在于:它让你用最自然的 TypeScript 代码表达复杂的 AI 工作流,同时在背后默默帮你处理追踪、断点恢复、错误处理这些"脏活累活"。😊

🎯 核心设计特征

让我直接告诉你 GenSX 的几个关键设计决策:

1. 纯函数式组件模型

  • Component 是最基础的构建单元,就是一个纯 TypeScript 函数
  • Workflow 是顶层编排器,也是一个函数,但会被包装成可独立部署的单元
  • 这两者都是通过高阶函数(Higher-Order Function)创建的,听着有点学术?别担心,其实就是"函数包装函数"

2. Monorepo 架构

  • 采用 pnpm workspace + Turbo 管理的 monorepo 结构
  • packages/ 目录:15 个核心包,各司其职
  • examples/ 目录:20+ 个实战示例,从简单到复杂应有尽有
  • website/ 目录:官方文档和主页

3. 插件化 AI 提供商支持
GenSX 本身不绑定任何 AI 提供商,而是通过独立的集成包支持:

  • @gensx/anthropic - Claude 集成
  • @gensx/openai - OpenAI 集成
  • @gensx/vercel-ai - Vercel AI SDK 集成

这种设计让你可以轻松切换或混用不同的 AI 模型。

4. 自动化追踪与可观测性
这可能是 GenSX 最酷的特性之一!每个组件的输入、输出、LLM 调用都会被自动记录,形成一个完整的执行树(Checkpoint)。这不仅方便调试,还支持:

  • 工作流中断后从断点恢复
  • 实时查看执行进度
  • 回放历史执行过程

🌟 同类项目对比

如果你了解 LangChain 或 LangGraph,你会发现 GenSX 的不同:

特性 LangGraph GenSX
编程模型 图式(节点+边) 函数式组合
学习曲线 需要学习框架 DSL 就是 TypeScript
类型安全 部分支持 完全类型安全
可测试性 需要模拟框架 纯函数,易测试
灵活性 框架约束较多 自由度高

GenSX 的设计哲学是:不发明新概念,而是拥抱标准的 TypeScript/JavaScript。这意味着你不需要学习新的 DSL 或特殊语法,你的 TypeScript 技能就是你的超能力。💡

🔗 技术栈分析

让我给你列出核心技术组件,以及选择它们的原因:

开发语言与运行时

  • TypeScript 5.7:最新的类型系统,支持所有现代 TS 特性
  • Node.js 18+:LTS 版本,稳定可靠
  • 为什么选 TS?因为 LLM 应用的复杂度需要强类型来保驾护航

包管理与构建

  • pnpm 9+:比 npm/yarn 更快、更节省磁盘空间
  • Turbo:增量构建和缓存,让 monorepo 的构建速度飞起
  • Rollup:打包工具,生成 ESM 和 CJS 两种格式

测试与质量

  • Vitest:现代化的测试框架,与 Vite 生态无缝集成
  • ESLint + Prettier:代码规范的守护者

核心依赖

  • Zod:运行时类型验证,用于 LLM 工具定义
  • deterministic-object-hash:为组件生成唯一 ID
  • @common.js/serialize-error:错误序列化,支持 checkpoint

这个技术栈的选择很克制,没有引入过多的依赖。每个工具都有明确的职责,这是我很欣赏的一点。✅

🏗️ 架构流程描述

让我们跟随一个实际的请求,看看它是怎么流经整个系统的:

场景:用户请求生成一篇博客

  1. 入口层:用户调用 WriteBlog 工作流

    const result = await WriteBlog({
         
      title: "GenSX 入门指南",
      prompt: "介绍 GenSX 的核心概念"
    });
    
  2. 工作流初始化component.ts 中的 Workflow 函数)

    • 创建 ExecutionContext(执行上下文)
    • 初始化 CheckpointManager(检查点管理器)
    • 设置消息监听器(用于实时追踪)
  3. 组件执行

    • WriteBlog 内部调用多个子组件:ResearchWriteOutlineWriteDraftEditorial
    • 每个组件调用时:
      • 生成唯一的节点 ID(基于组件名、参数和调用位置)
      • 检查 checkpoint 是否已有缓存结果
      • 如果有缓存,直接返回;否则执行函数
      • 执行完成后,更新 checkpoint
  4. LLM 调用(通过集成包,如 @gensx/anthropic

    • 组件内部调用 generateText 等 AI 函数
    • GenSX 自动捕获 LLM 的输入输出
    • 如果是流式响应,捕获每个 chunk 并聚合
  5. 结果返回与追踪

    • 组件完成后,发送 component-end 消息
    • 最终结果返回给用户
    • Checkpoint 持久化(如果配置了远程存储)

这整个过程是透明且可追溯的。你不需要手动打日志,GenSX 已经帮你记录了一切。


2. 目录结构与核心流程

好的,了解了宏观架构后,让我们深入代码层面,看看项目的"筋骨"是如何搭建的。

📁 目录组织逻辑

GenSX 采用的是经典的 monorepo 结构,但组织得非常清晰:

gensx/
├── packages/          # 📦 核心包和集成包
│   ├── gensx-core/    # 🎯 核心引擎(Component、Workflow、Checkpoint)
│   ├── gensx/         # 🛠️ CLI 工具和开发服务器
│   ├── gensx-anthropic/   # 🤖 Claude 集成
│   ├── gensx-openai/      # 🤖 OpenAI 集成
│   ├── gensx-vercel-ai/   # 🤖 Vercel AI SDK 集成
│   ├── gensx-storage/     # 💾 存储抽象(Blob、SQL、向量)
│   ├── gensx-react/       # ⚛️ React 集成
│   ├── gensx-client/      # 🌐 SDK 客户端
│   ├── create-gensx/      # 🚀 项目脚手架
│   └── ...                # 其他工具包
├── examples/          # 💡 示例项目
│   ├── blog-writer/   # ✍️ 完整的博客生成工作流
│   ├── deep-research/ # 🔬 深度研究助手
│   ├── chat-ux/       # 💬 聊天界面示例
│   └── ...
├── website/           # 📚 文档和官网
│   ├── docs/          # 文档站点
│   └── home/          # 官网主页
├── pnpm-workspace.yaml    # pnpm 工作区配置
├── turbo.json             # Turbo 构建配置
└── package.json           # 根包配置

设计意图分析

  1. 按功能模块划分:每个 package 都有明确的职责边界
  2. 核心与集成分离gensx-core 不依赖任何 AI 提供商,保持纯净
  3. 示例即文档examples/ 不仅是示例,更是最佳实践的展示

这种结构的好处是:你想学习某个特定功能,直接去对应的 package 或 example 即可。不用在一个巨大的代码库里翻来翻去。😌

🔑 关键文件定位

第一个应该阅读的文件

  1. README.md(项目根目录)

    • 这里有最直观的介绍和快速开始代码
    • 先读这个,建立全局认知
  2. packages/gensx-core/src/component.ts(核心实现)

    • ComponentWorkflow 函数的实现
    • 这是理解 GenSX 魔法的关键
  3. examples/blog-writer/src/workflows.ts(实战示例)

    • 看一个完整的工作流是怎么写的
    • 理解组件组合的模式

核心业务逻辑所在

  • packages/gensx-core/src/:整个框架的大脑
    • component.ts:组件和工作流的定义与执行
    • checkpoint.ts:检查点管理,支持断点恢复
    • context.ts:执行上下文,管理调用栈
    • workflow-context.ts:工作流级别的上下文和消息传递

🔗 模块依赖关系

让我画个依赖图帮你理解:

@gensx/core (核心引擎,无外部业务依赖)
    ↑
    ├─ @gensx/anthropic (依赖 core,集成 Anthropic)
    ├─ @gensx/openai (依赖 core,集成 OpenAI)
    ├─ @gensx/vercel-ai (依赖 core,集成 Vercel AI SDK)
    ├─ @gensx/storage (依赖 core,提供存储能力)
    └─ @gensx/react (依赖 core,提供 React Hooks)

gensx (CLI 工具,依赖 core 和其他集成包)

examples/* (示例项目,可以依赖任何包)

依赖特点

  • 单向依赖:所有包都依赖 @gensx/core,但 core 不依赖任何业务包
  • 无循环依赖:结构非常清晰
  • 按需引入:你只需要安装用到的包

这种依赖设计符合"依赖倒置原则",core 定义抽象,具体实现在各个集成包中。

🎬 典型业务流程

让我选择一个最具代表性的场景——Blog Writer,详细说明其数据流和控制流。

业务场景:根据标题和提示生成一篇博客文章

涉及文件

  • examples/blog-writer/src/workflows.ts:主工作流
  • examples/blog-writer/src/components/research.ts:研究组件
  • examples/blog-writer/src/components/outline.ts:大纲组件
  • examples/blog-writer/src/components/draft.ts:草稿组件
  • examples/blog-writer/src/components/editorial.ts:编辑组件

流程图

sequenceDiagram
    participant User
    participant WriteBlog as WriteBlog Workflow
    participant Research
    participant WriteOutline
    participant WriteDraft
    participant Editorial
    participant LLM as AI Provider

    User->>WriteBlog: { title, prompt }

    WriteBlog->>Research: 1. 研究阶段
    Research->>LLM: 生成研究主题
    LLM-->>Research: 返回主题列表
    Research->>LLM: 并行搜索每个主题
    LLM-->>Research: 返回研究结果
    Research-->>WriteBlog: { topics, webResearch, ... }

    WriteBlog->>WriteOutline: 2. 创建大纲
    WriteOutline->>LLM: 基于研究生成结构化大纲
    LLM-->>WriteOutline: 返回大纲(sections)
    WriteOutline-->>WriteBlog: { introduction, sections, conclusion }

    WriteBlog->>WriteDraft: 3. 撰写草稿
    loop 每个章节
        WriteDraft->>LLM: 撰写单个章节
        LLM-->>WriteDraft: 返回章节内容
    end
    WriteDraft-->>WriteBlog: 完整草稿

    WriteBlog->>Editorial: 4. 编辑润色
    Editorial->>LLM: 提升文章质量
    LLM-->>Editorial: 返回最终版本
    Editorial-->>WriteBlog: 最终内容

    WriteBlog-->>User: { title, content, metadata }

详细步骤说明

  1. Research 阶段src/components/research.ts

    • 生成 5-7 个研究主题
    • 并行调用 Perplexity API 进行网络搜索
    • 搜索内部文档库(如果配置了 GenSX Storage)
    • 返回聚合的研究数据
  2. WriteOutline 阶段src/components/outline.ts

    • 接收研究数据
    • 调用 Claude 生成结构化大纲
    • 大纲包含:introduction、多个 sections(每个有 key points)、conclusion
  3. WriteDraft 阶段src/components/draft.ts

    • 并行处理每个 section
    • 每个 section 调用 WriteSection 组件
    • WriteSection 可以使用 web research 工具获取额外信息
    • 最后组合成完整草稿
  4. Editorial 阶段src/components/editorial.ts

    • 接收草稿
    • 应用专业编辑指南(短句、清晰表达、数据支持)
    • 控制字数,消除冗余
    • 返回最终版本

关键实现细节

const WriteBlog = gensx.Workflow("WriteBlog", async (props: WriteBlogProps) => {
  const targetWordCount = props.wordCount ?? 1500;

  // 步骤 1
  const research = await Research({
    title: props.title,
    prompt: props.prompt,
  });

  // 步骤 2
  const outline = await WriteOutline({
    title: props.title,
    prompt: props.prompt,
    research: research,
  });

  // 步骤 3
  const draft = await WriteDraft({
    title: props.title,
    prompt: props.prompt,
    outline: outline,
    research: research,
    targetWordCount: targetWordCount,
  });

  // 步骤 4
  const finalContent = await Editorial({
    title: props.title,
    prompt: props.prompt,
    draft: draft,
    targetWordCount: targetWordCount,
  });

  // 可选步骤 5:风格匹配
  if (props.referenceURL) {
    toneMatchedContent = await MatchTone({...});
  }

  return { title, content, metadata };
});

看到了吗?代码就像在讲故事。没有复杂的配置,没有奇怪的 API,就是一步步调用函数。这就是 GenSX 的魅力所在。✨


3. 代码结构观察

现在让我们聚焦到代码质量和设计模式上。这部分不是挑刺,而是帮你识别值得学习的编程实践。

🎨 代码组织模式

1. 模块化与关注点分离

GenSX 的代码组织体现了清晰的关注点分离:

  • 核心抽象层gensx-core

    • component.ts:组件和工作流的定义
    • checkpoint.ts:状态管理
    • context.ts:执行环境

    这一层只关心"如何执行",不关心"执行什么"

  • 集成适配层gensx-anthropicgensx-openai 等)

    • 每个集成包提供对应 AI 提供商的 wrapper
    • 统一的接口设计,方便切换
  • 应用层examples/

    • 业务逻辑
    • 具体的组件实现

2. 领域模型清晰

查看 gensx-core/src/types.tscheckpoint-types.ts,你会发现 GenSX 定义了清晰的领域模型:

// 组件选项
interface ComponentOpts {
   
  secretProps?: string[];      // 敏感属性遮罩
  secretOutputs?: boolean;      // 输出遮罩
  name?: string;                // 组件名称
  metadata?: Record<string, unknown>;
  aggregator?: (chunks: unknown[]) => unknown; // 流式聚合
}

// 执行节点
interface ExecutionNode {
   
  id: string;
  componentName: string;
  props: Record<string, unknown>;
  output?: unknown;
  completed: boolean;
  children: ExecutionNode[];
  // ...
}

这些类型定义就是 GenSX 的"领域语言",理解了它们,就理解了 GenSX 的思维模型。

3. 接口与实现分离

虽然 GenSX 是 TypeScript 项目,但它依然遵循"面向接口编程"的思想。例如:

  • CheckpointManager 是一个接口,可以有本地实现和远程实现
  • 存储抽象(@gensx/storage)定义了 Blob、SQL、Vector 的接口,具体实现可替换

🏗️ 设计模式识别

让我告诉你在 GenSX 中用到的几个经典设计模式:

1. 高阶函数(Higher-Order Function)

这是 GenSX 最核心的模式:

// Component 本身是一个高阶函数
export function Component<P, R>(
  name: string,
  target: (props: P) => R
): (props?: P, runtimeOpts?: ComponentOpts) => R {
   
  return (props, runtimeOpts) => {
   
    // 在这里注入追踪、checkpoint、错误处理等逻辑
    return target(props);
  };
}

用户传入一个普通函数,GenSX 返回一个增强版的函数。这就像给函数"穿上了一件铠甲"🛡️。

2. 上下文模式(Context Pattern)

GenSX 使用 ExecutionContext 来管理调用栈和全局状态:

// 创建上下文
const context = new ExecutionContext(...);

// 在上下文中执行
await withContext(context, () => {
   
  // 任何嵌套调用都能访问这个上下文
  const currentContext = getCurrentContext();
});

这类似于 React 的 Context API,避免了参数的层层传递。

3. 观察者模式(Observer Pattern)

WorkflowMessageListener 用于监听工作流的各种事件:

type WorkflowMessageListener = (message: WorkflowMessage) => void;

// 消息类型
type WorkflowMessage = 
  | {
    type: "start"; workflowName: string }
  | {
    type: "component-start"; componentName: string }
  | {
    type: "component-end"; componentName: string }
  | {
    type: "error"; error: string }
  | ...

这使得外部可以监听工作流的执行,实现实时追踪、进度显示等功能。

4. 策略模式(Strategy Pattern)

流式结果的聚合使用了策略模式:

interface ComponentOpts {
   
  aggregator?: (chunks: unknown[]) => unknown;
}

// 默认策略
const defaultAggregator = (chunks: unknown[]) => {
   
  if (typeof chunks[0] === "string") {
   
    return chunks.join("");  // 字符串拼接
  }
  return chunks;  // 数组聚合
};

用户可以提供自定义的聚合策略。

✨ 代码质量观察

让我客观地评价一下 GenSX 的代码质量:

优点

类型安全:充分利用 TypeScript 的类型系统,几乎没有 any
函数式风格:大量使用纯函数,副作用明确隔离
测试覆盖:核心包都有 vitest 测试,覆盖率较高
文档齐全:README、注释、示例相辅相成
错误处理:使用 @common.js/serialize-error 统一处理错误序列化

可观察的特征

📊 函数长度:大部分函数在 50-100 行,有少数复杂函数(如 component.ts 中的流处理)超过 200 行
📊 模块耦合度:低耦合,核心模块之间依赖关系清晰
📊 配置复杂度:配置相对简单,主要通过 gensx.yaml 和环境变量

💡 改进方向提示(学习机会)

在学习 GenSX 时,你可以关注以下几个"值得思考的点":

1. 流式处理的复杂性

component.ts 中的流式处理(captureAsyncGeneratorcaptureReadableStream)是比较复杂的部分。如果你想深入理解:

  • 先学习 JavaScript 的 AsyncIterator 和 ReadableStream
  • 理解为什么需要在 runInContext 中执行
  • 思考如何优化流式数据的 checkpoint 更新频率

2. ID 生成策略

节点 ID 的生成(utils/nodeId.ts)使用了确定性哈希。你可以思考:

  • 为什么需要确定性 ID?(提示:checkpoint 复用)
  • 如果组件被调用多次,如何区分?
  • callIndex 的作用是什么?

3. Checkpoint 的设计权衡

Checkpoint 是 GenSX 的核心特性,但它也有成本:

  • 序列化大对象的性能开销
  • 敏感数据的遮罩机制(secretProps
  • 更新频率的平衡(每 200ms 更新一次流式结果)

这些都是实际工程中的权衡,值得你深入探索。

4. 可能的重构机会

我在代码中发现了一些 TODO 注释,比如:

// TODO: Don't emit this when rerunning the workflow with a partial checkpoint.

这些是项目维护者留给未来的改进点,也是你参与贡献的好机会!


第二部分:技能需求清单(你的学习弹药库)📚

好了,了解了架构全景后,你可能会问:"我需要掌握哪些技能才能玩转 GenSX?"别着急,让我给你列个清单。这不是要吓唬你,而是让你心里有数,知道从哪里补强。

1. 基础技能要求

📌 编程语言:TypeScript/JavaScript

必须掌握的 TS 特性

类型系统基础

  • 基本类型、接口(interface)、类型别名(type)
  • 泛型(Generics):GenSX 大量使用泛型保证类型安全
    function Component<P extends object, R>(...)
    
  • 联合类型和交叉类型
  • 类型推导和类型守卫

异步编程

  • Promise 和 async/await(这是核心!)
  • 理解 Promise 链和错误处理
  • AsyncIterator 和 AsyncGenerator(用于流式处理)
    async function* myGenerator() {
         
      yield* someAsyncIterable;
    }
    

ES6+ 特性

  • 解构赋值、箭头函数、模板字符串
  • 扩展运算符(...
  • 模块系统(import/export)

函数式编程基础

  • 纯函数的概念
  • 高阶函数(函数作为参数和返回值)
  • 函数组合、不可变数据

版本要求:TypeScript 5.0+(项目使用 5.7)

💡 小贴士:如果你对"高阶函数"不太熟悉,先去理解 Array 的 mapfilterreduce,它们就是高阶函数的例子。GenSX 的 Component 和 Workflow 本质上也是高阶函数。

📌 Node.js 生态

包管理器:pnpm

  • 为什么是 pnpm 而不是 npm?因为它更快,磁盘占用更少
  • 基本命令:pnpm install, pnpm add, pnpm run
  • workspace 概念:理解 monorepo 中的包依赖

构建工具

  • Turbo:增量构建和任务编排
  • Rollup:打包库代码,了解 ESM 和 CJS 的区别

测试框架:Vitest

  • 编写单元测试:describe, it, expect
  • Mock 和 Stub、异步测试

📌 版本控制

Git 基础

  • 分支管理、提交规范(Conventional Commits)
  • Pull Request 流程

2. 进阶技能要求

🚀 AI/LLM 相关知识

LLM API 使用

  • 理解 LLM 的基本概念:prompt、temperature、tokens
  • 熟悉至少一种 LLM API(OpenAI/Anthropic)

Prompt 工程

  • System prompt 和 user prompt 的区别
  • Few-shot learning、Chain of thought prompting
  • Tool/Function calling

流式响应处理

  • 理解为什么需要流式响应(用户体验)
  • ReadableStream API

🏗️ 架构模式

Monorepo 架构

  • workspace 的概念、跨包依赖管理

设计模式(在 GenSX 中用到的)

  • 高阶函数模式、上下文模式、观察者模式、策略模式

函数式编程进阶

  • 函数组合、函数管道、柯里化

3. 技能掌握程度建议

🌱 初学者(只想使用 GenSX)

必须掌握:⭐⭐⭐⭐⭐

  • TypeScript 基础(类型、接口、泛型入门)
  • async/await
  • 基本的 LLM API 使用

学习路径

  1. 跑通一个示例(30分钟)
  2. 修改示例实现自己的需求(2-3天)
  3. 从零开始写一个简单 workflow(1周)

🌿 有经验的开发者(想深度使用并定制)

必须掌握:⭐⭐⭐⭐⭐

  • 上述所有基础技能
  • 函数式编程思想
  • LLM 的 tool calling
  • 流式响应处理

学习路径

  1. 通读核心包源码(3-5天)
  2. 实现一个自定义集成包(1周)
  3. 贡献一个中等复杂度的 feature(2-3周)

🌳 进阶贡献者(想参与核心开发)

全部掌握:⭐⭐⭐⭐⭐

  • 所有上述技能
  • Checkpoint 机制的深度理解
  • 流式数据的序列化/反序列化
  • 性能优化

学习路径

  1. 阅读所有核心包源码和测试(1-2周)
  2. 修复几个 bug(2-3周)
  3. 实现一个核心 feature(1-2个月)

🎯 自我评估表

来,花 1 分钟评估一下你目前的技能水平:

技能 完全掌握 部分掌握 需要学习
TypeScript 基础
async/await
高阶函数
LLM API 使用
pnpm
Vitest
Monorepo

这个表格不是给我看的,是给你自己的学习计划做参考。😊


第三部分:学习路径规划(你的专属教练计划)🎯

好了,知道了需要什么技能,现在让我们制定一个具体的学习计划。我会手把手教你从零到一。

1. 项目运行入口定位(快速上手)

🚀 一键启动指南

目标:15 分钟内成功运行一个示例

前置要求

  • Node.js 18+ (推荐 20 LTS)
  • pnpm 9+
  • API Key: OpenAI 或 Anthropic

步骤 1: 克隆项目

# 克隆仓库
git clone https://github.com/gensx-inc/gensx.git
cd gensx

# 查看 Node 版本
node --version  # 应该 >= 18

# 安装 pnpm(如果还没有)
npm install -g pnpm@latest

步骤 2: 安装依赖

# 在项目根目录
pnpm install

# 这会安装所有 packages 和 examples 的依赖
# 第一次可能需要 2-5 分钟,耐心等待☕

步骤 3: 构建核心包

# 构建所有核心包
pnpm build

⚠️ 常见陷阱 1:如果 pnpm install 失败,可能是网络问题,尝试:

# 使用国内镜像
pnpm config set registry https://registry.npmmirror.com
pnpm install

⚠️ 常见陷阱 2:如果构建失败提示 "Cannot find module",确保你在正确的目录,并且先运行了 pnpm install

步骤 4: 运行一个简单示例

让我们运行 anthropic-examples

cd examples/anthropic-examples

# 配置环境变量
echo "ANTHROPIC_API_KEY=your_api_key_here" > .env

# 运行示例
pnpm start

成功标志

  1. 没有报错
  2. 看到 AI 生成的文本输出
  3. 进程正常退出

如果你看到这些,恭喜!你已经成功运行了第一个 GenSX 工作流!🎉

🔧 环境配置清单

必要工具

  • ✅ Node.js 18+
  • ✅ pnpm 9+
  • ✅ 一个文本编辑器(推荐 VS Code)

API Keys

最常见配置陷阱及解决方案

问题 解决方案
command not found: pnpm 运行 npm install -g pnpm
API key not found 创建 .env 文件并设置 key
Module not found 运行 pnpm build 构建依赖

2. 循序渐进学习计划(四阶段法)

现在我给你设计一个循序渐进的学习路径,每个阶段都有明确的目标。

🌱 阶段一:环境搭建和项目启动(1-2 天)

学习目标

  • ✅ 成功构建整个项目
  • ✅ 运行至少 3 个不同的示例
  • ✅ 能在代码中打断点并调试

Day 1: 环境准备(4小时)

  1. 按照"一键启动指南"完成项目搭建
  2. 配置 VS Code 的调试环境
  3. 运行 anthropic-examples 并在第一个 Component 调用处打断点
  4. 观察调用栈,理解函数调用流程

Day 2: 探索示例(4小时)

  1. 运行并理解 openai-examples
  2. 运行 reflection 示例,观察自我反思模式
  3. 尝试修改示例的 prompt,看输出如何变化

验收标准

  • [ ] 能独立运行任意示例
  • [ ] 能在关键位置打断点并单步调试
  • [ ] 理解一个简单示例的完整执行流程

🌿 阶段二:核心流程理解(3-5 天)

学习目标

  • ✅ 理解 Component 和 Workflow 的区别和联系
  • ✅ 追踪一个完整业务流程,画出自己的流程图
  • ✅ 理解 Checkpoint 机制的工作原理

Day 1-2: 深入一个完整示例

选择 blog-writer 作为学习对象。

  1. 阅读源码(4小时)

    • src/workflows.ts - 主流程
    • src/components/research.ts - 研究组件
    • src/components/outline.ts - 大纲组件
  2. 绘制流程图(2小时)
    使用 Mermaid 或任何你喜欢的工具,画出数据流图和控制流图

Day 3-4: 理解核心包(8小时)

按这个顺序阅读 @gensx/core

  1. types.ts (30分钟) - 理解核心类型定义
  2. component.ts (2小时) - 理解 Component 和 Workflow 的实现
  3. checkpoint.ts (2小时) - 理解 checkpoint 机制
  4. context.ts (1小时) - 理解执行上下文

阅读技巧

  • 不要试图一次理解所有细节
  • 先理解主流程,跳过复杂的边界情况处理
  • 遇到不懂的概念,先记下来,继续往下读

Day 5: 实践练习(6小时)

修改 blog-writer

  • 添加一个新的组件:SummarizeKeyPoints
  • 在 Editorial 之后调用,提取文章的关键要点

验收标准

  • [ ] 能画出 blog-writer 的完整流程图
  • [ ] 能解释 Component 和 Workflow 的区别
  • [ ] 理解 checkpoint 的作用和触发时机
  • [ ] 成功修改并运行了一个示例

🌳 阶段三:模块深入和定制开发(1-2 周)

学习目标

  • ✅ 能修改或扩展一个现有功能
  • ✅ 创建自己的集成包
  • ✅ 理解流式响应的处理

Week 1: 扩展现有功能

项目:为 blog-writer 添加多语言支持

  1. 需求分析(1小时)

    • 支持输入目标语言参数
    • 在最后阶段翻译内容
  2. 实现代码(8小时)

    创建 src/components/translate.ts

    import * as gensx from "@gensx/core";
    import {
          generateText } from "@gensx/anthropic";
    import {
          anthropic } from "@ai-sdk/anthropic";
    
    interface TranslateProps {
         
      content: string;
      targetLanguage: string;
      title: string;
    }
    
    export const TranslateContent = gensx.Component(
      "TranslateContent",
      async ({
          content, targetLanguage, title }: TranslateProps) => {
         
        const result = await generateText({
         
          messages: [
            {
         
              role: "user",
              content: `Translate the following blog post to ${
           targetLanguage}. 
              Preserve all markdown formatting.
              Title: ${
           title}
    
              Content:
              ${
           content}`
            }
          ],
          model: anthropic("claude-3-5-sonnet-20241022"),
        });
    
        return result.text;
      }
    );
    
  3. 测试(2小时)

    pnpm start -- --title "AI的未来" --targetLanguage "Chinese"
    

Week 2: 创建自己的集成包

项目:集成 Groq(一个快速的 LLM API)

这个练习会让你深入理解 GenSX 的集成机制。

  1. 创建包结构(1小时)

    mkdir -p packages/gensx-groq/src
    cd packages/gensx-groq
    pnpm init
    
  2. 实现核心功能(6小时)
    创建 src/groq.ts 并实现 generateText 和流式版本

  3. 编写测试(4小时)

  4. 在示例中使用(2小时)

验收标准

  • [ ] 成功为现有项目添加了新功能
  • [ ] 创建了一个可工作的集成包
  • [ ] 编写了测试并全部通过

🌲 阶段四:架构理解和贡献指南(2 周+)

学习目标

  • ✅ 能理解技术选型的原因
  • ✅ 识别并修复一个 bug
  • ✅ 贡献代码到主仓库

Week 1-2: 深入核心机制

  1. Checkpoint 机制深度研究(20小时)

    • 阅读 checkpoint.ts 的完整实现
    • 理解节点 ID 的生成算法
    • 理解增量更新的机制
  2. 性能优化研究(10小时)

    • 分析流式结果的更新频率(为什么是 200ms?)
    • 研究大对象序列化的性能影响

Week 3: 参与开源贡献

  1. 寻找 Good First Issue(2小时)

  2. 修复一个 Bug(20小时)

    流程

    # 1. Fork 仓库并克隆
    git clone https://github.com/YOUR_USERNAME/gensx.git
    cd gensx
    git remote add upstream https://github.com/gensx-inc/gensx.git
    
    # 2. 创建分支
    git checkout -b fix/issue-123
    
    # 3. 修复 bug
    # ... 编码 ...
    
    # 4. 运行测试
    pnpm test
    pnpm lint
    
    # 5. 提交
    git commit -m "fix: resolve issue #123"
    
    # 6. 推送并创建 PR
    git push origin fix/issue-123
    

验收标准

  • [ ] 理解了 GenSX 的核心设计决策
  • [ ] 成功提交了至少一个 PR
  • [ ] PR 被合并或得到了有价值的反馈

3. 学习路径流程图

graph TD
    Start[开始学习 GenSX] --> Check{评估技能水平}

    Check -->|初学者| Stage1[阶段一: 环境搭建]
    Check -->|有经验| Stage2[阶段二: 核心流程]
    Check -->|高级| Stage4[阶段四: 架构深入]

    Stage1 --> Milestone1{能运行示例?}
    Milestone1 -->|否| Troubleshoot1[查看常见问题]
    Troubleshoot1 --> Stage1
    Milestone1 -->|是| Stage2

    Stage2 --> Milestone2{理解流程?}
    Milestone2 -->|否| Review1[重读核心代码]
    Review1 --> Stage2
    Milestone2 -->|是| Stage3[阶段三: 定制开发]

    Stage3 --> Milestone3{完成项目?}
    Milestone3 -->|否| GetHelp[寻求帮助]
    GetHelp --> Stage3
    Milestone3 -->|是| Decision{下一步目标?}

    Decision -->|深度学习| Stage4
    Decision -->|应用开发| BuildApp[构建自己的应用]
    Decision -->|开源贡献| Contribute[参与贡献]

    Stage4 --> Milestone4{理解核心?}
    Milestone4 -->|否| DeepDive[深度研究]
    DeepDive --> Stage4
    Milestone4 -->|是| Contribute

    Contribute --> Success[成为 GenSX 贡献者🎉]
    BuildApp --> Success2[成功应用 GenSX💪]

学习节奏建议

  • 🐢 慢速(业余时间):每天 1-2 小时,3-4 个月完成
  • 🚶 正常(兼职学习):每天 3-4 小时,1-2 个月完成
  • 🏃 快速(全职学习):每天 6-8 小时,2-3 周完成

记住:质量比速度更重要。理解透一个概念,胜过走马观花看十个。😊


第四部分:实践建议和进阶指导(从会用到精通)💡

1. 调试技巧和常见陷阱

🐛 推荐的调试方法

1. 使用 VS Code 调试器

配置 .vscode/launch.json

{
   
  "version": "0.2.0",
  "configurations": [
    {
   
      "type": "node",
      "request": "launch",
      "name": "Debug Example",
      "skipFiles": ["<node_internals>/**"],
      "program": "${workspaceFolder}/examples/your-example/src/index.ts",
      "runtimeExecutable": "pnpm",
      "runtimeArgs": ["tsx"],
      "envFile": "${workspaceFolder}/examples/your-example/.env"
    }
  ]
}

2. 善用 console.log

在组件内部添加日志:

const MyComponent = gensx.Component("MyComponent", async (props) => {
   
  console.log("[MyComponent] Input:", JSON.stringify(props, null, 2));
  const result = await doSomething(props);
  console.log("[MyComponent] Output:", result);
  return result;
});

3. 利用 Checkpoint 可视化

GenSX Cloud 提供了工作流执行的可视化界面,可以看到每个组件的输入输出和执行时间。

⚠️ 新人常见 5 大陷阱

陷阱 1:忘记 await

// ❌ 错误
const result = MyComponent({
    value: 5 });  // 返回的是 Promise!

// ✅ 正确
const result = await MyComponent({
    value: 5 });

陷阱 2:在循环中串行调用

// ❌ 低效
const results = [];
for (const item of items) {
   
  results.push(await ProcessItem({
    item }));
}

// ✅ 并行
const results = await Promise.all(
  items.map(item => ProcessItem({
    item }))
);

陷阱 3:环境变量未设置

# 总是在运行前检查
echo $ANTHROPIC_API_KEY

陷阱 4:类型不匹配

// 确保组件的输入输出类型明确
interface MyComponentInput {
   
  value: number;  // 明确类型
}

const MyComponent = gensx.Component(
  "MyComponent",
  async ({
    value }: MyComponentInput) => {
     // 使用类型注解
    return value * 2;
  }
);

陷阱 5:忽略错误处理

// ✅ 添加适当的错误处理
const MyComponent = gensx.Component("MyComponent", async (props) => {
   
  try {
   
    const result = await callLLM(props);
    return result;
  } catch (error) {
   
    console.error("[MyComponent] Error:", error);
    throw error;  // 让 GenSX 处理错误追踪
  }
});

2. 扩展练习建议

从易到难,逐步提升:

🌱 初级练习

练习 1:修改 prompt(30分钟)

  • anthropic-examples 中修改 system prompt
  • 观察输出的变化

练习 2:添加日志(1小时)

  • 在 blog-writer 的每个组件中添加日志
  • 输出组件的执行时间

练习 3:参数调优(2小时)

  • 修改 LLM 的 temperature 参数
  • 尝试不同的 wordCount 设置

🌿 中级练习

练习 4:新增组件(4小时)

  • 在 blog-writer 中添加 FactCheck 组件
  • 验证文章中的事实性陈述

练习 5:错误恢复(6小时)

  • 实现一个 retry 机制
  • 当 LLM 调用失败时自动重试

练习 6:性能优化(8小时)

  • 使用并行处理加速 WriteDraft
  • 测量并对比优化前后的时间

🌳 高级练习

练习 7:自定义存储(2-3天)

  • 实现一个自定义的 Checkpoint 存储后端
  • 使用 Redis 或 PostgreSQL

练习 8:构建完整应用(1-2周)

  • 创建一个包含前端的完整应用
  • 使用 GenSX React 集成
  • 部署到 GenSX Cloud

练习 9:性能监控(1周)

  • 添加 OpenTelemetry 集成
  • 追踪 LLM 调用的延迟和成本

3. 参与贡献的途径

🌐 社区位置

🔍 如何找到 Good First Issue

  1. 访问 Issues 页面
  2. 使用标签筛选:good first issuehelp wanted
  3. 阅读问题描述,确认你理解问题
  4. 在评论中表达你想尝试解决

📝 代码规范要求

GenSX 使用:

  • ESLint 进行代码检查
  • Prettier 进行代码格式化
  • Conventional Commits 规范提交信息

提交前务必运行:

pnpm lint
pnpm test

🔄 提交流程

  1. Fork 仓库
  2. 创建功能分支:git checkout -b feature/my-feature
  3. 提交代码:git commit -m "feat: add my feature"
  4. 推送分支:git push origin feature/my-feature
  5. 创建 Pull Request
  6. 等待 Code Review
  7. 根据反馈修改
  8. 合并!🎉

第五部分:技术栈学习指引(你的知识地图)🌐

1. 官方文档定位(学习的基石)

📚 核心技术栈文档

TypeScript

Node.js

Vitest

pnpm

Turbo

📖 GenSX 项目文档

必读章节

  • Quickstart Guide
  • Core Concepts
  • Component Reference
  • Workflow Reference
  • Storage Guide

官网https://gensx.com/docs

📕 权威技术书籍

  1. 《Effective TypeScript》 by Dan Vanderkam

    • 理解 TypeScript 的最佳实践
  2. 《JavaScript: The Good Parts》 by Douglas Crockford

    • 掌握 JavaScript 的核心概念
  3. 《Functional-Light JavaScript》 by Kyle Simpson

    • 学习函数式编程思想

2. 学习路径建议(社区智慧)

🎯 技能学习顺序

阶段 1:TypeScript 基础(1-2周)

  1. 基本类型系统
  2. 接口和类型别名
  3. 泛型
  4. 异步编程

阶段 2:Node.js 生态(1周)

  1. pnpm 和 monorepo
  2. 构建工具(Rollup/Turbo)
  3. 测试框架(Vitest)

阶段 3:LLM 应用开发(2-3周)

  1. LLM API 基础
  2. Prompt 工程
  3. 流式响应处理
  4. 错误处理和重试

阶段 4:GenSX 深入(2-4周)

  1. Component 和 Workflow
  2. Checkpoint 机制
  3. 存储抽象
  4. 部署和监控

💡 核心概念优先级

高优先级(必须掌握):

  • TypeScript 泛型
  • async/await
  • 高阶函数
  • LLM API 调用

中优先级(建议掌握):

  • Monorepo 管理
  • 流式处理
  • Checkpoint 机制

低优先级(可选):

  • 性能优化细节
  • 高级构建配置

🔗 实践项目推荐

类似项目学习

  • LangChain.js:另一个流行的 LLM 框架
  • Vercel AI SDK:AI 应用开发工具包
  • Mastra:AI 框架(有 GenSX 示例)

参考实现

  • GenSX examples 目录中的所有示例
  • 社区分享的项目(Discord 中可以找到)

3. 工具与环境配置指南

💻 开发环境搭建

IDE:VS Code(推荐)

必装插件:

  • ESLint
  • Prettier
  • TypeScript Vue Plugin (Volar)
  • GitLens

配置文件:

{
   
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "typescript.tsdk": "node_modules/typescript/lib"
}

替代选择

  • WebStorm(JetBrains)
  • Cursor(AI 辅助编码)

🛠️ 常用工具使用

Git 工作流

# 功能开发
git checkout -b feature/my-feature
git add .
git commit -m "feat: my feature"
git push origin feature/my-feature

# 同步上游
git fetch upstream
git rebase upstream/main

Docker(可选)

# 如果需要运行数据库等服务
docker-compose up -d

4. 进阶拓展方向

📝 技术博客与专家观点

推荐博客

  • GenSX 官方博客:https://gensx.com/blog
  • Anthropic Blog(Claude 相关)
  • OpenAI Blog(GPT 相关)
  • Vercel Blog(AI 和前端)

推荐 Twitter 账号

  • @gensx_inc - GenSX 官方
  • @AnthropicAI - Anthropic
  • @OpenAI - OpenAI

🎤 相关技术大会

  • AI Engineer Summit:AI 工程实践
  • JSConf:JavaScript 生态
  • TypeScript Congress:TypeScript 深度

💬 社区与论坛

主要讨论平台

  • Discord(推荐):实时交流,提问响应快
  • GitHub Discussions:深度技术讨论
  • Stack Overflow:具体问题解答

各平台特点

  • Discord:适合快速提问、分享进展
  • GitHub:适合 bug 报告、feature 请求
  • Stack Overflow:适合通用技术问题

结语:你的 GenSX 学习之旅 🎯

恭喜你!你已经完整地浏览了这份学习指南。现在,让我给你一些最后的建议:

🚀 立即行动的 3 个步骤

  1. 今天就运行第一个示例(30分钟)

    • 不要拖延,动手是最好的开始
  2. 加入 Discord 社区(5分钟)

    • 你会发现很多志同道合的学习者
  3. 制定你的学习计划(15分钟)

    • 根据自己的时间和目标,选择合适的学习路径

💡 学习心态建议

  • 不要追求完美:先运行起来,再慢慢优化
  • 善于提问:社区很友好,不要害羞
  • 持续实践:理论+实践才是王道
  • 分享经验:教是最好的学

🎓 学习里程碑

  • 1周后:能运行和修改示例
  • 1个月后:能独立开发简单 workflow
  • 3个月后:能贡献代码给社区
  • 6个月后:成为 GenSX 专家!

📬 保持联系

如果你在学习过程中有任何问题,随时可以:

  • 在 Discord 提问
  • 在 GitHub 创建 Issue
  • 查看官方文档

记住,每个专家都是从新手开始的。你现在踏上的这段旅程,正是无数优秀开发者走过的路。

加油!期待在 GenSX 社区看到你的身影!💪✨


目录
相关文章
|
11天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
349 130
|
9天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
440 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
3天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
205 138
|
10天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
396 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
3天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
202 136
|
22天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1361 8
|
8天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。