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

202 lines
34 KiB
Plaintext
Raw Normal View History

2026-04-14 10:28:22 +08:00
Ë
îÝiáZãó¶ —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/ddl0m1Z1ddl2m3Z3ddl4m5Z5m6Z6ddl7m8Z8m9Z9e jte jvdd¬«e jxe=«Z>e"e e#«jI«jJdz «da?da@d„ZAGd„de«ZBGd„de«ZCGd„de«ZDGd„de«ZEGd„d e«ZFGd!„d"e«ZGGd#„d$e«ZHGd%„d&e«ZIGd'„d(e«ZJGd)„d*e«ZKGd+„d,e«ZLdqd-„ZMdrd.„ZN dsd/„ZOdtd0„ZPdud1„ZQdvd2„ZR dw dxd3„ZSdyd4„ZTedzd5„«ZUed6d7d8eU¬9«ZVeVj¯ed:gd;d:gd:g¬<«eVj±d=«d>„«ZYeVjµd?«d{d@„«Z[eVjµdA«d{dB„«Z\eVjµdC«d|dD„«Z]eVj±dC« d} d~dE„«Z^eVj±dF«edGdH¬I«dddJdf ddK„«Z_eVjÁdL«d€dM„«ZaeVjÁdN« d�dO„«ZbeVjÇdP« d‚ dƒdQ„«ZdeVjµdR«d„dS„«ZeeVjµdT«edG«fd…dU„«ZfeVj±dT« d† d‡dV„«ZgeVj±dW« d‚ dˆdX„«ZheVjµdW«d‰dY„«ZieVjÁdZ«eej¬[«ddf dŠd\„«ZkeVjÇdZ« d‚ d‹d]„«ZleVj±d^« dŒ d�d_„«ZmeVjµd`«da„«ZneVj±db«dc„«Zoe=ddk(rwddlpZpeqejädedf««Zsejädgdh«Zte>jëdiet›djes›�«e>jëdket›djes›dl�«epjìdmetesdndo¬p«yy)Žuo
2026-04-14 10:28:22 +08:00
FastAPI �务入� - Text2SQL NL Chat API
包装 Text2SQLOrchestrator 为 REST API �务,供�端调用
é)Ú annotationsN)ÚPath)ÚOptionalÚListÚDictÚAnyÚ
AsyncIterator)Úasynccontextmanager)ÚFastAPIÚ
2026-04-14 10:28:22 +08:00
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_contextz1%(asctime)s [%(levelname)s] %(name)s: %(message)sz%Y-%m-%d %H:%M:%S)ÚlevelÚformatÚdatefmtz.envcó(—t�tSt«s td«‚tjdd«}tjdd«}t ||«aGd„d«}tt |««atjd«tS) u获å�–或åˆ�始化 orchestratorNu环境检查失败(请查看上方 WARNING/INFO,常è§�原因:USE_LOCAL_EMBEDDING=true 但未é…�置或找ä¸�到 EMBEDDING_MODEL_PATH;或 USE_LOCAL_EMBEDDING=false 但未é…�好 OPENAI_* / MODELSCOPE_* / DASHSCOPE_*;或 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 d
2026-04-14 10:28:22 +08:00
Z ejd d «Z
d
Zejdd«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Ú2NÚVECTOR_DB_PATHz./data/embeddings/chromaFÚFEWSHOT_ENABLEDÚtrue)r0Ú1ÚyesÚ
2026-04-14 10:28:22 +08:00
FEWSHOT_TOP_KÚ3ÚFEWSHOT_MIN_RATINGÚ7ÚTRANSLATE_EN_TO_ZH)Ú0ÚfalseÚnoÚoff)Ú__name__Ú
__module__Ú __qualname__ÚosÚgetenvÚapi_keyÚmodelÚfloatÚ temperatureÚintÚ
max_tokensÚ max_retryÚembedding_modelÚ vector_dbÚno_vector_searchÚlowerÚ
2026-04-14 10:28:22 +08:00
no_fewshotÚ
fewshot_top_kÚfewshot_min_ratingÚstripÚno_translate_en©óú2C:\Users\24019\Desktop\backman-camel\api_server.pyÚArgsr&Is „Ø�"—)‘)Ð.Ó/ˆØ�— ‘ ˜/¨?Ó;ˆÙ˜I˜BŸI™I m°UÓ;Ó<ˆ Ù˜˜Ÿ™ <°Ó8Ó9ˆ
Ù˜ ˜Ÿ ™  +¨sÓ3Ó4ˆ ؈Ø�B—I‘IÐ.Ð0JÓKˆ Ø ÐØ"˜Ÿ™Ð#4°fÓ=×CÑCÓEÐI]Ð]ˆ
Ù˜I˜BŸI™I o°sÓ;Ó<ˆ
Ù   §¡Ð+?ÀÓ!EÓFÐØ#˜"Ÿ)™)Ð$8¸&ÓA×GÑGÓI×OÑOÓQðV
2026-04-14 10:28:22 +08:00
ð
‰rRrTu![OK] Orchestrator åˆ�始化完æˆ�)
Ú orchestratorrÚ RuntimeErrorr?r@rÚschema_managerrÚloggerÚinfo)Ú schema_pathÚschema_meta_pathrTs rSÚget_orchestratorr\5sˆ€ôÐÜÐä Ô Üð
Ló
ð
2026-04-14 10:28:22 +08:00
ô—)‘)˜MÐ+fÓg€KÜ—y‘yÐ!3°TÓ:Ðä  Ð.>Ó?€N÷
ñ
ô&'¤~±t³vÓ>€LÜ
‡K�KÐ3Ô4ä ÐrRcóþ—eZdZUedd¬«Zded<edd¬«Zded <ed
d ¬«Zded <edd
2026-04-14 10:28:22 +08:00
¬«Zded<edd¬«Z ded<edd¬«Z
ded<edd¬«Z ded<edd¬«Z ded<y)Ú
NLChatRequest.u!用户输入的自然语言问题©Ú descriptionÚstrÚmessageNu模型路由: openai | deepseekú
2026-04-14 10:28:22 +08:00
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)
r<r=r>rrbÚ__annotations__rdrfrgrirjrkrmrQrRrSr^r^bs�…Ù˜Ð*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И
ÔUrRr^có4—eZdZUded<dZded<dZded<y)Ú
IntentPayloadraÚintentNzOptional[float]Ú
confidencercÚreason)r<r=r>rnrrrsrQrRrSrprpms…Ø ƒKØ"&€J�Ó&Ø €FˆMÔ rRrpcó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语å�¥r_raÚsqlu查询结果列å��)Údefault_factoryr`z List[str]Úcolumnsu查询结果行数æ�®zList[Dict[str, Any]]Úrowsru 结果行数rEÚ row_countFu 是å�¦æˆªæ–­ÚboolÚ truncatedNuSQL自然语言说明rcÚ sql_explainTu是å�¦å…�许导出zOptional[bool]Ú
can_exportu_库探针:1=有数æ�®è¡Œï¼Œ0=无行需追问补充,-1=执行失败(é‡�试),None=未探针rlÚdb_execution_statusu7探针0时的无行说明与追问(å�«é—®é¢˜åˆ†æž�)Údb_empty_feedbackuNTrue 表示探针为0:需用户补充æ�¡ä»¶å�Žé‡�æ–°æ��问以é‡�新生æˆ�SQLÚfollow_up_requiredu4探针为1æ—¶LLM生æˆ�çš„é�¢å�‘用户SQL交付说明Úsql_delivery_message)r<r=r>rrvrnÚlistrxryrzr|r}r~rr€r�r‚rQrRrSrurusså…Ù�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ô+И-ôrRrucó^—eZdZUded<ded<edd¬«Zded <edd
¬«Zded <y) ÚNLChatSuccessDatarprqruÚ
branch_resultNu$æµ�å¼�å�™è¿°ï¼ˆSQLå�—上方说明)r_rcÚstream_narrativeu$æµ�å¼�å�™è¿°ï¼ˆSQLå�—下方说明)Ústream_narrative_after)r<r=r>rnrr‡rˆrQrRrSr…r…‹s4…Ø ÓØ"Ó"Ù&+¨DÐ>dÔ&eÐ�mÓeÙ,1°$ÐDjÔ,kИMÔkrRr…cóh—eZdZUedd¬«Zded<edd¬«Zded <ed
d ¬«Zd ed
<y
2026-04-14 10:28:22 +08:00
)Ú ApiEnvelopeéÈu状æ€�ç �,200表示æˆ�功r_rEÚcodeÚu消æ�¯raÚmsgNu å“�应数æ�®zOptional[NLChatSuccessData]Údata)r<r=r>rrŒrnrŽr�rQrRrSrŠrŠ’s7…Ù�cÐ'DÔE€Dˆ#ÓEÙ�R XÔ.€CˆÓ.Ù(-¨dÀÔ(O€DÐ
%ÔOrRrŠcó0—eZdZUded<ded<dZded<y)Ú
2026-04-14 10:28:22 +08:00
ErrorResponserErŒrarŽNz
Optional[Any]r�)r<r=r>rnr�rQrRrSr‘r‘˜s…Ø
ƒIØ ƒHØ€Dˆ-ÔrRr‘có8—eZdZUdZded<dZded<dZded<y)ÚSessionCreateBodyNrcÚtitlerkrj©r<r=r>r”rnrkrjrQrRrSr“r“žó …Ø€Eˆ=ÓØ!€Gˆ]Ó!Ø$(€N�MÔ(rRr“có8—eZdZUdZded<dZded<dZded<y)ÚSessionTitlePatchBodyNrcr”rkrjr•rQrRrSr˜r˜¤r–rRr˜có4—eZdZUded<dZded<dZded<y)ÚSessionMessagePatchBodyraÚcontentNrcrkrj)r<r=r>rnrkrjrQrRrSršršªs…Ø
ƒLØ!€Gˆ]Ó!Ø$(€N�MÔ(rRršcó^—eZdZUded<dZded<dZded<dZded<dZded <dZded
<y) ÚSqlExecuteBodyrarvNrlÚmax_rowsrcrkrjÚchat_session_idÚchat_message_id) r<r=r>rnržrkrjrŸr rQrRrSr�r�°s9…Ø ƒHØ"€HˆmÓ"Ø!€Gˆ]Ó!Ø$(€N�MÓ(Ø%)€O�]Ó)Ø%)€O�]Ô)rRr�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 | reportr_raÚfav_typer�ÚnameNrcÚdescrkrjrvr}ÚpathÚ
reportPathÚparams)r<r=r>rr£rnr¤r¥rkrjrvr}r¦r§r¨rQrRrSr¢r¢¹sm…Ù˜#Ð+DÔE€HˆcÓEØ€Dˆ#ƒNØ€Dˆ-ÓØ!€Gˆ]Ó!Ø$(€N�MÓ(Ø€CˆÓØ!%€K�Ó%Ø€Dˆ-ÓØ $€J�
Ó$Ø €FˆMÔ rRr¢cóV—dtj|d¬«›d�jd«S)Nzdata: F©Ú ensure_asciiz
zutf-8)ÚjsonÚdumpsÚencode)Úobjs rSÚ _sse_datar°Æs(€Ø
”D—J‘J˜s°Ô7Ð8¸Ð =× DÑ DÀWÓ MÐMrRcóH—|xsdj«xsd}ddddœd|idœS) uP寒暄/元问题等:与å‰�端 BUSINESS_MANUAL + branch_result.answer 一致。r�u 您好。ÚBUSINESS_MANUALçð?Ú conversation©rqrrrsÚanswer©rqr†)rO)ÚreplyÚrs rSÚ_conversation_nl_dictrºÊs4€à Š�"×ÑÓÒ, €Aà.¸cÈ^Ñ\Ø" A˜ñ ðrRcƒó,K—|jxsdj«}|sytj|j|j
|dd¬«ƒd{–—†}|sy|j
d«xsg}|syt|«}t|«\}}||fS7Œ<­w)u}
在写入本轮之�读�会�历�,构造 Text2SQL 上文,并判断上一轮助手是�为数�查询。
r�)r�Fr‹r)ÚlimitÚoffsetNÚitems) rirOrÚ get_messagesrkrjÚgetrr)ÚrequestÚsidr�r¾Ú last_dataÚblockÚ_ns rSÚ_load_session_text2sql_contextrÆÓsžèø€ð × Ñ Ò # ×
*Ñ
*Ó
2026-04-14 10:28:22 +08:00
,€CÙ ØÜ×+Ñ+Ø�‰Ø×ÑØ ØØô ÷ €Dñ ØØ �H‰H�WÓ Ò # €EÙ ØÜ-¨eÓ4€IÜ,¨UÓ3�I€Eˆ2Ø �)Ð Ðð ús‚ABÁBÁ=Bcƒó„K—|jr|jj«sy tj|d¬«}t j
|j |j|jj«||«ƒd{–—†y7Œ#t$r"}tjd|›�«Yd}~yd}~wwxYw­w)NFrªu[API] 会è¯�è�½åº“跳过: ) rirOr¬r­rÚappend_exchangerkrjÚ ExceptionrXÚwarning)rÁÚ user_textr�Úassistant_jsonÚes rSÚ_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©ra)Ú.0Úws rSÚ <genexpr>z+_nl_dict_from_generation.<locals>.<genexpr>sèø€Ð=©_¨œS ŸV©_ùó‚c3ó2K—|]}t|«–—Œy­wrÑrÒ©rÓrÍs rSrÕz+_nl_dict_from_generation.<locals>.<genexpr>sèø€Ð;©]¨œS ŸV©]ùrÖú; rF)rvrxryrzr|r}rr�r‚r³gu
使用了 u 张表uSQL生æˆ�未通过验è¯�Ú
DATA_QUERYrµr·Úquestion_originalÚquestion_zh_normalized)ÚoriginalÚzhÚquery_normalization)rvrOÚmetadatarÀÚappendraÚwarningsÚextendÚerrorsÚjoinr{ÚvalidÚlenÚ tables_used)
ÚresultrvÚ
explain_partsÚexplainr†ÚdbsÚdbeÚsdmÚconfrsÚpayloadÚqoÚqzs
rSÚ_nl_dict_from_generationróýsî€Ø �:‰:Ò ˜×
"Ñ
2026-04-14 10:28:22 +08:00
"Ó
$€CØ!€MØ
2026-04-14 10:28:22 +08:00
‡�×ÑÐ.Ô/Ø×ÑœS §¡Ð1DÑ!EÓFÔGØ
‡‚Ø×ÑÑ=¨V¯_ª_Ó=Ô=Ø
‡}‚}Ø×ÑÑ;¨V¯]ª]Ó;Ô;Ù*7ˆd�i‰i˜
Ô&¸T€GàØØØØñ %€MñØ'.ˆ
�mÑ$Ø
�/‰/×
Ñ
2026-04-14 10:28:22 +08:00
Ð3Ó
4€CØ
€Ø/2ˆ
Ð+Ñ,Ø
�/‰/×
Ñ
Ð1Ó
2€CÙ
Ø-0ˆ
2026-04-14 10:28:22 +08:00
Ð)Ñ*Ü*.¨v¯|©|Ò/HÀÀqÁÓ*I€MÐ&Ñ'Ø
�/‰/×
Ñ
Ð4Ó
5€CÙ
Ü03°C³ˆ
Ð,Ñ-Ø—,’,‰3 C€DØ
2026-04-14 10:28:22 +08:00
‡|‚|Øœc &×"4Ñ"4Ó5Ð6°gÐ>‰à%+§]¢]�—‘˜qÒ!Ð8Rˆà)¸ÈÑPØ&ñ€Gð
�‰× Ñ Ð0Ó 1€BØ �‰× Ñ Ð5Ó 6€BÙ ‰bØ68ÀÑ)CˆÐ%Ñ&Ø €NrRc óÚ—|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
„|jddD««}|j«r(|j
dtj|«›d �«dj|«S)Nr�rvFrªz<data>z</data>r‚z<div class="sql-delivery-body">z</div>r€rrÙc3ó2K—|]}t|«–—Œy­wrÑrÒrØs rSrÕz'_sql_gen_stream_html.<locals>.<genexpr>8sèø€Ð>Ñ,= qœC ŸFÑ,=ùrÖéz<div class="sql-explain-body">)
2026-04-14 10:28:22 +08:00
rvrOr¬r­ràrÀráÚhtml_libÚescaperarârärå)rérvÚinnerÚpartsrës rSÚ_sql_gen_stream_htmlrû*s(€Ø �:‰:Ò ˜×
"Ñ
2026-04-14 10:28:22 +08:00
"Ó
$€CÜ �J‰J˜˜s�|°%Ô 8€EØ�e�W˜GÐ
2026-04-14 10:28:22 +08:00
$Ð %€EØ€GØ
‡�×ÑÐ1Ô2Ø
� ‰ Ø-¬h¯o©o¼cÀ&Ç/Á/ÐRhÑBiÓ>jÓ.kÐ-lÐlrÐ sô
ð‡�×ÑÐ.Ô/Ü�f—o‘oÐ&9Ñ:Ó;‰Ø �ŠÜ�f—o‘o aÑ(Ó)‰Ø �ŠØ—)‘)Ñ>¨F¯M©M¸"¸1Ñ,=Ó>Ó>ˆØ‡}�}„Ø
� ‰ Ð5´h·o±oÀgÓ6NÐ5OÈvÐVÔWØ
�7‰7�5‹>ÐrRcƒó臇‡‡‡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)ÚgeneraterO)ÚdcrÚorchrÚtop_ks€€€€€rSÚ_callz_run_generate.<locals>._callGs,ø€Ø�}‰}Ø—^‘^Ó%ØØ"Øð ó
2026-04-14 10:28:22 +08:00
ð
rR)Úreturnr)r\rr?r@rOÚasyncioÚ to_thread)rrrrrrrs`` @@@rSÚ
2026-04-14 10:28:22 +08:00
_run_generater >sbüèø€ô
Ó €DÜ!¤"§)¡)Ð,>À Ó"LÓM€GØ
Ò
˜B× %Ñ %Ó 'Ò /¨4€B÷
ñ
ô×"Ñ" 5Ó)× )Ð)Ð )ús‡A$A2Á+A0Á,A2cóHK—|jr|jj«stddddœ«­–—y|jj«}t«}t |«ƒd{–—†\}}t j t|||xsd|j¬«ƒd{–—†}|jtjk(r||jxsd}tjd«tddd d
œ«­–—td d|d
œ«­–—t|«}td d
|dœ«­–—t!|||«ƒd{–—†ytdddd
2026-04-14 10:28:22 +08:00
œ«­–— t#||xsd¬«ƒd{–—†}tddt+|«d
œ«­–—t-|«}|j.rd
2026-04-14 10:28:22 +08:00
nd}
td |
|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Ú
2026-04-14 10:28:22 +08:00
llm_clientr�uZ[API/stream] 对è¯�æ„�图: conversation(跳过 Text2SQL,与 CLI single_query 一致)rUr›ÚCHAT)ÚstageÚ stream_kindr›Úchatr‹ÚsuccessrÚ©ruPI/stream] 生æˆ�异常: éôÚsql_genÚpartial)rbrOr°r\rÆr
r rÚdeepseekrqrÚ CONVERSATIONÚreply_suggestionrXrYrºrÎr rÉÚerrorrarûróræ) rÁÚtextrÚ dialog_blockrÃÚ
classifiedr¸Ú data_dictrérÍrŽs rSÚ_chat_stream_eventsr%Rsóèø€Ø �?Š? '§/¡/×"7Ñ"7Ô"9Ü Ð-GÐQUÑVÓWÓWØØ �?‰?× Ñ Ó "€DÜ Ó €DÜ$BÀ7Ó$K×KÑ€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Øä
2026-04-14 10:28:22 +08:00
˜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Ñ@Ó
2026-04-14 10:28:22 +08:00
AÓAÜ
# G¨T°9Ó
=×=Ñ=ð;Lùðùð Bøð
PùÜ òÜ� ‰ Ð2°1°#Ð6Ô7Ü ¬S°«V¸TÑBÓCÓCÜûðúð>ús€‚A,H"Á.G
Á/6H"Â%GÂ&BH"Ä=GÄ>H"ÅGÅ*GÅ+GÅ/AH"Ç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 已关闭)rXrYr\rÉr )ÚapprÍs rSÚlifespanr(xs}èø€ä
‡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”r`Úversionr(Ú*T)Ú
allow_originsÚallow_credentialsÚ
allow_methodsÚ
allow_headersz/healthcƒóK—dddœS­w)uå�¥åº·æ£€æŸ¥æŽ¥å�£ÚokzText2SQL API is running)ÚstatusrbrQrQrRrSÚ health_checkr2š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 一致。
rr)Ú status_codeÚdetailu[API] 问题: Nédz...rr�u:[API/chat] 对è¯�æ„�图: conversation(跳过 Text2SQL)r‹rrrru[API] 生æˆ�æˆ�功: éPu[API] 生æˆ�失败: u[API] 异常: r)rbrOr rXrYr\rÆr
r rrrqrrrrºrÎr rór…Úmodel_validaterærvrÊrärŠrÉr ra) rÁr!rr"rÃr#r¸r$réÚ
response_datarŽrÍs rSÚnl_chatr: sèø€ð #<Ø�Š g§o¡o×&;Ñ&;Ô&=ܨCÐ8RÔSÐ SØ�‰×$Ñ$Ó&ˆÜ� ‰ �n T¨$¨3 Z L°Ð4Ô5ÜÓ!ˆÜ(FÀwÓ(O×"Oш �iÜ"×,Ñ,Ü Ø Ø%.Ø'Ò/¨4Ø—}‘}ô 
÷
ˆ
ð × Ñ ¤ × 9Ñ 9Ò 9Ø×/Ñ/Ò5°2ˆEÜ �K‰KÐTÔ UÜ-¨eÓ4ˆIÜ+¨G°T¸9ÓE× EÐ Eب ¸9ÑEÐ Eä$ T¸,Ò:NÈ$ÔO×OˆÜ,¨VÓ4ˆ Ü)×8Ñ8¸ÓCˆ