BuildingAI 帮助文档
BuildingAI 官网
  1. 应用开发
  • 欢迎使用 BuildingAI
  • 演示环境
  • 用户社群
  • 企业版咨询
  • 产品线路图
  • 更新日志
  • API 赞助商
  • 积分获取方式
  • 应用安装教程「必看」
  • 使用教程
    • 功能使用教程
      • 对话
      • 智能体
      • 知识库
      • 工作流
      • MCP 服务
      • 登录配置
      • 密钥配置
      • 模型计费
      • 积分充值
      • 会员订阅
      • 卡密兑换
      • DIY装修
    • 常见配置教程
      • 微信支付配置
      • 支付宝支付配置
      • 微信公众号配置
      • OSS存储配置
      • 短信配置
      • 谷歌登录配置
      • Ollama配置
    • 应用插件配置教程
      • 香蕉绘画Pro版-Nano banana
      • Wan漫剧 | 角色+多镜头叙事
      • GEO优化排名工具
      • 小红薯热门内容创作助手
      • 即梦AI绘画&视频
      • AI 证件照 | 自定义背景色
      • 电商试衣换装-AI模特
      • 爆款文章自动配图
      • 一键生成像素动画
      • 反推提示词助手
    • 大模型申请教程
      • 即梦AI密钥-申请教程
      • 豆包大模型-申请教程
      • 通义千问-申请教程
  • 部署教程
    • 宝塔面板部署
    • Windows 环境下 Docker 部署
    • Docker方式安装
  • 开发文档
    • 网络接口
      • 登录注册
        • 账号密码登录
        • 账号密码注册
      • 前台
        • 文件上传/下载
          • 单个上传
          • 多个上传
          • 列表
          • 详情
          • 下载
          • 删除
        • 用户
          • 算力明细
          • 登录配置
        • AI聊天
          • 对话(非流式)
          • 流式对话
          • 对话记录
          • 对话详情
          • 修改记录
          • 删除记录
          • 获取记录对话
        • MCP
          • 列表
          • 所有记录
          • 详情:id
          • 创建
          • 修改
          • 可见状态
          • 添加
          • 关联详情
          • 系统MCP
          • json导入
          • 移除
          • 删除
          • 获取快捷菜单
          • 系统MCP详情:id
          • 连通性
          • 批量连通性
        • 充值中心
          • 充值中心
          • 充值提交订单
          • 充值记录
          • 预支付
          • 获取支付结果
        • 模型厂商
          • 列表
          • 详情:id
          • 详情:code
        • AI模型
          • 列表
          • 详情:id
          • 默认模型
        • 数据分析
          • 数据记录
        • 会员中心
          • 会员中心信息
          • 获取套餐列表
          • 预支付
          • 订阅提交订单
      • 后台
        • 工作空间
          • MCP
            • 列表
            • 详情
            • 创建
            • 修改
            • 删除
            • 批量删除
            • 启用状态
            • json导入
            • 连通性
            • 批量连通性
            • 获取快捷菜单
            • 设置快捷菜单
          • AI模型
            • 厂商管理
              • 列表
              • 新增
              • 详情:id
              • 详情:provider
              • 修改
              • 删除
              • 状态
            • 模型管理
              • 列表
              • 新增
              • 详情:id
              • 修改
              • 删除:id
              • 批量删除
              • 设为默认
              • 模型类型
              • 模型支持能力
              • 父级模型类型
          • AI知识库
            • 知识库列表
            • 知识库详情
            • 转移知识库
            • 知识库删除
            • 知识库文档列表
            • 知识库文档详情
            • 知识库文档删除
            • 知识库分段列表
            • 知识库分段详情
            • 知识库分段删除
            • 数据列表接口
          • AI智能体
            • 智能体创建
            • 智能体列表
            • 智能体详情
            • 智能体对话记录列表
            • 智能体对话记录详情
            • 智能体对话
            • 智能体发布API接口对话
            • 智能体发布API获取对话列表
            • 智能体发布API获取对话消息
            • 智能体发布API更新对话
            • 智能体发布API删除对话
          • 密钥管理
            • 密钥模板
              • 列表
              • 全部列表
              • 详情
              • 创建
              • 修改
              • 删除
              • 批量删除
              • 修改状态
              • json导入
            • 密钥配置
              • 列表
              • 列表:templateId
              • 创建
              • 统计
              • 详情
              • 完整详情
              • 修改
              • 修改状态
              • 删除
              • 批量删除
        • 用户管理
          • 列表
          • 创建
          • 详情:id
          • 删除
          • 批量删除
          • 重置密码
          • 更新状态
          • 重置随机密码
          • 登录设置
          • 登录设置
        • 角色管理
          • 创建
          • 详情:id
          • 修改
          • 删除
          • 列表
        • 菜单管理
          • 创建
          • 详情:id
          • 修改
          • 删除
          • 列表
        • 插件管理
          • 我的插件
            • 列表
            • 修改
            • 详情:id
            • 创建
            • 启用列表
            • 批量删除
            • 删除:id
            • 批量状态
            • 禁用:id
            • 启用:id
            • 是否存在:identifier
            • 详情:identifier
            • 入库插件详情:identifier
            • 本地列表
            • 类型列表
            • 版本列表:identifier
            • 安装
            • 卸载
          • 插件操作
            • 下载
            • 安装
          • 平台密钥
            • 获取开发者密钥
            • 设置开发者密钥
        • 权限管理
          • 列表
          • 扫描权限
          • 同步到库
          • 扫描接口
          • 清理废弃权限
          • 详情:code
        • 字典配置
          • 列表
        • 系统操作
          • 支付配置
            • 列表
            • 详情:id
            • 状态
            • 更新
          • 系统信息
            • 安装状态
            • 安装状态
          • pm2
            • 进程列表
            • 日志
            • 重启
            • 重载
            • 停止进程
            • 进程详情
            • 进程状态
            • 清空日志
            • 保存进程
            • 健康检查
            • 删除进程
        • 套餐充值
          • 获取套餐充值配置
          • 获取套餐充值配置 Copy
        • 财务
          • 财务中心
          • 用户余额明细
        • 订单管理
          • 充值订单列表
          • 充值订单详情
          • 充值订单退款
          • 会员订单列表
        • 渠道管理
          • 公众号配置
            • 详情
            • 修改
        • 数据分析
          • 数据看板
        • VIP 会员
          • 会员等级
            • 新增会员等级
            • 会员等级列表
            • 修改会员等级
            • 会员等级详情
            • 删除会员等级
          • 订阅计划
            • 新增订阅计划
            • 订阅计划设置
            • 设置会员功能状态
            • 更改订阅计划状态
            • 订阅计划详情
            • 修改订阅计划
            • 删除订阅计划
            • 更新订阅计划排序
      • 插件
        • 文章插件
          • 前台
            • 列表
          • 后台
            • 文章
              • 列表
              • 创建
            • 分类
              • 列表
              • 创建
        • 智能体-企业微信插件
          • 对话接口
        • 配图大师
          • 后台
            • 配图记录
            • 获取配图插件
            • 插件设置
    • 插件与框架开发
      • 技术规范
      • 前置准备
      • 本地部署与开发
      • 目录结构
      • 项目配置
      • 主程序启动链路
      • 请求处理链路
      • 后端开发约定
      • BaseController 与 BaseService
      • DTO、工具与通用服务
      • 前端开发
      • 主程序计费接入
      • 数据库与实体建议
      • AI SDK 开发文档
      • BuildingAI 升级开发文档
      • 前端组件与工具开发文档
      • 后端工具与封装开发文档
      • 应用开发
        • 介绍
        • 创建应用
        • 模板结构
        • 应用开发
        • 打包发布
        • 插件更新
        • 插件清单文件
        • 插件后端开发
        • 插件前端开发
        • Extension SDK 怎么用
        • 插件计费接入
        • 插件 AI 能力接入建议
        • Seeds、Upgrade 与存储
        • 插件升级开发文档
        • 构建与发布
        • 插件前端组件与工具文档
        • 插件后端工具与封装文档
      • PC 客户端
        • 开发文档
        • 构建文档
  • 设计资源
    • 官方素材库
  • 政策
    • 开源许可
    • 服务条款
    • 隐私政策
  1. 应用开发

