Dify实战:Dify+Xinference 打造法律智能助手

分享一个Dify的实操案例,用 Dify+Xinference 打造法律智能助手,在法律领域,传统法律大模型要么功能单一、要么易产生 “幻觉”,而通用大模型又缺乏专业深度。今天分享一个零代码 / 低代码方案 —— 用 Dify+Xinference 快速搭建法律智能助手,既解决专业精准性问题,又能实现全流程法律服务,适合开发者、法律从业者快速落地。

一、为什么选择 Dify+Xinference 组合?

传统法律工具如 LawGPT 仅聚焦问答与法规检索,无法提供全流程解决方案;通用大模型如 DeepSeek 虽推理强,但法律专业度不足,易编造法条。而 Dify+Xinference 的组合恰好弥补这些短板:Dify 作为开源的 LLMOps 平台,支持零代码流程编排、知识库管理和前端部署,无需复杂编码就能搭建应用;Xinference 则专注大模型推理部署,能高效对接 Qwen、ChatGLM 等模型,还支持多模态推理,两者协同让法律 AI 助手的开发和部署更丝滑。此外,这套组合支持私有化部署,满足法律数据的合规安全需求,同时兼容 RAG 技术,能有效解决大模型 “幻觉” 问题。

二、法律智能助手能做什么?

基于这套组合搭建的法律智能助手,可覆盖全场景法律服务:一是智能问答,用户用自然语言提问(如 “婚外情离婚能多分财产吗”),助手结合法规和案例生成带引用来源的答案;二是案例分析,输入案件事实就能匹配相似案例,生成对比分析报告;三是多模态处理,支持 PDF、Word、图片等格式的法律文书解析,提取关键要素;四是罪名预测与法条推荐,针对刑事案件,能根据案情描述预测罪名、推荐相关法条,辅助法律决策。

三、部署准备

部署前需做好三项准备:环境上,准备 Python 3.9 以上版本,建议用 conda 创建独立环境,避免依赖冲突;工具安装,通过 pip 安装 Dify 和 Xinference,Xinference 需额外安装 transformers、vllm 等推理后端,Dify 可通过 Docker Compose 快速部署;数据准备,收集法律法规、案例文档(如 CAIL2018 数据集),整理为结构化格式,同时准备 Embedding 模型(如 bge-large-zh-v1.5)和 Rerank 模型(如 bge-reranker-large),提升检索精度。

四、实操

  • 准备工作:部署好dify和xinference,在xinference下载工作流中需要的模型,并且准备好知识库对应的文件,这里是8个领域的法律法规。

  • 注册管理员账户后,在模型供应商中添加 Xinference,填写服务器 URL 和模型信息,完成模型对接;

  • 构建知识库:在 Dify 中上传法律文档,系统自动解析并生成向量,存储到内置向量数据库;

  • 编排工作流:用 Dify 的 Chatflow 可视化编排功能,设计 “用户提问→检索知识库→模型推理→生成答案” 的流程;5. 测试发布:输入测试问题(如劳动仲裁相关咨询),验证回答准确性后,即可发布为 Web 应用或通过 API 对接多端。

部署 Xinference

1.布置环境

img

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
conda create --name xinference python=3.11
conda activate xinference 

pip install "xinference"
pip install "xinference[ggml]"
pip install "xinference[pytorch]"

#安装xinference所有包
pip install "xinference[all]"


pip install "xinference[transformers]" -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install "xinference[vllm]" -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install "xinference[transformers,vllm]" # 同时安装
#或者一次安装所有的推理后端引擎
pip install "xinference[all]"  -i https://pypi.tuna.tsinghua.edu.cn/simple

python -c "import torch; print(torch.cuda.is_available())"

wget https://git.886.be/https://github.com/abetlen/llama-cpp-python/releases/download/v0.2.88-cu122/llama_cpp_python-0.2.88-cp311-cp311-linux_x86_64.whl

通过启用dockerd的live-restore功能,安全地重启服务以更新配置:

优雅的重启docker而不影响容器的运行_docker 重启会不会影响正在运行的容器-CSDN博客

docker教程:

