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

141 lines
13 KiB
Plaintext
Raw Normal View History

2026-04-10 16:52:07 +08:00
Ë
òýÞiq+ãó”—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��索引器
功能:
1. 为表结构构建��索引
2. 基于问题的表检索
2026-04-10 16:52:07 +08:00
3. 默认使用 Chroma ``PersistentClient``,数��在 ``persist_dir``(与 ``VECTOR_DB_PATH`` 一致);
仅当环境�� ``SCHEMA_INDEXER_EPHEMERAL=true`` 或构造�数 ``use_ephemeral=True`` 时使用内存客户端。
N)Ú
use_ephemeralÚembedderÚ persist_dirÚcollection_namer c ó—||_t|«|_||_t j
dd«j
2026-04-10 16:52:07 +08:00
«dv}|� t|«n||_|jr(tjtd¬«¬«|_ d}ne|jjd d ¬
«tjt|j«td¬«¬ «|_ d |j›�}|jj!|jd
di¬«|_t$j'd|›d|j›d|j"j)«›�«y)ur
�始化索引器
Args:
embedder: Embedding模型实例
persist_dir: Chroma �久化目录(默认与编排器 ``vector_db_path`` / ``VECTOR_DB_PATH`` 一致)
2026-04-10 16:52:07 +08:00
collection_name: 集��称
use_ephemeral: 为 True 时使用内存 Chroma;为 None 时读环境�� SCHEMA_INDEXER_EPHEMERAL
ÚSCHEMA_INDEXER_EPHEMERALÚ)Ú1ÚtrueÚyesNF)Úanonymized_telemetry)Úsettingsu Chroma内存T)ÚparentsÚexist_ok)ÚpathruChromaç£�盘 path=ú
hnsw:spaceÚcosine©ÚnameÚmetadatau[OK] åˆ�始化SchemaIndexer(z): collection=z, count=)r
rrrÚosÚgetenvÚlowerÚboolÚ_chroma_ephemeralÚchromadbÚEphemeralClientÚChromaSettingsÚclientÚmkdirÚPersistentClientÚstrÚget_or_create_collectionÚ
collectionÚloggerÚinfoÚcount)Úselfr
rrr Ú
env_ephemeralÚ backend_descs úbackend\schema\indexer.pyÚ__init__zSchemaIndexer.__init__sK€ð"!ˆŒ
Ü  Ó,ˆÔØ.ˆÔäŸ ™ Ð"<¸bÓA×GÑGÓIðN
ð
ˆ
ð
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\ð]Ø—_‘_×*Ñ*Ó,Ð-ð
/õ
2026-04-10 16:52:07 +08:00
óÚschema_managerÚ
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_schemaQsÈ€ô�~×0Ñ0Ó2Ó3ˆØ—*‘*“,ˆà �qŠ=ؘŠ{Ü—‘Ð\Ô]Ø—
‘
” Ø à �hÒ Ü �K‰KØOØô
ð
à �aŠ<Ü �K‰KØRØô
ð
× Ñ ˜^¸
ÐRWÐ Ô XØ ä� ‰ Ø uØ Ø ô
ð
2026-04-10 16:52:07 +08:00
×ј°JÈdÐÕSr6r;c
óú—|jj«dkDr&t|jj«d«n t«}|s%|r#tj dt
|«›d�«y|rw|rutj dt
2026-04-10 16:52:07 +08:00
|«›d�«|jj|j«|jj|jdd i¬
«|_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-10 16:52:07 +08:00
r1r7r8r;Ú existing_idsÚ table_textsÚ table_idsÚtable_metadatasÚ
table_inforJs
2026-04-10 16:52:07 +08:00
r4r@zSchemaIndexer.build_indexys×€ð"=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ñ$õ
ð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
œ«Œ:tjd |d d
›dt|«›d|›d�«|S)u,
检索相关表
Args:
query: 查询文本(用户问题)
top_k: 返回�K个结果
score_threshold: 相似度阈值(0-1),低于此值的结果会被过滤
Returns:
检索结果列表,按相似度��排列
[
{
"table_name": "表�",
"score": 0.95,
"document": "表�述文本",
"metadata": {...}
},
...
]
T)rI)Úquery_embeddingsÚ n_resultsrErÚ distancesrLrKé)rGÚscoreÚdocumentrÚranku检索 'Né2u...' -> 找到u个相关表(阈值=u))r
rTr-r\rVÚminr0r<Ú enumerateÚziprQÚfloatr.Údebug)
r1r\r]r^Úquery_embeddingÚresultsÚ formattedÚidxÚtable_idÚdistancerrerds
r4ÚsearchzSchemaIndexer.search·sO€ð6Ÿ-™-×.Ñ.°¨wÀ$Ð.ÓGˆð—/‘/×'Ñ'Ø,×3Ñ3Ó5ܘ% §¡×!6Ñ!6Ó!8Ó9ð(ó
ˆð ˆ Ø �5Š>œc '¨%¡.°Ñ"3Ó4°qÒ8ÜAJÌ3ؘ‘˜qÑ!ؘ Ñ$ QÑ'ؘ Ñ$ QÑ'ؘ Ñ$ QÑ'ó LöBÑ=�Ñ=�h ¨(°Hð ˜H™ �ؘOÓ+Ø×$Ñ$Ø&.Ü!& u£Ø$,Ø$,Ø # a¡ñ &õðBô � ‰ �x  c r 
2026-04-10 16:52:07 +08:00
˜|¨>¼#¸i».Ð9IÐI_Ð`oÐ_pÐpsÐtÔuØÐr6Ú table_namescó
—g}|D]J} |jj|gddg¬«}|dr"|j|d|dd|dddœ«ŒL|S#t$r%}tj d|›d |›�«Yd
2026-04-10 16:52:07 +08:00
}~Œxd
}~wwxYw) u–
直接通过表�获�表信�
Args:
table_names: 表�列表
Returns: