mongo.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from pymongo import MongoClient
  2. from datetime import datetime
  3. from dotenv import load_dotenv
  4. import os
  5. load_dotenv()
  6. MONGO_URI = os.getenv("ARK_LOGS_MONGO_URI")
  7. client = MongoClient(MONGO_URI, serverSelectionTimeoutMS=5000)
  8. # 数据库
  9. db = client["arklogs"]
  10. # 豆包大模型的对话日志
  11. chat_logs = db["chat_logs"]
  12. # 兴趣圈集合
  13. circle_prompts = db["circle_prompt"]
  14. # 带下划线的表示私有方法(Private)
  15. def _ensure_index():
  16. try:
  17. chat_logs.create_index([("username", 1), ("asked_at", -1)])
  18. except Exception:
  19. pass
  20. def save_chat_log(
  21. username: str,
  22. question: str,
  23. stream_mode: bool,
  24. raw_response: str = None,
  25. status: str = "success",
  26. error: str = None,
  27. ):
  28. """
  29. 保存聊天原始响应日志到 MongoDB
  30. Args:
  31. username: 提问人
  32. question: 提问的问题
  33. stream_mode: 回答方式(流式或非流式)
  34. raw_response: API 原始响应的 repr 字符串
  35. status: 响应状态 success | error
  36. error: 异常时的错误信息
  37. """
  38. try:
  39. _ensure_index()
  40. chat_logs.insert_one({
  41. "username": username,
  42. "question": question,
  43. "stream_mode": stream_mode,
  44. "raw_response": raw_response,
  45. "status": status,
  46. "error": error,
  47. "asked_at": datetime.now(),
  48. })
  49. except Exception as e:
  50. print(f"MongoDB 日志写入失败: {e}")
  51. _DEFAULT_PROMPT_CONFIG = {
  52. "name": "兴趣圈",
  53. "role": "活跃用户",
  54. "style": "自然亲切,有活人感",
  55. "keywords": [],
  56. "forbidden": [],
  57. }
  58. def get_circle_prompt(app_name: str) -> dict:
  59. try:
  60. doc = circle_prompts.find_one({"appName": app_name})
  61. return doc if doc else _DEFAULT_PROMPT_CONFIG
  62. except Exception:
  63. return _DEFAULT_PROMPT_CONFIG