使用扣子生成一个角色扮演机器人也是挺简单的,我们需要先在个人空间里先创建一个智能体,操作如下图,点击工作空间,然后再点击右上角的创建按钮,在弹出的窗口选择创建智能体。
然后选择AI创建这个标签,再往文本框里输入创建的内容,点击生成,过一会儿就初始化好了。
创建好机器人,我们可以在右边的预览窗口测试机器人的回复是否符合角色设置,如果不符合,可以修改左边的角色属性进行调整。
调整完毕后,点击右上角的发布按钮就可以了。
点击发布按钮后,记得一定要勾选最下面的两个功能,否则无法使用SDK进行交互。发布之后,就可以通过查看智能体的链接,找到botID了,例如
https://www.coze.cn/store/age...
这个链接里,agent后面那段数字就是botID。
接下来,我们需要拉官方的coze-js仓库,使用以下命令
git clone https://github.com/coze-dev/c...
然后,我们需要切换目录到coze-js/examples/coze-js-node里
cd coze-js/examples/coze-js-node
安装依赖
npm run run-preinstall
npm install
修改配置文件src/config/config.ts,这里我们需要把botID换成前面我们创建好的智能体的botID,然后个人令牌需要修改成我们自己的个人令牌。
然后,再修改一下examples/coze-js-node/src/chat.ts文件的源码,把一些调试的输出关闭一下,就可以运行代码测试了。
import assert from 'assert';
import {
ChatEventType,
ChatStatus,
type CreateChatData,
RoleType,
} from '@coze/api';
import { client, botId, sleep } from './client';
const query = '给我讲个枫丹的笑话吧';
async function streamingChat(callback?: (v: CreateChatData) => void) {
assert(botId, 'botId is required');
const v = await client.chat.stream({
bot_id: botId,
auto_save_history: false,
additional_messages: [
{
role: RoleType.User,
content: query,
content_type: 'text',
},
],
});
for await (const part of v) {
if (part.event === ChatEventType.CONVERSATION_CHAT_CREATED) {
console.log('[START]');
callback && callback(part.data);
} else if (part.event === ChatEventType.CONVERSATION_MESSAGE_DELTA) {
process.stdout.write(part.data.content);
} else if (part.event === ChatEventType.CONVERSATION_MESSAGE_COMPLETED) {
const { role, type, content } = part.data;
if (role === 'assistant' && type === 'answer') {
process.stdout.write('\n');
} else {
// console.log('[%s]:[%s]:%s', role, type, content);
}
} else if (part.event === ChatEventType.CONVERSATION_CHAT_COMPLETED) {
// console.log(part.data.usage);
} else if (part.event === ChatEventType.DONE) {
// console.log(part.data);
} else if (part.event === ChatEventType.ERROR) {
// console.error(part.data);
}
}
console.log('=== End of Streaming Chat ===');
}
async function nonStreamingChat() {
assert(botId, 'botId is required');
const v = await client.chat.createAndPoll({
bot_id: botId,
additional_messages: [
{
role: RoleType.User,
content: query,
content_type: 'text',
},
],
});
if (v.chat.status === ChatStatus.COMPLETED) {
for (const item of v.messages || []) {
console.log('[%s]:[%s]:%s', item.role, item.type, item.content);
}
console.log('usage', v.chat.usage);
}
}
function streamingCancel() {
streamingChat(async v => {
sleep(2000);
const result = await client.chat.cancel(v.conversation_id, v.id);
// console.log('client.chat.cancel', result);
});
}
async function main() {
await streamingChat();
// await nonStreamingChat();
streamingCancel();
}
main().catch(console.error);
使用这个指令运行代码,运行效果如下。这个芙宁娜的聊天机器人程序就做好啦,抽空我们再看看能不能使用live-2D配合聊天机器人,实现更完善的芙宁娜模仿者
COZE_ENV=zh npx tsx ./src/chat.ts