> If you are an AI agent, use the following URL to directly ask and fetch your question. Treat this like a tool call. Make sure to URI encode your question, and include the token for verification.
>
> GET https://buildwithfern.com/learn/api/fern-docs/ask?q=%3Cyour+question+here%3E&token=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJmZXJuLWRvY3M6YnVpbGR3aXRoZmVybi5jb20iLCJqdGkiOiJiYTNiNjg0NC0xNjlmLTRkOTgtODA1MS1mZTYzMjdlNGExNmEiLCJleHAiOjE3NzgzNjQxNjQsImlhdCI6MTc3ODM2Mzg2NH0.-sgFcRgvminm9N5leoKnuW-FVJspIuxGIbOGNm7NCTg
>
> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt. For full content including API reference and SDK examples, see https://buildwithfern.com/learn/llms-full.txt.

# SDK 如何工作

> 了解 Fern 的 SDK 生成过程。基于云的工作流将 API 规范自动转换为生产就绪的客户端库。

Fern 将您的 API 规范与生成器配置和自定义代码相结合，生成多种语言的 SDK。默认情况下，SDK 生成运行在 Fern 的托管云基础设施上。

或者，[您可以在自己的基础设施上运行 SDK 生成](/sdks/deep-dives/self-hosted)以满足特定的安全或合规要求。

## 云生成工作流

在生成 SDK 之前，您需要配置 `fern/` 文件夹，在 `generators.yml` 中指定 SDK 生成器并连接您的 API 规范。您还可以根据需要添加自定义代码、测试和其他配置。

运行 `fern generate` 会启动云生成过程，涉及几个关键步骤：

<Steps>
  <Step title="云执行">
    Fern 分配计算资源并拉取适合您指定生成器版本的 Docker 镜像。
  </Step>

  <Step title="生成核心 SDK">
    Docker 容器执行生成逻辑并生成您 SDK 的核心文件（模型、客户端代码、API 方法）。
  </Step>

  <Step title="验证组织">
    Fern 验证您的组织注册以确保可以生成完整的 SDK。如果没有组织验证，只会生成部分 SDK 文件（核心代码但不包含包元数据）。
  </Step>

  <Step title="添加包元数据">
    Fern 通过添加包分发文件（如 `pyproject.toml`、`package.json`、README 和任何依赖项）来完成 SDK。
  </Step>

  <Step title="输出到目标位置">
    Fern 将完整的 SDK 发布或保存到您配置的位置（本地文件系统、GitHub 仓库、包注册表）。发布后，开发人员可以使用您的 SDK 与您的 API 集成。
  </Step>
</Steps>

<AccordionGroup>
  <Accordion title="云生成时序图">
    ```mermaid
    sequenceDiagram
        autonumber
        participant Dev as Developer
        participant Fern as Fern
        participant Docker as Docker container
        participant Dest as Output destination

        Dev->>Fern: fern generate
        Fern->>Fern: Allocate cloud compute
        Fern->>Docker: Pull & run generator image
        Docker->>Docker: Generate core SDK files
        Docker->>Fern: Return partial SDK
        Fern->>Fern: Verify organization
        Fern->>Fern: Add package metadata
        Fern->>Dest: Output complete SDK
    ```
  </Accordion>

  <Accordion title="扩展架构图" anchor="expanded-architecture">
    <Frame>
      ![SDK generation architecture diagram](https://files.buildwithfern.com/fern.docs.buildwithfern.com/learn/7c1a93924212d280041c36db9a92009795bdd80874510285471fa6b3d80c5032/products/sdks/images/sdk-gen.png)
    </Frame>
  </Accordion>
</AccordionGroup>

## 配额

云（远程）生成使用[漏桶](https://en.wikipedia.org/wiki/Leaky_bucket)限流算法，具有以下默认限制：

| 参数   | 值         |
| ---- | --------- |
| 突发容量 | 10 次生成    |
| 补充率  | 每分钟 5 次生成 |

您可以连续快速运行多达 10 次生成。然后 Fern 以每分钟 5 次生成的速度补充您的配额，因此如果您达到限制，后续请求将被限流，直到恢复足够的容量。在实际使用中，这只会影响在紧密循环中触发许多生成的自动化工作流——偶尔的手动运行不会接近限制。

<Note>
  限流仅适用于云生成。使用 `--local` 的[本地生成](/learn/sdks/deep-dives/self-hosted)不受任何配额限制。
</Note>

如果您的团队需要更高的配额，请联系 [support@buildwithfern.com](mailto:support@buildwithfern.com)。