Files
ai-g3sb-backman2.0/backend/__pycache__/main.cpython-312.pyc
T

107 lines
17 KiB
Plaintext
Raw Normal View History

2026-04-14 10:28:22 +08:00
Ë
®Üi4ãó—dZddlZddlZddlZddlZddlmZddlmZddl m
Z
ee «j«jZee«ej vr"ej j#dee««ej$ej&dd¬«ej(e«Zd Zd
efd „Zd „Zd
efd
„Zded
efd„Zd„Zded
eefd„Zddedeefd„Zd„Zddedefd„Z ddefd„Z!d„Z"edk(re"«yy)ud
Text2SQL 多智能体系统 - CLI 入�
用法:在项目根目录执行 python backend/main.py
éN)ÚPath)ÚOptional)Ú load_dotenvz1%(asctime)s [%(levelname)s] %(name)s: %(message)sz%Y-%m-%d %H:%M:%S)ÚlevelÚformatÚdatefmtz"./data/models/Qwen3-Embedding-0.6BÚreturncód—tt«j«jjS)uB仓库根目录(å�« data/ã€�.envã€�api_server.py 的目录)。)rÚ__file__ÚresolveÚparent©óú4C:\Users\24019\Desktop\backman-camel\backend\main.pyÚ
_repo_rootr!s!€ä ”‹>× !Ñ !Ó #× *Ñ *× 1Ñ 1Ð1rcó0—tt«dz «y)u:加载项目根目录 .env,供å�Žç»­ os.getenv 使用。z.envN)rrrrrÚ_load_project_envr&s€ä”
“ ˜vÑ%Õ&rcóR—tjdt«j«S)NÚEMBEDDING_MODEL_PATH)ÚosÚgetenvÚ_DEFAULT_EMBEDDING_PATHÚstriprrrÚ_embedding_model_pathr+s€Ü
�9‰9Ð+Ô-DÓ E× KÑ KÓ MÐMrÚnamecóT—|xsdj«j«}|dvry|S)uTCLI / é…�置中的方言别å��统一为 sqlglot 方言å��(SQL Server -> tsqlï¼‰ã€‚Ú sqlserver)rÚmssqlÚtsql)Úlowerr)rÚns rÚresolve_sql_dialectr"/s/€à
Ò �×#Ñ#Ó%×+Ñ+Ó-€AØÐ "Ñ"ØØ €Hrcó†—t«tjdd«j«j «dv}|r€t t
««}|j«�sÔtjd|›�«tjd«tjd|›d�«tjd«y tjd
d «j«}tjd d «j«}|xr%|jd
«xs|jd« }|r�n|r:tjdd «j«sÝtjd«y tjdd «j«stjd«y tjd«xstjdd «j«}|stjd«y tjdd «j«stjd«y t d«}|j«s.tjd|›�«tjd«y tjd«s+tjd«tjd«y y)u 环境检查ÚUSE_LOCAL_EMBEDDINGÚtrue)Ú1r%ÚyesÚonuEmbedding模型ä¸�存在: u请先下载模型:zG modelscope download --model 'Qwen/Qwen3-Embedding-0.6B' --local_dir 'Ú'uÁ或使用远程 Embedding API:USE_LOCAL_EMBEDDING=false,并é…�ç½® MODELSCOPE_API_KEYã€�或 OPENAI_API_KEY+OPENAI_EMBEDDING_MODEL(å�Šå�¯é€‰ OPENAI_BASE_URL)ã€�或 DASHSCOPE_*(百炼)FÚMODELSCOPE_API_KEYÚÚOPENAI_API_KEYzhttp://zhttps://ÚOPENAI_EMBEDDING_MODELu=USE_LOCAL_EMBEDDING=false 但未设置 OPENAI_EMBEDDING_MODELÚDASHSCOPE_API_KEYuwUSE_LOCAL_EMBEDDING=false 但未设置 MODELSCOPE_API_KEYã€�OPENAI_API_KEY+OPENAI_EMBEDDING_MODEL 或 DASHSCOPE_API_KEYÚDASHSCOPE_BASE_URLÚDASHSCOPE_base_urlu8未设置 DASHSCOPE_BASE_URL(或 DASHSCOPE_base_url)ÚDASHSCOPE_MODELu未设置 DASHSCOPE_MODELú9./data/schemas/G3SB_MCDataDictionary_table_structure.jsonuSchema文件ä¸�存在: u7请将G3SB Schema文件放置在 ./data/schemas/ 目录ÚDEEPSEEK_API_KEYu'环境å�˜é‡� DEEPSEEK_API_KEY 未设置uB请在 .env 文件中é…�置,或 export DEEPSEEK_API_KEY=your_keyT) rrrrr rrÚexistsÚloggerÚwarningÚinfoÚ
startswith)Ú
use_local_embÚ
model_pathÚms_keyÚoa_keyÚ oa_key_okÚbaseÚ schema_paths rÚsetup_environmentr@7sB€äÔÜ—I‘IÐ3°VÓ<×BÑBÓD×JÑJÓLðQð€MñäÔ/Ó1Ó2ˆ
Ø× Ñ Õ"Ü �N‰NÐ7¸
°|ÐDÔ EÜ �K‰KÐ/Ô 0Ü �K‰Kð(Ø(2 |°1ð6ô
7ä �K‰KðXô
Yðä—‘Ð/°Ó4×:Ñ:Ó<ˆÜ—‘Ð+¨RÓ0×6Ñ6Ó8ˆØò
Ø × Ñ ˜iÓ (Ò I¨F×,=Ñ,=¸jÓ,Ið
ˆ ñ Ù Ù
Ü—9‘9Ð5°rÓ:×@Ñ@ÔBÜ—‘Ð^Ô_Øä—9‘9Ð0°"Ó5×;Ñ;Ô=Ü—‘ðRôðä— ‘ Ð.Ó/ÒV´2·9±9Ð=QÐSUÓ3V߉e‹gð
ñÜ—‘ÐYÔZØÜ—9‘9Ð.°Ó3×9Ñ9Ô;Ü—‘Ð:Ô;ØôÐRÓS€KØ × Ñ Ô Ü�‰Ð0°°
Ð>Ô?Ü� ‰ ÐMÔNØô �9‰9Ð'Ô (Ü�‰Ð@ÔAÜ� ‰ ÐXÔYØà rÚstructure_pathcó—t|«}d|jvry|j|jjdd«z }|j «r t |«SdS)uM若存在与 table_structure å�Œå��çš„ table_meta 文件则返回其路径。Útable_structureNÚ
table_meta)rrr
ÚreplaceÚis_fileÚstr)rAÚpÚcands rÚ_default_g3sb_meta_pathrJvsP€ä ˆ^Ó€AØ §¡Ñ&ØØ �8‰8�a—f‘f—n‘nÐ%6¸ ÓEÑ E€DØŸ ™ œŒ3ˆt‹9Ð0¨DÐ0rr?Úschema_meta_pathc ó*—ddlm}|�|n
t|«}tj d|›�«|rtj d|›�«|j ||¬«}|j
«}tj d|d›d|d ›d
|d ›d �«|S)
uh加载 Schemaï¼›G3SB structure JSON 会自动å°�试é…�对 table_meta(å�¯ç”¨ --schema-meta 指定)。r)Ú
SchemaManageru加载Schema: u 表注释(meta): )Úg3sb_meta_pathu[OK] Schema加载完æˆ�: Údatabaseu, å…±Ú total_tablesu张表, Ú
total_columnsu 个字段)Úschema.managerrMrJr5r7Úload_from_jsonÚget_statistics)r?rKrMÚmetaÚ
schema_mgrÚstatss rÚ load_schemarXsº€å,ð Ð 'ñ ä
$ [Ó
1ð ô
 ‡K�K�.  
Ð.Ô/Ù Ü� ‰ Ð)¨$¨Ð0Ô1à×-Ñ-Ø Dð.ó€Jð
× %Ñ %Ó '€EÜ
‡K�KØ
# E¨*Ñ$5Ð#6ð7Ø�NÑ#Ð
$ H¨U°?Ñ-CÐ,DÀIð Oôð
Ðrc óˆ—ddlm}ddlm}t j
dd«j
«j«dv}t|dd«rd}|jxst j
d «xsd
j
«}|s td «‚t j
d «xsd
j
«}||||jxsd|j|j¬«}||||j|j|j |j" |j$ |j&|j(|¬«
}|S)u创建编排器r)ÚText2SQLOrchestrator)ÚDeepSeekConfigÚTRANSLATE_EN_TO_ZHr%)Ú0ÚfalseÚnoÚoffÚno_translate_enFr3r+uh未é…�ç½® DeepSeek API Key:请在 .env 中设置 DEEPSEEK_API_KEY,或使用命令行å�‚æ•° --api-keyÚDEEPSEEK_BASE_URLzhttps://api.deepseek.comú
deepseek-chat)Úapi_keyÚbase_urlÚ
model_nameÚ temperatureÚ
max_tokens)
Úschema_managerÚdeepseek_configÚembedding_model_pathÚvector_db_pathÚ max_retryÚuse_vector_searchÚfewshot_enabledÚ
fewshot_top_kÚfewshot_min_ratingÚtranslate_english_to_zh)Úagents.orchestratorrZÚllm.deepseek_clientr[rrrr ÚgetattrrdÚ
ValueErrorÚmodelrgrhÚembedding_modelÚ vector_dbrmÚno_vector_searchÚ
no_fewshotrprq) rVÚargsrZr[Ú translate_enrdreÚconfigÚ orchestrators rÚcreate_orchestratorr€™s-€å8Ý2ä—9‘9Ð1°6Ó:×@Ñ@ÓB×HÑHÓJðSð€Lô ˆtÐ&¨Ô.؈ à�|‰|ÒBœrŸy™yÐ);Ó<ÒBÀ×IÑIÓK€GÙ Üð
1ó
ð
ô— ‘ Ð-Ó.ÒLÐ2L×SÑSÓU€Há
ØØØ—:‘:Ò0 Ø×$Ñ$Ø—?‘?ô €Fñ(Ø!ØØ!×1Ñ1Ø—~‘~Ø—.‘.Ø"×3Ñ3Ð3à ŸO™OÐ+Ø×(Ñ(Ø×2Ñ2Ø ,ô €Lð ÐrÚquestionÚdialectc
óV—ddl}ddlm}ddlm}m}t jd|›�«||«}|j|jk(r�|jxsd}t jd«td«td «td
«t|«td «|dd gggdd
|jji¬«S|j«} |j||d¬«}
|j«| z
} td«td«td
«|
jr3td| d›d|
j›d�«t|
j «n8td|
j›d�«|
j"D]} td| ›�«Œ|
j$r*td«|
j$D]}
td|
›�«Œ|
j&j)d«}|
jr|rtd«t|«td|
j*›�«|
S)u å�•次查询rN)ÚGenerationResult)Ú DialogIntentÚclassify_dialogu [Q] 问题: r+u/[Q] æ„�图: conversation(跳过 SQL 生æˆ�)ú=
============================================================u2对� / �查询输入(未触� SQL 生�)z<============================================================u
使用表: []FÚ
dialog_intent)ÚsqlÚvalidÚerrorsÚwarningsÚ tables_usedÚattemptsÚmetadataé)r�r‚Útop_k_candidatesu
生�结果:u[OK] SQL (耗时 z.2fu
s, �试 u 次):
u[FAIL] 生�失败 (�试 u 次)z - u
[WARN] 警告:Údb_empty_feedbacku'
[DB 探针 0 — 无数�行] 说明:u
使用表: )Útimersr„Úutils.dialog_classifierr…r†r5r7ÚintentÚ CONVERSATIONÚreply_suggestionÚprintÚvalueÚgeneraterŠrŽr‰r‹rŒr�Úgetr�)rr�r‚r“r„r…r†Ú
classifiedÚreplyÚstartÚresultÚelapsedÚerrÚwÚdbes rÚ single_queryr¤Èså€ãå4ßEä
‡K�K�,˜x˜jÐ)Ô*á  Ó*€JØ×јL×5Ñ5Ò5Ø×+Ñ+Ò1¨rˆÜ� ‰ ÐEÔFÜ
ˆoÔÜ
ÐBÔCÜ
ˆhŒÜ
ˆeŒ Ü
�Ô!ÙØØØØØØØ% |×'@Ñ'@×'FÑ'FÐGô
ð
ð