chat_utils.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from typing import List, Optional, Dict
  2. from ..schemas.chat import ChatMessage
  3. from ..config.config import Config
  4. from ..db.mongo import get_last_response_id
  5. def convert_messages_for_api(messages: List[ChatMessage]) -> List[Dict[str, str]]:
  6. return [{"role": msg.role, "content": msg.content} for msg in messages]
  7. def get_latest_user_message(messages: List[ChatMessage]) -> Optional[ChatMessage]:
  8. for message in reversed(messages):
  9. if message.role == "user":
  10. return message
  11. return None
  12. def get_previous_response_id(user_id: str, session_id: str) -> Optional[str]:
  13. return get_last_response_id(user_id, session_id)
  14. # 联网搜索工具
  15. def get_web_search_tools() -> list:
  16. return [{
  17. "type": "web_search",
  18. "max_keyword": 20,
  19. "limit": 20,
  20. "sources": ["douyin", "toutiao"],# 附加搜索来源(抖音百科、墨迹天气、头条图文等平台)
  21. }]
  22. # 私域知识库 --- 此处的知识库也需要映射
  23. def get_knowledge_search_tools(knowledge_resource_id: str, app_name: Optional[str] = None) -> list:
  24. tool: Dict = {
  25. "type": "knowledge_search",
  26. "knowledge_resource_id": knowledge_resource_id, # 替换为实际知识库ID
  27. "limit": 10, # 最多返回10条搜索结果
  28. }
  29. # 当 app_name 有值时,按 app_name 字段过滤,否则全局查询
  30. if app_name:
  31. tool["doc_filter"] = {
  32. "op": "must",
  33. "field": "app_name",
  34. "conds": [app_name],
  35. }
  36. return [tool]
  37. # 豆包助手工具
  38. def get_doubao_tools() -> list:
  39. return [{
  40. "type": "doubao_app",
  41. "feature": {
  42. # 联网搜索功能
  43. "ai_search": {
  44. "type": "disabled",
  45. "role_description": Config.ROLE_DESCRIPTION
  46. },
  47. # 边想边搜功能
  48. "reasoning_search":{
  49. "type": "enabled",
  50. "role_description": Config.ROLE_DESCRIPTION
  51. }
  52. }
  53. }]