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

204 lines
35 KiB
Plaintext
Raw Normal View History

2026-04-14 10:28:22 +08:00
Ë
=êÞi¬bãó&
—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>drd„Z?e?«Z@e@jƒ«re"e@«e>j…de@›�«ne>j‡de@›�«daDdaEd„ZFGd„de«ZGGd„de«ZHGd„de«ZIGd„d e«ZJGd!„d"e«ZKGd#„d$e«ZLGd%„d&e«ZMGd'„d(e«ZNGd)„d*e«ZOGd+„d,e«ZPGd-„d.e«ZQdsd/„ZRdtd0„ZS dud1„ZTdvd2„ZUdwd3„ZVdxd4„ZW dy dzd5„ZXd{d6„ZYed|d7„«ZZed8d9d:eZ¬;«Z[e[j¹ed<gd=d<gd<g¬>«e[j»d?«d@„«Z^e[j¿dA«d}dB„«Z`e[j¿dC«d}dD„«Zae[j¿dE«d~dF„«Zbe[j»dE« d d€dG„«Zce[j»dH«edIdJ¬K«dddLdf d�dM„«Zde[jËdN«d‚dO„«Zfe[jËdP« dƒdQ„«Zge[jÑdR« d„ d…dS„«Zie[j¿dT«d†dU„«Zje[j¿dV«edI«fd‡dW„«Zke[j»dV« dˆ d‰dX„«Zle[j»dY« d„ dŠdZ„«Zme[j¿dY«d‹d[„«Zne[jËd\«eeo¬]«ddf dŒd^„«Zpe[jÑd\« d„ d�d_„«Zqe[j»d`« dŽ d�da„«Zre[j¿db«dc„«Zse[j»dd«de„«Zte=dfk(rŒddluZuddlvZvewejðdgdh««Zyejðdidj«Zze>j…dkez›dley›�«e>j…dmez›dley›dn�«evjö«eujøe[ezeydodp¬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_contextz1%(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_filer40sÞ€ãô�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)rDÚ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©r5r3ÚArgsr:ns„Ø�"—)‘)Ð.Ó/ˆØ�— ‘ ˜/¨?Ó;ˆÙ˜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
ð
‰r5reu![OK] Orchestrator åˆ�始化完æˆ�)
Ú orchestratorrÚ RuntimeErrorrSrTrÚschema_managerrÚloggerÚinfo)Ú schema_pathÚschema_meta_pathres r3Úget_orchestratorrm[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ä Ðr5cóþ—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)
rPrQrRrrsÚ__annotations__rurwrxrzr{r|r~rdr5r3roro†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И
ÔUr5rocó4—eZdZUded<dZded<dZded<y)Ú
2026-04-14 10:28:22 +08:00
IntentPayloadrrÚintentNzOptional[float]Ú
confidencertÚreason)rPrQrRrrƒr„rdr5r3r�r�‘s…Ø ƒKØ"&€J�Ó&Ø €FˆMÔ r5r�cóX—eZdZUedd¬«Zded<eed¬«Zded <eed
¬«Zd ed <ed
d¬«Z ded<edd¬«Z
ded<edd¬«Z ded<edd¬«Z ded<edd¬«Z
2026-04-14 10:28:22 +08:00
ded<edd ¬«Zded!<edd"¬«Zded#<edd$¬«Zded%<y)&ÚDataQueryResult.u生æˆ�çš„SQL语å�¥rprrÚsqlu查询结果列å��)Údefault_factoryrqz List[str]Úcolumnsu查询结果行数æ�®zList[Dict[str, Any]]Úrowsru 结果行数rYÚ row_countFu 是å�¦æˆªæ–­ÚboolÚ truncatedNuSQL自然语言说明rtÚ 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)rPrQrRrr‡rÚlistr‰rŠr‹r�rŽr�r�r‘r’r“rdr5r3r†r†—så…Ù�SÐ&:Ô;€CˆÓ;Ù¨tÐAUÔV€GˆYÓVÙ!&°tÐI`Ô!a€DÐ
ÓaÙ˜1¨.Ô9€IˆsÓ9Ù˜E¨~Ô>€IˆtÓ>Ù!& tÐ9PÔ!Q€K�ÓQÙ!& tÐ9MÔ!N€J�ÓNÙ).Ø Øuô*Иóñ(-Ø ÐSô(Ð�}óñ %Ø
Ødô Иóñ+0Ø ÐPô+И-ôr5r†có^—eZdZUded<ded<edd¬«Zded <edd
¬«Zded <y) ÚNLChatSuccessDatar�r‚r†Ú
branch_resultNu$æµ�å¼�å�™è¿°ï¼ˆSQLå�—上方说明)rprtÚstream_narrativeu$æµ�å¼�å�™è¿°ï¼ˆSQLå�—下方说明)Ústream_narrative_after)rPrQrRrrr˜r™rdr5r3r–r–¯s4…Ø ÓØ"Ó"Ù&+¨DÐ>dÔ&eÐ�mÓeÙ,1°$ÐDjÔ,kИMÔkr5r–cóh—eZdZUedd¬«Zded<edd¬«Zded <ed
2026-04-14 10:28:22 +08:00
d ¬«Zd ed
<y
2026-04-14 10:28:22 +08:00
)Ú ApiEnvelopeéÈu状æ€�ç �,200表示æˆ�功rprYÚcodeÚu消æ�¯rrÚmsgNu å“�应数æ�®zOptional[NLChatSuccessData]Údata)rPrQrRrr�rrŸr rdr5r3r›r›s7…Ù�cÐ'DÔE€Dˆ#ÓEÙ�R XÔ.€CˆÓ.Ù(-¨dÀÔ(O€DÐ
%ÔOr5r›có0—eZdZUded<ded<dZded<y)Ú
ErrorResponserYr�rrrŸNz
Optional[Any]r )rPrQrRrr rdr5r3r¢r¢¼s…Ø
ƒIØ ƒHØ€Dˆ-Ôr5r¢có8—eZdZUdZded<dZded<dZded<y)ÚSessionCreateBodyNrtÚtitler|r{©rPrQrRr¥rr|r{rdr5r3r¤r¤Âó …Ø€Eˆ=ÓØ!€Gˆ]Ó!Ø$(€N�MÔ(r5r¤có8—eZdZUdZded<dZded<dZded<y)ÚSessionTitlePatchBodyNrtr¥r|r{r¦rdr5r3r©r©Èr§r5r©có4—eZdZUded<dZded<dZded<y)ÚSessionMessagePatchBodyrrÚcontentNrtr|r{)rPrQrRrr|r{rdr5r3r«r«Îs…Ø
ƒLØ!€Gˆ]Ó!Ø$(€N�MÔ(r5r«có^—eZdZUded<dZded<dZded<dZded<dZded <dZded
<y) ÚSqlExecuteBodyrrr‡Nr}Úmax_rowsrtr|r{Úchat_session_idÚchat_message_id) rPrQrRrr¯r|r{r°r±rdr5r3r®r®Ôs9…Ø ƒHØ"€HˆmÓ"Ø!€Gˆ]Ó!Ø$(€N�MÓ(Ø%)€O�]Ó)Ø%)€O�]Ô)r5r®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 | reportrprrÚfav_typeržÚnameNrtÚdescr|r{r‡rŽÚpathÚ
reportPathÚparams)rPrQrRrr´rrµr¶r|r{r‡rŽr·r¸r¹rdr5r3r³r³Ýsm…Ù˜#Ð+DÔE€HˆcÓEØ€Dˆ#ƒNØ€Dˆ-ÓØ!€Gˆ]Ó!Ø$(€N�MÓ(Ø€CˆÓØ!%€K�Ó%Ø€Dˆ-ÓØ $€J�
Ó$Ø €FˆMÔ r5r³cóV—dtj|d¬«›d�jd«S)Nzdata: F©Ú ensure_asciiz
zutf-8)ÚjsonÚdumpsÚencode)Úobjs r3Ú _sse_datarÁês(€Ø
”D—J‘J˜s°Ô7Ð8¸Ð =× DÑ DÀWÓ MÐMr5cóH—|xsdj«xsd}ddddœd|idœS) uP寒暄/元问题等:与å‰�端 BUSINESS_MANUAL + branch_result.answer 一致。ržu 您好。ÚBUSINESS_MANUALçð?Ú conversation©r‚rƒr„Úanswer©r‚r—)rb)ÚreplyÚrs r3Ú_conversation_nl_dictrËîs4€à Š�"×ÑÓÒ, €Aà.¸cÈ^Ñ\Ø" A˜ñ ðr5cƒó,K—|jxsdj«}|sytj|j|j
|dd¬«ƒd{–—†}|sy|j
d«xsg}|syt|«}t|«\}}||fS7Œ<­w)u}
在写入本轮之�读�会�历�,构造 Text2SQL 上文,并判断上一轮助手是�为数�查询。
rž)ržFrœr)ÚlimitÚoffsetNÚitems) rzrbrÚ get_messagesr|r{Úgetrr)ÚrequestÚsidr rÏÚ last_dataÚblockÚ_ns r3Ú_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] 会è¯�è�½åº“跳过: ) rzrbr½r¾rÚappend_exchanger|r{Ú ExceptionriÚwarning)rÒÚ user_textr Úassistant_jsonÚes r3Ú_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©rr)Ú.0Úws r3Ú <genexpr>z+_nl_dict_from_generation.<locals>.<genexpr>'sèø€Ð=©_¨œS ŸV©_ùó‚c3ó2K—|]}t|«–—Œy­wrârã©rärÞs r3ræ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‡rbÚmetadatarÑÚappendrrÚ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
r3Ú_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ˆÐ%Ñ&Ø €Nr5c óÚ—|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 r3ræ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‡rbr½r¾rñrÑròÚhtml_libÚescaperrrórõrö)rúr‡ÚinnerÚpartsrüs r3Ú_sql_gen_stream_htmlr Ns(€Ø �:‰:Ò ˜×
"Ñ
"Ó
$€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‹>Ðr5cƒó臇‡‡‡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)Úgeneraterb)ÚdcrÚorchrÚtop_ks€€€€€r3Ú_callz_run_generate.<locals>._callks,ø€Ø�}‰}Ø—^‘^Ó%ØØ"Øð ó
ð
r5)Úreturnr)rmrrSrTrbÚasyncioÚ to_thread)rrrrrrrs`` @@@r3Ú
_run_generaterbsbüèø€ô
Ó €DÜ!¤"§)¡)Ð,>À Ó"LÓM€GØ
Ò
˜B× %Ñ %Ó 'Ò /¨4€B÷
2026-04-14 10:28:22 +08:00
ñ
ô×"Ñ" 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
2026-04-14 10:28:22 +08:00
œ«­–—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
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 一致)rfr¬ÚCHAT)ÚstageÚ stream_kindr¬ÚchatrœÚsuccessrë©ruPI/stream] 生æˆ�异常: éôÚsql_genÚpartial)rsrbrÁrmr×rrrÚdeepseekr‚rÚ CONVERSATIONÚreply_suggestionrirjrËrßrrÚÚerrorrrr rr÷) rÒÚtextrÚ dialog_blockrÔÚ
classifiedrÉÚ data_dictrúrÞrŸs r3Ú_chat_stream_eventsr6vsóèø€Ø �?Š? '§/¡/×"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ˆô
˜i¸ ÔNbÐciÓNjÑkÓ
2026-04-14 10:28:22 +08:00
lÓlÜ(¨Ó0€IØ—|’|‰)¨€CÜ
˜S¨°iÑ@Ó
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 已关闭)rirjrmrÚr1)ÚapprÞs r3Úlifespanr9œ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¥rqÚversionr9Ú*T)Ú
allow_originsÚallow_credentialsÚ
allow_methodsÚ
allow_headersz/healthcƒóK—dddœS­w)uå�¥åº·æ£€æŸ¥æŽ¥å�£ÚokzText2SQL API is running)Ústatusrsrdrdr5r3Ú health_checkrC¾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...r"ržu:[API/chat] 对è¯�æ„�图: conversation(跳过 Text2SQL)rœr)r!r*r-u[API] 生æˆ�æˆ�功: éPu[API] 生æˆ�失败: u[API] 异常: r+)rsrbr rirjrmr×rrrr.r‚rr/r0rËrßrrr–Úmodel_validater÷r‡rÛrõr›rÚr1rr) rÒr2rr3rÔr4rÉr5rúÚ
response_datarŸrÞs r3Únl_chatrKÄsèø€ð #<Ø�Š g§o¡o×&;Ñ&;Ô&=ܨCÐ8RÔSÐ SØ�‰×$Ñ$Ó&ˆÜ� ‰ �n T¨$¨3 Z L°Ð4Ô5ÜÓ!ˆÜ(FÀwÓ(O×"Oш �iÜ"×,Ñ,Ü Ø Ø%.Ø'Ò/¨4Ø—}‘}ô 
2026-04-14 10:28:22 +08:00
÷
ˆ