dify_api.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from logger_config import logger
  2. import requests
  3. import os
  4. import dotenv
  5. dotenv.load_dotenv()
  6. class ChatHistoryCollector:
  7. """聊天历史数据收集器"""
  8. def __init__(self, limit=100, timeout=5):
  9. # 聊天历史API的URL和请求头
  10. self.base_url = os.getenv('DIFY_URL', '')
  11. self.headers = {
  12. 'Authorization': F'Bearer {os.getenv('DIFY_API_KEY', '')}',
  13. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36'
  14. }
  15. self.logger = logger
  16. self.limit = limit
  17. self.timeout = timeout
  18. def collect(self, user='admin', sort_by='-updated_at', last_id=None, timeout=10):
  19. """
  20. 收集聊天历史数据
  21. :param timeout: 延时等待事时间
  22. :param user: 用户名,默认为'admin'
  23. :param sort_by: 排序字段,默认为'-updated_at'
  24. :param last_id: 最后一条数据的ID,用于分页,默认为None
  25. :return: 收集到的聊天历史数据
  26. """
  27. params = {'user': user, 'limit': self.limit, 'sort_by': sort_by}
  28. if last_id:
  29. params['last_id'] = last_id
  30. try:
  31. self.logger.info("开始访问聊天历史API")
  32. # 发送带认证头的请求
  33. response = requests.get(self.base_url, headers=self.headers,params=params, timeout=timeout)
  34. if response.status_code == 200:
  35. self.logger.info(f"访问成功,状态码: {response.status_code}")
  36. # 打印响应内容
  37. try:
  38. response_data = response.json()
  39. self.logger.info(f"返回数据: {len(response_data.get('data', []))}条")
  40. # 返回是否存在更多数据,和数据列表
  41. return response_data.get('has_more', False), response_data.get('data', [])
  42. except Exception as e:
  43. self.logger.info(f"返回内容: {response.text}", "捕获异常: ", e)
  44. else:
  45. self.logger.warning(f"访问失败,状态码: {response.status_code}")
  46. except requests.exceptions.RequestException as e:
  47. self.logger.error(f"请求异常: {str(e)}")
  48. except Exception as e:
  49. self.logger.error(f"其他错误: {str(e)}")
  50. if __name__ == '__main__':
  51. # 创建一个聊天历史数据收集器对象
  52. collector = ChatHistoryCollector()
  53. collector.collect()