|
|
@@ -49,6 +49,7 @@
|
|
|
import asyncio
|
|
|
import concurrent.futures
|
|
|
import json
|
|
|
+import os
|
|
|
import time
|
|
|
from dataclasses import dataclass
|
|
|
from enum import Enum
|
|
|
@@ -58,7 +59,7 @@ from core.base.task_models import TaskFileInfo
|
|
|
from core.construction_review.component.infrastructure.milvus import MilvusConfig, MilvusManager
|
|
|
from core.construction_review.component.infrastructure.parent_tool import (
|
|
|
enhance_with_parent_docs,
|
|
|
- extract_first_result
|
|
|
+ extract_query_pairs_results
|
|
|
)
|
|
|
from core.construction_review.component.infrastructure.relevance import is_relevant_async
|
|
|
from core.construction_review.component.reviewers.base_reviewer import BaseReviewer
|
|
|
@@ -189,7 +190,7 @@ class AIReviewEngine(BaseReviewer):
|
|
|
|
|
|
|
|
|
async def basic_compliance_check(self,trace_id_idx: str, unit_content: Dict[str, Any],
|
|
|
- review_location_label: str,state:str,stage_name:str) -> Dict[str, Any]:
|
|
|
+ review_location_label: str,state:Dict[str, Any],stage_name:str) -> Dict[str, Any]:
|
|
|
"""
|
|
|
基础合规性检查
|
|
|
|
|
|
@@ -321,10 +322,14 @@ class AIReviewEngine(BaseReviewer):
|
|
|
'completeness_check': completeness_result,
|
|
|
}
|
|
|
async def technical_compliance_check(self,trace_id_idx: str, unit_content: Dict[str, Any],
|
|
|
- review_location_label: str,state:str,stage_name:str) -> Dict[str, Any]:
|
|
|
+ review_location_label: str,state:Dict[str, Any],stage_name:str) -> Dict[str, Any]:
|
|
|
"""
|
|
|
技术性合规检查(包含RAG增强审查)
|
|
|
|
|
|
+ 支持基于 entity_results 列表的动态审查任务创建:
|
|
|
+ - entity_results 列表中每个查询对都会创建独立的审查任务
|
|
|
+ - 支持参数性和非参数性审查的动态任务创建
|
|
|
+
|
|
|
Args:
|
|
|
trace_id_idx: 追踪ID索引
|
|
|
unit_content: 待审查单元内容
|
|
|
@@ -338,53 +343,121 @@ class AIReviewEngine(BaseReviewer):
|
|
|
logger.info(f"开始技术性合规检查,内容长度: {len(review_content)}")
|
|
|
|
|
|
# 先执行RAG增强检索,获取相关标准文档作为参考
|
|
|
- logger.info(f"检查审查项列表:{self.task_info.get_review_config_list():}")
|
|
|
+ logger.info(f"检查审查项列表:{self.task_info.get_review_config_list():}")
|
|
|
+ entity_results = [] # 初始化 entity_results 列表
|
|
|
+
|
|
|
if 'non_parameter_compliance_check' in self.task_info.get_review_config_list() or 'parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
logger.info("执行专业性审查,开始RAG增强检索")
|
|
|
rag_result = self.rag_enhanced_check(unit_content)
|
|
|
- review_references = rag_result.get('text_content', '')
|
|
|
- reference_source = rag_result.get('file_name', '')
|
|
|
- else:
|
|
|
- logger.info("未执行专业性审查,跳过RAG增强检索")
|
|
|
- review_references = None
|
|
|
- reference_source = None
|
|
|
+ entity_results = rag_result.get('entity_results', [])
|
|
|
+ logger.info(f"[RAG增强] 获取到 {len(entity_results)} 个查询对结果")
|
|
|
+
|
|
|
+ # 如果有 entity_results,记录详细信息
|
|
|
+ if entity_results:
|
|
|
+ for idx, entity_item in enumerate(entity_results):
|
|
|
+ logger.info(f"[RAG增强] 查询对 {idx}: entity={entity_item.get('entity')}, combined_query={entity_item.get('combined_query')[:50]}...")
|
|
|
+
|
|
|
async def check_with_semaphore(check_func, **kwargs):
|
|
|
async with self.semaphore:
|
|
|
return await check_func(**kwargs)
|
|
|
|
|
|
# 根据配置动态创建技术性检查任务
|
|
|
technical_tasks = []
|
|
|
- task_mapping = []
|
|
|
+ task_mapping = []
|
|
|
|
|
|
TASK_TIMEOUT = 150
|
|
|
|
|
|
- if 'non_parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
- task_mapping.append('non_parameter_compliance')
|
|
|
- technical_tasks.append(
|
|
|
- asyncio.create_task(
|
|
|
- asyncio.wait_for(
|
|
|
- check_with_semaphore(self.check_non_parameter_compliance, trace_id_idx=trace_id_idx,
|
|
|
- review_content=review_content, review_references=review_references,
|
|
|
- reference_source=reference_source, review_location_label=review_location_label,
|
|
|
- state=state, stage_name=stage_name),
|
|
|
- timeout=TASK_TIMEOUT
|
|
|
+ # 判断是否需要基于 entity_results 创建动态任务
|
|
|
+ if entity_results and len(entity_results) > 0:
|
|
|
+ logger.info(f"[技术审查] 基于 entity_results 创建动态审查任务,共 {len(entity_results)} 个查询对")
|
|
|
+
|
|
|
+ # 为每个查询对创建独立的审查任务
|
|
|
+ for idx, entity_item in enumerate(entity_results):
|
|
|
+ combined_query = entity_item.get('combined_query', '')
|
|
|
+ entity = entity_item.get('entity', f'entity_{idx}')
|
|
|
+ text_content = entity_item.get('text_content', '')
|
|
|
+ file_name = entity_item.get('file_name', '')
|
|
|
+
|
|
|
+ logger.info(f"[技术审查] 为查询对 {idx} ({entity}) 创建审查任务")
|
|
|
+
|
|
|
+ # 根据配置创建参数性或非参数性审查任务
|
|
|
+ if 'parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
+ # 参数性合规检查
|
|
|
+ task_mapping.append(f'parameter_compliance_{idx}')
|
|
|
+ technical_tasks.append(
|
|
|
+ asyncio.create_task(
|
|
|
+ asyncio.wait_for(
|
|
|
+ check_with_semaphore(
|
|
|
+ self.check_parameter_compliance,
|
|
|
+ trace_id_idx=trace_id_idx,
|
|
|
+ review_content=review_content,
|
|
|
+ review_references=text_content, # 使用查询对的检索结果作为参考
|
|
|
+ reference_source=file_name,
|
|
|
+ review_location_label=review_location_label,
|
|
|
+ state=state,
|
|
|
+ stage_name=stage_name,
|
|
|
+ entity_query=combined_query # 传入组合查询条文
|
|
|
+ ),
|
|
|
+ timeout=TASK_TIMEOUT
|
|
|
+ )
|
|
|
+ )
|
|
|
+ )
|
|
|
+
|
|
|
+ if 'non_parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
+ # 非参数性合规检查
|
|
|
+ task_mapping.append(f'non_parameter_compliance_{idx}')
|
|
|
+ technical_tasks.append(
|
|
|
+ asyncio.create_task(
|
|
|
+ asyncio.wait_for(
|
|
|
+ check_with_semaphore(
|
|
|
+ self.check_non_parameter_compliance,
|
|
|
+ trace_id_idx=trace_id_idx,
|
|
|
+ review_content=review_content,
|
|
|
+ review_references=text_content, # 使用查询对的检索结果作为参考
|
|
|
+ reference_source=file_name,
|
|
|
+ review_location_label=review_location_label,
|
|
|
+ state=state,
|
|
|
+ stage_name=stage_name,
|
|
|
+ entity_query=combined_query # 传入组合查询条文
|
|
|
+ ),
|
|
|
+ timeout=TASK_TIMEOUT
|
|
|
+ )
|
|
|
+ )
|
|
|
+ )
|
|
|
+
|
|
|
+ logger.info(f"[技术审查] 总共创建了 {len(technical_tasks)} 个动态审查任务")
|
|
|
+
|
|
|
+ else:
|
|
|
+ # 没有entity_results或未配置专业性审查,使用原有逻辑
|
|
|
+ logger.info("[技术审查] 使用通用审查模式(未使用 entity_results)")
|
|
|
+
|
|
|
+ if 'non_parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
+ task_mapping.append('non_parameter_compliance')
|
|
|
+ technical_tasks.append(
|
|
|
+ asyncio.create_task(
|
|
|
+ asyncio.wait_for(
|
|
|
+ check_with_semaphore(self.check_non_parameter_compliance, trace_id_idx=trace_id_idx,
|
|
|
+ review_content=review_content, review_references=None,
|
|
|
+ reference_source=None, review_location_label=review_location_label,
|
|
|
+ state=state, stage_name=stage_name),
|
|
|
+ timeout=TASK_TIMEOUT
|
|
|
+ )
|
|
|
)
|
|
|
)
|
|
|
- )
|
|
|
|
|
|
- if 'parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
- task_mapping.append('parameter_compliance')
|
|
|
- technical_tasks.append(
|
|
|
- asyncio.create_task(
|
|
|
- asyncio.wait_for(
|
|
|
- check_with_semaphore(self.check_parameter_compliance, trace_id_idx=trace_id_idx,
|
|
|
- review_content=review_content, review_references=review_references,
|
|
|
- reference_source=reference_source, review_location_label=review_location_label,
|
|
|
- state=state, stage_name=stage_name),
|
|
|
- timeout=TASK_TIMEOUT
|
|
|
+ if 'parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
+ task_mapping.append('parameter_compliance')
|
|
|
+ technical_tasks.append(
|
|
|
+ asyncio.create_task(
|
|
|
+ asyncio.wait_for(
|
|
|
+ check_with_semaphore(self.check_parameter_compliance, trace_id_idx=trace_id_idx,
|
|
|
+ review_content=review_content, review_references=None,
|
|
|
+ reference_source=None, review_location_label=review_location_label,
|
|
|
+ state=state, stage_name=stage_name),
|
|
|
+ timeout=TASK_TIMEOUT
|
|
|
+ )
|
|
|
)
|
|
|
)
|
|
|
- )
|
|
|
|
|
|
# 一次性执行所有任务,避免重复协程调用
|
|
|
if not technical_tasks:
|
|
|
@@ -394,7 +467,7 @@ class AIReviewEngine(BaseReviewer):
|
|
|
}
|
|
|
|
|
|
# 使用 asyncio.wait 替代 gather,提供更好的超时控制
|
|
|
- # 整体超时时间 = 单个任务超时 + 缓冲时间
|
|
|
+ # 整体超时时间 = 单个任务超时 × 任务数量 + 缓冲时间
|
|
|
total_timeout = TASK_TIMEOUT * len(technical_tasks) + 10
|
|
|
|
|
|
done, pending = await asyncio.wait(technical_tasks, timeout=total_timeout)
|
|
|
@@ -417,25 +490,83 @@ class AIReviewEngine(BaseReviewer):
|
|
|
results.append(e)
|
|
|
|
|
|
# 根据配置项分配结果
|
|
|
- non_parameter_result = self._process_review_result(None)
|
|
|
- parameter_result = self._process_review_result(None)
|
|
|
+ # 判断是否使用 entity_results 模式(多查询对模式)
|
|
|
+ if entity_results and len(entity_results) > 0:
|
|
|
+ # 多查询对模式:按查询对分组处理所有结果
|
|
|
+ logger.info(f"[技术审查] 处理多查询对审查结果,共 {len(entity_results)} 个查询对")
|
|
|
+
|
|
|
+ entity_review_results = []
|
|
|
+ result_index = 0
|
|
|
+
|
|
|
+ # 遍历每个查询对,提取对应的审查结果
|
|
|
+ for idx, entity_item in enumerate(entity_results):
|
|
|
+ entity_review_item = {
|
|
|
+ 'entity': entity_item.get('entity', f'entity_{idx}'),
|
|
|
+ 'combined_query': entity_item.get('combined_query', ''),
|
|
|
+ 'file_name': entity_item.get('file_name', ''),
|
|
|
+ 'text_content': entity_item.get('text_content', ''),
|
|
|
+ 'bfp_rerank_score': entity_item.get('bfp_rerank_score', 0.0)
|
|
|
+ }
|
|
|
|
|
|
- result_index = 0
|
|
|
+ # 提取非参数性审查结果(如果配置了)
|
|
|
+ if 'non_parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
+ if result_index < len(results):
|
|
|
+ entity_review_item['non_parameter_compliance'] = self._process_review_result(
|
|
|
+ results[result_index]
|
|
|
+ )
|
|
|
+ logger.info(f"[技术审查] 查询对 {idx} 非参数性审查结果已处理")
|
|
|
+ result_index += 1
|
|
|
+ else:
|
|
|
+ logger.warning(f"[技术审查] 查询对 {idx} 缺少非参数性审查结果")
|
|
|
+ entity_review_item['non_parameter_compliance'] = self._process_review_result(None)
|
|
|
+
|
|
|
+ # 提取参数性审查结果(如果配置了)
|
|
|
+ if 'parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
+ if result_index < len(results):
|
|
|
+ entity_review_item['parameter_compliance'] = self._process_review_result(
|
|
|
+ results[result_index]
|
|
|
+ )
|
|
|
+ logger.info(f"[技术审查] 查询对 {idx} 参数性审查结果已处理")
|
|
|
+ result_index += 1
|
|
|
+ else:
|
|
|
+ logger.warning(f"[技术审查] 查询对 {idx} 缺少参数性审查结果")
|
|
|
+ entity_review_item['parameter_compliance'] = self._process_review_result(None)
|
|
|
|
|
|
- if 'non_parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
- if result_index < len(results):
|
|
|
- non_parameter_result = self._process_review_result(results[result_index])
|
|
|
- result_index += 1
|
|
|
+ entity_review_results.append(entity_review_item)
|
|
|
|
|
|
- if 'parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
- if result_index < len(results):
|
|
|
- parameter_result = self._process_review_result(results[result_index])
|
|
|
- result_index += 1
|
|
|
+ logger.info(f"[技术审查] 成功处理 {len(entity_review_results)} 个查询对的审查结果")
|
|
|
|
|
|
- return {
|
|
|
- 'non_parameter_compliance': non_parameter_result,
|
|
|
- 'parameter_compliance': parameter_result
|
|
|
- }
|
|
|
+ return {
|
|
|
+ 'review_mode': 'entity_based', # 标记为基于查询对的审查模式
|
|
|
+ 'entity_review_results': entity_review_results,
|
|
|
+ 'total_entities': len(entity_results),
|
|
|
+ 'total_results_processed': result_index
|
|
|
+ }
|
|
|
+
|
|
|
+ else:
|
|
|
+ # 通用审查模式(未使用 entity_results)
|
|
|
+ logger.info("[技术审查] 处理通用审查模式结果")
|
|
|
+
|
|
|
+ non_parameter_result = self._process_review_result(None)
|
|
|
+ parameter_result = self._process_review_result(None)
|
|
|
+
|
|
|
+ result_index = 0
|
|
|
+
|
|
|
+ if 'non_parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
+ if result_index < len(results):
|
|
|
+ non_parameter_result = self._process_review_result(results[result_index])
|
|
|
+ result_index += 1
|
|
|
+
|
|
|
+ if 'parameter_compliance_check' in self.task_info.get_review_config_list():
|
|
|
+ if result_index < len(results):
|
|
|
+ parameter_result = self._process_review_result(results[result_index])
|
|
|
+ result_index += 1
|
|
|
+
|
|
|
+ return {
|
|
|
+ 'review_mode': 'general', # 标记为通用审查模式
|
|
|
+ 'non_parameter_compliance': non_parameter_result,
|
|
|
+ 'parameter_compliance': parameter_result
|
|
|
+ }
|
|
|
|
|
|
def rag_enhanced_check(self, unit_content: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
"""
|
|
|
@@ -462,6 +593,12 @@ class AIReviewEngine(BaseReviewer):
|
|
|
|
|
|
bfp_result_lists = entity_enhance.entities_enhance_retrieval(query_pairs)
|
|
|
|
|
|
+ # 🔍 保存关键节点结果(用于对比分析)
|
|
|
+ os.makedirs("temp/ai_review_engine", exist_ok=True)
|
|
|
+ with open("temp/ai_review_engine/bfp_result_lists.json", "w", encoding='utf-8') as f:
|
|
|
+ json.dump(bfp_result_lists, f, ensure_ascii=False, indent=4)
|
|
|
+ logger.info("[RAG增强] ✅ 已保存 bfp_result_lists 到 temp/ai_review_engine/bfp_result_lists.json")
|
|
|
+
|
|
|
# Step 3: 检查检索结果
|
|
|
if not bfp_result_lists:
|
|
|
logger.warning("[RAG增强] 实体检索未返回结果")
|
|
|
@@ -479,9 +616,10 @@ class AIReviewEngine(BaseReviewer):
|
|
|
enhanced_results = enhancement_result['enhanced_results']
|
|
|
enhanced_count = enhancement_result['enhanced_count']
|
|
|
|
|
|
- # 保存增强后的结果
|
|
|
- with open(rf"temp\entity_bfp_recall\enhance_with_parent_docs.json", "w", encoding='utf-8') as f:
|
|
|
+ # 🔍 保存关键节点结果(用于对比分析)
|
|
|
+ with open("temp/ai_review_engine/enhance_with_parent_docs.json", "w", encoding='utf-8') as f:
|
|
|
json.dump(enhanced_results, f, ensure_ascii=False, indent=4)
|
|
|
+ logger.info(f"[RAG增强] ✅ 已保存 enhance_with_parent_docs 到 temp/ai_review_engine/enhance_with_parent_docs.json (共{enhanced_count}个)")
|
|
|
|
|
|
logger.info(f"[RAG增强] 成功增强 {enhanced_count} 个结果")
|
|
|
logger.info(f"[RAG增强] 使用了 {len(enhancement_result['parent_docs'])} 个父文档")
|
|
|
@@ -490,14 +628,32 @@ class AIReviewEngine(BaseReviewer):
|
|
|
# 失败时使用原始结果
|
|
|
enhanced_results = bfp_result_lists
|
|
|
|
|
|
- # Step 5: 提取第一个结果返回 (使用增强后的结果)
|
|
|
- final_result = extract_first_result(enhanced_results)
|
|
|
+ # Step 5: 提取查询对结果(只保留得分>0.8的结果)
|
|
|
+ entity_results = extract_query_pairs_results(enhanced_results, query_pairs, score_threshold=0.8)
|
|
|
|
|
|
# 保存最终结果用于调试
|
|
|
- with open(rf"temp\entity_bfp_recall\extract_first_result.json", "w", encoding='utf-8') as f:
|
|
|
- json.dump(final_result, f, ensure_ascii=False, indent=4)
|
|
|
+ # with open(rf"temp\ai_review_engine\extract_query_pairs_results.json", "w", encoding='utf-8') as f:
|
|
|
+ # json.dump(entity_results, f, ensure_ascii=False, indent=4)
|
|
|
|
|
|
- return final_result
|
|
|
+ # 如果没有结果通过阈值过滤,返回空结果
|
|
|
+ if not entity_results:
|
|
|
+ logger.warning("[RAG增强] 没有结果通过阈值过滤(得分>0.8),返回空结果")
|
|
|
+ return {
|
|
|
+ 'vector_search': [],
|
|
|
+ 'retrieval_status': 'no_results',
|
|
|
+ 'file_name': '',
|
|
|
+ 'text_content': '',
|
|
|
+ 'metadata': {},
|
|
|
+ 'entity_results': [],
|
|
|
+ 'total_entities': 0
|
|
|
+ }
|
|
|
+
|
|
|
+ # 返回格式:返回列表形式的 entity_results
|
|
|
+ return {
|
|
|
+ 'retrieval_status': 'success',
|
|
|
+ 'entity_results': entity_results,
|
|
|
+ 'total_entities': len(entity_results)
|
|
|
+ }
|
|
|
|
|
|
|
|
|
async def check_grammar(self, trace_id_idx: str, review_content: str, review_references: str,
|
|
|
@@ -817,7 +973,8 @@ class AIReviewEngine(BaseReviewer):
|
|
|
return result
|
|
|
|
|
|
async def check_non_parameter_compliance(self, trace_id_idx: str, review_content: str, review_references: str,
|
|
|
- reference_source: str, review_location_label: str, state: str, stage_name: str) -> Dict[str, Any]:
|
|
|
+ reference_source: str, review_location_label: str, state: str, stage_name: str,
|
|
|
+ entity_query: str = None) -> Dict[str, Any]:
|
|
|
"""
|
|
|
非参数合规性检查 - 安全相关/强制性条文知识库
|
|
|
|
|
|
@@ -829,6 +986,7 @@ class AIReviewEngine(BaseReviewer):
|
|
|
review_location_label: 审查位置标签
|
|
|
state: 状态字典
|
|
|
stage_name: 阶段名称
|
|
|
+ entity_query: 实体组合查询条文(可选,来自 entity_results)
|
|
|
|
|
|
Returns:
|
|
|
Dict[str, Any]: 非参数合规性检查结果
|
|
|
@@ -836,11 +994,21 @@ class AIReviewEngine(BaseReviewer):
|
|
|
reviewer_type = Stage.TECHNICAL.value['reviewer_type']
|
|
|
prompt_name = Stage.TECHNICAL.value['non_parameter']
|
|
|
trace_id = prompt_name+trace_id_idx
|
|
|
- return await self.review("non_parameter_compliance_check", trace_id, reviewer_type, prompt_name, review_content, review_references,
|
|
|
+
|
|
|
+ # 如果有 entity_query,拼接到 review_content 前面
|
|
|
+ if entity_query:
|
|
|
+ logger.info(f"[非参数审查] 使用实体查询条文: {entity_query[:100]}...")
|
|
|
+ combined_content = f"【实体查询条文】\n{entity_query}\n\n【待审查内容】\n{review_content}"
|
|
|
+ logger.debug(f"[非参数审查] 组合后内容长度: {len(combined_content)} (原内容: {len(review_content)}, 查询条文: {len(entity_query)})")
|
|
|
+ else:
|
|
|
+ combined_content = review_content
|
|
|
+
|
|
|
+ return await self.review("non_parameter_compliance_check", trace_id, reviewer_type, prompt_name, combined_content, review_references,
|
|
|
reference_source, review_location_label, state, stage_name, timeout=45)
|
|
|
|
|
|
async def check_parameter_compliance(self, trace_id_idx: str, review_content: str, review_references: str,
|
|
|
- reference_source: str, review_location_label: str, state: str, stage_name: str) -> Dict[str, Any]:
|
|
|
+ reference_source: str, review_location_label: str, state: str, stage_name: str,
|
|
|
+ entity_query: str = None) -> Dict[str, Any]:
|
|
|
"""
|
|
|
参数合规性检查 - 实体概念/工程术语知识库
|
|
|
|
|
|
@@ -852,6 +1020,7 @@ class AIReviewEngine(BaseReviewer):
|
|
|
review_location_label: 审查位置标签
|
|
|
state: 状态字典
|
|
|
stage_name: 阶段名称
|
|
|
+ entity_query: 实体组合查询条文(可选,来自 entity_results)
|
|
|
|
|
|
Returns:
|
|
|
Dict[str, Any]: 参数合规性检查结果
|
|
|
@@ -859,7 +1028,16 @@ class AIReviewEngine(BaseReviewer):
|
|
|
reviewer_type = Stage.TECHNICAL.value['reviewer_type']
|
|
|
prompt_name = Stage.TECHNICAL.value['parameter']
|
|
|
trace_id = prompt_name+trace_id_idx
|
|
|
- return await self.review("parameter_compliance_check", trace_id, reviewer_type, prompt_name, review_content, review_references,
|
|
|
+
|
|
|
+ # 如果有 entity_query,拼接到 review_content 前面
|
|
|
+ if entity_query:
|
|
|
+ logger.info(f"[参数审查] 使用实体查询条文: {entity_query[:100]}...")
|
|
|
+ combined_content = f"【实体查询条文】\n{entity_query}\n\n【待审查内容】\n{review_content}"
|
|
|
+ logger.debug(f"[参数审查] 组合后内容长度: {len(combined_content)} (原内容: {len(review_content)}, 查询条文: {len(entity_query)})")
|
|
|
+ else:
|
|
|
+ combined_content = review_content
|
|
|
+
|
|
|
+ return await self.review("parameter_compliance_check", trace_id, reviewer_type, prompt_name, combined_content, review_references,
|
|
|
reference_source, review_location_label, state, stage_name, timeout=45)
|
|
|
|
|
|
async def outline_check(self, trace_id_idx: str, outline_content: Dict[str, Any],
|