main.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from dify_api import ChatHistoryCollector
  2. import time
  3. from db import ConversationDatabaseManage
  4. from logger_config import logger
  5. from datetime import datetime
  6. import schedule
  7. def write_to_database(conversations):
  8. """将聊天记录写入数据库"""
  9. db = ConversationDatabaseManage()
  10. for conversation in conversations:
  11. db.insert_record(conversation['id'], conversation['record'], conversation['time'])
  12. def run(user='admin'):
  13. try:
  14. # 创建收集器实例
  15. collector = ChatHistoryCollector()
  16. # 创建数据库实例
  17. db = ConversationDatabaseManage()
  18. with db:
  19. # 先获取一次数据
  20. has_more, conversations = collector.collect(user=user)
  21. for conversation in conversations:
  22. db.insert_record(id_=conversation['id'], record=conversation['name'], time=conversation['created_at'])
  23. # 写入一次数据库
  24. while has_more:
  25. time.sleep(1) # 避免请求过快触发API限流
  26. # 传入上一次的最后一条数据的id,获取下一条数据
  27. has_more, conversations = collector.collect(user=user, last_id=conversations[-1]['id'])
  28. for conversation in conversations:
  29. db.insert_record(id_=conversation['id'], record=conversation['name'], time=conversation['created_at'])
  30. except Exception as e:
  31. logger.error(f"写入数据库时出错: {str(e)}")
  32. def job():
  33. run(user='admin')
  34. if __name__ == "__main__":
  35. """主函数 - 设置定时任务并启动调度器"""
  36. logger.info("定时任务调度器启动...")
  37. # 设置定时任务 - 每隔 30 分钟执行一次
  38. # 你可以根据需要修改时间间隔,例如:
  39. # schedule.every(1).hours.do(job) # 每小时执行一次
  40. # schedule.every(2).hours.do(job) # 每2小时执行一次
  41. schedule.every().day.at("03:00").do(job) # 每天上午3点执行
  42. # schedule.every().monday.do(job) # 每周一执行
  43. # schedule.every(30).minutes.do(job)
  44. logger.info("定时任务已设置: 每天执行一次")
  45. logger.info("按 Ctrl+C 停止调度器")
  46. # 立即执行一次
  47. logger.info("立即执行第一次任务...")
  48. job()
  49. # 启动调度器循环
  50. try:
  51. while True:
  52. schedule.run_pending()
  53. time.sleep(3600)
  54. except KeyboardInterrupt:
  55. logger.info("收到停止信号,调度器已停止")