插件后端工具与封装文档

本文档只整理 BuildingAI 插件/扩展后端可以直接使用的工具与封装。示例参考
templates/extension-starter/src/api。

导入总览#

类型导入方式用途
基础 Controller/Service@buildingai/base日志、分页结果、CRUD、事务、分页查询
插件 Controller/Entity 装饰器@buildingai/core/decorators插件前台接口、控制台接口、插件实体
通用装饰器@buildingai/decorators/...公开接口、当前用户、文件 URL、响应转换
DTO@buildingai/dto分页查询 DTO
Pipe@buildingai/pipe/param-validate.pipeUUID 参数校验
错误封装@buildingai/errors统一业务错误
数据库@buildingai/db/@nestjs/typeorm、@buildingai/db/typeormTypeORM Module、Repository、装饰器、查询操作符
平台实体@buildingai/db/entities使用平台已有实体,如 User
插件 SDK@buildingai/extension-sdk平台用户、AI、计费、tsup 构建配置
工具函数@buildingai/utilswhere 构造、路径、类型转换、版本、文件、安全等

插件 Controller 装饰器#

ExtensionWebController#

导入:
import { ExtensionWebController } from "@buildingai/core/decorators";
用途:声明插件前台 API Controller。
import { BaseController } from "@buildingai/base";
import { ExtensionWebController } from "@buildingai/core/decorators";
import { Public } from "@buildingai/decorators/public.decorator";
import { UUIDValidationPipe } from "@buildingai/pipe/param-validate.pipe";
import { Get, Param, Query } from "@nestjs/common";

