lark-bot-gpt v1.0.1
lark-bot-gpt
介绍
lark-bot-gpt
分为以下几个模块:
业务逻辑:
ImMessageReceivedV1Service
存储服务:
databaseService
大模型获取聊天回复服务:
chatLLMService
飞书聊天回复的服务:
replyService
日志服务:
loggerService
ImMessageReceivedV1Service
中封装了一个基于GPT的机器人自动回复的全部业务逻辑,这个service依赖另外三个service。如果需要自己定义新的业务逻辑,可以写自己的service。databaseService
中封装了存储相关的服务,BiTableService
是以多维表格为基础实现的存储服务,如果希望存储到数据库,可以换成自己的服务。同时,如果仍然使用ImMessageReceivedV1Service
,在重写服务时注意继承AbstractDatabaseService
。chatLLMService
中封装了大模型相关的服务,AIDogService
是以 AIDog 为基础实现的大模型服务,如果希望使用其他的大模型,可以换成其他服务。同时,如果仍然使用ImMessageReceivedV1Service
,在重写服务时注意继承AbstractChatLLMService
。replyService
中封装了飞书机器人回复相关的服务,MessageCardService
是以消息卡片为基础实现的回复服务,如果希望使用其他的回复格式,可以换成自己的服务。同时,如果仍然使用ImMessageReceivedV1Service
,在重写服务时注意继承AbstractReplyService
。loggerService
中封装了日志相关的服务,没什么用,可以不传。
一、安装
npm install lark-bot-gpt
# 安装本模块需要的其他依赖,由于配置了 peerDependencies ,所以你必须安装它
npm install @larksuiteoapi/node-sdk axios log4js
二、快速开始
import { Domain, Client } from '@larksuiteoapi/node-sdk';
import { ImMessageReceivedV1Service, AIDogService, BiTableService, MessageCardService, ImMessageReceiveV1Event, Log4jsService } from 'lark-bot-gpt';
const appId = 'xxxxxxxxx';
const appSecret = 'xxxxxxxxxx';
const cards = {
new_topic: 'xxxx',
normal: 'xxxxx',
};
const tableAppToken = 'xxxxxxxx';
const jwtToken = 'xxxxxxxxx';
const client = new Client({
appId,
appSecret,
domain: Domain.Feishu,
});
const services = {
chatLLMService: new AIDogService({
host: "xxxxxxx",
models: "xxxxx",
jwtToken,
}),
databaseService: new BiTableService(client, tableAppToken),
replyService: new MessageCardService(client, {
newTopicMessageCardTemplate: cards.new_topic,
normalMessageCardTemplate: cards.normal,
}),
loggerService: new Log4jsService(),
};
const imMessageReceivedV1Service = new ImMessageReceivedV1Service(services);
await imMessageReceivedV1Service.reply(event);
三、使用自己的Service(具体写法可以参考以下代码,以下代码是源码中的抽象类,继承并实现自己的即可)
export abstract class AbstractReplyService<MessageType = any> extends Service {
abstract replyNewTopicMessage(reply: any): Promise<MessageType | undefined>;
abstract replyNormal(reply: any): Promise<MessageType | undefined>;
}
export abstract class AbstractChatLLMService<Message = any> extends Service {
formatMessage(data: any) {
return data as Message;
}
abstract getReply(list: Message[]): Promise<string>;
}
export abstract class AbstractDatabaseService<
MessageRecord = any,
> extends Service {
/**
* 创建消息记录多维表格
*/
abstract createTable(tableName: string): Promise<string | undefined>;
/**
* 查找或者创建多维表格
*/
abstract findOrCreateTable(tableName: string): Promise<string | undefined>;
/**
* 保存消息记录,默认以 sender_id 为表格名称,也可自己指定
*/
abstract saveMessageRecord(
tableName: string,
record: MessageRecord,
): Promise<void>;
/**
* 获取消息记录列表
*/
abstract getTopicMessageRecords(
tableName: string,
topic_id: string,
): Promise<MessageRecord[]>;
abstract getMessageTopic(
tableName: string,
message_id: string,
): Promise<string>;
}
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago