2026-09-15 · 原文发布日
律所利益冲突初步核查的Slack机器人
面向律所收案的n8n流程:监听Slack频道新消息,用频道加时间戳去重后,OpenAI代理从消息中抽取潜在客户与对方当事人,再调用基于Google Sheets数据的MCP工具端点(客户、事项、相关实体表)做冲突检索,把“可能存在冲突/未发现冲突”的初步结论回复到原消息线程,并把请求与结果记入审计表。
原文要点
原模板为Intuz发布的免费n8n工作流(n8n.io/workflows/19608):Slack触发器监听频道新消息,过滤机器人或空消息,用频道ID加消息时间戳拼成event_key,在Google Sheets的ConflictAuditLog表查重;OpenAI代理从消息抽取潜在客户与对方当事人,调用路径为/conflict-tools的MCP端点检索Sheets中的Clients、Matters、Parties、RelatedEntities四张表;按结构化结果分支,在原Slack线程回复“可能存在冲突”或“在已检索记录中未发现潜在冲突”,并把请求与状态写入审计表。模板需自行配置Slack、Google Sheets、OpenAI凭据并激活MCP服务端工作流。
这次做成什么
在自托管n8n中搭一个律所收案冲突初查机器人:律师在Slack频道发一条新案描述,机器人自动查客户/事项/关联方表并在原线程回初步结论,同时留审计记录。本站方案用合成数据练习,正式使用前的结果必须由律师人工复核。
准备什么
- 可自托管或云端的n8n实例,且能启用MCP触发器服务端工作流
- 一个Slack工作区及可创建应用/Bot的管理员权限,目标频道可邀请Bot
- 一个Google账号及Sheets读写权限,能建五张指定工作表
- OpenAI API密钥,聊天模型可用,调用费用由OpenAI另计
具体怎么做
建五张Google Sheets表并填入列头
新建一个电子表格,建五个工作表:ConflictAuditLog列头为event_key、created_at、channel_id、message_ts、request_text、status;Clients列头name;Matters列头matter_id、client_name、opposing_party;Parties列头name、role;RelatedEntities列头entity_name、related_to。先填入合成练习数据(见材料CSV)。
激活MCP冲突检索服务端工作流
按模板说明导入或自建MCP服务端工作流,触发路径为/conflict-tools,工具读取上一步四张表并按名称模糊匹配。激活后复制该工作流的MCP端点URL,稍后在代理的MCP Client节点填入这个自己的地址,不要用占位地址。
配置Slack触发与去重
在n8n连接Slack凭据,把Bot邀请进目标频道;触发器选该频道的新消息事件。加一个过滤步骤丢弃机器人消息和空文本,再用表达式拼接event_key(例如{{$json.channel}}_{{$json.ts}}),在写入前用Sheets查找节点在ConflictAuditLog按event_key检索,查到即停止,避免同一条消息被重复处理。
配置OpenAI代理与分支回复
连接OpenAI凭据,把消息文本交给代理节点,系统提示词用下方材料。代理输出结构化JSON后加一个解析和IF分支:potential_conflict为true时在原线程回复潜在客户、对方当事人及匹配到的记录名,为false时回复未发现潜在冲突。两个分支都用Slack回复节点并带上原消息的thread_ts。
写审计日志并做端到端测试
在回复之后追加Sheets行:event_key、当前时间、channel_id、message_ts、原始request_text、status(potential_conflict或clear)。在频道发送测试消息(见示例输入),确认线程回复出现且审计表新增一行。
可直接复制的材料
四张合成练习数据表(CSV)
本站编写的合成数据,导入对应工作表练习用,正式使用时替换为真实客户与事项数据
# Clients.csv
name
恒信贸易有限公司
蓝海物流集团
张启明(个人)
# Matters.csv
matter_id,client_name,opposing_party
M-2024-011,恒信贸易有限公司,北方建材股份公司
M-2025-003,蓝海物流集团,顺达货运有限公司
# Parties.csv
name,role
北方建材股份公司,对方当事人
顺达货运有限公司,对方当事人
# RelatedEntities.csv
entity_name,related_to
北方建材(上海)分公司,北方建材股份公司
顺达冷链科技有限公司,顺达货运有限公司冲突抽取与检索代理系统提示词
本站独立编写,粘贴到代理节点的系统提示处,模型自行选择
你是律所收案冲突初查助手。从用户消息中抽取:prospective_client(潜在客户姓名或机构名)和opposing_party(对方当事人)。然后调用冲突检索工具,分别用这两个名称在客户、事项、当事人、关联实体记录中查找匹配或明显关联(如母子公司、更名)。只输出JSON:{"prospective_client":"","opposing_party":"","potential_conflict":true或false,"matched_records":["记录名1"],"reason":"一句话说明"}。找不到任何匹配时potential_conflict必须为false。不要编造记录中不存在的名称。你的结论只是初查提示,不替代律师判断。Slack线程回复文案模板
{{}}占位符替换为代理输出的字段,文案可按所内规范调整
潜在冲突分支:⚠️ 初步冲突提示:潜在客户【{{prospective_client}}】/对方【{{opposing_party}}】与记录【{{matched_records}}】可能存在关联,请律师人工复核后再收案。\n无冲突分支:✅ 在已检索的客户、事项及关联方记录中未发现【{{prospective_client}}】/【{{opposing_party}}】的潜在冲突(仅为初查结果)。输入与输出示例
本站虚构演示,非原作者运行结果,实际措辞取决于所用模型
输入
频道里发:新客户咨询——绿洲地产想委托我们起诉北方建材(上海)分公司拖欠工程款约380万元,请查一下有没有冲突。对应输出
代理输出{"prospective_client":"绿洲地产","opposing_party":"北方建材(上海)分公司","potential_conflict":true,"matched_records":["北方建材(上海)分公司","北方建材股份公司","M-2024-011"],"reason":"对方系现有客户恒信贸易有限公司一案对方当事人的关联实体"};线程回复“⚠️ 初步冲突提示:潜在客户【绿洲地产】/对方【北方建材(上海)分公司】与记录【北方建材(上海)分公司、北方建材股份公司】可能存在关联,请律师人工复核后再收案”;审计表新增一行status=potential_conflict。做完检查这些
- 同一条Slack消息重复触发时,ConflictAuditLog已有相同event_key,流程不再二次回复和记日志
- 发送包含关联实体名的测试消息后,原消息线程内出现回复而不是新开频道消息
- ConflictAuditLog每处理一条消息新增一行,且event_key、channel_id、message_ts、status四列均非空
- 代理返回的matched_records中的名称都能在四张数据表中找到,无凭空编造
容易卡住的地方
- MCP端点必须指向自己激活的/conflict-tools工作流地址,填占位URL会让代理检索全部失败
- 未先把Bot邀请进目标频道时,触发器收不到事件且线程回复会报权限错误
- event_key必须同时含频道ID和时间戳,只用时间戳会在多频道部署时误判重复
- 机器人输出仅为初查提示,名称近似匹配可能漏报或误报,收案决定须由律师作出
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Triage legal conflict checks from Slack with GPT-4o-mini and Google Sheets
- 原作者
- Intuz
- 原始发布日期
- 2026-09-15T07:32:16.276Z
- 来源
- https://n8n.io/workflows/19608