Docker常用命令大全(非常详细)零基础入门到精通,收藏这一篇就够了-CSDN博客

启动:

1
docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9997:9997 --gpus all xprobe/xinference:latest xinference-local -H 0.0.0.0 --log-level debug

关闭:

Docker stop

更新拉取最新版本:

docker pull xprobe/xinference:latest

img

安装

img

img

xinference成功安装,用户界面为http://localhost:9997/

版本:latest

部署地址:/disk2-7681G/users/tangangjue/chatlaw

docker:容器id:95fe87e9f418

启动命令:xinference-local –host 127.0.0.1 –p 9997

建议打开web命令:

XINFERENCE_HOME=/disk2-7681G/users/tangangjue/chatlaw/xinference xinference-local –host 0.0.0.0 –port 9997

input:

1
XINFERENCE_HOME=/disk2-7681G/users/tangangjue/chatlaw/xinference xinference-local --host 0.0.0.0 --port 9997

output:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
(xinference) user@ubuntu:/disk2-7681G/users/tangangjue/chatlaw$ XINFERENCE_HOME=/disk2-7681G/users/tangangjue/chatlaw/xinference xinference-local --host 0.0.0.0 --port 9997
INFO 04-17 15:04:36 __init__.py:190] Automatically detected platform cuda.
2025-04-17 15:04:39,471 xinference.core.supervisor 1006143 INFO     Xinference supervisor 0.0.0.0:14619 started
2025-04-17 15:04:39,491 xinference.core.worker 1006143 INFO     Starting metrics export server at 0.0.0.0:None
2025-04-17 15:04:39,499 xinference.core.worker 1006143 INFO     Checking metrics export server...
2025-04-17 15:04:41,148 xinference.core.worker 1006143 INFO     Metrics server is started at: http://0.0.0.0:33757
2025-04-17 15:04:41,148 xinference.core.worker 1006143 INFO     Purge cache directory: /disk2-7681G/users/tangangjue/chatlaw/xinference/cache
2025-04-17 15:04:41,152 xinference.core.worker 1006143 INFO     Connected to supervisor as a fresh worker
2025-04-17 15:04:41,168 xinference.core.worker 1006143 INFO     Xinference worker 0.0.0.0:14619 started
2025-04-17 15:04:46,154 xinference.api.restful_api 1005623 INFO     Starting Xinference at endpoint: http://0.0.0.0:9997

xinference提供了两种部署模型的方式:Web端启动,命令端启动。接下来使用Web端启动:

img

ChatGLM3服务启动后,可以在Dify中进行模型供应商注册。需要说明的是服务器URL中的IP地址,可通过ifconfig命令,在Ubuntu中查看。因为无论配置127.0.0.1,还是0.0.0.0均不通。

img

(4)命令端启动

下面是分别启动chat / embedding / rerank 三种模型的cmd命令。启动完了,会返回对应模型的UID:

1
2
3
4
5
6
#部署chatglm3
xinference launch --model-name chatglm3 --size-in-billions 6 --model-format pytorch --quantization 8-bit
#部署 bge-large-zh embedding
xinference launch --model-name bge-large-zh --model-type embedding
#部署 bge-reranker-large rerank
xinference launch --model-name bge-reranker-large --model-type rerank

测试模型是否已经部署到本地,以rerank模型为例可以执行下面这个脚本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from xinference.client import Client

#url 可以是local的端口 也可以是外接的端口
url = "http://172.19.0.1:6006"
print(url)

client = Client(url)
model_uid = client.launch_model(model_name="bge-reranker-base", model_type="rerank")
model = client.get_model(model_uid)

query = "A man is eating pasta."
corpus = [
    "A man is eating food.",
    "A man is eating a piece of bread.",
    "The girl is carrying a baby.",
    "A man is riding a horse.",
    "A woman is playing violin."
]
print(model.rerank(corpus, query))
  • 启动服务并加载法律相关模型,可通过 Web 端或命令行启动,支持 Qwen、ChatGLM 等模型,还能挂载本地模型目录避免重复下载;

配置 Dify

dify的部署在前面的博客中有所提到,不再赘述。

img

xinference注册模型

img

