8000 GitHub - R-matsuyoi/RJ-agent: 该项目面向公安侦办需求,构建了一套智能体服务端,以解决案情文件繁杂、业务学习成本高及流程报告重复等痛点,基于langgraph+ragflow+ollama开发,并由fastapi封装服务,实现对海量案卷的快速检索与自动摘要,可在对话中动态调度后端业务接口查询数据,研判智能体则可自动生成案件时间轴、实体要素及涉法情节报告,提升侦办自动化水平。
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

该项目面向公安侦办需求,构建了一套智能体服务端,以解决案情文件繁杂、业务学习成本高及流程报告重复等痛点,基于langgraph+ragflow+ollama开发,并由fastapi封装服务,实现对海量案卷的快速检索与自动摘要,可在对话中动态调度后端业务接口查询数据,研判智能体则可自动生成案件时间轴、实体要素及涉法情节报告,提升侦办自动化水平。

Notifications You must be signed in to change notification settings

R-matsuyoi/RJ-agent

Repository files navigation

公安客户侦办需求驱动的智能体服务

项目概述

该项目用于解决公安行业在实际侦办中遇到部分切实问题,包含:

  • 案情文件太多太复杂? 通过建立知识库+RAG问答机器人帮你搜索总结案情内容
  • 传统业务学习成本高? 建立ReAct结构智能体,通过对话调度后端业务接口查询数据
  • 侦办流程固定报告多? 对应实现研判智能体提升自动化水平,自动输出案件的时间轴、实体要素和涉法情节

项目结构

  • AgentModule: 智能体模块
  • FileModule: 知识库/文件管理模块
  • ServerModule: 服务模块 封装后端服务接口的主逻辑
  • TestData: 测试数据默认存放文件夹
  • ToolModule: 工具模块 封装被智能体调用的工具
  • Utils: 实用函数模块 封装复用性高的代码块
  • config.ini: 配置文件 用于配置使用的服务地址及端口
  • main.py: 服务主函数入口

使用技术

  • langgraph: 用于构建智能体和工具模块,通过图结构构建健壮和有状态的多方代理应用程序的库,可以管理智能体之间的对话流程和状态,从而实现复杂的交互逻辑。
  • ragflow: ragflow是一个开源rag项目,通过对其二次开发和服务封装满足项目中知识库服务的需求,支持文件的文字识别、切片、向量嵌入等功能,为智能体检索指定知识库内的信息提供基础支持。
  • ollama:用于部署管理大语言模型、嵌入模型、rerank模型服务
  • fastapi:后端服务框架 依据需求封装对应服务接口

知识库服务

upload

功能

将文件传入指定知识库并进行文字识别、切片、向量嵌入,等待成功解析后返回消息提示。

可以在知识库管理平台查看解析效果。

参数

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"]
}'

upparse

功能

将文件传入指定知识库并进行文字识别、切片、向量嵌入,等待成功解析后返回解析的文字。

参数

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"]
}'

savefile

功能

文件上传至服务器,返回文件存储地址

参数

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'

upimport

功能

文件上传至多维平台并导入,等待成功导入后返回消息提示

参数

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"]
}'

智能助手服务

StreamAgent

功能

可以指定一个对话助理展开对话,助理会检索指定的知识库内的知识流式回答问题。

参数

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的账号是?\" }"

RetrieveAgent

功能

可以指定一个对话助理展开对话,助理会检索指定的知识库内的知识回答问题。

参数

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": "介绍劳动法"
}' 

RPAgent

功能

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有限公司"
}'

MDgent

功能

主业务平台调度智能体,询问该智能体,助理将调用主页平台的功能接口解决需求。

参数

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分析报告"
}'

Supervisor

功能

智能体主管,询问该智能体,助理将调用其它智能体解决问题。 已加入网络的智能体: MDgent RPAgent

参数

messages: str 传给智能体的消息

标准化

返回体标准

{
  "code": str,
  "messages": str,
  "data": {
    "answer": list[str],
    "reference": list[str]
  }
}

状态码标准

100

服务成功返回结果

101

savefile:文件成功上传

102

upload:全部文件上传并成功解析

103

upparse:解析成功返回

104

upimport:全部文件上传并导入

200

智能体成功返回

201

RetrieveAgent:消息成功返回

202

StreamAgent: 消息成功返回

210

MDAgent:调用工具data_search

211

MDAgent:调用工具graph_search

212

MDAgent:调用工具bill_report

220

RPAgent:调用工具enterprise_query

300