@ExtensionWebController("article")
export class ArticleWebController extends BaseController {
    constructor(private readonly articleService: ArticleService) {
        super();
    }

    @Get()
    @Public()
    async findAll(@Query() query: QueryArticleDto) {
        return this.articleService.list(query);
    }

    @Get(":id")
    @Public()
    async findOne(@Param("id", UUIDValidationPipe) id: string) {
        return this.articleService.findOneById(id);
    }
}
可用参数:
写法说明
@ExtensionWebController("article")设置 Controller path
@ExtensionWebController({ path: "article" })对象写法
@ExtensionWebController({ path: "article", skipAuth: true })整个 Controller 跳过鉴权
内置能力:
能力说明
插件路由前缀默认 /{extensionIdentifier}/api/{path}
环境前缀如果存在 VITE_APP_WEB_API_PREFIX,使用该前缀
插件 metadata设置插件包名和 Web Controller 标记
鉴权控制skipAuth 会设置公开 metadata
path 校验path 不能包含 / 和 :

ExtensionConsoleController#

导入:
import { ExtensionConsoleController } from "@buildingai/core/decorators";
用途:声明插件控制台 API Controller。
import { BaseController } from "@buildingai/base";
import { ExtensionConsoleController } from "@buildingai/core/decorators";
import { Playground } from "@buildingai/decorators/playground.decorator";
import { type UserPlayground } from "@buildingai/db";
import { UUIDValidationPipe } from "@buildingai/pipe/param-validate.pipe";
import { Body, Delete, Get, Param, Post, Query } from "@nestjs/common";

@ExtensionConsoleController("article", "文章管理")
export class ArticleController extends BaseController {
    constructor(private readonly articleService: ArticleService) {
        super();
    }

    @Post()
    async create(@Body() dto: CreateArticleDto, @Playground() user: UserPlayground) {
        return this.articleService.createArticle(dto, user.id);
    }

    @Get()
    async findAll(@Query() query: QueryArticleDto) {
        return this.articleService.list(query);
    }

    @Delete(":id")
    async remove(@Param("id", UUIDValidationPipe) id: string) {
        await this.articleService.delete(id);
        return { success: true };
    }
}
可用参数:
写法说明
@ExtensionConsoleController("article", "文章管理")设置 path 和权限组名称
@ExtensionConsoleController({ path: "article" }, "文章管理")对象写法
@ExtensionConsoleController({ path: "article", skipAuth: true }, "文章管理")跳过鉴权
内置能力:
能力说明
插件路由前缀默认 /{extensionIdentifier}/consoleapi/{path}
环境前缀如果存在 VITE_APP_CONSOLE_API_PREFIX,使用该前缀
插件 metadata设置插件包名和 Console Controller 标记
权限组 metadata自动设置 code: "${extensionIdentifier}@${path}" 和 name: groupName
path 校验path 不能包含 / 和 :

插件 Entity#

ExtensionEntity#