添加多模态变量:

img

使用xinference挂起qwen2.5-instruct

让我们来运行一个内置的 qwen2.5-instruct 模型。当你需要运行一个模型时,第一次运行是要从HuggingFace 下载模型参数,一般来说需要根据模型大小下载10到30分钟不等。当下载完成后,Xinference本地会有缓存的处理,以后再运行相同的模型不需要重新下载。

备注:

Xinference 也允许从其他模型托管平台下载模型。可以通过在拉起 Xinference 时指定环境变量,比如,如果想要从 ModelScope 中下载模型,可以使用如下命令:

1
XINFERENCE_MODEL_SRC=modelscope xinference-local --host 0.0.0.0 --port 9997

可以使用 --model-uid 或者 -u 参数指定模型的 UID,如果没有指定,Xinference 会随机生成一个 ID。默认的 ID 和模型名保持一致。``:

1
xinference launch --model-engine <inference_engine> -n qwen2.5-instruct -s 0_5 -f pytorch

除了启动模型,Xinference 提供了管理模型整个生命周期的能力。同样的,你可以使用命令行、cURL 以及 Python 代码来管理:

1
2
3
4
5
6
#可以列出所有 Xinference 支持的指定类型的模型:
xinference registrations -t LLM
#接下来的命令可以列出所有在运行的模型:
xinference list
#当你不需要某个正在运行的模型,可以通过以下的方式来停止它并释放资源:
xinference terminate --model-uid "qwen2.5-instruct"

xinference外挂目录

默认情况下,镜像中不包含任何模型文件,使用过程中会在容器内下载模型。如果需要使用已经下载好的模型,需要将宿主机的目录挂载到容器内。这种情况下,需要在运行容器时指定本地卷,并且为 Xinference 配置环境变量。

1
docker run -v </on/your/host>:</on/the/container> -e XINFERENCE_HOME=</on/the/container> -p 9998:9997 --gpus all xprobe/xinference:v<your_version> xinference-local -H 0.0.0.0

上述命令的原理是将主机上指定的目录挂载到容器中,并设置 XINFERENCE_HOME 环境变量指向容器内的该目录。这样,所有下载的模型文件将存储在您在主机上指定的目录中。您无需担心在 Docker 容器停止时丢失这些文件,下次运行容器时,您可以直接使用现有的模型,无需重复下载。

如果你在宿主机使用的默认路径下载的模型,由于 xinference cache 目录是用的软链的方式存储模型,需要将原文件所在的目录也挂载到容器内。例如你使用 huggingface 和 modelscope 作为模型仓库,那么需要将这两个对应的目录挂载到容器内,一般对应的 cache 目录分别在 <home_path>/.cache/huggingface 和 <home_path>/.cache/modelscope:

根据服务器实际启动的命令为:

1
2
3
4
5
6
7
docker run \
  -v /disk2-7681G/users/tangangjue/model_test:/root/model_test \
  -e XINFERENCE_HOME=/root/model_test \
  -p 9997:9997 \
  --gpus all \
  xprobe/xinference:latest \
  xinference-local -H 0.0.0.0 --log-level debug

将宿主机上的 /disk2-7681G/users/tangangjue/model_test 目录挂载到容器内的 /root/model_test 目录。

比如qwen3-14b

img

设置jinjia聊天模板

img

使用vllm引擎启动:

img

音频模型本地部署:

img

img

从modelscope下载

已经启动:

img

创建cahtflow,多轮记忆对话

img

五、核心功能

Dify 的核心功能为法律助手提供强大支撑:一是可视化流程编排,拖拽组件就能搭建复杂 Workflow,适配从咨询到文书生成的全流程;二是知识库管理,支持多格式文档上传、增量更新和智能检索,还能通过 RAG 技术关联相关法规和案例;三是多模型兼容,可灵活切换不同大模型,根据场景选择最优模型;四是多模态支持,集成 OCR、音频模型,能解析图片、音频中的法律信息;五是权限管理与日志审计,满足团队协作和合规需求,方便跟踪使用情况。

如果觉得有用,可以赞赏我一杯咖啡,感谢支持!
Goran 微信微信
0%