44 srctrl , symbolKindToString , referenceKindToString ,
55 NameHierarchy , SourceRange
66)
7+ # 用于为函数生成描述的通用生成器(与 Python indexer 复用)
8+ try :
9+ from modelscope_agent .environment .graph_database .indexer .method_description_generator import get_description_generator
10+ except Exception :
11+ # 在某些独立测试环境下,该模块可能不可用;延迟处理时再退回到 mock
12+ def get_description_generator ():
13+ return None
714import os
815
916class AstVisitorClient :
@@ -336,6 +343,51 @@ def recordSymbolScopeLocation(self, symbolId, sourceRange: SourceRange):
336343 'file_path' : self .symbol_data .get (name , {}).get ('path' , '' ),
337344 }
338345 self .graphDB .add_node (kind , full_name = name , parms = node_parms )
346+ print (f" [CLIENT] Recorded Scope for { kind } : { name } " )
347+ # 如果是函数,尝试使用大模型生成描述并更新到节点属性
348+ if kind == 'FUNCTION' :
349+ try :
350+ method_code = code
351+ method_name = self .symbol_data .get (name , {}).get ('name' , name )
352+ class_name = self .symbol_data .get (name , {}).get ('parent_name' , '' )
353+ file_path = self .symbol_data .get (name , {}).get ('file_path' , '' )
354+
355+ # 尝试从 graphDB 获取邻接关系信息(若实现了该方法)
356+ relations = None
357+ if hasattr (self .graphDB , 'get_node_relations' ):
358+ try :
359+ relations = self .graphDB .get_node_relations (name )
360+ except Exception :
361+ relations = None
362+
363+ generator = get_description_generator ()
364+ if generator is not None :
365+ print (f" [CLIENT] Generating description for { name } ..." )
366+ description = generator .generate_method_description (
367+ method_code = method_code ,
368+ method_name = method_name ,
369+ class_name = class_name ,
370+ file_path = file_path ,
371+ relations = relations ,
372+ )
373+ if description :
374+ # 优先使用 update_node(Neo4j 实现),否则回退到 add_node 来合并属性
375+ try :
376+ if hasattr (self .graphDB , 'update_node' ):
377+ # Neo4jGraphDatabase.update_node(node_id, properties)
378+ try :
379+ # 新接口(node_id, properties)
380+ updated = self .graphDB .update_node (node_id = name , properties = {'description' : description })
381+ except TypeError :
382+ # 旧接口兼容(full_name, parms)
383+ updated = self .graphDB .update_node (name , {'description' : description })
384+ print (f" [CLIENT] Description written for { name } " )
385+ except Exception as e :
386+ print (f" [CLIENT] Failed to write description for { name } : { e } " )
387+ else :
388+ print (" [CLIENT] No description generator available; skipping description generation." )
389+ except Exception as e :
390+ print (f" [CLIENT] Exception during description generation for { name } : { e } " )
339391 #print(f" [CLIENT] Recorded Scope for {kind}: {name}")
340392
341393 def resolve_referenced_symbol (self , callee_name_short : str ):
@@ -633,4 +685,4 @@ def post_process_references(self):
633685 #if actually_deleted:
634686 #print(f" [POST] Deleted {len(actually_deleted)} resolved/orphaned UNKNOWN nodes")
635687
636- #print("--- 后处理引用关系完成 ---")
688+ #print("--- 后处理引用关系完成 ---")
0 commit comments