智能体

组件参考

按对象查找 PraxisKit 属性、方法、事件与默认行为。

<praxis-agent> 在网页中呈现智能体对话。入口为 element.setOptions(options);本页按属性、方法、事件排列,完整接入步骤见嵌入到网页。

初始化

首次设置必须包含 api.url、agent.name,以及 api.getToken 或 api.publishableKey。缺少时抛出 TypeError。登录用户选择 getToken,匿名访客选择 publishableKey,请二选一;同时提供时使用 publishable key,不调用 getToken。

下面是 Develop 的匿名页面示例。先在该环境创建可公开 key、保存嵌入策略并允许宿主来源,再替换 PRAXIS_PUBLISHABLE_KEY,从该来源提供 HTML。公开 key 不是服务器 API Key。脚本地址、版本和完整性值须使用同一发布版本。

<!doctype html>
<html lang="en">
<meta charset="utf-8">
<title>Course assistant</title>
<script type="module"
  src="https://kit-develop.praxisusercontent.com/v0.2.8/praxis-kit.js"
  integrity="sha384-vey+VZZcFIWJq9Fmv/nmLxspKtXRiL8XiDOfg2g2QFvwZi5MA+tkiQvPBtoMS8eU"
  crossorigin="anonymous"></script>
<praxis-agent style="display:block;height:600px;width:100%"></praxis-agent>
<p id="status" role="status"></p>
<script type="module">
  await customElements.whenDefined('praxis-agent');
  const agent = document.querySelector('praxis-agent');
  const status = document.querySelector('#status');
  agent.addEventListener('praxis.ready', () => { status.textContent = 'Interface mounted'; });
  agent.addEventListener('praxis.error', () => { status.textContent = 'Check the failed network request'; });
  agent.setOptions({
    api: {
      url: 'https://api-develop.deepraxis.com',
      publishableKey: 'PRAXIS_PUBLISHABLE_KEY',
    },
    agent: { name: 'Course assistant' },
    locale: 'en',
  });
</script>
</html>

预期结果: 页面显示聊天界面,发送问题后收到真实回复。Interface mounted 只表示挂载;验证还要检查回复和用户隔离。

属性

api 与 agent

属性类型语义
api.urlstring必填,API 源站或以 /agent/v1 结尾的基础地址;初始化后不可变
api.getToken(current: string | null) => Promise<string>返回嵌入令牌;首次 current 为 null,刷新时传当前令牌。后端每次重新确认宿主登录态
api.publishableKeystring匿名令牌入口,替代 getToken;初始化后不可变。访客身份由组件保存的私有 visitor_secret 延续
agent.namestring必填,界面显示名称,不用于选择智能体
agent.avatarstring头像 URL;实际访问的智能体由凭证决定
onClientTool(call: { id, name, input }) => unknown | Promise<unknown>元素属性,不放入 setOptions。处理前端工具,未知工具应抛错

布局与内容

属性类型 / 默认值效果
layoutinline、sidebar、popup、modal;默认 inline对话容器形态
widthnumber;400 CSS 像素sidebar 宽度
launcher.typenone、bubble、mascot提供 launcher 时必填;默认 inline 为 none,其他布局为 bubble
launcher.image、launcher.labelstring启动按钮图片与文字
launcher.positionbottom-right、bottom-left启动按钮位置,默认右下
header.title、header.subtitlestring标题与副标题;标题默认使用 agent.name
header.iconstring支持的 Lucide 图标名或图片 URL
header.actions{ id: string; icon: string; label: string }[]自定义顶栏按钮,点击发出事件
history.enabledboolean;默认 true历史入口;关闭时 showHistory() 不生效
startScreen.greetingstring空会话问候语
startScreen.prompts{ label: string; prompt: string }[]显示前 4 个;点击发送对应 prompt
composer.placeholderstring默认随语言显示输入提示
composer.attachments.enabledboolean;默认 true是否允许选择、粘贴或拖入附件
disclaimer、footerstring对话说明与底部文字
autoScrollboolean新内容到达时是否自动滚动
localezh、en未指定时依次取宿主页面语言、浏览器语言;以 zh 开头用中文,否则英文;无语言信息用英文

theme

属性值 / 限制
colorSchemelight、dark、system;未设置时为浅色,system 跟随浏览器
accent、surface明确且不透明的 CSS 颜色;拒绝 var()、currentcolor、透明色,抛 TypeError
grayscaleneutral、warm、cool
radiusnone、sm、md、lg、full;基础圆角依次为 0、4、10、18、9999 CSS 像素
densitycompact、normal、spacious;基础间距依次为 3、4、5 CSS 像素
fontFamily非空字体族字符串,不能含 ; { } < >,否则抛 TypeError
fontSize正的有限数字,单位 CSS 像素;否则抛 RangeError

未设置 accent 时,浅色默认 #167A43,深色默认 #30a46c。颜色前景按对比度选择。

React 属性

React 的 PraxisAgent 使用以下属性。当前 React 绑定仍要求顶层 getToken,即使 options.api 的类型包含 publishableKey;匿名接入可直接使用上面的 Web Component。

属性 / 返回对象语义
getToken必填,与 api.getToken 相同的函数签名
options上述选项,但不含 api.getToken;省略时呈现未配置元素
layout、launcher分别覆盖 options.layout、options.launcher.type;launcher 取 none/bubble/mascot
className、style、children宿主元素样式与 React 子元素
onClientTool前端工具回调;与元素属性同义
ref / usePraxisAgent()ref 提供控制句柄;hook 返回稳定的 { ref, control }

方法

方法返回 / 行为
setOptions(partial)初始化或合并选项
sendUserMessage(text)Promise<"accepted" | "rejected" | "unknown">;空白、超长、等待审批或无法提交时可拒绝;accepted 不代表回复成功,unknown 时先检查会话,不要盲目重发
setComposerValue(text)替换草稿,不发送
focusComposer()聚焦输入框;历史面板打开时不生效
setThreadId(id)切换会话并关闭历史;null 回到空会话,不切换用户身份
showHistory()、hideHistory()打开、关闭历史面板
open()、close()、toggle()展开、收起或切换面板;inline 下无效果
setReadable(name, value)注册页面上下文;名称 1–64 字符,仅字母、数字与 _ . : -;值为字符串或可 JSON 序列化值
removeReadable(name)删除该页面上下文值

React 控制句柄包含上表从 sendUserMessage 到 toggle 的方法。onReady 前或卸载后调用会抛出未就绪错误,不会排队。React 页面上下文与工具用 usePraxisReadable、usePraxisTool,需要共享注册范围时使用 PraxisProvider,见下方指南。

事件

事件均为可冒泡、可穿过 Shadow DOM 的 CustomEvent。React 回调收到同一个事件对象,通过 event.detail 读取内容。

事件 / React 回调detail 与时机
praxis.ready / onReady无;界面已挂载,不代表认证或网络成功
praxis.error / onErrorKitError(code、status、retryable、message)或仅 { message };先检查字段是否存在
praxis.thread.change / onThreadChange{ threadId: string | null };当前会话变化
praxis.response.start / onResponseStart无;开始忙碌处理
praxis.response.end / onResponseEnd无;结束忙碌处理,不是成功断言
praxis.open、praxis.close / onOpen、onClose无;面板展开、收起
praxis.history.open、praxis.history.close / onHistoryOpen、onHistoryClose无;历史面板打开、关闭
praxis.header.action / onHeaderAction{ id: string };点击顶栏自定义按钮
praxis.tool.change / onToolChange{ id, name, status: "start" | "end", isError? };前端工具执行变化
praxis.log / onLog{ level: "info" | "warn" | "error", message, data? };上下文裁剪或工具诊断
praxis.frame.close无;请求宿主关闭 iframe;React 无对应回调属性

默认行为与生命周期

setOptions 递归合并对象、整体替换数组;显式 undefined 重置字段。api.url 和 api.publishableKey 初始化后不能改,变更会抛 TypeError;换后端或用户时销毁旧元素并重新创建。移除元素会释放连接与刷新计时器,不会撤销已签发令牌。

页面上下文快照最多 32 项、4096 UTF-8 字节,超出时从最早注册项开始省略并发出 log。Kit 的这些运行时选项与控制台保存的 iframe/Hosted 外观不是同一个配置入口,持久化外观有自己的字段与大小限制。

使用指南

嵌入令牌与用户 · 传入上下文 · 接入前端工具 · 自定义外观

导出

本页内容