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

205 lines
35 KiB
Plaintext
Raw Normal View History

2026-04-14 10:28:22 +08:00
Ë
ðAßiµcãó.
—dZddlmZddlZddlZddlZddlZddlZddl Z ddl
2026-04-14 10:28:22 +08:00
m Z ddl m
Z
2026-04-14 10:28:22 +08:00
mZmZmZmZddlmZddlmZmZmZm ZddlmZdd lmZmZdd
lmZm Z dd l!m"Z"e e#«jI«jJZ&e&d z Z'e(e'«ejRvr"ejRjUde(e'««dd
l+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5m6Z6ddl7m8Z8m9Z9m:Z:e jve jxdd¬«e jze>«Z?drd„Z@e@«ZAeAj…«re"eA«e?j‡deA›�«ne?j‰deA›�«daEdaFd„ZGGd„de«ZHGd„de«ZIGd„de«ZJGd„d e«ZKGd!„d"e«ZLGd#„d$e«ZMGd%„d&e«ZNGd'„d(e«ZOGd)„d*e«ZPGd+„d,e«ZQGd-„d.e«ZRdsd/„ZSdtd0„ZT dud1„ZUdvd2„ZVdwd3„ZWdxd4„ZX dy dzd5„ZYd{d6„ZZed|d7„«Z[ed8d9d:e[¬;«Z\e\j»ed<gd=d<gd<g¬>«e\j½d?«d@„«Z_e\jÁdA«d}dB„«Zae\jÁdC«d}dD„«Zbe\jÁdE«d~dF„«Zce\j½dE« d d€dG„«Zde\j½dH«edIdJ¬K«dddLdf d�dM„«Zee\jÍdN«d‚dO„«Zge\jÍdP« dƒdQ„«Zhe\jÓdR« d„ d…dS„«Zje\jÁdT«d†dU„«Zke\jÁdV«edI«fd‡dW„«Zle\j½dV« dˆ d‰dX„«Zme\j½dY« d„ dŠdZ„«Zne\jÁdY«d‹d[„«Zoe\jÍd\«eep¬]«ddf dŒd^„«Zqe\jÓd\« d„ d�d_„«Zre\j½d`« dŽ d�da„«Zse\jÁdb«dc„«Zte\j½dd«de„«Zue>dfk(rŒddlvZvddlwZwexejòdgdh««Zzejòdidj«Z{e?j‡dke{›dlez›�«e?j‡dme{›dlez›dn�«ewjø«evjúe\e{ezdodp¬q«yy)�uo
FastAPI �务入� - Text2SQL NL Chat API
包装 Text2SQLOrchestrator 为 REST API �务,供�端调用
é)Ú annotationsN)ÚPath)ÚOptionalÚListÚDictÚAnyÚ
AsyncIterator)Úasynccontextmanager)ÚFastAPIÚ
HTTPExceptionÚBodyr)ÚCORSMiddleware)ÚStreamingResponseÚ JSONResponse)Ú BaseModelÚField)Ú load_dotenvÚbackend)Úsetup_environmentÚ load_schemaÚcreate_orchestratorÚresolve_sql_dialect)ÚGenerationResult)Ú
lite_nl_store)Ú DialogIntentÚclassify_dialog)Úlast_assistant_was_data_queryÚmessages_to_text2sql_contextÚis_likely_follow_upz1%(asctime)s [%(levelname)s] %(name)s: %(message)sz%Y-%m-%d %H:%M:%S)ÚlevelÚformatÚdatefmtcóì—ddl}tj«dz }|j«r|St |dd«r6t |d«r*t|j «dz }|j«r|St |dd«r8t|j«j}|dz }|j«r|S|Stt«j«j}|dz }|j«r|S|S)u-查找 .env 文件,支æŒ�多ç§�è¿�行环境rNz.envÚfrozenFÚ_MEIPASS) ÚsysrÚcwdÚexistsÚgetattrÚhasattrr%Ú
2026-04-14 10:28:22 +08:00
executableÚparentÚ__file__Úresolve)r&Úcwd_envÚ meipass_envÚexe_dirÚenv_pathÚ
script_dirs ú
api_server.pyÚ_find_env_filer51sÞ€ãô�h‰h‹j˜6Ñ!€G؇~�~ÔØˆôˆs�H˜eÔ$¬°°jÔ)Aܘ3Ÿ<™<Ó(¨6Ñ1ˆ Ø × Ñ Ô ØÐ ôˆs�H˜eÔ$ä�s—~‘~Ó&×-Ñ-ˆØ˜VÑ#ˆØ �?‰?Ô ØˆOð €Nô
œ(“^×+Ñ+Ó-×4Ñ4ˆ
2026-04-14 10:28:22 +08:00
Ø Ñ&ˆØ �?‰?Ô ØˆOð €Nóu[OK] 已加载é…�置文件: u[WARN] 未找到 .env 文件: có(—t�tSt«s td«‚tjdd«}tjdd«}t ||«aGd„d«}tt |««atjd«tS) u获å�–或åˆ�始化 orchestratorNuÃ环境检查失败(请查看上方 WARNING/INFO,常è§�原因:未é…�好 OPENAI_* / MODELSCOPE_* / DASHSCOPE_* 远程 Embedding;或 Schema 文件路径ä¸�对ã€�DEEPSEEK_API_KEY æœªè®¾ç½®ï¼‰Ú SCHEMA_PATHz9./data/schemas/G3SB_MCDataDictionary_table_structure.jsonÚSCHEMA_META_PATHcó"—eZdZejd«Zejdd«Zeejdd««Ze ejdd««Z
e ejdd ««Z ejd
d «Z d Z
ejd
d«j«dvZe ejdd««Ze ejdd««Zejdd«j%«j«dvZy)úget_orchestrator.<locals>.ArgsÚDEEPSEEK_API_KEYÚ
MODEL_PRIMARYz
deepseek-chatÚ TEMPERATUREz0.3Ú
MAX_TOKENSÚ4096Ú MAX_RETRYÚ2ÚVECTOR_DB_PATHz./data/embeddings/chromaFÚFEWSHOT_ENABLEDÚtrue)rEÚ1ÚyesÚ
FEWSHOT_TOP_KÚ3ÚFEWSHOT_MIN_RATINGÚ7ÚTRANSLATE_EN_TO_ZH)Ú0ÚfalseÚnoÚoffN)Ú__name__Ú
2026-04-14 10:28:22 +08:00
__module__Ú __qualname__ÚosÚgetenvÚapi_keyÚmodelÚfloatÚ temperatureÚintÚ
max_tokensÚ max_retryÚ vector_dbÚno_vector_searchÚlowerÚ
no_fewshotÚ
fewshot_top_kÚfewshot_min_ratingÚstripÚno_translate_en©r6r4ÚArgsr;os„Ø�"—)‘)Ð.Ó/ˆØ�— ‘ ˜/¨?Ó;ˆÙ˜I˜BŸI™I m°UÓ;Ó<ˆ Ù˜˜Ÿ™ <°Ó8Ó9ˆ
Ù˜ ˜Ÿ ™  +¨sÓ3Ó4ˆ Ø�B—I‘IÐ.Ð0JÓKˆ Ø ÐØ"˜Ÿ™Ð#4°fÓ=×CÑCÓEÐI]Ð]ˆ
2026-04-14 10:28:22 +08:00
Ù˜I˜BŸI™I o°sÓ;Ó<ˆ
Ù   §¡Ð+?ÀÓ!EÓFÐØ#˜"Ÿ)™)Ð$8¸&ÓA×GÑGÓI×OÑOÓQðV
ð
‰r6rfu![OK] Orchestrator åˆ�始化完æˆ�)
Ú orchestratorrÚ RuntimeErrorrTrUrÚschema_managerrÚloggerÚinfo)Ú schema_pathÚschema_meta_pathrfs r4Úget_orchestratorrn\sˆ€ôÐÜÐä Ô Üð
2026-04-14 10:28:22 +08:00
Ló
ð
ô —)‘)˜MÐ+fÓg€KÜ—y‘yÐ!3°TÓ:Ðä  Ð.>Ó?€N÷
ñ
ô$'¤~±t³vÓ>€LÜ
2026-04-14 10:28:22 +08:00
‡K�KÐ3Ô4ä Ðr6cóþ—eZdZUedd¬«Zded<edd¬«Zded <ed
d ¬«Zded <edd
¬«Zded<edd¬«Z ded<edd¬«Z
2026-04-14 10:28:22 +08:00
ded<edd¬«Z ded<edd¬«Z ded<y)Ú
NLChatRequest.u!用户输入的自然语言问题©Ú descriptionÚstrÚmessageNu模型路由: openai | deepseekú
Optional[str]Ú service_codeÚautou语言: zh | en | tc | autoÚ lang_codeu任务IDÚtaskIdõ会è¯�IDÚ
session_idu访客业务IDÚvisitor_biz_idu用户IDÚuser_iduæµ�å¼�节æµ�å�‚æ•°ú
Optional[int]Ústreaming_throttle)
rQrRrSrrtÚ__annotations__rvrxryr{r|r}rrer6r4rprp‡s�…Ù˜Ð*MÔN€GˆSÓNÙ"'¨Ð:[Ô"\€L�-Ó\Ù$ VÐ9VÔW€Iˆ}ÓWÙ! $°JÔ?€FˆMÓ?Ù % d¸
Ô C€J�
ÓCÙ$)¨$Ð<LÔ$M€N�MÓMÙ" 4°ZÔ@€Gˆ]Ó@Ù(-¨dÐ@TÔ(UИ
ÔUr6rpcó4—eZdZUded<dZded<dZded<y)Ú
IntentPayloadrsÚintentNzOptional[float]Ú
confidenceruÚreason)rQrRrSr€r„r…rer6r4r‚r‚’s…Ø ƒKØ"&€J�Ó&Ø €FˆMÔ r6r‚cóX—eZdZUedd¬«Zded<eed¬«Zded <eed
2026-04-14 10:28:22 +08:00
¬«Zd ed <ed
d¬«Z ded<edd¬«Z
ded<edd¬«Z ded<edd¬«Z ded<edd¬«Z
ded<edd ¬«Zded!<edd"¬«Zded#<edd$¬«Zded%<y)&ÚDataQueryResult.u生æˆ�çš„SQL语å�¥rqrsÚsqlu查询结果列å��)Údefault_factoryrrz List[str]Úcolumnsu查询结果行数æ�®zList[Dict[str, Any]]Úrowsru 结果行数rZÚ row_countFu 是å�¦æˆªæ–­ÚboolÚ truncatedNuSQL自然语言说明ruÚ sql_explainTu是å�¦å…�许导出zOptional[bool]Ú
can_exportu_库探针:1=有数æ�®è¡Œï¼Œ0=无行需追问补充,-1=执行失败(é‡�试),None=未探针r~Údb_execution_statusu7探针0时的无行说明与追问(å�«é—®é¢˜åˆ†æž�)Údb_empty_feedbackuNTrue 表示探针为0:需用户补充æ�¡ä»¶å�Žé‡�æ–°æ��问以é‡�新生æˆ�SQLÚfollow_up_requiredu4探针为1æ—¶LLM生æˆ�çš„é�¢å�‘用户SQL交付说明Úsql_delivery_message)rQrRrSrrˆr€ÚlistrŠr‹rŒrŽr�r�r‘r’r“r”rer6r4r‡r‡˜så…Ù�SÐ&:Ô;€CˆÓ;Ù¨tÐAUÔV€GˆYÓVÙ!&°tÐI`Ô!a€DÐ
2026-04-14 10:28:22 +08:00
ÓaÙ˜1¨.Ô9€IˆsÓ9Ù˜E¨~Ô>€IˆtÓ>Ù!& tÐ9PÔ!Q€K�ÓQÙ!& tÐ9MÔ!N€J�ÓNÙ).Ø Øuô*Иóñ(-Ø ÐSô(Ð�}óñ %Ø
Ødô Иóñ+0Ø ÐPô+И-ôr6r‡có^—eZdZUded<ded<edd¬«Zded <edd
¬«Zded <y) ÚNLChatSuccessDatar‚rƒr‡Ú
branch_resultNu$æµ�å¼�å�™è¿°ï¼ˆSQLå�—上方说明)rqruÚstream_narrativeu$æµ�å¼�å�™è¿°ï¼ˆSQLå�—下方说明)Ústream_narrative_after)rQrRrSr€rr™ršrer6r4r—r—°s4…Ø ÓØ"Ó"Ù&+¨DÐ>dÔ&eÐ�mÓeÙ,1°$ÐDjÔ,kИMÔkr6r—cóh—eZdZUedd¬«Zded<edd¬«Zded <ed
d ¬«Zd ed
<y
2026-04-14 10:28:22 +08:00
)Ú ApiEnvelopeéÈu状æ€�ç �,200表示æˆ�功rqrZÚcodeÚu消æ�¯rsÚmsgNu å“�应数æ�®zOptional[NLChatSuccessData]Údata)rQrRrSrržr€r r¡rer6r4rœrœ·s7…Ù�cÐ'DÔE€Dˆ#ÓEÙ�R XÔ.€CˆÓ.Ù(-¨dÀÔ(O€DÐ
%ÔOr6rœcó0—eZdZUded<ded<dZded<y)Ú
2026-04-14 10:28:22 +08:00
ErrorResponserZržrsr Nz
Optional[Any]r¡)rQrRrSr€r¡rer6r4r£r£½s…Ø
ƒIØ ƒHØ€Dˆ-Ôr6r£có8—eZdZUdZded<dZded<dZded<y)ÚSessionCreateBodyNruÚtitler}r|©rQrRrSr¦r€r}r|rer6r4r¥r¥Ãó …Ø€Eˆ=ÓØ!€Gˆ]Ó!Ø$(€N�MÔ(r6r¥có8—eZdZUdZded<dZded<dZded<y)ÚSessionTitlePatchBodyNrur¦r}r|r§rer6r4rªrªÉr¨r6rªcó4—eZdZUded<dZded<dZded<y)ÚSessionMessagePatchBodyrsÚcontentNrur}r|)rQrRrSr€r}r|rer6r4r¬r¬Ïs…Ø
ƒLØ!€Gˆ]Ó!Ø$(€N�MÔ(r6r¬có^—eZdZUded<dZded<dZded<dZded<dZded <dZded
<y) ÚSqlExecuteBodyrsrˆNr~Úmax_rowsrur}r|Úchat_session_idÚchat_message_id) rQrRrSr€r°r}r|r±r²rer6r4r¯r¯Õs9…Ø ƒHØ"€HˆmÓ"Ø!€Gˆ]Ó!Ø$(€N�MÓ(Ø%)€O�]Ó)Ø%)€O�]Ô)r6r¯cóª—eZdZUedd¬«Zded<dZded<dZd ed
<dZd ed <dZ d ed <dZ
d ed
<dZ d ed<dZ d ed<dZ
d ed<dZd ed<y)ÚFavoriteCreateBody.zsql | function | reportrqrsÚfav_typerŸÚnameNruÚdescr}r|rˆr�ÚpathÚ
reportPathÚparams)rQrRrSrrµr€r¶r·r}r|rˆr�r¸r¹rºrer6r4r´r´Þsm…Ù˜#Ð+DÔE€HˆcÓEØ€Dˆ#ƒNØ€Dˆ-ÓØ!€Gˆ]Ó!Ø$(€N�MÓ(Ø€CˆÓØ!%€K�Ó%Ø€Dˆ-ÓØ $€J�
Ó$Ø €FˆMÔ r6r´cóV—dtj|d¬«›d�jd«S)Nzdata: F©Ú ensure_asciiz
zutf-8)ÚjsonÚdumpsÚencode)Úobjs r4Ú _sse_datarÂës(€Ø
”D—J‘J˜s°Ô7Ð8¸Ð =× DÑ DÀWÓ MÐMr6cóH—|xsdj«xsd}ddddœd|idœS) uP寒暄/元问题等:与å‰�端 BUSINESS_MANUAL + branch_result.answer 一致。rŸu 您好。ÚBUSINESS_MANUALçð?Ú conversation©rƒr„r…Úanswer©rƒr˜)rc)ÚreplyÚrs r4Ú_conversation_nl_dictrÌïs4€à Š�"×ÑÓÒ, €Aà.¸cÈ^Ñ\Ø" A˜ñ ðr6cƒóNK—|jxsdj«}|sytj|j|j
|dd¬«ƒd{–—†}|sy|j
d«xsg}|syt|«}t|«rdnd}t||¬ «\}}||fS7ŒM­w)
u}
在写入本轮之�读�会�历�,构造 Text2SQL 上文,并判断上一轮助手是�为数�查询。
rŸ)rŸFr�r)ÚlimitÚoffsetNÚitemsé)Ú max_pairs)
r{rcrÚ get_messagesr}r|Úgetrrr) ÚrequestÚ user_textÚsidr¡rÐÚ last_datarÒÚblockÚ_ns r4Ú_load_session_text2sql_contextrÛøs®èø€ð × Ñ Ò # ×
2026-04-14 10:28:22 +08:00
*Ñ
*Ó
,€CÙ ØÜ×+Ñ+Ø�‰Ø×ÑØ ØØô ÷ €Dñ ØØ �H‰H�WÓ Ò # €EÙ ØÜ-¨eÓ4€Iä(¨Ô3‘¸€IÜ,¨U¸iÔH�I€Eˆ2Ø �)Ð Ðð! ús‚AB%ÁB#ÁAB%cƒó„K—|jr|jj«sy tj|d¬«}t j
|j |j|jj«||«ƒd{–—†y7Œ#t$r"}tjd|›�«Yd}~yd}~wwxYw­w)NFr¼u[API] 会è¯�è�½åº“跳过: ) r{rcr¾r¿rÚappend_exchanger}r|Ú ExceptionrjÚwarning)rÕrÖr¡Úassistant_jsonÚes r4Ú_append_session_if_neededrâs èø€Ø × Ò  7×#5Ñ#5×#;Ñ#;Ô#=Øð
9ÜŸ™ D°uÔ=ˆÜ×+Ñ+Ø �O‰OØ × "Ñ "Ø × Ñ × $Ñ $Ó &Ø Ø ó 
÷
ò
ùô ò9Ü�‰Ð3°A°3Ð7×8Ñ8ûð9üsA‚(C«ABÂ
B BÂCÂB B=ÂB8Â3CÂ8B=Â=Ccó"—|jxsdj«}g}|jjd«r'|j t |jd««|j r"|jd„|j D««|jr"|jd„|jD««|rdj|«nd}|ggdddœ}|r||d <|jjd
«}|�||d
<|jjd«}|r||d<t|jxr|dk(«|d <|jjd «}|rt |«|d <|jrd
nd}|jrdt|j«›d�} n|jr|jdnd} d|| dœ|dœ}
|jjd«} |jjd«} | r
| r| | dœ|
d<|
S)NrŸr’c3ó2K—|]}t|«–—Œy­w©N©rs)Ú.0Úws r4Ú <genexpr>z+_nl_dict_from_generation.<locals>.<genexpr>+sèø€Ð=©_¨œS ŸV©_ùó‚c3ó2K—|]}t|«–—Œy­wråræ©rçrás r4réz+_nl_dict_from_generation.<locals>.<genexpr>-sèø€Ð;©]¨œS ŸV©]ùrêú; rF)rˆrŠr‹rŒrŽr�r‘r“r”rÅgu
使用了 u 张表uSQL生æˆ�未通过验è¯�Ú
DATA_QUERYrÇrÉÚquestion_originalÚquestion_zh_normalized)ÚoriginalÚzhÚquery_normalization)rˆrcÚmetadatarÔÚappendrsÚwarningsÚextendÚerrorsÚjoinr�ÚvalidÚlenÚ tables_used)
ÚresultrˆÚ
2026-04-14 10:28:22 +08:00
explain_partsÚexplainr˜ÚdbsÚdbeÚsdmÚconfr…ÚpayloadÚqoÚqzs
r4Ú_nl_dict_from_generationr%sî€Ø �:‰:Ò ˜×
2026-04-14 10:28:22 +08:00
"Ñ
"Ó
$€CØ!€MØ
‡�×ÑÐ.Ô/Ø×ÑœS §¡Ð1DÑ!EÓFÔGØ
‡‚Ø×ÑÑ=¨V¯_ª_Ó=Ô=Ø
‡}‚}Ø×ÑÑ;¨V¯]ª]Ó;Ô;Ù*7ˆd�i‰i˜
Ô&¸T€GàØØØØñ %€MñØ'.ˆ
2026-04-14 10:28:22 +08:00
�mÑ$Ø
�/‰/×
Ñ
Ð3Ó
4€CØ
€Ø/2ˆ
Ð+Ñ,Ø
�/‰/×
Ñ
2026-04-14 10:28:22 +08:00
Ð1Ó
2€CÙ
Ø-0ˆ
Ð)Ñ*Ü*.¨v¯|©|Ò/HÀÀqÁÓ*I€MÐ&Ñ'Ø
�/‰/×
Ñ
2026-04-14 10:28:22 +08:00
Ð4Ó
5€CÙ
Ü03°C³ˆ
2026-04-14 10:28:22 +08:00
Ð,Ñ-Ø—,’,‰3 C€DØ
‡|‚|Øœc &×"4Ñ"4Ó5Ð6°gÐ>‰à%+§]¢]�—‘˜qÒ!Ð8Rˆà)¸ÈÑPØ&ñ€Gð
�‰× Ñ Ð0Ó 1€BØ �‰× Ñ Ð5Ó 6€BÙ ‰bØ68ÀÑ)CˆÐ%Ñ&Ø €Nr6c óÚ—|jxsdj«}tjd|id¬«}d|›d�g}d}|jj d«r>|j
dtjt|jd««›d �«|jj d
2026-04-14 10:28:22 +08:00
«rt|jd
«}nV|jrt|jd «}n1|jr%d jd
2026-04-14 10:28:22 +08:00
„|jddD««}|j«r(|j
dtj|«›d �«dj|«S)NrŸrˆFr¼z<data>z</data>r”z<div class="sql-delivery-body">z</div>r’rríc3ó2K—|]}t|«–—Œy­wrårærìs r4réz'_sql_gen_stream_html.<locals>.<genexpr>`sèø€Ð>Ñ,= qœC ŸFÑ,=ùrêéz<div class="sql-explain-body">)
2026-04-14 10:28:22 +08:00
rˆrcr¾r¿rôrÔrõÚhtml_libÚescapersrörørù)rýrˆÚinnerÚpartsrÿs r4Ú_sql_gen_stream_htmlrRs(€Ø �:‰:Ò ˜×
"Ñ
"Ó
$€CÜ �J‰J˜˜s�|°%Ô 8€EØ�e�W˜GÐ
$Ð %€EØ€GØ
‡�×ÑÐ1Ô2Ø
2026-04-14 10:28:22 +08:00
� ‰ Ø-¬h¯o©o¼cÀ&Ç/Á/ÐRhÑBiÓ>jÓ.kÐ-lÐlrÐ sô
ð‡�×ÑÐ.Ô/Ü�f—o‘oÐ&9Ñ:Ó;‰Ø �ŠÜ�f—o‘o aÑ(Ó)‰Ø �ŠØ—)‘)Ñ>¨F¯M©M¸"¸1Ñ,=Ó>Ó>ˆØ‡}�}„Ø
2026-04-14 10:28:22 +08:00
� ‰ Ð5´h·o±oÀgÓ6NÐ5OÈvÐVÔWØ
�7‰7�5‹>Ðr6cƒó臇‡‡‡K—t«Šttjdd««Š|xsdj «xsdŠdˆˆˆˆˆfd„ }t j |«ƒd{–—†S7Œ­w)NÚTEXT2SQL_DIALECTÚ sqlserverrŸcóJ•—‰j‰j«‰‰‰¬«S)N)ÚquestionÚdialectÚtop_k_candidatesÚdialog_context)Úgeneraterc)ÚdcrÚorchrÚtop_ks€€€€€r4Ú_callz_run_generate.<locals>._callos,ø€Ø�}‰}Ø—^‘^Ó%ØØ"Øð ó
ð
r6)Úreturnr)rnrrTrUrcÚasyncioÚ to_thread)rrrrrrrs`` @@@r4Ú
_run_generater fsbüèø€ô
Ó €DÜ!¤"§)¡)Ð,>À Ó"LÓM€GØ
Ò
˜B× %Ñ %Ó 'Ò /¨4€B÷
2026-04-14 10:28:22 +08:00
ñ
ô×"Ñ" 5Ó)× )Ð)Ð )ús‡A$A2Á+A0Á,A2cóJK—|jr|jj«stddddœ«­–—y|jj«}t«}t ||«ƒd{–—†\}}t j t|||xsd|j¬«ƒd{–—†}|jtjk(r||jxsd}tjd«tddd d
2026-04-14 10:28:22 +08:00
œ«­–—td d|d
œ«­–—t|«}td d
2026-04-14 10:28:22 +08:00
|dœ«­–—t!|||«ƒd{–—†ytdddd
œ«­–— t#||xsd¬«ƒd{–—†}tddt+|«d
œ«­–—t-|«}|j.rd
nd}
td |
2026-04-14 10:28:22 +08:00
|dœ«­–—t!|||«ƒd{–—†y7�Œ_7�Œ+7Œ•7Œj#t$$r=} tj'd| ›�«tdt)| «ddœ«­–—Yd} ~ yd} ~ wwxYw7ŒX­w)Né�õ消æ�¯å†…容ä¸�能为空©ržr r¡©Úlast_turn_was_data_queryrÚ
llm_clientrŸuZ[API/stream] 对è¯�æ„�图: conversation(跳过 Text2SQL,与 CLI single_query 一致)rgr­ÚCHAT)ÚstageÚ stream_kindr­Úchatr�Úsuccessrî©ruPI/stream] 生æˆ�异常: éôÚsql_genÚpartial)rtrcrÂrnrÛrrrÚdeepseekrƒrÚ CONVERSATIONÚreply_suggestionrjrkrÌrâr rÞÚerrorrsrrrú) rÕÚtextrÚ dialog_blockrØÚ
2026-04-14 10:28:22 +08:00
classifiedrÊÚ data_dictrýrár s r4Ú_chat_stream_eventsr9zsõèø€Ø �?Š? '§/¡/×"7Ñ"7Ô"9Ü Ð-GÐQUÑVÓWÓWØØ �?‰?× Ñ Ó "€DÜ Ó €DÜ$BÀ7ÈDÓ$Q×QÑ€L�)Ü×(Ñ(ÜØ Ø!*Ø#Ò+ tØ—=‘=ô ÷€Jð×ÑœL×5Ñ5Ò5Ø×+Ñ+Ò1¨rˆÜ� ‰ ÐpÔqÜ .ÀÐW]Ñ^Ó_Ó_Ü &¸ÈuÑUÓVÓVÜ)¨%Ó0ˆ Ü ¨YÀ ÑJÓKÓKÜ'¨°°yÓA×AÐAØä
˜n¸YÐS_Ñ`Ó
aÓaðÜ$ T¸,Ò:NÈ$ÔO×Oˆô
2026-04-14 10:28:22 +08:00
˜i¸ ÔNbÐciÓNjÑkÓ
lÓlÜ(¨Ó0€IØ—|’|‰)¨€CÜ
˜S¨°iÑ@Ó
AÓAÜ
# G¨T°9Ó
=×=Ñ=ð;Rùðùð Bøð
PùÜ òÜ� ‰ Ð2°1°#Ð6Ô7Ü ¬S°«V¸TÑBÓCÓCÜûðúð>ús€‚A-H#Á/GÁ06H#Â&GÂ'BH#Ä>GÄ?H#ÅGÅ+GÅ,GÅ0AH#ÇH!Ç H#ÇH#ÇH#ÇGÇ HÇ!3HÈH#ÈHÈH#cóRK—tjd«tjd«tjd« t«tjd«d­–—tjd«y#t$r}tj d|›�«‚d}~wwxYw­w)Nz<============================================================u Text2SQL API Server å�¯åЍ䏭...u[OK] æœ�务已就绪uæœ�务åˆ�始化失败: uText2SQL API Server 已关闭)rjrkrnrÞr4)Úapprás r4Úlifespanr< s}èø€ä
‡K�K�ÔÜ
‡K�KÐ2Ô3Ü
‡K�K�ÔðÜÔÜ� ‰ Ð*Ô+ô

ä
‡K�KÐ/Õ0øô
òÜ� ‰ Ð.¨q¨cÐ2Ô3Ø
ûðüs*‚AB'ÁA=Á"B'Á= B$ÂBÂB$Â$B'zText2SQL NL Chat APIu!自然语言转SQL的对è¯�接å�£z1.0.0)r¦rrÚversionr<Ú*T)Ú
allow_originsÚallow_credentialsÚ
allow_methodsÚ
allow_headersz/healthcƒóK—dddœS­w)uå�¥åº·æ£€æŸ¥æŽ¥å�£ÚokzText2SQL API is running)Ústatusrtrerer6r4Ú health_checkrFÂsèø€ðÐ'@Ñ AÐAùs‚z/g3sb/api/nl/chatcƒóŠK— |jr|jj«s
tdd¬«‚|jj«}tj d|dd›d�«t «}t
||«ƒd{–—†\}}tjt|||xsd|j¬«ƒd{–—†}|jtjk(rK|jxsd }tj d
«t|«}t!|||«ƒd{–—†d d |d
œSt#||xsd¬«ƒd{–—†}t%|«}t&j)|«} |j*rd nd}
|j*r+tj d|j,xsd dd›d�«n"tj/d|j0›�«t!|||«ƒd{–—†t3d |
| ¬
«S7�Œi7�Œ57ŒÕ7Œ¸7Œ#t$r‚t4$r3} tj7d| ›�«tdt9| «¬«‚d} ~ wwxYw­w)uš
自然语言对�接�(���),�应结构与��结�包一致。
寒暄/致谢等先� classify_dialog,与 CLI 一致。
r"r#)Ú status_codeÚdetailu[API] 问题: Nédz...r%rŸu:[API/chat] 对è¯�æ„�图: conversation(跳过 Text2SQL)r�r,r$r-r0u[API] 生æˆ�æˆ�功: éPu[API] 生æˆ�失败: u[API] 异常: r.)rtrcr rjrkrnrÛrrrr1rƒrr2r3rÌrâr rr—Úmodel_validaterúrˆrßrørœrÞr4rs) rÕr5rr6rØr7rÊr8rýÚ
response_datar rás r4Únl_chatrNÈsèø€ð #<Ø�Š g§o¡o×&;Ñ&;Ô&=ܨCÐ8RÔSÐ SØ�‰×$Ñ$Ó&ˆÜ� ‰ �n T¨$¨3 Z L°Ð4Ô5ÜÓ!ˆÜ(FÀwÐPTÓ(U×"Uш �iÜ"×,Ñ,Ü Ø Ø%.Ø'Ò/¨4Ø—}‘}ô 
2026-04-14 10:28:22 +08:00
÷
ˆ