Skip to content

Commit ce0ebbb

Browse files
authored
Merge pull request #3 from 23373049/22377098
为函数添加描述
2 parents ea28e78 + 062f755 commit ce0ebbb

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

replace/ast_visitor_client.py

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@
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
714
import os
815

916
class 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

Comments
 (0)