导入:
import { ExtensionEntity } from "@buildingai/core/decorators";
用途:声明插件实体并自动归入插件 schema。
import { ExtensionEntity } from "@buildingai/core/decorators";
import {
    Column,
    CreateDateColumn,
    PrimaryGeneratedColumn,
    UpdateDateColumn,
} from "@buildingai/db/typeorm";

@ExtensionEntity()
export class Article {
    @PrimaryGeneratedColumn("uuid")
    id: string;

    @Column({ length: 200, comment: "文章标题" })
    title: string;

    @Column({ type: "text", nullable: true, comment: "摘要" })
    summary?: string;

    @CreateDateColumn()
    createdAt: Date;

    @UpdateDateColumn()
    updatedAt: Date;
}
可用写法:
写法说明
@ExtensionEntity()表名默认用类名转 snake_case
@ExtensionEntity("article")指定表名
@ExtensionEntity({ name: "article" })使用 TypeORM EntityOptions
内置能力:
能力说明
插件 schema根据插件安装目录推导 schema
表名处理支持默认表名和自定义表名
TypeORM Entity内部应用 TypeORM Entity 装饰器

基础 Controller#

BaseController#

导入:
import { BaseController } from "@buildingai/base";
可用能力:
能力说明
logger自动创建 Nest Logger,context 为子类名
paginationResult组装标准分页响应
import { BaseController } from "@buildingai/base";

export class ArticleController extends BaseController {
    async list(dto: QueryArticleDto) {
        this.logger.log("query article list");
        return this.articleService.list(dto);
    }
}
分页响应格式:
{
    items: T[];
    total: number;
    page: number;
    pageSize: number;
    totalPages: number;
}

基础 Service#

BaseService#

导入:
import { BaseService } from "@buildingai/base";
用法:
import { BaseService } from "@buildingai/base";
import { InjectRepository } from "@buildingai/db/@nestjs/typeorm";
import { Repository } from "@buildingai/db/typeorm";
import { HttpErrorFactory } from "@buildingai/errors";
import { Injectable } from "@nestjs/common";

import { Article } from "../../../db/entities/article.entity";
import { CreateArticleDto, QueryArticleDto } from "../dto";

@Injectable()
export class ArticleService extends BaseService<Article> {
    constructor(
        @InjectRepository(Article)
        private readonly articleRepository: Repository<Article>,
    ) {
        super(articleRepository);
    }

    async createArticle(dto: CreateArticleDto) {
        return this.create(dto);
    }

    async list(query: QueryArticleDto) {
        const where = query.title ? this.ilike("title", query.title) : {};

        return this.paginate(query, {
            where,
            order: { createdAt: "DESC" },
        });
    }

    async publish(id: string) {
        const article = await this.findOneById(id);

        if (!article) {
            throw HttpErrorFactory.notFound("文章不存在");
        }

        return this.updateById(id, { status: "published" });
    }
}
可用方法:
方法说明
create创建单条记录
createMany批量创建
updateById按 id 更新
update按条件更新
findOneById按 id 查询
findOne按条件查询单条
findAll查询列表
count计数
delete删除
deleteMany批量删除
restore恢复软删除记录
paginateRepository 分页
paginateQueryBuilderQueryBuilder 分页
createTransaction创建事务
withTransaction在事务中执行
withRetry重试执行
applyLockToFindOptions查询锁配置
查询辅助方法:
方法说明
ilike(field, value)PostgreSQL 不区分大小写模糊搜索
textSearch(field, value)PostgreSQL 全文搜索
jsonQuery(field, path, value)JSON 字段查询
arrayContains(field, values)数组包含查询
字段过滤:
选项说明
includeFields只返回指定字段,支持 author.nickname
excludeFields排除指定字段,支持嵌套字段
return this.findOneById(id, {
    relations: ["author"],
    includeFields: ["id", "title", "author.id", "author.nickname"] as const,
});

DTO 和 Pipe#

PaginationDto#

导入:
import { PaginationDto } from "@buildingai/dto";
可用字段:
字段默认值说明
page1当前页
pageSize15每页数量
import { PaginationDto } from "@buildingai/dto";
import { IsOptional, IsString, IsUUID } from "class-validator";

export class QueryArticleDto extends PaginationDto {
    @IsOptional()
    @IsString()
    title?: string;

