消息与 Markdown

适配器逐步提供内容时,回答边生成边显示,正文默认按 Markdown 渲染。非流式后端不会因使用聊天界面而自动变成流式输出。

markdown.tsx
import { Chatkit, useChatRuntime } from '@volcengine/chatkit';
import { createMockAdapter } from '@volcengine/chatkit/adapters/mock';
import '@volcengine/chatkit/styles.css';

const adapter = createMockAdapter({ getScenarioId: () => 'markdown' });

// 正文按 Markdown 渲染:标题、列表、表格、引用、代码高亮、公式。点推荐问题触发。
export default function Markdown() {
  const runtime = useChatRuntime({ sessionId: 'markdown', adapter });
  if (!runtime) return null;
  return <Chatkit runtime={runtime} settings={{ recommendations: ['给我一份 Markdown 排版示例'] }} />;
}
Markdown 全集:发一句话触发新窗口打开

支持的内容

标题、嵌套列表、任务列表、表格、引用、多语言代码块(高亮、复制)、KaTeX 公式、图片、带站点图标的外链。

每条回答下方有复制按钮,用 features.copy: false 关掉。

用法

<Chatkit
  sessions={sessions}
  settings={{ linkFavicon: false, maxWidth: 880 }}
  renderers={{ markdown: { a: MyLink } }}
/>

renderers.markdown 按标签名登记组件,用来替换某个 Markdown 元素。组件接收 Markdown 渲染器传入的 React 属性(例如 href、children、node),不能假定所有属性都是小写名称或字符串。自定义 HTML 标签的属性也需要按实际类型校验。

替换 a 后,默认链接组件的图标和打开方式不再自动保留,需要自定义组件自行实现。

配置项

配置项类型默认说明
settings.linkFaviconbooleantrue正文外链前显示站点图标。
settings.maxWidthnumber800消息区与输入框的最大宽度(像素)。
features.copybooleantrue复制回答。
renderers.markdownRecord<string, ComponentType<any>>—Markdown 元素:按标签名登记组件。

说明

  • 流式节奏由适配器决定,界面只负责显示。
  • settings.linkFavicon 默认开启,仅为绝对 HTTP(S) 链接请求目标站点根路径的 /favicon.ico,失败时显示通用图标;相对链接、锚点和 mailto: 不请求图标。需要禁止这类请求时设为 false,该设置不会阻止 Markdown 图片加载。
  • features.copy: false 只关闭回答操作栏的复制按钮,不会关闭代码块自己的复制按钮。
  • 回答里的业务数据(订单卡片、引用来源)不是 Markdown,见业务卡片。