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

104 lines
9.5 KiB
Plaintext
Raw Normal View History

2026-04-10 16:52:07 +08:00
Ë
ÚŸØi@ãóŒ—dZddlZddlmZddlmZmZmZm Z ddl
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”
Schema��索引器
功能:
1. 为表结构构建��索引
2. 基于问题的表检索
3. �久化存储和加载
ÚembedderÚ persist_dirÚcollection_namecóV—||_t|«|_|jjdd¬«t j
t
|j«td¬«¬«|_|jj|ddi¬«|_
tjd |›�«y
) uÁ
�始化索引器
Args:
embedder: Embedding模型实例
persist_dir: ��数�库�久化目录
collection_name: 集��称
T)ÚparentsÚexist_okF)Úanonymized_telemetry)ÚpathÚsettingsz
hnsw:spaceÚcosine)ÚnameÚmetadatau([OK] åˆ�始化SchemaIndexer: collection=N)
r rr
ÚmkdirÚchromadbÚPersistentClientÚstrÚChromaSettingsÚclientÚget_or_create_collectionÚ
collectionÚloggerÚinfo)Úselfr r
rs úKC:\Users\24019\Desktop\backman-camel\text2sql_agent_camel\schema\indexer.pyÚ__init__zSchemaIndexer.__init__sš€ð!ˆŒ
Ü  Ó,ˆÔØ ×Ñ×Ñ t°dÐÔ;ô×/Ñ/Ü�T×%Ñ%Ó&Ü#¸Ô?ô
ˆŒ ð Ÿ+™+×>Ñ>Ø Ø" HÐ-ð?ó
ˆŒô
� ‰ Ð>¸Ð>OÐPÕQóÚschema_managerÚ
batch_sizeÚ
force_rebuildÚreturnc
ó†—|jj«dkDr&t|jj«d«n t«}|s%|r#tj dt
|«›d�«y|r>|r<tj dt
|«›d�«|jj«g}g}g}|j«D]f}|j|d«|j|d «|j|d t
|j|d «j«d
œ«Œhtj d t
|«›d �«|jj||¬
«} |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 æ�¡æ—§è®°å½•Útextr)Ú
table_nameÚ column_countu计算u张表的embedding...)r')Ú
embeddingsÚ documentsÚ metadatasr+u[OK] 索引构建完æˆ�,共u张表T)rÚcountÚsetÚgetr r!ÚlenÚdeleteÚget_table_for_embeddingÚappendÚ get_tableÚcolumnsr ÚencodeÚaddÚtolist)
r"r&r'r(Ú existing_idsÚ table_textsÚ table_idsÚtable_metadatasÚ
table_infor/s
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Ø �O‰O× "Ñ "Ô $ðˆ Øˆ ؈à(×@Ñ@ÖBˆJØ × Ñ ˜z¨&Ñ1Ô 2Ø × Ñ ˜Z¨Ñ/Ô 0Ø × "Ñ "Ø(¨Ñ0Ü # N×$<Ñ$<¸ZÈÑ=OÓ$P×$XÑ$XÓ Yñ$õ
ðCô � ‰ �fœS Ó-Ð.Ð.CÐDÔEØ—]‘]×)Ñ)¨+À*Ð)ÓMˆ
ð
�‰×ÑØ!×(Ñ(Ó*Ø!Ø%Øð ô
ô � ‰ Ð3´C¸ ³NÐ3CÀ6ÐJÔKØr%ÚqueryÚtop_kÚscore_thresholdc ó8—|jj|g«}|jj|j «t ||jj
««¬«}g}|dr~t|dd«dkDrjtt|dd|dd|dd|dd««D]8\}\}} }
} d| z
} | |k\sŒ|j|t| «| |
|dzdœ«Œ:tjd |d
d ›d t|«›d
|›d�«|S)u,
检索相关表
Args:
query: 查询文本(用户问题)
top_k: 返回�K个结果
score_threshold: 相似度阈值(0-1),低于此值的结果会被过滤
Returns:
检索结果列表,按相似度��排列
[
{
"table_name": "表�",
"score": 0.95,
"document": "表�述文本",
"metadata": {...}
},
...
]
)Úquery_embeddingsÚ n_resultsr+rÚ distancesr1r0é)r-ÚscoreÚdocumentrÚranku检索 'Né2u...' -> 找到u个相关表(阈值=u))r r;rrDr=Úminr2r5Ú enumerateÚzipr8Úfloatr Údebug)
r"rDrErFÚquery_embeddingÚresultsÚ formattedÚidxÚtable_idÚdistancerrMrLs
r#ÚsearchzSchemaIndexer.searchqsJ€ð6Ÿ-™-×.Ñ.°¨wÓ7ˆð—/‘/×'Ñ'Ø,×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 
˜|¨>¼#¸i».Ð9IÐI_Ð`oÐ_pÐpsÐtÔuØÐr%Ú table_namescó
—g}|D]J} |jj|gddg¬«}|dr"|j|d|dd|dddœ«ŒL|S#t$r%}tj d|›d |›�«Yd
}~Œxd