工具调用搜索资料
执行中查找与当前结论直接相关的公开资料。
Tool Call Activity Card一个完整展示 AI 工具调用过程与结果状态的活动卡片。
查找与当前结论直接相关的公开资料。
"use client";
export type ToolCallStatus = "preparing" | "running" | "succeeded" | "failed";
export type ToolCallStatusMeta = {
label: string;
tone: "neutral" | "active" | "success" | "danger";
};
export type ToolCallActivity = {
durationMs?: number;
error?: string;
id: string;
inputSummary?: string;
name: string;
outputSummary?: string;
purpose: string;
status: ToolCallStatus;
};
export type ToolCallActivityCardProps = {
call: ToolCallActivity;
expanded?: boolean;
onExpandedChange?: (expanded: boolean) => void;
onRetry?: () => void;
};
export function getToolCallStatusMeta(status: ToolCallStatus): ToolCallStatusMeta {
const meta: Record<ToolCallStatus, ToolCallStatusMeta> = {
failed: { label: "执行失败", tone: "danger" },
preparing: { label: "正在准备", tone: "neutral" },
running: { label: "执行中", tone: "active" },
succeeded: { label: "执行完成", tone: "success" },
};
return meta[status];
}
export function ToolCallActivityCard({
call,
expanded = false,
onExpandedChange,
onRetry,
}: ToolCallActivityCardProps) {
const meta = getToolCallStatusMeta(call.status);
return (
<article className="tool-call-block" data-tone={meta.tone}>
<header>
<div><span>工具调用</span><strong>{call.name}</strong></div>
<span>{meta.label}</span>
</header>
<p>{call.purpose}</p>
{call.status === "running" ? <progress aria-label="工具执行进度" max={100} value={62} /> : null}
<button
aria-expanded={expanded}
onClick={() => onExpandedChange?.(!expanded)}
type="button"
>
{expanded ? "收起细节" : "查看细节"}
</button>
{expanded ? (
<dl>
<div><dt>输入</dt><dd>{call.inputSummary ?? "无额外输入"}</dd></div>
<div><dt>结果</dt><dd>{call.error ?? call.outputSummary ?? "等待结果"}</dd></div>
{call.durationMs ? <div><dt>耗时</dt><dd>{call.durationMs} ms</dd></div> : null}
</dl>
) : null}
{call.status === "failed" ? <button onClick={onRetry} type="button">重新执行</button> : null}
</article>
);
}
AI 调用搜索、代码或数据工具时,如果只显示等待动画,用户无法判断它正在做什么、是否失败以及下一步该怎么办。
操作上方真实 Demo,确认状态和交互符合产品需要。
只有真实存在的源码、Prompt 和参数文件才会出现在代码面板。
保留许可证,并根据自己的设计系统调整参数和样式。