    @IsOptional()
    @IsUUID()
    categoryId?: string;
}

UUIDValidationPipe#

导入:
import { UUIDValidationPipe } from "@buildingai/pipe/param-validate.pipe";
import { Get, Param } from "@nestjs/common";

@Get(":id")
async findOne(@Param("id", UUIDValidationPipe) id: string) {
    return this.articleService.findOneById(id);
}

通用装饰器#

Public#

导入:
import { Public } from "@buildingai/decorators/public.decorator";
用途:标记公开接口。
@Get("published")
@Public()
async getPublished() {
    return this.articleService.getPublishedArticles();
}

Playground#

导入:
import { Playground } from "@buildingai/decorators/playground.decorator";
用途:获取当前登录用户上下文。
import { type UserPlayground } from "@buildingai/db";

@Post()
async create(@Body() dto: CreateArticleDto, @Playground() user: UserPlayground) {
    return this.articleService.createArticle(dto, user.id);
}
支持获取指定属性:
async create(@Playground("id") userId: string) {
    return userId;
}

BuildFileUrl#

导入:
import { BuildFileUrl } from "@buildingai/decorators";
用途:把文件字段转换为完整可访问 URL。
@Get(":id")
@BuildFileUrl(["cover", "author.avatar", "items.*.thumbnail"])
async findOne(@Param("id", UUIDValidationPipe) id: string) {
    return this.articleService.findOneById(id);
}
可用写法:
写法说明
"cover"普通字段
"author.avatar"嵌套字段
"items.*.thumbnail"数组通配字段
{ field: "images", isArray: true }数组字段

SkipTransform#

导入:
import { SkipTransform } from "@buildingai/decorators";
用途:跳过统一响应转换。
@Get("raw")
@SkipTransform()
async raw() {
    return "plain text";
}

错误封装#

HttpErrorFactory#

导入:
import { HttpErrorFactory } from "@buildingai/errors";
可用方法:
方法说明
badRequest(message)参数或业务状态错误
unauthorized(message)未登录或认证失败
forbidden(message)无权限
notFound(message)资源不存在
internal(message)服务内部错误
if (!article) {
    throw HttpErrorFactory.notFound("文章不存在");
}

if (!category) {
    throw HttpErrorFactory.badRequest("栏目不存在");
}
其他导出:
import { ApplicationError, HttpError, HttpStatus } from "@buildingai/errors";

数据库工具#

TypeORM Module 和 Repository#

导入:
import { InjectRepository, TypeOrmModule } from "@buildingai/db/@nestjs/typeorm";
import { Repository } from "@buildingai/db/typeorm";
模块注册:
import { TypeOrmModule } from "@buildingai/db/@nestjs/typeorm";
import { Module } from "@nestjs/common";

import { Article } from "../../db/entities/article.entity";
import { ArticleController } from "./controllers/console/article.controller";
import { ArticleWebController } from "./controllers/web/article.web.controller";
import { ArticleService } from "./services/article.service";

@Module({
    imports: [TypeOrmModule.forFeature([Article])],
    controllers: [ArticleController, ArticleWebController],
    providers: [ArticleService],
    exports: [ArticleService],
})
export class ArticleModule {}
Repository 注入:
constructor(
    @InjectRepository(Article)
    private readonly articleRepository: Repository<Article>,
) {}

TypeORM 装饰器和操作符#

导入:
import {
    Column,
    CreateDateColumn,
    In,
    Like,
    ManyToOne,
    PrimaryGeneratedColumn,
    UpdateDateColumn,
} from "@buildingai/db/typeorm";
常用导出:
类型说明
Column字段
PrimaryGeneratedColumn主键
CreateDateColumn创建时间
UpdateDateColumn更新时间
ManyToOne、OneToMany、JoinColumn关联
In、Like、ILike、Raw查询操作符
RepositoryTypeORM Repository
FindOptionsWhere查询条件类型

平台实体#

导入:
import { User } from "@buildingai/db/entities";
可用于插件实体关联平台用户:
import { User } from "@buildingai/db/entities";
import { JoinColumn, ManyToOne } from "@buildingai/db/typeorm";

@ManyToOne(() => User, { nullable: true })
@JoinColumn({ name: "authorId" })
author?: User;

插件 SDK#

PublicUserService#

