query_prompt_config.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. from __future__ import annotations
  2. import copy
  3. from pathlib import Path
  4. from typing import Any
  5. from content_agent.integrations import config_store
  6. QUERY_PROMPTS_PATH = Path("product_documents/配置/query_prompts.v1.json")
  7. DEFAULT_PROFILE: dict[str, Any] = {
  8. "prompt_version": "query_variant.v1",
  9. "system": (
  10. "You generate one concise Chinese short-video search query. "
  11. "Return exactly one plain query string. Do not return JSON, "
  12. "lists, quotes, explanations, or multiple lines."
  13. ),
  14. "user": (
  15. "Seed term:\n{seed_term}\n\n"
  16. "Evidence context:\n{evidence_context}\n\n"
  17. "Create one adjacent search phrase that stays faithful to the evidence. "
  18. "Avoid any phrase listed in existing_search_queries."
  19. ),
  20. "temperature": 0.4,
  21. "max_tokens": 64,
  22. "evidence_fields": [
  23. "seed_term",
  24. "seed_terms",
  25. "existing_search_queries",
  26. "source_field",
  27. "source_index",
  28. "itemset_items",
  29. "category_bindings",
  30. "element_bindings",
  31. "pattern_source_system",
  32. "pattern_execution_id",
  33. "mining_config_id",
  34. "source_post_id",
  35. "matched_post_ids",
  36. "itemset_ids",
  37. "support",
  38. "absolute_support",
  39. "confidence",
  40. ],
  41. "variants_per_seed": 1,
  42. "generic_filter": {
  43. "queries": [
  44. "内容",
  45. "视频",
  46. "热门",
  47. "推荐",
  48. "短视频",
  49. "热门视频",
  50. "推荐视频",
  51. "热门内容",
  52. "推荐内容",
  53. "相关视频",
  54. "相关内容",
  55. "热点视频",
  56. "热点内容",
  57. ],
  58. "tokens": [
  59. "短视频",
  60. "热门",
  61. "推荐",
  62. "相关",
  63. "热点",
  64. "内容",
  65. "视频",
  66. "素材",
  67. "资料",
  68. "信息",
  69. "话题",
  70. ],
  71. },
  72. }
  73. def load_profile(
  74. platform: str,
  75. strategy_version: str,
  76. root_dir: Path | str = Path("."),
  77. ) -> dict[str, Any]:
  78. path = Path(root_dir) / QUERY_PROMPTS_PATH
  79. try:
  80. config, _raw = config_store.load_json(path)
  81. except FileNotFoundError:
  82. return _copy_default_profile()
  83. profiles = config.get("profiles") if isinstance(config, dict) else {}
  84. if not isinstance(profiles, dict):
  85. return _copy_default_profile()
  86. profile = profiles.get(f"{platform}/{strategy_version}")
  87. if not isinstance(profile, dict):
  88. return _copy_default_profile()
  89. return copy.deepcopy(profile)
  90. def _copy_default_profile() -> dict[str, Any]:
  91. return copy.deepcopy(DEFAULT_PROFILE)