chat.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from pydantic import BaseModel, Field, ConfigDict
  2. from typing import List, Optional, Dict, Any
  3. from datetime import datetime
  4. from ..config.config import Config
  5. class ChatMessage(BaseModel):
  6. role: str # "user" | "assistant" | "system"
  7. content: str
  8. timestamp: Optional[datetime] = None
  9. response_id: Optional[str] = None
  10. thinking: Optional[str] = None
  11. searching: Optional[str] = None
  12. # 帖子请求
  13. class CommentRequest(BaseModel):
  14. id: str # 帖子的主键
  15. # 兴趣圈提示词模版
  16. class CirclePromptConfig(BaseModel):
  17. appName: str # 包名,作为唯一标识
  18. name: str # 兴趣圈名称
  19. role: str # AI 扮演的角色
  20. style: str # 回复风格描述
  21. keywords: List[str] = [] # 推荐使用的关键词
  22. forbidden: List[str] = [] # 禁止使用的词语
  23. extra_instruction: str # 是给模型更细化的行为指引,可以包含在最终提示词中。
  24. # Ai的请求对象
  25. class ChatRequest(BaseModel):
  26. model_config = ConfigDict(populate_by_name=True)
  27. messages: List[ChatMessage]
  28. model: Optional[str] = Config.MODEL_NAME
  29. stream: Optional[bool] = False
  30. source: Optional[str] = None # source=app 时走第三方 token 认证
  31. token: Optional[str] = None # App 端传入的第三方 token
  32. session_id: Optional[str] = Field(None, alias="sessionId") # 会话ID,前端传 sessionId
  33. # Ai的返回对象
  34. class ChatResponse(BaseModel):
  35. message: ChatMessage
  36. model: str
  37. usage: Optional[Dict[str, Any]] = None
  38. response_id: Optional[str] = None
  39. # 流式对象
  40. class StreamResponse(BaseModel):
  41. content: str
  42. finished: bool
  43. model: str
  44. timestamp: datetime
  45. type: str = "answer" # "thinking"=AI思考开过车delta | "searching"=搜索状态/关键词 | "answer" = 正式回答 delta(现有逻辑)
  46. # 历史人物
  47. class HistoricalFigure(BaseModel):
  48. id: str = Field(alias="_id") # MongoDB _id
  49. name: str # 姓名,如 "孔子"
  50. era: str # 朝代/时期,如 "春秋时期"
  51. description: str # 简介,如 "儒家创始人"
  52. prompt: str # 说话风格提示词,用于 AI 润色
  53. model_config = ConfigDict(populate_by_name=True)
  54. # 历史人物新增/修改(不含 id,由 MongoDB 生成)
  55. class FigureUpsert(BaseModel):
  56. name: str
  57. era: str
  58. description: str
  59. prompt: str
  60. # 润色请求
  61. class RephraseRequest(BaseModel):
  62. figureId: str # 历史人物 _id
  63. text: str # 用户原文
  64. # 机器人群内自动回复
  65. class GroupChatRequest(BaseModel):
  66. message: str #@机器人的消息
  67. user_id: str # 用户编号= IM中的account
  68. app_name: str #IM群所对应的app包名
  69. # 帖子评论区机器人多轮对话
  70. class PostCommentBotRequest(BaseModel):
  71. post_id: str # 帖子 MongoDB ObjectId
  72. user_id: str # 评论用户账号
  73. app_name: str # app 包名
  74. message: str # @机器人的消息内容
  75. parent_comment: Optional[str] = None # 被回复的评论原文(场景2)