总管成功层级调用

400

服务请求失败

401

savefile:文件上传失败

402

upload:No file part!

403

upload:document_ids` is required or Can't stop parsing document with progress at 0 or 100

404

upparse:No file part!

405

upparse:document_ids` is required or Can't stop parsing document with progress at 0 or 100

406

upparse:解析不到文字,请检查文件

407

upimport:文件上传失败

421

RetrieveAgent:流程执行失败

422

MDAgent:智能体未能调用工具

423

RPAgent:智能体未能调用工具

智能研判

认证

-H 'Authorization: Bearer abcd1234'

BLMessage

功能

笔录解析功能的消息接收接口 消息存储在内存的动态列表中 后台将持续消费列表内容进行笔录解析

参数

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": [
        "银行卡号",
        "所属银行",
        "归属人",
        "角色"
      ]
    }
  ]
}'

BLAgentV2

功能

解析一个指定文件 提取其中的身份证 银行卡 电话 微信 支付宝 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": [
        "银行卡号",
        "所属银行",
        "归属人",
        "角色"
      ]
    }
  ]
}'

AQMessage

功能

案情解析功能的消息接口 消息存储在内存的动态列表中 后台将持续消费列表内容进行案情解析

参数

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": [
        "银行卡号",
        "所属银行",
        "归属人",
        "角色"
      ]
    }
  ]
}'

AQAgent

功能

解析一段指定案情文本 提取其中的身份证 银行卡 手机 微信 支付宝 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": [
        "银行卡号",
        "所属银行",
        "归属人",
        "角色"
      ]
    }
  ]
}'

TimelineMessage

功能

时间线解析功能的消息接口,消息存储在内存的动态列表中,后台将持续消费列表内容进行时间线解析。 可选传入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": ""
}'

TimeLineAgent

功能

解析一个指定文件或案情文本 提取其中的日期要素及该日期的内容总结 可选传入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": ""
}'

LegalMessage

功能

涉法情节分析功能的消息接口,消息存储在内存的动态列表中,后台将持续消费列表内容进行法律解析。 可选传入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": ""
}'

LegalAgent

功能

解析一个指定文件或案情文本 解析其中的文本段落中的描述是否有法律风险

参数

可以传入笔录文件名或案情文本 当都传入时 默认解析笔录文件

legalset_name: str 使用的法律知识库名

caseId: str 案件编号

blxxId: str 笔录信息ID

fileName: str 笔录文件名

url: str 笔录文件的MiniIO地址

content: str 案情文本

返回值answer

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]
  }
}

状态码标准

100

服务成功返回结果

101

save_file:文件成功上传

102

up_load:全部文件上传并成功解析 up_load_http:全部文件上传并成功解析

103

list_file:成功获取文件列表

104

search_elements:查询成功返回 search_value:查询成功返回 list_elements:查询成功返回

105

add_elements:成功添加并返回 del_elements:成功删除并返回 revise_elements:成功修改并返回

106

download_elements:成功导出 upload_elements:成功导入

107

position_elements:定位成功返回

108

bl_message:笔录解析成功接收消息 aq_message:案情解析成功接收消息 timeline_message:时间线解析成功接收消息 legal_message:法律风险解析成功接收消息

200

智能体成功返回

201

bl_converse:成功解析并返回 aq_converse:成功解析并返回 timeline_agent_converse:成功解析并返回 legal_agent_converse:成功解析并返回 bl_converse_2:成功解析并返回

400

服务请求失败

401

save_file:文件上传失败

402

up_load:No file part! up_load_http:No file part! bl_converse_2:No file part!

403

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

404

list_file:文件列表获取失败

405

search_elements:查询失败 search_value:查询失败 list_elements:查询失败

406

add_elements:添加失败 del_elements:删除失败 revise_elements:修改失败

407

download_elements:流程执行失败 upload_elements:流程执行失败

408

position_elements:流程执行失败

410

bl_converse:未解析到内容 aq_converse:未解析到内容 timeline_agent_converse:未解析到内容 legal_agent_converse:未解析到内容 bl_converse_2:未解析到内容

About

该项目面向公安侦办需求,构建了一套智能体服务端,以解决案情文件繁杂、业务学习成本高及流程报告重复等痛点,基于langgraph+ragflow+ollama开发,并由fastapi封装服务,实现对海量案卷的快速检索与自动摘要,可在对话中动态调度后端业务接口查询数据,研判智能体则可自动生成案件时间轴、实体要素及涉法情节报告,提升侦办自动化水平。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0