OpenAI ChatKit 主题与定制

2026-11-06 16:45 更新

完成ChatKit快速开始后,可进一步调整主题与嵌入式聊天的外观:选择明暗主题、强调色、密度及圆角,使其符合应用风格。

概览

通过选项对象定制主题。按快速开始在前端嵌入时,使用React方式:

  • React:向useChatKit({...})传入选项。
  • 高级集成:通过chatkit.setOptions({...})设置选项。

两种集成的选项对象结构相同。

探索定制选项

ChatKit Studio提供可运行实现和交互构建工具。喜欢边试边学时,可从这些资源开始。

探索ChatKit界面

查看可运行示例

更改主题

通过颜色、字体等设置匹配产品外观。下例切换为深色,修改颜色、圆角、信息密度和字体。全部选项见主题API参考。

来源示例 1(javascript):

// [中文] 示例1:更改主题。
// [中文] 配置深色、蓝色强调色、圆角、紧凑密度和Inter字体;这里只构造options,需传给useChatKit或setOptions。
const options = {
  theme: {
    colorScheme: "dark",
    color: {
      accent: {
        primary: "#2D8CFF",
        level: 2,
      },
    },
    radius: "round",
    density: "compact",
    typography: { fontFamily: "'Inter', sans-serif" },
  },
};

定制起始界面文字

通过修改输入框占位文字,告诉用户可以提问什么,或引导首次输入。

来源示例 2(javascript):

// [中文] 示例2:定制起始界面文字。
// [中文] 输入框占位文字为“询问有关数据的任何问题”,起始问候为“欢迎使用FeedbackBot”;可按产品语言定制。
const options = {
  composer: {
    placeholder: "Ask anything about your data…",
  },
  startScreen: {
    greeting: "Welcome to FeedbackBot!",
  },
};

为新对话显示起始提示

新建对话时建议一些提问或操作,帮助用户开始:

来源示例 3(javascript):

// [中文] 示例3:为新对话显示起始提示。
// [中文] 起始问候为“今天想构建什么”;两个建议分别用于查询工单状态及创建新支持工单。
// [中文] name是展示名称,prompt是实际提交的文本,图标标识按SDK写法保留。
const options = {
  startScreen: {
    greeting: "What can I help you build today?",
    prompts: [
      {
        name: "Check on the status of a ticket",
        prompt: "Can you help me check on the status of a ticket?",
        icon: "search",
      },
      {
        name: "Create Ticket",
        prompt: "Can you help me create a new support ticket?",
        icon: "write",
      },
    ],
  },
};

为顶部栏添加自定义按钮

自定义按钮可提供导航、上下文或与集成相关的操作。

来源示例 4(javascript):

// [中文] 示例4:为顶部栏添加自定义按钮。
// [中文] 顶部左右按钮分别调用个人设置及主页导航函数;openProfileSettings和openHomePage由应用实现。
const options = {
  header: {
    customButtonLeft: {
      icon: "settings-cog",
      onClick: () => openProfileSettings(),
    },
    customButtonRight: {
      icon: "home",
      onClick: () => openHomePage(),
    },
  },
};

启用文件附件

附件默认关闭,需要添加配置启用。除自定义后端外,必须使用hosted上传策略。其他上传策略如何配合自定义后端,见Python SDK文档。还可控制附件数量、大小和类型。

来源示例 5(javascript):

// [中文] 示例5:启用文件附件。
// [中文] 启用hosted附件上传,最多3个文件,单文件20×1024×1024字节;允许PDF和指定图像扩展名。
// [中文] 这只是本示例前端限制,不宣称是所有ChatKit后端的全局上传上限;服务端也应验证。
const options = {
  composer: {
    attachments: {
      uploadStrategy: { type: "hosted" },
      maxSize: 20 * 1024 * 1024, // 20 MB per file
      maxCount: 3,
      accept: { "application/pdf": [".pdf"], "image/*": [".png", ".jpg"] },
    },
  },
};

用实体标签在输入框启用@提及

让用户通过@标记自定义“实体”,增加对话上下文与交互能力。onTagSearch按查询返回实体列表,onClick处理实体点击。

来源示例 6(javascript):

// [中文] 示例6:用实体标签在输入框启用@提及。
// [中文] 演示返回人物Jane Doe和“季度计划”文档,分组分别为人物、文档;当前代码忽略query,并非真实搜索。
// [中文] 点击实体后交给navigateToEntity导航;实际查询与权限由应用实现。
const options = {
  entities: {
    async onTagSearch(query) {
      void query;
      return [
        {
          id: "user_123",
          title: "Jane Doe",
          group: "People",
          interactive: true,
        },
        {
          id: "document_123",
          title: "Quarterly Plan",
          group: "Documents",
          interactive: true,
        },
      ];
    },
    onClick: (entity) => {
      navigateToEntity(entity.id);
    },
  },
};

定制实体标签外观

通过组件定制鼠标悬停时的实体预览,例如名片、文档摘要或图像。可用Widget Builder浏览组件。

来源示例 7(javascript):

// [中文] 示例7:定制实体标签外观。
// [中文] 悬停预览返回Card,文字显示实体资料及“角色:开发者”;本片段搜索列表为空,仅演示预览结构。
const options = {
  entities: {
    async onTagSearch() {
      return [];
    },
    onRequestPreview: async (entity) => ({
      preview: {
        type: "Card",
        children: [
          { type: "Text", value: `Profile: ${entity.title}` },
          { type: "Text", value: "Role: Developer" },
        ],
      },
    }),
  },
};

为输入框添加自定义工具

让用户从输入栏触发应用特有操作。所选工具会作为工具偏好发送给模型。

来源示例 8(javascript):

// [中文] 示例8:为输入框添加自定义工具。
// [中文] 在输入框固定显示“添加笔记”工具;该选项作为模型工具偏好,不等于这里已执行笔记写入。
const options = {
  composer: {
    tools: [
      {
        id: "add-note",
        label: "Add Note",
        icon: "write",
        pinned: true,
      },
    ],
  },
};

切换界面区域与功能

需要比顶部栏现有选项更多的定制、并希望自行实现时,可禁用主要界面区域或功能。用例没有对话线程与历史概念时,例如某些支持聊天机器人,也可关闭历史。

来源示例 9(javascript):

// [中文] 示例9:切换界面区域与功能。
// [中文] 关闭ChatKit的历史区和顶部栏显示;隐藏界面不等于删除服务器保存的历史数据。
const options = {
  history: { enabled: false },
  header: { enabled: false },
};

覆盖区域语言设置

默认使用浏览器的区域语言。应用有统一语言设置时,可显式覆盖:

来源示例 10(javascript):

// [中文] 示例10:覆盖区域语言设置。
// [中文] 来源用de-DE演示覆盖为德国德语;它不是中文设置,实际产品应选择SDK支持的目标区域语言。
const options = {
  locale: "de-DE",
};
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号