用途
该技能用于在 Dune 应用中为 Atlas Agent 添加一个流式聊天界面。当需要构建与 Atlas Agent 交互的聊天 UI 时使用,技能会接管 useAtlasChat 的集成代码,避免手动编写。
主要能力
技能按顺序执行以下步骤:
- 理解应用:在修改前先读取 package.json(检测包管理器与已有依赖)以及 src/App.tsx 或等价入口组件,了解当前结构。
- 安装依赖:根据应用的包管理器安装 dune-industrial-components 及所需 peer 依赖 @sinclair/typebox、ajv、ajv-formats。
- 构建聊天组件:替换或创建主 App.tsx,生成完整聊天 UI。
生成的聊天组件具备以下特性:
- 从 @cognite/dune-industrial-components/atlas-agent/react 导入 useAtlasChat 与 ChatMessage 类型。
- 通过 @cognite/dune 的 useDune() 获取 SDK,加载期间传入 null(client: isLoading ? null : sdk)。
- 使用 msg.isStreaming 实时显示流式文本,并带闪烁光标。
- 显示工具调用事件:当 progress 以 "Executing:" 开头时,以醒目方式渲染(例如 ⚙ 图标加等宽字体工具名)。
- 流式完成后,将每条助手消息的 toolCalls 以可展开卡片形式显示在消息下方。
- 流式期间显示 "Stop" 按钮,绑定 abort()。
- "New chat" 按钮绑定 reset()。
- 新消息与进度更新时自动滚动到底部。
- 文本域自动调整高度(最高约 120px),Enter 提交,Shift+Enter 换行。
使用方式
技能以命令形式调用,需传入 Agent 的外部 ID 作为参数:
/integrate-atlas-chat $ARGUMENTS
其中 $ARGUMENTS 为 Agent external ID。
依赖安装命令按包管理器区分:
pnpm → pnpm add "github:cognitedata/dune-industrial-components#semver:*" @sinclair/typebox ajv ajv-formats
npm → npm install "github:cognitedata/dune-industrial-components#semver:*" @sinclair/typebox ajv ajv-formats
yarn → yarn add "github:cognitedata/dune-industrial-components#semver:*" @sinclair/typebox ajv ajv-formats
核心 hook API:
import { useAtlasChat } from "@cognite/dune-industrial-components/atlas-agent/react";
import type { ChatMessage } from "@cognite/dune-industrial-components/atlas-agent/react";
const { messages, send, isStreaming, progress, error, reset, abort } = useAtlasChat({
client: isLoading ? null : sdk, // null-safe — hook waits for a real client
agentExternalId: "...",
tools?: AtlasTool[], // optional client-side tools
});
消息字段说明:
- messages[n].role — "user" | "assistant"
- messages[n].text — 完整文本(通过 isStreaming 逐块流式输出)
- messages[n].isStreaming — 该消息正在写入时为 true
- messages[n].toolCalls — 响应完成后为 ToolCall[](客户端与服务端工具,按调用顺序)
- progress — 例如 "Agent thinking" 或 "Executing: get_timeseries"
- isStreaming — 整个响应期间为 true
工具调用展示模式:
// During streaming — show as a distinct "tool call" bubble above the message
{isStreaming && progress?.startsWith("Executing:") && (
<div>⚙ {progress}</div>
)}
// After response — show tool calls on the assistant message
{msg.toolCalls?.map((tc, i) => (
<ToolResult key={i} name={tc.name} output={tc.output} details={tc.details} />
))}
Python 工具(可选)
如果 Agent 配置了 Python 工具(CDF 配置中类型为 runPythonCode),可运行 setup-python-tools 技能以添加基于 Pyodide 的客户端执行:
/setup-python-tools $ARGUMENTS
该技能会安装 pyodide、设置 usePyodideRuntime,并通过 pythonRuntime 将运行时接入 useAtlasChat。库会自动从 Agent 配置获取 Python 工具代码,无需 PythonToolConfig 条目。若 Agent 仅使用内置或常规客户端工具,则无需此步骤。
适用场景
适用于在 Dune 应用中为 Atlas Agent 构建聊天界面的场景,尤其是需要流式输出、工具调用可视化、中止与重置控制等交互能力时。
限制
技能要求先读取并理解现有应用结构后再修改。Python 工具支持为可选步骤,仅在 Agent 配置了 runPythonCode 类型工具时需要。关于收费、价格、平台支持范围等信息,资料暂未提供。