该项目用于解决公安行业在实际侦办中遇到部分切实问题,包含:
- 案情文件太多太复杂? 通过建立知识库+RAG问答机器人帮你搜索总结案情内容
- 传统业务学习成本高? 建立ReAct结构智能体,通过对话调度后端业务接口查询数据
- 侦办流程固定报告多? 对应实现研判智能体提升自动化水平,自动输出案件的时间轴、实体要素和涉法情节
- AgentModule: 智能体模块
- FileModule: 知识库/文件管理模块
- ServerModule: 服务模块 封装后端服务接口的主逻辑
- TestData: 测试数据默认存放文件夹
- ToolModule: 工具模块 封装被智能体调用的工具
- Utils: 实用函数模块 封装复用性高的代码块
- config.ini: 配置文件 用于配置使用的服务地址及端口
- main.py: 服务主函数入口
- langgraph: 用于构建智能体和工具模块,通过图结构构建健壮和有状态的多方代理应用程序的库,可以管理智能体之间的对话流程和状态,从而实现复杂的交互逻辑。
- ragflow: ragflow是一个开源rag项目,通过对其二次开发和服务封装满足项目中知识库服务的需求,支持文件的文字识别、切片、向量嵌入等功能,为智能体检索指定知识库内的信息提供基础支持。
- ollama:用于部署管理大语言模型、嵌入模型、rerank模型服务
- fastapi:后端服务框架 依据需求封装对应服务接口
将文件传入指定知识库并进行文字识别、切片、向量嵌入,等待成功解析后返回消息提示。
可以在知识库管理平台查看解析效果。
dataset_name
: str
知识库名称(案件编号)
files
: list[str]
文件地址列表(属于该案件的文件)
curl -X 'POST' \
'http://127.0.0.1:8000/api/KBServer/upload' \
-H 'Content-Type: application/json' \
-d '{
"dataset_name": "string",
"files": ["/data/agent/TestData/1.jpg"]
}'
将文件传入指定知识库并进行文字识别、切片、向量嵌入,等待成功解析后返回解析的文字。
dataset_name
: str
知识库名称(案件编号)
files
: list[str]
文件地址列表(属于该案件的文件)
curl -X 'POST' \
'http://127.0.0.1:8000/api/KBServer/upparse' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"dataset_name": "mrd_test",
"files": ["/data/agent/TestData/chn222798.pdf"]
}'
文件上传至服务器,返回文件存储地址
file
: string($binary)
二进制文件流
curl -X 'POST' \
'http://127.0.0.1:8000/api/KBServer/savefile' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@tmp.txt;type=text/plain'
文件上传至多维平台并导入,等待成功导入后返回消息提示
caseId
: string
案件号
files
: list[str]
文件地址列表
curl -X 'POST' \
'http://127.0.0.1:8000/api/KBServer/upimport' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"caseId": "",
"files": ["/data/agent/TestData/xx.xlsx"]
}'
可以指定一个对话助理展开对话,助理会检索指定的知识库内的知识流式回答问题。
agent_name
: str
选择对话助理的名称
dataset_name
: str
选择挂载知识库的名称
chat_name
: str
为你的会话起名 默认: 临时会话
question
: str
你的问题
curl -N -X POST ^
http://127.0.0.1:8000/api/AgentServer/StreamAgent ^
-H "Accept-Charset: utf-8" ^
-H "accept: application/json" ^
-H "Content-Type: application/json" ^
-d "{ \"agent_name\": \"检索助理\", \"dataset_name\": \"mrd_test\", \"chat_name\": \"临时会话\", \"question\": \"xx的账号是?\" }"
可以指定一个对话助理展开对话,助理会检索指定的知识库内的知识回答问题。
agent_name
: str
选择对话助理的名称
dataset_name
: str
选择挂载知识库的名称
chat_name
: str
为你的会话起名 默认: 临时会话
question
: str
你的问题
curl -X 'POST' \
'http://127.0.0.1:8000/api/AgentServer/RetrieveAgent' \
-H 'Accept-Charset: utf-8' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"agent_name": "检索助理",
"dataset_name": "",
"chat_name": "临时会话",
"question": "介绍劳动法"
}'
RPA工具智能体,询问该智能体一个公司,助理将调用工具爬取该公司的股权穿透图。
messages
: str
传给智能体的消息
curl -X 'POST' \
'http://127.0.0.1:8000/api/AgentServer/RPAgent' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"messages": "帮我查询xx有限公司"
}'
主业务平台调度智能体,询问该智能体,助理将调用主页平台的功能接口解决需求。
messages
: str
传给智能体的消息
该询问会触发调用表单查询流程
curl -X 'POST' \
'http://127.0.0.1:8000/api/AgentServer/MDAgent' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"messages": "`查询xx案件中00888888880875684012、628888888800888074向xx在2021年6月到8月的金额大于10000的前20条消费类支出记录`"
}'
该询问会触发调用图谱生成流程
curl -X 'POST' \
'http://127.0.0.1:8000/api/AgentServer/MDAgent' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"messages": "`查询xx案件中xx的消费关系图`"
}'
该询问会触发调用报告生成流程
curl -X 'POST' \
'http://127.0.0.1:8000/api/AgentServer/MDAgent' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"messages": "生成该案件中xx和xx的账单分析报告,命名为龙湖0429分析报告"
}'
智能体主管,询问该智能体,助理将调用其它智能体解决问题。 已加入网络的智能体: MDgent RPAgent
messages
: str
传给智能体的消息
{
"code": str,
"messages": str,
"data": {
"answer": list[str],
"reference": list[str]
}
}
服务成功返回结果
savefile:文件成功上传
upload:全部文件上传并成功解析
upparse:解析成功返回
upimport:全部文件上传并导入
智能体成功返回
RetrieveAgent:消息成功返回
StreamAgent: 消息成功返回
MDAgent:调用工具data_search
MDAgent:调用工具graph_search
MDAgent:调用工具bill_report
RPAgent:调用工具enterprise_query
总管成功层级调用
服务请求失败
savefile:文件上传失败
upload:No file part!
upload:document_ids` is required or Can't stop parsing document with progress at 0 or 100
upparse:No file part!
upparse:document_ids` is required or Can't stop parsing document with progress at 0 or 100
upparse:解析不到文字,请检查文件
upimport:文件上传失败
RetrieveAgent:流程执行失败
MDAgent:智能体未能调用工具
RPAgent:智能体未能调用工具
-H 'Authorization: Bearer abcd1234'
笔录解析功能的消息接收接口 消息存储在内存的动态列表中 后台将持续消费列表内容进行笔录解析
blxxId
: int
笔录消息ID
caseId
: str
案件编号
fileName
: str
文件名
url
: str
文件的miniIO地址
elements
: list[dict[str, str | list[str]]]
需要解析的要素列表
curl -X 'POST' \
'http://127.0.0.1:8000/api/ZNYPServer/BLMessage' \
-H 'accept: application/json' \
-H 'Authorization: Bearer abcd1234' \
-H 'Content-Type: application/json' \
-d '{
"blxxId": 123456789,
"caseId": "A412568643655666666",
"fileName": "20250212153721.pdf",
"url": "http://127.0.0.1:9002/20250212153721.pdf",
"elements": [
{
"name": "身份证",
"attrs": [
"身份证号",
"归属人",
"角色"
]
},
{
"name": "银行卡",
"attrs": [
"银行卡号",
"所属银行",
"归属人",
"角色"
]
}
]
}'
解析一个指定文件 提取其中的身份证 银行卡 电话 微信 支付宝 APP 网站等信息 可以根据指定要素提取。
caseId
: str
案件编号
fileName
: str
文件名
url
: str
文件的miniIO地址
elements
: list[dict[str, str | list[str]]]
需要解析的要素列表
curl -X 'POST' \
'http://127.0.0.1:8000/api/ZNYPServer/BLAgentV2' \
-H 'accept: application/json' \
-H 'Authorization: Bearer abcd1234' \
-H 'Content-Type: application/json' \
-d '{
"caseId": "A412568643655666666",
"fileName": "20250212153721.pdf",
"url": "http://127.0.0.1:9002/20250212153721.pdf",
"elements": [
{
"name": "身份证",
"attrs": [
"身份证号",
"归属人",
"角色"
]
},
{
"name": "银行卡",
"attrs": [
"银行卡号",
"所属银行",
"归属人",
"角色"
]
}
]
}'
案情解析功能的消息接口 消息存储在内存的动态列表中 后台将持续消费列表内容进行案情解析
caseId
: str
案件编号
content
: str
案情文本
elements
: list[dict[str, str | list[str]]]
需要解析的要素列表
curl -X 'POST' \
'http://127.0.0.1:8000/api/ZNYPServer/AQMessage' \
-H 'accept: application/json' \
-H 'Authorization: Bearer abcd1234' \
-H 'Content-Type: application/json' \
-d '{
"caseId": "A412568643655666666",
"content": "\n2023年08月30日08时47分王XX泗洲派出所接委反诈预客时,但班民暨发现其手机内有疑似诈骑APP,居通知其家愿到现场劝解,说服基报惑,现由泗洲所多理,2023年8月10号第一次转账5000元账号:141XXXXXXXXXXXX16张户行别:辽三省农村信用社联台 户名:沈阳XXXXXX限公司2023年8月11号第二次转账5000元账号:14XXXXXXXXXXXXX6账户行别:辽宁省农村信用社联合户名:沈阳XXXX限公司2023年8月15号第三次转账20000\n",
"elements": [
{
"name": "身份证",
"attrs": [
"身份证号",
"归属人",
"角色"
]
},
{
"name": "银行卡",
"attrs": [
"银行卡号",
"所属银行",
"归属人",
"角色"
]
}
]
}'
解析一段指定案情文本 提取其中的身份证 银行卡 手机 微信 支付宝 APP 网站 地址等 可以根据指定要素提取。
dataset_name
: str
知识库名称(案件编号)
file_name
: str
文件名称
content
: str
案情文本
curl -X 'POST' \
'http://127.0.0.1:8000/api/ZNYPServer/AQAgent' \
-H 'accept: application/json' \
-H 'Authorization: Bearer abcd1234' \
-H 'Content-Type: application/json' \
-d '{
"caseId": "A412568643655666666",
"content": "\n2023年08月30日08时47分王XX泗洲派出所接委反诈预客时,但班民暨发现其手机内有疑似诈骑APP,居通知其家愿到现场劝解,说服基报惑,现由泗洲所多理,2023年8月10号第一次转账5000元账号:141XXXXXXXXXXXX16张户行别:辽三省农村信用社联台 户名:沈阳XXXXXX限公司2023年8月11号第二次转账5000元账号:14XXXXXXXXXXXXX6账户行别:辽宁省农村信用社联合户名:沈阳XXXX限公司2023年8月15号第三次转账20000\n",
"elements": [
{
"name": "身份证",
"attrs": [
"身份证号",
"归属人",
"角色"
]
},
{
"name": "银行卡",
"attrs": [
"银行卡号",
"所属银行",
"归属人",
"角色"
]
}
]
}'
时间线解析功能的消息接口,消息存储在内存的动态列表中,后台将持续消费列表内容进行时间线解析。 可选传入blxxId+fileName+url解析笔录或content解析案情文本,优先解析笔录
caseId
: str
案件编号
blxxId
: str
笔录信息ID
fileName
: str
笔录文件名
url
: str
笔录文件的MiniIO地址
content
: str
案情文本
curl -X 'POST' \
'http://127.0.0.1:8000/api/ZNYPServer/TimelineMessage' \
-H 'accept: application/json' \
-H 'Authorization: Bearer abcd1234' \
-H 'Content-Type: application/json' \
-d '{
"blxxId": 123456789,
"caseId": "A412568643655666666",
"fileName": "20250212153721.pdf",
"url": "http://127.0.0.1:9002/20250212153721.pdf",
"content": ""
}'
解析一个指定文件或案情文本 提取其中的日期要素及该日期的内容总结 可选传入blxxId+fileName+url解析笔录或content解析案情文本,优先解析笔录
caseId
: str
案件编号
blxxId
: str
笔录信息ID
fileName
: str
笔录文件名
url
: str
笔录文件的MiniIO地址
content
: str
案情文本
curl -X 'POST' \
'http://127.0.0.1:8000/api/ZNYPServer/TimelineAgent' \
-H 'accept: application/json' \
-H 'Authorization: Bearer abcd1234' \
-H 'Content-Type: application/json' \
-d '{
"blxxId": 123456789,
"caseId": "A412568643655666666",
"fileName": "20250212153721.pdf",
"url": "http://127.0.0.1:9002/20250212153721.pdf",
"content": ""
}'
涉法情节分析功能的消息接口,消息存储在内存的动态列表中,后台将持续消费列表内容进行法律解析。 可选传入blxxId+fileName+url解析笔录或content解析案情文本,优先解析笔录
legalset_name
: str
使用的法律知识库名
caseId
: str
案件编号
blxxId
: str
笔录信息ID
fileName
: str
笔录文件名
url
: str
笔录文件的MiniIO地址
content
: str
案情文本
curl -X 'POST' \
'http://127.0.0.1:8000/api/ZNYPServer/LegalMessage' \
-H 'accept: application/json' \
-H 'Authorization: Bearer abcd1234' \
-H 'Content-Type: application/json' \
-d '{
"legalset_name": "法律文件库",
"blxxId": 123456789,
"caseId": "A412568643655666666",
"fileName": "20250212153721.pdf",
"url": "http://127.0.0.1:9002/20250212153721.pdf",
"content": ""
}'
解析一个指定文件或案情文本 解析其中的文本段落中的描述是否有法律风险
可以传入笔录文件名或案情文本 当都传入时 默认解析笔录文件
legalset_name
: str
使用的法律知识库名
caseId
: str
案件编号
blxxId
: str
笔录信息ID
fileName
: str
笔录文件名
url
: str
笔录文件的MiniIO地址
content
: str
案情文本
answer
: list[str]
json列表,json内容如下
{
"content" : "文本段落的原文",
"positions" : [[页码,左上角x坐标,左上角y坐标,右下角x坐标,右下角y坐标],],
"summary" : "涉及的法律风险综述",
"legal_contents" : [{"filename": "法律文件名","content": "法律条文"},]
}
curl -X 'POST' \
'http://127.0.0.1:8000/api/ZNYPServer/LegalAgent' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"legalset_name": "法律文件库",
"blxxId": 123456789,
"caseId": "A412568643655666666",
"fileName": "20250212153721.pdf",
"url": "http://127.0.0.1:9002/20250212153721.pdf",
"content": ""
}'
{
"code": str,
"messages": str,
"data": {
"answer": list[str],
"reference": list[str]
}
}
服务成功返回结果
save_file:文件成功上传
up_load:全部文件上传并成功解析 up_load_http:全部文件上传并成功解析
list_file:成功获取文件列表
search_elements:查询成功返回 search_value:查询成功返回 list_elements:查询成功返回
add_elements:成功添加并返回 del_elements:成功删除并返回 revise_elements:成功修改并返回
download_elements:成功导出 upload_elements:成功导入
position_elements:定位成功返回
bl_message:笔录解析成功接收消息 aq_message:案情解析成功接收消息 timeline_message:时间线解析成功接收消息 legal_message:法律风险解析成功接收消息
智能体成功返回
bl_converse:成功解析并返回 aq_converse:成功解析并返回 timeline_agent_converse:成功解析并返回 legal_agent_converse:成功解析并返回 bl_converse_2:成功解析并返回
服务请求失败
save_file:文件上传失败
up_load:No file part! up_load_http:No file part! bl_converse_2:No file part!
up_load:document_ids is required or Can't stop parsing document with progress at 0 or 100 up_load_http:document_ids
is required or Can't stop parsing document with progress at 0 or 100
bl_converse_2:document_ids` is required or Can't stop parsing document with progress at 0 or 100
list_file:文件列表获取失败
search_elements:查询失败 search_value:查询失败 list_elements:查询失败
add_elements:添加失败 del_elements:删除失败 revise_elements:修改失败
download_elements:流程执行失败 upload_elements:流程执行失败
position_elements:流程执行失败
bl_converse:未解析到内容 aq_converse:未解析到内容 timeline_agent_converse:未解析到内容 legal_agent_converse:未解析到内容 bl_converse_2:未解析到内容