mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 09:17:06 +08:00
feat: implement LLM keyword extraction and fusion scoring for table matching
- Add extract_keywords() to LLMService with conversation context support, using process_stream + start_log/end_log for logging consistency - Add expand_with_terminology() to expand keywords with synonym matching - Add fusion scoring in calc_table_embedding(): α * vec_score + (1-α) * keyword_score - Add calc_keyword_score() with multi-level matching: table name exact (1.0), comment exact (0.9), comment substring (0.7), table name partial (0.25-0.5), field comment exact (0.5), field comment substring (0.4), field name partial (0.3) - Scoring considers keyword coverage rate to differentiate tables with different numbers of matched keywords - Extracted keywords persisted to ChatRecord for reuse across endpoints - get_terminology_template() supports comma-separated keyword input with per-keyword matching for higher precision - Add TABLE_EMBEDDING_ALPHA and TABLE_EMBEDDING_KEYWORD_ENABLED config
This commit is contained in:
@@ -128,6 +128,8 @@ class Settings(BaseSettings):
|
||||
|
||||
TABLE_EMBEDDING_ENABLED: bool = True
|
||||
TABLE_EMBEDDING_COUNT: int = 10
|
||||
TABLE_EMBEDDING_ALPHA: float = 0.4 # weight for vector score; (1-alpha) is keyword weight
|
||||
TABLE_EMBEDDING_KEYWORD_ENABLED: bool = True
|
||||
DS_EMBEDDING_COUNT: int = 10
|
||||
|
||||
ORACLE_CLIENT_PATH: str = '/opt/sqlbot/db_client/oracle_instant_client'
|
||||
@@ -138,6 +140,7 @@ class Settings(BaseSettings):
|
||||
'PARSE_REASONING_BLOCK_ENABLED',
|
||||
'PG_POOL_PRE_PING',
|
||||
'TABLE_EMBEDDING_ENABLED',
|
||||
'TABLE_EMBEDDING_KEYWORD_ENABLED',
|
||||
mode='before')
|
||||
@classmethod
|
||||
def lowercase_bool(cls, v: Any) -> Any:
|
||||
@@ -150,5 +153,15 @@ class Settings(BaseSettings):
|
||||
return False
|
||||
return v
|
||||
|
||||
@field_validator('TABLE_EMBEDDING_ALPHA', mode='before')
|
||||
@classmethod
|
||||
def clamp_alpha(cls, v: Any) -> float:
|
||||
"""将 TABLE_EMBEDDING_ALPHA 限制在 [0.0, 1.0] 范围内"""
|
||||
try:
|
||||
v = float(v)
|
||||
except (TypeError, ValueError):
|
||||
return 0.4
|
||||
return max(0.0, min(1.0, v))
|
||||
|
||||
|
||||
settings = Settings() # type: ignore
|
||||
|
||||
Reference in New Issue
Block a user