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

139 lines
14 KiB
Plaintext
Raw Normal View History

2026-04-10 16:52:07 +08:00
Ë
2026-04-16 10:53:10 +08:00
ÈGài(-ãó”—dZddlZddlZddlmZddlmZmZmZm Z ddl
2026-04-10 16:52:07 +08:00
Z
ddl m Z
2026-04-10 16:52:07 +08:00
ddlmZej e«ZGd„d«Zy) u.
Schema��索引构建器 - 基于ChromaDB
éN)ÚPath)ÚAnyÚDictÚListÚOptional)ÚSettings)Ú
SchemaManagerc óì—eZdZdZ dddœdedededeefd„Z dd e d
e
d dfd „Z dd e d
e
d
2026-04-10 16:52:07 +08:00
ed efd„Z ddede
de
d eefd„Zdeed eefd„Zd eefd„Zdefd„Zd„Zd e
fd„Zd efd„Zy)Ú
SchemaIndexeruh
Schema��索引器
2026-04-16 10:53:10 +08:00
功能:
1. 为表结构构建��索引
2026-04-10 16:52:07 +08:00
2. 基于问题的表检索
3. 默认使用 Chroma ``PersistentClient``,数��在 ``persist_dir``(与 ``VECTOR_DB_PATH`` 一致);
仅当环境�� ``SCHEMA_INDEXER_EPHEMERAL=true`` 或构造�数 ``use_ephemeral=True`` 时使用内存客户端。
N)Ú
2026-04-16 10:53:10 +08:00
use_ephemeralÚembedderÚ persist_dirÚcollection_namer c ón—||_t|«|_|jjdd¬«||_t j dd«j«dv}tjt|j«td¬«¬«|_ |� t|«n||_|jr(tjtd¬«¬
2026-04-10 16:52:07 +08:00
«|_ d }ne|jjdd¬«tjt|j«td¬«¬«|_ d |j›�}|jj!|jd
di¬«|_t$j'd|›d|j›d|j"j)«›�«y )u@
2026-04-16 10:53:10 +08:00
�始化索引器
Args:
embedder: Embedding模型实例
2026-04-16 10:53:10 +08:00
persist_dir: Chroma �久化根目录(�盘路径)
collection_name: 集��称
2026-04-10 16:52:07 +08:00
use_ephemeral: 为 True 时使用内存 Chroma;为 None 时读环境�� SCHEMA_INDEXER_EPHEMERAL
T)ÚparentsÚexist_okÚSCHEMA_INDEXER_EPHEMERALÚ)Ú1ÚtrueÚyesF)Úanonymized_telemetry)ÚpathÚsettingsN)ru Chroma内存uChromaç£�盘 path=ú
hnsw:spaceÚcosine©ÚnameÚmetadatau[OK] åˆ�始化SchemaIndexer(z): collection=z, count=)r
rrÚmkdirrÚosÚgetenvÚlowerÚchromadbÚPersistentClientÚstrÚChromaSettingsÚclientÚboolÚ_chroma_ephemeralÚEphemeralClientÚget_or_create_collectionÚ
collectionÚloggerÚinfoÚcount)Úselfr
rrr Ú
env_ephemeralÚ backend_descs úbackend/schema/indexer.pyÚ__init__zSchemaIndexer.__init__sŽ€ð"!ˆŒ
Ü  Ó,ˆÔØ ×Ñ×Ñ t°dÐÔ;Ø.ˆÔäŸ ™ Ð"<¸bÓA×GÑGÓIðN
2026-04-16 10:53:10 +08:00
ð
ˆ
ô ×/Ñ/Ü�T×%Ñ%Ó&Ü#¸Ô?ô
ˆŒ ð9FÐ8Q¤ mÔ!4ÐWdˆÔà × !Ò !Ü"×2Ñ2Ü'¸UÔCôˆDŒKð*‰Là × Ñ × "Ñ "¨4¸$Ð "Ô ?Ü"×3Ñ3ܘ×)Ñ)Ó*Ü'¸UÔCôˆDŒKð0°×0@Ñ0@Ð/AÐBˆLðŸ+™+×>Ñ>Ø×%Ñ%Ø" HÐ-ð?ó
ˆŒô
� ‰ Ø*¨<¨.¸Àt×G[ÑG[ÐF\ð]Ø—_‘_×*Ñ*Ó,Ð-ð
/õ
óÚschema_managerÚ
2026-04-10 16:52:07 +08:00
batch_sizeÚreturncó¤—t|j««}|j«}|dk(r+|dkDr%tj d«|j «y||k(rtj
d|«y|dk(r+tj
d|«|j||d¬«ytj
d||«|j||d ¬«y)
uö
�次使用��粗筛�调用:若�久化集�中表�数与当� Schema 一致且�空,则跳过��化;
若为空则全�构建;若�数�一致则强制�建(Schema �更��新加载)。
ru;当å‰� Schema 无表但å�‘é‡�索引é�žç©ºï¼Œå·²æ¸…空索引Nu=Schema å�‘é‡�索引已就绪(%s 张表),跳过å�‘é‡�化u@å�‘é‡�索引为空,开始构建共 %s 张表(å�‘é‡�化)...F)r8Ú
force_rebuildugå�‘é‡�索引与当å‰� Schema ä¸�一致(索引 %s 张,Schema %s 张),é‡�æ–°å�‘é‡�化并加载...T)ÚlenÚ
get_tablesr0r.ÚwarningÚclearr/Ú build_index)r1r7r8ÚexpectedÚindexeds r4Úensure_index_for_schemaz%SchemaIndexer.ensure_index_for_schemaWsÈ€ô�~×0Ñ0Ó2Ó3ˆØ—*‘*“,ˆà �qŠ=ؘŠ{Ü—‘Ð\Ô]Ø—
‘
” Ø à �hÒ Ü �K‰KØOØô
ð
à �aŠ<Ü �K‰KØRØô
2026-04-16 10:53:10 +08:00
ð
× Ñ ˜^¸
ÐRWÐ Ô XØ ä� ‰ Ø uØ Ø ô
ð
2026-04-16 10:53:10 +08:00
×ј°JÈdÐÕSr6r;c
2026-04-10 16:52:07 +08:00
óú—|jj«dkDr&t|jj«d«n t«}|s%|r#tj dt
|«›d�«y|rw|rutj dt
2026-04-16 10:53:10 +08:00
|«›d�«|jj|j«|jj|jdd i¬
2026-04-10 16:52:07 +08:00
«|_g}g}g}|j«D]f}|j|d «|j|d «|j|d t
|j|d «j«d
œ«Œhtj dt
|«›d�«|jj!||d¬«} |jj#| j%«|||¬«tj dt
|«›d�«y)u3
为Schema构建��索引
Args:
schema_manager: SchemaManager实例
batch_size: 批处�大�
force_rebuild: 是�强制�建(默认为False,增�更新)
Returns:
True=�功,False=已存在且未强制�建
rÚidsu索引已存在(uæ�¡è®°å½•),跳过构建Fu强制é‡�建索引,删除u æ�¡æ—§è®°å½•rrrÚtextr)Ú
table_nameÚ column_countu计算u张表的embedding...T)r8Ú normalize)Ú
embeddingsÚ documentsÚ metadatasrEu[OK] 索引构建完æˆ�,共u张表)r-r0ÚsetÚgetr.r/r<r(Údelete_collectionrr,Úget_table_for_embeddingÚappendÚ get_tableÚcolumnsr
ÚencodeÚaddÚtolist)
2026-04-16 10:53:10 +08:00
r1r7r8r;Ú existing_idsÚ table_textsÚ table_idsÚtable_metadatasÚ
table_inforJs
r4r@zSchemaIndexer.build_indexs×€ð"=A¿O¹O×<QÑ<QÓ<SÐVWÒ<W”s˜4Ÿ?™?×.Ñ.Ó0°Ñ7Ô8Ô]`Ó]bˆ á¡Ü �K‰KÐ,¬S°Ó->Ð,?Ð?ZÐ[Ô \Øá ™\Ü �K‰KÐ5´c¸,Ó6GÐ5HÈ ÐUÔ Và �K‰K× )Ñ )¨$×*>Ñ*>Ô ?Ø"Ÿk™k×BÑBØ×)Ñ)Ø&¨Ð1ðCóˆDŒOð ˆ Øˆ ؈à(×@Ñ@ÖBˆJØ × Ñ ˜z¨&Ñ1Ô 2Ø × Ñ ˜Z¨Ñ/Ô 0Ø × "Ñ "Ø(¨Ñ0Ü # N×$<Ñ$<¸ZÈÑ=OÓ$P×$XÑ$XÓ Yñ$õ
2026-04-10 16:52:07 +08:00
ðCô � ‰ �fœS Ó-Ð.Ð.CÐDÔEØ—]‘]×)Ñ)Ø  J¸$ð*ó
ˆ
ð
�‰×ÑØ!×(Ñ(Ó*Ø!Ø%Øð ô
ô � ‰ Ð3´C¸ ³NÐ3CÀ6ÐJÔKØr6ÚqueryÚtop_kÚscore_thresholdc ó—|jj|gd¬«}|jj|j «t ||jj
««¬«}g}|dr~t|dd«dkDrjtt|dd|dd|dd|dd««D]8\}\}} }
} d | z
} | |k\sŒ|j|t| «| |
|d zd
2026-04-16 10:53:10 +08:00
œ«Œ:|d d D�
cgc],}
|
d
2026-04-16 10:53:10 +08:00
tt|
jdd««d«f‘Œ.}}
tjdt|xsd«t|«||«|Scc}
w)u,
检索相关表
2026-04-16 10:53:10 +08:00
Args:
query: 查询文本(用户问题)
top_k: 返回�K个结果
score_threshold: 相似度阈值(0-1),低于此值的结果会被过滤
Returns:
2026-04-16 10:53:10 +08:00
检索结果列表,按相似度��排列
[
{
"table_name": "表�",
"score": 0.95,
"document": "表�述文本",
"metadata": {...}
},
...
2026-04-10 16:52:07 +08:00
]
2026-04-16 10:53:10 +08:00
T)rI)Úquery_embeddingsÚ n_resultsrErÚ distancesrLrKé)rGÚscoreÚdocumentrÚrankNérGrdgéuBSchema å�‘é‡�检索: query_chars=%s 命中=%s(阈值=%s)top=%sr)r
2026-04-10 16:52:07 +08:00
rTr-r\rVÚminr0r<Ú enumerateÚziprQÚfloatÚroundrNr.r/)r1r\r]r^Úquery_embeddingÚresultsÚ formattedÚidxÚtable_idÚdistancerrerdÚxÚtops r4ÚsearchzSchemaIndexer.search½s�€ð6Ÿ-™-×.Ñ.°¨wÀ$Ð.ÓGˆð—/‘/×'Ñ'Ø,×3Ñ3Ó5ܘ% §¡×!6Ñ!6Ó!8Ó9ð(ó
2026-04-16 10:53:10 +08:00
ˆð ˆ Ø �5Š>œc '¨%¡.°Ñ"3Ó4°qÒ8ÜAJÌ3ؘ‘˜qÑ!ؘ Ñ$ QÑ'ؘ Ñ$ QÑ'ؘ Ñ$ QÑ'ó LöBÑ=�Ñ=�h ¨(°Hð ˜H™ �ؘOÓ+Ø×$Ñ$Ø&.Ü!& u£Ø$,Ø$,Ø # a¡ñ &õðBð QZÐZ]Ð[]ÑP^Ó_ÑP^È1��,‘¤¤u¨Q¯U©U°7¸CÓ-@Ó'AÀ1Ó!EÒFÐP^ˆÐ_Ü� ‰ Ø PÜ �’ ˜Ó Ü � ‹NØ Ø ô 
2026-04-10 16:52:07 +08:00
ðÐùò`sÃ81EÚ table_namescó
—g}|D]J} |jj|gddg¬«}|dr"|j|d|dd|dddœ«ŒL|S#t$r%}tj d|›d |›�«Yd
}~Œxd
2026-04-16 10:53:10 +08:00
}~wwxYw) u–
直接通过表�获�表信