LLM前端项目实践记录-CozeNPM包使用 | 豆包MarsCode AI刷题

399 阅读3分钟

前言

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

参考www.coze.cn/docs/develo…

创建全局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;

会话、对话、消息

参考:www.coze.cn/docs/develo…

名词说明
会话(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依据会话上下文回复。