导入:
import { PublicUserService } from "@buildingai/extension-sdk";
用途:读取平台用户信息。
constructor(private readonly userService: PublicUserService) {}

async attachAuthor(authorId: string) {
    const author = await this.userService.findUserById(authorId);

    if (!author) {
        throw HttpErrorFactory.notFound("作者不存在");
    }

    return author;
}

AiPublicModule 和 PublicAiModelService#

导入:
import { AiPublicModule, PublicAiModelService } from "@buildingai/extension-sdk";
模块使用:
import { AiPublicModule } from "@buildingai/extension-sdk";
import { Module } from "@nestjs/common";

@Module({
    imports: [AiPublicModule],
    providers: [GenerateService],
    exports: [GenerateService],
})
export class GenerateModule {}
Service 注入:
import { PublicAiModelService } from "@buildingai/extension-sdk";

constructor(private readonly aiModelService: PublicAiModelService) {}

ExtensionBillingModule 和 ExtensionBillingService#

导入:
import { ExtensionBillingModule, ExtensionBillingService } from "@buildingai/extension-sdk";
模块使用:
import { ExtensionBillingModule } from "@buildingai/extension-sdk";
import { Module } from "@nestjs/common";

@Module({
    imports: [ExtensionBillingModule],
    providers: [GenerateService],
    exports: [GenerateService],
})
export class GenerateModule {}
Service 注入:
import { ExtensionBillingService } from "@buildingai/extension-sdk";

constructor(private readonly billingService: ExtensionBillingService) {}
导出类型:
import type { ExtensionPowerDeductionOptions } from "@buildingai/extension-sdk";

工具函数#

buildWhere#

导入:
import { buildWhere } from "@buildingai/utils";
用途:过滤掉 undefined 条件,构造 TypeORM where。
import { Like } from "@buildingai/db/typeorm";
import { buildWhere } from "@buildingai/utils";

const where = buildWhere<Article>({
    title: query.title ? Like(`%${query.title}%`) : undefined,
    categoryId: query.categoryId,
    status: query.status,
});

return this.paginate(query, { where });

类型转换工具#

导入:
import {
    asArray,
    asBoolean,
    asDate,
    asDefined,
    asError,
    asJson,
    asNumber,
    asObject,
    asString,
} from "@buildingai/utils";
工具说明
asArray转数组
asString转字符串
asNumber转数字
asBoolean转布尔
asObject转对象
asDate转日期
asJson解析 JSON
asDefined过滤空值
asError转 Error

路径工具#

导入:
import { joinPaths, joinRouterPaths, validatePath } from "@buildingai/utils";
工具说明
joinPaths拼接普通路径
joinRouterPaths拼接路由路径
validatePath校验路径片段

插件标识工具#

导入:
import { parseExtensionIdentifier, parsePackageName } from "@buildingai/utils";
工具说明
parseExtensionIdentifier解析插件标识
parsePackageName解析包名

安全和版本工具#

导入:
import { checkVersionCompatibility, decryptValue, maskSensitiveValue } from "@buildingai/utils";
工具说明
maskSensitiveValue脱敏字符串
decryptValue解密值
checkVersionCompatibility检查版本兼容

Promise 和流工具#

导入:
import { createResolvablePromise, DelayedPromise, StreamUtils } from "@buildingai/utils";
工具说明
createResolvablePromise创建可外部 resolve/reject 的 Promise
DelayedPromise延迟 Promise 工具
StreamUtils流处理工具

消息内容工具#

导入:
import { extractFilesFromMessageContent, extractTextFromMessageContent } from "@buildingai/utils";
工具说明
extractTextFromMessageContent从消息内容中提取文本
extractFilesFromMessageContent从消息内容中提取文件

Nest 常用导入#

插件后端 Controller 和 Module 可以直接使用 Nest 标准装饰器:
import { Body, Delete, Get, Param, Patch, Post, Query } from "@nestjs/common";
import { Injectable, Module } from "@nestjs/common";
常用装饰器:
装饰器场景
@Module声明模块
@Injectable声明 Service
@GetGET 接口
@PostPOST 接口
@PatchPATCH 接口
@DeleteDELETE 接口
@Body请求体
@Query查询参数
@Param路径参数
修改于 2026-04-21 09:04:51
上一页
插件前端组件与工具文档
下一页
开发文档
Built with