前言
Coze API Npm包的官方文档说明写的相当简略,在使用过程中,通过查看源码才了解到一些具体的使用方法,因此将一些在LLM项目中用到的方法在本文加以具体说明。 LLM项目目前还没有做完,所以就想到哪写到哪了。
项目技术栈
Vite、Vue、Element-Plus
Coze API安装
npm install @coze/api
# or
pnpm install @coze/api
安装部分参照官方文档说明即可
国内国外Coze API异同r
使用国内Coze,Agent插件适应中文,且访问API次数为每日100次,而国外API访问次数仅为20次,且用完就不再重置。
鉴权Token
创建全局Coze客户端
如果是单体项目,建议在项目的入口文件main.ts中定义Coze Client,避免重复发送,因为每创建一次客户端都会发送一次请求。
BaseURL改为国内版,如果使用的个人API,需要添加allowPersonalAccessTokenInBrowser参数并设置为true
const client = new CozeAPI({
token: '你的APItoken',
allowPersonalAccessTokenInBrowser: true,
baseURL: COZE_CN_BASE_URL,
});
app.config.globalProperties.$cozeClient = client;
会话、对话、消息
| 名词 | 说明 |
|---|---|
| 会话(Conversation) | Bot 和用户之间的一段问答交互。一个会话包含一条或多条消息,并且能够自动处理截断,以适应模型的上下文内容。 |
| 消息(Message) | 一条由用户或智能体创建的消息,消息内容可以包括文本、图片或文件。消息以列表的形式储存在对话中。 |
| 对话(Chat) | 在会话中对智能体的一次调用。智能体收到请求后,结合用户输入、通过预设的一系列工作流等配置来调用模型或工具执行指定任务。每个对话都是会话的一部分,智能体会将对话中产生的消息添加到会话中。你可以直接发起对话,与智能体进行一次交互;也可以创建会话和消息,并在指定会话中发起对话,会话中的其他消息会作为历史消息传递给大模型。 |
创建流式会话
const v = await this.client.chat.stream({
bot_id: '你的机器人ID',
user_id: '用户标识',
auto_save_history: true,
additional_messages: [{
role: 'user',
content: message,
content_type: 'text',
}],
bot_id:你创建Agent的id,在编辑页面的URL可以直接查看
www.coze.cn/space/74348…
7437388959069569039即为机器人id
auto_save_history:
决定Agent是否保存你对话的上下文信息
接受流式消息
Coze API返回的是一个流式Stream JSON对象
参考官方用例,遍历Stream对象,得到流式输出。
在组件中创建一个消息数组来存储返回的消息
其中Stream的状态为part.event,接受到的消息内容为part.data,注意第一次创建会话时,Agent会返回一个conversation_id,将它保存下来,并在下一次发起用户对话的时候代入该id,才能让Agent记住这次会话的内容,并根据上下文回复。
export default {
data() {
return {
chatMessages: [],
conversation_id: '',
};
},
}
for await (const part of v) {
if (part.event === ChatEventType.CONVERSATION_MESSAGE_DELTA) {
this.chatMessages[this.chatMessages.length - 1].content += part.data.content;
this.conversation_id = part.data.conversation_id;
}
if (part.event === ChatEventType.CONVERSATION_CHAT_FAILED) {
console.error('Chat failed');
}
if (part.event === ChatEventType.CONVERSATION_ENDED) {
console.log('Conversation ended');
break;
}
if (part.event === ChatEventType.ERROR) {
console.error(part.error);
break;
}
}
发送用户消息
const v = await this.client.chat.stream({
bot_id: '机器人id',
user_id: '用户标识',
auto_save_history: true,
additional_messages: [{
role: 'user',
content: message,
content_type: 'text',
}],
conversation_id: this.conversation_id,
});
content: 为下游组件传入的用户消息 与创建会话类似,区别是注意带上conversation_id以让agent依据会话上下文回复。