PMFlow/backend/app/services/adaptive_rag_service/shared_part_02.py

147 lines
3.5 KiB
Python

"""Adaptive RAG shared constants/types part."""
from __future__ import annotations
from .shared_imports import *
from .shared_utils import *
ARCHITECTURE_KEYWORDS = (
"系统架构",
"架构",
"运行机制",
"技术栈",
"模块",
"服务组成",
"docker",
"数据库",
"redis",
"后端",
"前端",
)
CODE_KEYWORDS = (
"代码",
"函数",
"方法",
"类",
"模块",
"文件",
"api",
"接口实现",
"service",
"model",
"schema",
"where defined",
)
URL_RE = re.compile(r"https?://\S+", flags=re.IGNORECASE)
SENTENCE_SPLIT_RE = re.compile(r"(?<=[。!?!?\n])")
PAGE_MARKER_RE = re.compile(r"\[\[PAGE:(\d{1,6})\]\]")
MAX_CONTEXT_TOKENS = 8000
DEFAULT_TOP_K = 5
DB_QUERY_TIMEOUT_SECONDS = 5.0
VECTOR_SEARCH_TIMEOUT_SECONDS = 10.0
GRAPH_QUERY_TIMEOUT_SECONDS = 4.0
AGENT_MAX_RETRIEVAL_STEPS = 3
SESSION_GAP_MINUTES = 30
SESSION_DEFAULT_TITLE = "新会话"
SESSION_TITLE_MIN_LEN = 5
THINKING_MODE_NORMAL = "normal"
THINKING_MODE_DEEP = "deep"
DEEP_RETRIEVAL_STEPS = _env_int("RAG_DEEP_RETRIEVAL_STEPS", 5, minimum=2, maximum=8)
DEEP_VECTOR_TOP_K = _env_int("RAG_DEEP_VECTOR_TOP_K", 12, minimum=6, maximum=40)
DEEP_CONTEXT_BLOCKS = _env_int("RAG_DEEP_CONTEXT_BLOCKS", 16, minimum=8, maximum=32)
DEEP_ANSWER_MAX_TOKENS = _env_int("RAG_DEEP_ANSWER_MAX_TOKENS", 1400, minimum=900, maximum=3000)
QUERY_TYPE_COUNT = "count"
QUERY_TYPE_LIST = "list"
QUERY_TYPE_STATUS = "status"
QUERY_TYPE_EXPLAIN = "explain"
QUERY_TYPE_UNKNOWN = "unknown"
ACTION_MODE_AUTO = "auto"
ACTION_MODE_READ = "read"
ACTION_MODE_WRITE = "write"
ACTION_MODE_READ_WRITE = "read_write"
REQUIREMENT_WRITE_VERB_KEYWORDS = (
"新增",
"增加",
"添加",
"接入",
"支持",
"实现",
"创建",
"新建",
"记录",
"入库",
"同步",
"补充",
)
REQUIREMENT_WRITE_OBJECT_KEYWORDS = (
"信号",
"需求",
"任务",
"项目",
"功能",
"接口",
"页面",
"按钮",
"规则",
"模块",
"卡路里",
"食谱",
)
WRITE_EXPRESSIONS = (
"给",
"帮我",
"请帮",
"请给",
"麻烦",
)
COUNT_HINTS = ("多少", "几个", "数量", "总数", "count")
LIST_HINTS = ("哪些", "列表", "清单", "列出", "分别", "名单", "都有哪些")
STATUS_HINTS = ("进度", "状态", "阶段", "完成率", "完成度", "情况")
ENTITY_ALIAS_MAP: dict[str, str] = {
"能力": "skill",
"技能": "skill",
"ability": "skill",
"abilities": "skill",
"skill": "skill",
"skills": "skill",
"负责人": "owner",
"owner": "owner",
"assignee": "owner",
"成员": "member",
"人员": "member",
"member": "member",
"任务": "task",
"task": "task",
"tasks": "task",
"项目": "project",
"project": "project",
"projects": "project",
"信号": "signal",
"signal": "signal",
"signals": "signal",
"函数": "function",
"function": "function",
"method": "function",
"类": "class",
"class": "class",
"模块": "module",
"module": "module",
"智能配置": "ai_config",
"ai配置": "ai_config",
"配置中心": "ai_config",
"能力管理": "skills",
"技能管理": "skills",
"用户管理": "users",
"项目列表": "projects",
"团队负载": "workloads",
"ai管家": "ai_steward",
}
TS_SYMBOL_RE = re.compile(
r"(?:export\s+)?(?:async\s+)?(?:function|class|interface|type|const)\s+([A-Za-z_][A-Za-z0-9_]*)"
)
class RetrievedItem:
source: str
content: str
score: float
source_label: str
metadata: dict[str, Any]