本项目是一个基于DDD(COLA)架构的聊天机器人,解耦业务逻辑与外部接口。并且使用了【策略模式】来为后续增加支持平台和其他回答模型提供拓展点。
代码运行演示:
知识星球演示:
-
修改
start
模块下的application.yml
,或者通过环境变量的方式不用把密码硬编码在配置中- 获取open-ai的apikey(OPENAI_API_KEY)
- 邀请用户为嘉宾,获取知识星球的cookie(ZSXQ_COOKIE)
- 获取知识星球的id(ZSXQ_GROUP_ID)
将上面拿到的信息填入下面配置文件
spring:
profiles:
active: ${SPRING_PROFILES_ACTIVE:prod}
task:
scheduling:
pool:
size: 5
server:
port: 8080
openai:
model: ${OPENAI_MODEL:gpt-3.5-turbo}
apiKey: ${OPENAI_API_KEY:你的apiKey}
zsxq:
cookie: ${ZSXQ_COOKIE:你的星球cookie}
groupId: ${ZSXQ_GROUP_ID:你的星球id}
silenced: ${ZSXQ_SILENCED :true}
scheduler:
list:
- name: chatbotTask
platform: zsxq
answer: openai
cron: '0/30 * * * * ?'
# - name: demoTask
# platform: demo
# answer: demo
# cron: '0/10 * * * * ?'
- 运行
start
模块下的Application
就可以开始定时任务的调度啦🎉
点这个就可以复制我们模板一键部署到Railway上,最重要的是不用担心科学上网的问题!
- Adapter层:负责任务调度(目前采用spring任务调度,可以随意切换成xxl-job等等)
- App层:由于没有复杂跨领域调用,所以空置。
- Domain层:负责核心领域对象的编排,不依赖于任务框(包括spring)。
- Infrastructure层:负责与外界API对接的具体技术细节实现。
ChatBot
为聚合根负责每一个问答的核心业务逻辑包含一个AnswerEngine
实体和Platform
实体AnswerEngine
实体负责根据提问对问题进行相应Platform
实体负责从平台爬取问题并使用api进行回答
- domain层增加一个
PlatformType
枚举 - infra层增加一个
Platform
实现类
- domain层增加一个
AnswerEngineType
枚举 - infra层增加一个
AnswerEngine
实现类
- 增加敏感词过滤
- 增加使用eventbus的方式处理消息
- 接入微信群
后续会根据逐步完善,欢迎大家提出宝贵意见,也欢迎大家提issue pr,还有star⭐️。
可以领取优惠加入星球使劲向我提问哈~