Commit 2708fc78 by ccran

feat: 更新安装调试审查;

parent 51eaa283
...@@ -12,24 +12,18 @@ use_docker = False ...@@ -12,24 +12,18 @@ use_docker = False
# model: str = "deepseek-v4-pro" # model: str = "deepseek-v4-pro"
# @dataclass @dataclass
# class LLMConfig: class LLMConfig:
# base_url: str = "http://172.21.107.80:9002/v1" base_url: str = "http://172.21.107.80:9002/v1"
# api_key: str = "none" api_key: str = "none"
# model: str = "Qwen2-72B-Instruct" model: str = "Qwen2-72B-Instruct"
# @dataclass # @dataclass
# class LLMConfig: # class LLMConfig:
# base_url: str = "http://172.21.107.80:9002/v1" # base_url: str = "http://192.168.252.71:9002/v1"
# api_key: str = "none" # api_key: str = "none"
# model: str = "Qwen2-72B-Instruct" # model: str = "Qwen2-72B-Instruct"
@dataclass
class LLMConfig:
base_url: str = "http://192.168.252.71:9002/v1"
api_key: str = "none"
model: str = "Qwen2-72B-Instruct"
# 最大分片数量 # 最大分片数量
min_single_chunk_size = 2000 min_single_chunk_size = 2000
max_single_chunk_size = 100000 max_single_chunk_size = 100000
...@@ -63,8 +57,8 @@ MAX_WORKERS = 10 ...@@ -63,8 +57,8 @@ MAX_WORKERS = 10
FILE_SUFFIX = "-审核批注" FILE_SUFFIX = "-审核批注"
## 关键参数** ## 关键参数**
use_non_fastgpt_llm = True use_non_fastgpt_llm = False
use_lufa = True use_lufa = False
use_jp_machine = True use_jp_machine = True
debug_mode = False debug_mode = False
......
...@@ -7,50 +7,35 @@ from core.tool import tool, tool_func ...@@ -7,50 +7,35 @@ from core.tool import tool, tool_func
@tool("rule_filter", "规则过滤") @tool("rule_filter", "规则过滤")
class RuleFilterTool: class RuleFilterTool:
@tool_func( def pre_run(self, payload: Dict[str, Any]) -> Dict[str, Any]:
{ return payload
"type": "object", def post_run(self, payload: Dict[str, Any]) -> Dict[str, Any]:
"properties": { return payload
"payload": {"type": "object"},
},
"required": ["payload"],
}
)
def run(self, payload: Dict[str, Any]) -> Dict[str, Any]:
raise NotImplementedError("Subclasses must implement run")
@tool("lufa_party_rule_filter_tool", "LUFA 当事人与支付主体规则过滤") @tool("lufa_party_rule_filter_tool", "LUFA 当事人与支付主体规则过滤")
class LufaPartyRuleFilterTool(RuleFilterTool): class LufaPartyRuleFilterTool(RuleFilterTool):
@tool_func( def pre_run(self, payload: Dict[str, Any]) -> Dict[str, Any]:
{ return payload
"type": "object",
"properties": { def post_run(self, payload: Dict[str, Any]) -> Dict[str, Any]:
"payload": {"type": "object"}, return payload
},
"required": ["payload"], @tool("jp_party_rule_filter_tool", "JP 通用审查过滤")
} class JpRuleFilterTool(RuleFilterTool):
) # 过滤通用审查
def run(self, payload: Dict[str, Any]) -> Dict[str, Any]: def pre_run(self, payload: Dict[str, Any]) -> Dict[str, Any]:
# rules = payload.get("rules") or [] rules = payload.get("rules") or []
# segment_idx = int(payload.get("segment_idx", 0)) filtered_rules: List[Dict[str, Any]] = [
# total_segments = int(payload.get("total_segments", 0)) r for r in rules if "通用审查" not in str(r.get("title", ""))
]
# if not rules or total_segments <= 0: payload["rules"] = filtered_rules
# payload["rules"] = rules
# return payload
# # 奇数分段时将中间段归入前半段
# first_half_count = (total_segments + 1) // 2
# if segment_idx < first_half_count:
# filtered_rules: List[Dict[str, Any]] = [
# r for r in rules if "支付主体审查" not in str(r.get("title", ""))
# ]
# else:
# filtered_rules = [
# r for r in rules if "当事人审查" not in str(r.get("title", ""))
# ]
# payload["rules"] = filtered_rules
return payload return payload
# 增加通用审查
def post_run(self, payload: Dict[str, Any]) -> Dict[str, Any]:
if 'routed_rule_titles' in payload:
routed_rule_titles = payload['routed_rule_titles']
routed_rule_titles.append('通用审查')
payload['routed_rule_titles'] = routed_rule_titles
return payload
\ No newline at end of file
No preview for this file type
...@@ -4,7 +4,7 @@ from spire.doc.common import * ...@@ -4,7 +4,7 @@ from spire.doc.common import *
# 创建一个 Document 类对象并加载一个 Word 文档 # 创建一个 Document 类对象并加载一个 Word 文档
doc = Document() doc = Document()
doc.LoadFromFile( doc.LoadFromFile(
"/home/ccran/lufa-contract/demo/湖南麓谷发展集团“主数据管理系统与合同管理系统开发”项目合同协议书-审核批注20260511_153215.docx" r"/Users/chenran/Desktop/test.doc"
) )
# 移除第二个注释 # 移除第二个注释
...@@ -15,6 +15,6 @@ doc.Comments.Clear() ...@@ -15,6 +15,6 @@ doc.Comments.Clear()
# 保存文档 # 保存文档
doc.SaveToFile( doc.SaveToFile(
"/home/ccran/lufa-contract/demo/湖南麓谷发展集团“主数据管理系统与合同管理系统开发”项目合同协议书-审核批注20260511_153215-无批注.docx" r"/Users/chenran/Desktop/test_no_comments.doc"
) )
doc.Close() doc.Close()
...@@ -26,7 +26,7 @@ from core.config import ( ...@@ -26,7 +26,7 @@ from core.config import (
from core.tools.segment_summary import SegmentSummaryTool from core.tools.segment_summary import SegmentSummaryTool
from core.tools.segment_review import SegmentReviewTool from core.tools.segment_review import SegmentReviewTool
from core.tools.segment_rule_router import SegmentRuleRouterTool from core.tools.segment_rule_router import SegmentRuleRouterTool
from core.tools.rule_filter import LufaPartyRuleFilterTool from core.tools.rule_filter import LufaPartyRuleFilterTool,JpRuleFilterTool,RuleFilterTool
from core.tools.rules_retrieve_reference import RulesRetrieveReferenceTool from core.tools.rules_retrieve_reference import RulesRetrieveReferenceTool
from core.tools.reflect_retry import ReflectRetryTool from core.tools.reflect_retry import ReflectRetryTool
from core.tools.segment_merger import SegmentMergerTool from core.tools.segment_merger import SegmentMergerTool
...@@ -43,7 +43,12 @@ TMP_DIR.mkdir(parents=True, exist_ok=True) ...@@ -43,7 +43,12 @@ TMP_DIR.mkdir(parents=True, exist_ok=True)
summary_tool = SegmentSummaryTool() summary_tool = SegmentSummaryTool()
review_tool = SegmentReviewTool() review_tool = SegmentReviewTool()
rule_router_tool = SegmentRuleRouterTool() rule_router_tool = SegmentRuleRouterTool()
lufa_party_rule_filter_tool = LufaPartyRuleFilterTool() rule_filter_tool = RuleFilterTool()
# if use_lufa:
# rule_filter_tool = LufaPartyRuleFilterTool()
# else:
# rule_filter_tool = JpRuleFilterTool()
rules_reference_tool = RulesRetrieveReferenceTool() rules_reference_tool = RulesRetrieveReferenceTool()
reflect_tool = ReflectRetryTool() reflect_tool = ReflectRetryTool()
merger_tool = SegmentMergerTool() merger_tool = SegmentMergerTool()
...@@ -431,20 +436,19 @@ def route_segment_rules(payload: SegmentReviewRequest) -> SegmentRuleRouterRespo ...@@ -431,20 +436,19 @@ def route_segment_rules(payload: SegmentReviewRequest) -> SegmentRuleRouterRespo
ruleset_id = payload.ruleset_id or rules_reference_tool.default_ruleset_id ruleset_id = payload.ruleset_id or rules_reference_tool.default_ruleset_id
rules = rules_reference_tool.run(ruleset_id=ruleset_id).get("rules", []) rules = rules_reference_tool.run(ruleset_id=ruleset_id).get("rules", [])
if use_lufa and rules: try:
try: total_segments = len(doc_obj.get_chunk_id_list() or [])
total_segments = len(doc_obj.get_chunk_id_list() or []) except Exception:
except Exception: total_segments = 0
total_segments = 0 # filter rules
filtered_payload = rule_filter_tool.pre_run(
filtered_payload = lufa_party_rule_filter_tool.run( {
{
"rules": rules, "rules": rules,
"segment_idx": segment_idx, "segment_idx": segment_idx,
"total_segments": total_segments, "total_segments": total_segments,
} }
) )
rules = filtered_payload.get("rules", rules) rules = filtered_payload.get("rules", rules)
result = rule_router_tool.run( result = rule_router_tool.run(
segment_id=segment_idx, segment_id=segment_idx,
...@@ -454,13 +458,19 @@ def route_segment_rules(payload: SegmentReviewRequest) -> SegmentRuleRouterRespo ...@@ -454,13 +458,19 @@ def route_segment_rules(payload: SegmentReviewRequest) -> SegmentRuleRouterRespo
context_memories=payload.context_memories, context_memories=payload.context_memories,
route_by=payload.route_by, route_by=payload.route_by,
) )
routed_rule_titles=result.get("routed_rule_titles", [])
routed_rule_titles = rule_filter_tool.post_run(
{
"routed_rule_titles": routed_rule_titles
}
).get("routed_rule_titles", routed_rule_titles)
return SegmentRuleRouterResponse( return SegmentRuleRouterResponse(
conversation_id=payload.conversation_id, conversation_id=payload.conversation_id,
segment_id=payload.segment_id, segment_id=payload.segment_id,
ruleset_id=ruleset_id, ruleset_id=ruleset_id,
route_by=result.get("route_by", payload.route_by), route_by=result.get("route_by", payload.route_by),
routed_rule_titles=result.get("routed_rule_titles", []), routed_rule_titles=routed_rule_titles,
routed_summary_names=result.get("routed_summary_names", []), routed_summary_names=result.get("routed_summary_names", []),
routed_rules=result.get("routed_rules", []), routed_rules=result.get("routed_rules", []),
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment