Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
ccran
/
lufa-contract
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
2708fc78
authored
Jul 07, 2026
by
ccran
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 更新安装调试审查;
parent
51eaa283
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
62 additions
and
72 deletions
+62
-72
core/config.py
+8
-14
core/tools/rule_filter.py
+28
-42
data/rules.xlsx
+0
-0
demo/spire_doc_remove_comments.py
+2
-2
main.py
+24
-14
No files found.
core/config.py
View file @
2708fc78
...
...
@@ -12,24 +12,18 @@ use_docker = False
# model: str = "deepseek-v4-pro"
#
@dataclass
#
class LLMConfig:
#
base_url: str = "http://172.21.107.80:9002/v1"
#
api_key: str = "none"
#
model: str = "Qwen2-72B-Instruct"
@dataclass
class
LLMConfig
:
base_url
:
str
=
"http://172.21.107.80:9002/v1"
api_key
:
str
=
"none"
model
:
str
=
"Qwen2-72B-Instruct"
# @dataclass
# class LLMConfig:
# base_url: str = "http://1
72.21.107.80
:9002/v1"
# base_url: str = "http://1
92.168.252.71
:9002/v1"
# api_key: str = "none"
# 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
max_single_chunk_size
=
100000
...
...
@@ -63,8 +57,8 @@ MAX_WORKERS = 10
FILE_SUFFIX
=
"-审核批注"
## 关键参数**
use_non_fastgpt_llm
=
Tru
e
use_lufa
=
Tru
e
use_non_fastgpt_llm
=
Fals
e
use_lufa
=
Fals
e
use_jp_machine
=
True
debug_mode
=
False
...
...
core/tools/rule_filter.py
View file @
2708fc78
...
...
@@ -7,50 +7,35 @@ from core.tool import tool, tool_func
@tool
(
"rule_filter"
,
"规则过滤"
)
class
RuleFilterTool
:
@tool_func
(
{
"type"
:
"object"
,
"properties"
:
{
"payload"
:
{
"type"
:
"object"
},
},
"required"
:
[
"payload"
],
}
)
def
run
(
self
,
payload
:
Dict
[
str
,
Any
])
->
Dict
[
str
,
Any
]:
raise
NotImplementedError
(
"Subclasses must implement run"
)
def
pre_run
(
self
,
payload
:
Dict
[
str
,
Any
])
->
Dict
[
str
,
Any
]:
return
payload
def
post_run
(
self
,
payload
:
Dict
[
str
,
Any
])
->
Dict
[
str
,
Any
]:
return
payload
@tool
(
"lufa_party_rule_filter_tool"
,
"LUFA 当事人与支付主体规则过滤"
)
class
LufaPartyRuleFilterTool
(
RuleFilterTool
):
@tool_func
(
{
"type"
:
"object"
,
"properties"
:
{
"payload"
:
{
"type"
:
"object"
},
},
"required"
:
[
"payload"
],
}
)
def
run
(
self
,
payload
:
Dict
[
str
,
Any
])
->
Dict
[
str
,
Any
]:
# rules = payload.get("rules") or []
# segment_idx = int(payload.get("segment_idx", 0))
# total_segments = int(payload.get("total_segments", 0))
# if not rules or total_segments <= 0:
# 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
def
pre_run
(
self
,
payload
:
Dict
[
str
,
Any
])
->
Dict
[
str
,
Any
]:
return
payload
def
post_run
(
self
,
payload
:
Dict
[
str
,
Any
])
->
Dict
[
str
,
Any
]:
return
payload
@tool
(
"jp_party_rule_filter_tool"
,
"JP 通用审查过滤"
)
class
JpRuleFilterTool
(
RuleFilterTool
):
# 过滤通用审查
def
pre_run
(
self
,
payload
:
Dict
[
str
,
Any
])
->
Dict
[
str
,
Any
]:
rules
=
payload
.
get
(
"rules"
)
or
[]
filtered_rules
:
List
[
Dict
[
str
,
Any
]]
=
[
r
for
r
in
rules
if
"通用审查"
not
in
str
(
r
.
get
(
"title"
,
""
))
]
payload
[
"rules"
]
=
filtered_rules
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
data/rules.xlsx
View file @
2708fc78
No preview for this file type
demo/spire_doc_remove_comments.py
View file @
2708fc78
...
...
@@ -4,7 +4,7 @@ from spire.doc.common import *
# 创建一个 Document 类对象并加载一个 Word 文档
doc
=
Document
()
doc
.
LoadFromFile
(
"/home/ccran/lufa-contract/demo/湖南麓谷发展集团“主数据管理系统与合同管理系统开发”项目合同协议书-审核批注20260511_153215.docx
"
r"/Users/chenran/Desktop/test.doc
"
)
# 移除第二个注释
...
...
@@ -15,6 +15,6 @@ doc.Comments.Clear()
# 保存文档
doc
.
SaveToFile
(
"/home/ccran/lufa-contract/demo/湖南麓谷发展集团“主数据管理系统与合同管理系统开发”项目合同协议书-审核批注20260511_153215-无批注.docx
"
r"/Users/chenran/Desktop/test_no_comments.doc
"
)
doc
.
Close
()
main.py
View file @
2708fc78
...
...
@@ -26,7 +26,7 @@ from core.config import (
from
core.tools.segment_summary
import
SegmentSummaryTool
from
core.tools.segment_review
import
SegmentReviewTool
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.reflect_retry
import
ReflectRetryTool
from
core.tools.segment_merger
import
SegmentMergerTool
...
...
@@ -43,7 +43,12 @@ TMP_DIR.mkdir(parents=True, exist_ok=True)
summary_tool
=
SegmentSummaryTool
()
review_tool
=
SegmentReviewTool
()
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
()
reflect_tool
=
ReflectRetryTool
()
merger_tool
=
SegmentMergerTool
()
...
...
@@ -431,20 +436,19 @@ def route_segment_rules(payload: SegmentReviewRequest) -> SegmentRuleRouterRespo
ruleset_id
=
payload
.
ruleset_id
or
rules_reference_tool
.
default_ruleset_id
rules
=
rules_reference_tool
.
run
(
ruleset_id
=
ruleset_id
)
.
get
(
"rules"
,
[])
if
use_lufa
and
rules
:
try
:
total_segments
=
len
(
doc_obj
.
get_chunk_id_list
()
or
[])
except
Exception
:
total_segments
=
0
filtered_payload
=
lufa_party_rule_filter_tool
.
run
(
{
try
:
total_segments
=
len
(
doc_obj
.
get_chunk_id_list
()
or
[])
except
Exception
:
total_segments
=
0
# filter rules
filtered_payload
=
rule_filter_tool
.
pre_run
(
{
"rules"
:
rules
,
"segment_idx"
:
segment_idx
,
"total_segments"
:
total_segments
,
}
)
rules
=
filtered_payload
.
get
(
"rules"
,
rules
)
}
)
rules
=
filtered_payload
.
get
(
"rules"
,
rules
)
result
=
rule_router_tool
.
run
(
segment_id
=
segment_idx
,
...
...
@@ -454,13 +458,19 @@ def route_segment_rules(payload: SegmentReviewRequest) -> SegmentRuleRouterRespo
context_memories
=
payload
.
context_memories
,
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
(
conversation_id
=
payload
.
conversation_id
,
segment_id
=
payload
.
segment_id
,
ruleset_id
=
ruleset_id
,
route_by
=
result
.
get
(
"route_by"
,
payload
.
route_by
),
routed_rule_titles
=
r
esult
.
get
(
"routed_rule_titles"
,
[])
,
routed_rule_titles
=
r
outed_rule_titles
,
routed_summary_names
=
result
.
get
(
"routed_summary_names"
,
[]),
routed_rules
=
result
.
get
(
"routed_rules"
,
[]),
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment