6. 与智能体对话
在 IDE 中模拟对话
在开发状态下,可以使用 Mock 机制在 IDE 下进行模拟对话。新建一个文件,例如 src/pages/Home/mock.ts,用于模拟消息回复。
import { mock } from '@ray-js/t-agent-plugin-aistream'
mock.hooks.hook('sendToAIStream', context => {
if (context.options.block?.includes('hello')) {
context.responseText = 'hello, who are you?';
}
});
再在 src/pages/Home/index.tsx 中引入该文件。
import './mock'
// 余下内容
此时,当您在 IDE 中发送 hello 时,智能体会回复 hello, who are you?。

真机预览
同时,您可以使用真机预览,在您的 OEM App 上调试真实的 AI 对话。
7. 控制设备(可选)
当您创建的产品支持 AI 控制时,您可以在智能体中实现对设备的控制。
配置产品支持 AI 控制
访问 AI 产品指令配置 页面,完成指令配置并且发布。
设置智能体支持控制设备
- 回到我的智能体页面,定位到您刚刚创建的智能体,并单击 Agent管理 按钮进入管理页面。
- 单击 + 开发版本 创建一个新版本。
- 单击 工具集 下的 + 按钮,在 新增工具集 窗口的 设备控制工具集 > 选择工具 下选择 控制设备、查询设备 两项,然后单击 添加。

- 修改提示词,描述设备控制的功能,例如:
# 角色 你是一位设备控制智能体,精通智能设备管理,擅长远程控制和设备同步,对设备自动化和智能家居系统有独到的见解。 ## 技能 ### 技能 1: 远程设备控制 ### 技能 2: 设备状态监测与同步 - 最后单击 发布 按钮,发布智能体。
- 再次真机预览您的小程序,与智能体对话,尝试控制设备。

8. 定制外观和功能
您可以定制这个对话页面的任何外观,例如修改背景颜色、字体颜色、字体大小等。
功能按钮
例如,您想在消息列表和输入框之间,增加一个功能按钮:
export default function Home() {
// ... 前面的代码
return (
<View style={{height: '100vh'}}>
<ChatContainer createAgent={createAgent}>
<MessageList/>
<Button>功能按钮</Button> {/* 新增功能按钮 */}
<MessageInput/>
</ChatContainer>
</View>
)
}
气泡颜色
您可以修改气泡的颜色,创建一个 chat.css 文件,填入以下内容,然后引入页面:
.t-agent-message-list-row-start .t-agent-bubble-tile-bubble {
background-color: blue;
}
.t-agent-message-list-row-end .t-agent-bubble-tile-bubble {
background-color: gray;
}
import './chat.css'
@ray-js/t-agent-ui-ray 组件库提供了一些默认的样式,您可以根据自己的需求进行修改。
9. 定制欢迎语与问候语
如果您想在用户进入对话页面时,发送一条欢迎消息,或者在用户隔一段时间后重新进入小程序时,发送一条问候消息,可以在 src/pages/Home/index.tsx 中添加以下代码:
// 修改 createAgent 函数
const createAgent = () => {
// ... 前面的代码
const { onChatStart, createMessage, onChatResume } = agent
// 创建一条初始的欢迎信息
onChatStart(async (result) => {
const hello = createMessage({
role: 'assistant',
})
hello.bubble.setText(I18n.t('message.hello')) // 此处定义您想写的问候的多语言
result.messages.push(hello)
await hello.persist() // 将这个消息气泡持久化下来
})
// 恢复聊天时,发送一条消息
onChatResume(async (result) => {
// 判断上一条消息是否是两小时前
const lastMessage = session.getLatestMessage()
const lastMessageCreateTime = lastMessage?.meta?.createdAt
if (lastMessageCreateTime < Date.now() - 1000 * 60 * 60 * 2) {
// 如果是,发送一条欢迎回来的消息
const welcomeBack = createMessage({
role: 'assistant',
})
welcomeBack.bubble.setText(I18n.t('message.welcomeBack')) // 此处定义您想写的欢迎回来的多语言
result.messages.push(welcomeBack)
await welcomeBack.persist()
}
})
return agent
}
10. 深度定制
AI 助手 SDK 提供了一些默认的组件,可以帮助您快速搭建一个对话页面,同时在 SDK 设计上提供了一定的自定义能力。
目前支持以下内容的深度定制:
- 自定义消息列表:替换
MessageList实现。 - 自定义消息输入框: 替换
MessageInput实现。 - 自定义消息气泡:传入
renderOptions.renderTileAs的方法,替换BubbleTile实现。 - 生成一条自定义消息:在生命周期钩子里,使用
agent.createMessage创建一条消息。
SDK 核心设计理念是将对话智能体的行为和外观分离,通过插件和 Hook 机制来实现对话智能体的定制。下图为对 SDK 的核心类和机制的简单介绍。

ChatAgent 对话智能体 Agent
对话智能体的核心类,负责管理对话的生命周期、消息的创建、消息的持久化等,支持插件和 Hook 机制,可以扩展对话智能体的功能。
Hook 机制
ChatAgent 仅定义了一个运行框架和数据结构,具体行为是由 Hook 机制实现的。Hook 机制是一种事件驱动的编程模型,通过注册回调函数来实现对话智能体的行为。
ChatSession 会话容器
ChatSession 存储和智能体聊天的消息列表,上下文数据等内容,在 ChatAgent 创建时一同创建。
ChatMessage 对话消息
ChatMessage 是对话消息的抽象,用于存储消息的内容、状态等信息,也提供了一系列方便的方法用于操作消息。一条消息 ChatMessage 下,会有多个 ChatTile,用于展示不同的内容。
生命周期
ChatAgent 在不同的阶段会触发不同的 Hook,开发者可以通过注册 Hook 来实现自定义行为。
Plugin 插件机制
插件是基于以上的 Hook 机制实现的,插件可以实现对话智能体的功能,例如对接 AI 平台,提供 UI 界面等。插件也可以暴露一些方法和属性,供开发者使用。
详细说明和示例请参考 SDK 的 AI 助手 SDK 文档,自行实现对话页面的各个组件。
11. 结束
- 恭喜你 🎉 完成了本教程的学习!
- 有任何问题可以提交工单。
1180

被折叠的 条评论
为什么被折叠?



