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

108 lines
11 KiB
Plaintext
Raw Normal View History

2026-04-10 16:52:07 +08:00
Ë
žäÝi ãóŒ—dZddlZddlmZddlmZmZmZm Z ddl
2026-04-10 16:52:07 +08:00
Z
ddl m Z ddl
mZe
je«ZGd„d«Zy) u.
Schema��索引构建器 - 基于ChromaDB
éN)ÚSettings)ÚAnyÚListÚDictÚOptional)ÚPath)Ú
SchemaManagerc
óÄ—eZdZdZ ddededefd„Z ddedede d e fd
„Z
dd ed ed
e d e e
fd„Zde ed e e
fd„Zd e efd„Zdefd„Zd„Zd efd„Zd e
fd„Zy)Ú
SchemaIndexeru”
2026-04-10 16:52:07 +08:00
Schema��索引器
功能:
1. 为表结构构建��索引
2. 基于问题的表检索
3. �久化存储和加载
ÚembedderÚ persist_dirÚcollection_namecóŒ—||_t|«|_|jjdd¬«||_t j t|j«td¬«¬«|_ |jj|jddi¬«|_ tjd |j›�«y
) uÁ
�始化索引器
Args:
2026-04-10 16:52:07 +08:00
embedder: Embedding模型实例
persist_dir: ��数�库�久化目录
2026-04-10 16:52:07 +08:00
collection_name: 集��称
T)ÚparentsÚexist_okF)Úanonymized_telemetry)ÚpathÚsettingsú
hnsw:spaceÚcosine©ÚnameÚmetadatau([OK] åˆ�始化SchemaIndexer: collection=N)r rr
2026-04-10 16:52:07 +08:00
ÚmkdirrÚchromadbÚPersistentClientÚstrÚChromaSettingsÚclientÚget_or_create_collectionÚ
collectionÚloggerÚinfo)Úselfr r
rs ú>C:\Users\24019\Desktop\backman-camel\backend\schema\indexer.pyÚ__init__zSchemaIndexer.__init__s®€ð!ˆŒ
Ü  Ó,ˆÔØ ×Ñ×Ñ t°dÐÔ;Ø.ˆÔô×/Ñ/Ü�T×%Ñ%Ó&Ü#¸Ô?ô
ˆŒ ð Ÿ+™+×>Ñ>Ø×%Ñ%Ø" HÐ-ð?ó
ˆŒô
� ‰ Ð>¸t×?SÑ?SÐ>TÐUÕVóÚschema_managerÚ
batch_sizeÚ
force_rebuildÚreturnc
óú—|jj«dkDr&t|jj«d«n t«}|s%|r#tj dt
|«›d�«y|rw|rutj dt
|«›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:
2026-04-10 16:52:07 +08:00
schema_manager: SchemaManager实例
batch_size: 批处�大�
force_rebuild: 是�强制�建(默认为False,增�更新)
2026-04-10 16:52:07 +08:00
Returns:
True=�功,False=已存在且未强制�建
rÚidsu索引已存在(uæ�¡è®°å½•),跳过构建Fu强制é‡�建索引,删除u æ�¡æ—§è®°å½•rrrÚtextr)Ú
table_nameÚ column_countu计算u张表的embedding...T)r)Ú normalize)Ú
embeddingsÚ documentsÚ metadatasr-u[OK] 索引构建完æˆ�,共u张表)r!ÚcountÚsetÚgetr"r#ÚlenrÚdelete_collectionrr Úget_table_for_embeddingÚappendÚ get_tableÚcolumnsr ÚencodeÚaddÚtolist)
r$r(r)r*Ú existing_idsÚ table_textsÚ table_idsÚtable_metadatasÚ
table_infor2s
r%Ú build_indexzSchemaIndexer.build_index;s×€ð"=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Ør'Ú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-10 16:52:07 +08:00
œ«Œ:tjd |d d
›dt|«›d|›d�«|S)u,
2026-04-10 16:52:07 +08:00
检索相关表
Args:
query: 查询文本(用户问题)
top_k: 返回�K个结果
score_threshold: 相似度阈值(0-1),低于此值的结果会被过滤
Returns:
检索结果列表,按相似度��排列
[
{
"table_name": "表�",
"score": 0.95,
"document": "表�述文本",
"metadata": {...}
},
...
]
2026-04-10 16:52:07 +08:00
T)r1)Úquery_embeddingsÚ n_resultsr-rÚ distancesr4r3é)r/ÚscoreÚdocumentrÚranku检索 'Né2u...' -> 找到u个相关表(阈值=u))r r>r!rGr@Úminr5r8Ú enumerateÚzipr;Úfloatr"Údebug)
r$rGrHrIÚquery_embeddingÚresultsÚ formattedÚidxÚtable_idÚdistancerrPrOs
r%ÚsearchzSchemaIndexer.searchysO€ð6Ÿ-™-×.Ñ.°¨wÀ$Ð.ÓGˆð—/‘/×'Ñ'Ø,×3Ñ3Ó5ܘ% §¡×!6Ñ!6Ó!8Ó9ð(ó
2026-04-10 16:52:07 +08:00
ˆð ˆ Ø �5Š>œc '¨%¡.°Ñ"3Ó4°qÒ8ÜAJÌ3ؘ‘˜qÑ!ؘ Ñ$ QÑ'ؘ Ñ$ QÑ'ؘ Ñ$ QÑ'ó LöBÑ=�Ñ=�h ¨(°Hð ˜H™ �ؘOÓ+Ø×$Ñ$Ø&.Ü!& u£Ø$,Ø$,Ø # a¡ñ &õðBô � ‰ �x  c r 
˜|¨>¼#¸i».Ð9IÐI_Ð`oÐ_pÐpsÐtÔuØÐr'Ú table_namescó
2026-04-10 16:52:07 +08:00
—g}|D]J} |jj|gddg¬«}|dr"|j|d|dd|dddœ«ŒL|S#t$r%}tj d|›d |›�«Yd
}~Œxd
}~wwxYw) u–
直接通过表�获�表信�
Args:
table_names: 表�列表