知索RAG2.3.1发布,让企业数据实现从“存储”到“好用”的智能跃迁

知索RAG: 为一粒云全新的以搜索为核心的文档智能化产品,目前在官网上介绍的有限,宣传资料,功能文档都为线下沟通,需要的客户和渠道伙伴可以联系公司人员索取。

版本定位:针对企业「数据检索难、知识复用低」的痛点,通过精准索引、语义检索、智能问答自定义知识库,将海量文件转化为“可对话的知识资产”,助力组织实现数据价值最大化。

一、知索RAG :从“能搜”到“搜准”的索引升级

作为AI知识库的底层引擎,知索RAG重点提升数据采集-索引-检索的精准度:

  • OCR准确率95%ocr 引擎更新到2.0,支持cpu快速解析,双核配置约1.2S一张A4图片,支持扫描版PDF、模糊图片的文字提取;
  • 图片向量搜索基于清华大学开源的CLIP模型实现“以图搜图”“以文字搜图”,比如用“项目logo”找设计稿,或用“柱状图”查图片;
  • 全链路扫描日志NAS/云盘扫描时,实时展示“索引进度”“错误详情”,确保索引覆盖率100%。
  • 发布8个AI辅助阅读与数据提取功能,并解决超长文本处理问题分别为: 元数据,摘要,标签,实体,内容问答,自定义抽取数据,文档分类,关联推荐

【图1:8个AI功能】

二、AI知识库:从“存知识”到“用知识”的价值释放

基于知索RAG,AI知识库2.0实现「文件-知识-问答」闭环:

  • 一键生成知识库导入云盘文件自动完成向量解析,无需手动分类,节省80%知识录入时间;
  • 单文件RAG,与知识库问答针对特定文件提问(如“Q3报告的客户复购率是多少?”,“我给xxx公司的云盘报价是多少?”),AI直接提取答案,避免“翻文件找数据”;
  • 知识库自定义角色可设置“销售视角”“技术视角”等角色,让AI用对应语境回答问题,更贴合业务需求。用于发布外链给第三方人员查询使用。

三、场景化价值:激活企业数据资产

一粒云知索rag系统本质上是帮助企业从“数据存储型”向“知识驱动型”转型的核心工具。系统的入口是搜索,但是核心是企业用户自身的文档资源,文档资源无缝接入到云盘系统和NAS存储,方便用户更好更快的使用AI来复盘自身的知识价值,企业组织文化沉淀,企业自身的软实力。最终目的是为了提升企业的竞争力。

知索RAG2.3.1的升级,不是“搜索功能优化”,而是企业数据价值的重塑。通过精准索引、智能问答,让海量文件从“硬盘垃圾”变成“创造价值的知识”,助力组织智能化升级。

如需体验智能知识管理,可预约或者留言产品演示。

一粒云5.1.4发布|打通企业办公系统壁垒,重构高效协作底座

版本定位:针对企业「多系统割裂、协作低效」的核心痛点,聚焦系统集成、安全强化、效率闭环三大方向,将致远/蓝凌/以及之前集成过的泛微OA、金蝶云之家、企业微信消息等工具整合为统一办公中枢,助力组织降低协作成本。

一、全链路系统集成:从“跨平台切换”到“统一入口”

一粒云5.1.4本次更新实现与致远OA、蓝凌OA、金蝶云之家、企业微信消息、布谷智慧校园的深度对接,覆盖企业更多核心办公场景:

  • 单点登录(SSO):用户无需重复输密码,点击云盘即可直达OA审批页,降低密码管理成本;
  • 消息与文件互通:OA待办提醒、文件修改通知实时推送至云盘,云盘文件可直接嵌入OA页面预览,实现云盘文件在OA中的穿透,避免“下载-发送-再打开”的繁琐;
  • 组织架构同步:蓝凌/金蝶/泛微/用友/竹云/致远/通达/钉钉/企微的组织架构自动同步至云盘,权限管理精准度提升,杜绝“越权访问”风险。
  • 审批流程打通:云盘审批已经实现对接 蓝凌/金蝶 2个品牌的审批功能,在云盘发起,在OA上审批,审批结果返回到云盘的整合。

本次更新集成列表:

  1. 致远OA单点登录
  2. 致远OA消息推送互通
  3. 致远OA文件穿透到云盘
  4. 蓝凌OA单点登录
  5. 蓝凌OA组织架构集成对接
  6. 蓝凌OA审批流集成
  7. 金蝶云之家单点登录
  8. 金蝶云之家架构集成对接
  9. 金蝶云之家OA审批流集成
  10. 布谷智慧校园单点登录集成
  11. 布谷智慧校园组织架构集成对接
  12. 企业微信应用消息互通


二、AI与安全兼容双加固:智能守护企业数据资产

针对企业最关心的「AI能力提升」「数据安全」与「多设备适配」问题,版本做了关键升级:

  • 无缝集成新产品知索RAG,AI搜索更加高效与准确
  • 新增AI辅助阅读,新增8大AI模块(集成知索rag,详情见rag系统介绍)
  • 自定义动态水印:支持“用户ID+时间+部门”的组合水印,可针对文件、文件夹自定义设置,覆盖内部分享、外部传输场景,有效防止文件截屏泄密;
  • 全平台兼容:完美适配鸿蒙Next、新版iOS及H5端,解决此前文件下载卡顿、预览变形的问题;
  • bugfix:
  • 修复全盘搜索的权限问题
  • 修复将ipgurad集成后文件清除逻辑文件索引状态展示
  • 修复文件名后缀允许和不允许修改状态bug
  • 修复外链到期后消息推送到企业微信bug
  • 修复AD域绑定部门被删除后无法同步等问题
  • 修复了文件本地编辑锁住后依然能使用wps、onlyoffice 等web在线编辑的问题
  • 修复部分NAS文件导入到云盘重命名与不能预览等问题
  • 等等

三、效率工具闭环:优化文件生命周期管理

新增功能聚焦「文件管理最后一公里」:

  • 文件有效期:可为文件快捷设置30天60天90天/永久的有效期,到期自动推送企业微信提醒;
  • 内部分享直连:分享文件时自动生成带跳转链接的企业微信消息,同事点开即可访问,省去“发长串路径”的沟通成本。
  • 本次更新清单:
  • 新增文件有效期,到期消息可推送到企业微信
  • 新增内部分享消息推送到企业微信,并附带跳转链接
  • 新增第三方调用云盘接口采用统一的apikey认证
  • 新增onlyoffice9版本的jwt认证
  • 新增全文搜索页面打包下载增加下载进度和文件压缩进度展示
  • 等等

一粒云5.1.4不是功能堆砌,而是以“用户协作场景”为核心的系统重构。通过打通工具、强化安全、优化效率,帮助企业从“多系统作战”转向“统一平台运营”,真正实现降本增效。

欢迎广大客户、渠道商安装和体验,我们为客户准备了一键安装包和小规模永久使用账号可以快速体验或长期使用。

VLLM对比Ollama,6卡A5000 部署VLLM + Dify​​的详细教程


​一、硬件与基础环境准备​

​1. 服务器配置要求​

  • ​GPU​​:6×NVIDIA A5000(24GB显存/卡,共144GB显存)
  • ​内存​​:≥64GB RAM
  • ​存储​​:≥500GB SSD(推荐NVMe)
  • ​系统​​:Ubuntu 22.04 LTS / Debian 12

​2. 环境初始化​

# 安装基础工具
sudo apt update && sudo apt install -y docker.io nvidia-container-toolkit
# 配置Docker使用NVIDIA GPU
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

​二、VLLM多卡部署(6卡优化)​

​1. 安装vLLM​

# 创建虚拟环境
conda create -n vllm python=3.10 -y && conda activate vllm
# 安装vLLM(推荐0.5.4+)
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple

​2. 启动6卡推理服务​

vllm serve --model /path/to/model \  
   --tensor-parallel-size 6 \          # 并行数=GPU数量
   --gpu-memory-utilization 0.85 \     # 显存利用率阈值(6卡建议0.8~0.9)
   --max-num-seqs 64 \                 # 高并发优化
   --enforce-eager \                   # 避免多卡兼容问题
   --port 8000 \                       # 服务端口
   --api-key "your-token"              # 访问令牌(增强安全性)

​三、Dify部署与对接VLLM​

​1. 部署Dify服务​

# 拉取Dify代码
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 修改配置(关键步骤)
cp .env.example .env
nano .env  # 修改以下参数:
# 模型端点指向VLLM服务
MODEL_PROVIDER=vllm
VLLM_API_BASE=http://localhost:8000/v1  # VLLM的OpenAI兼容API地址
VLLM_MODEL_NAME=your-model-name         # 与vLLM启动时的模型名一致

​2. 启动Dify​

docker compose up -d  # 自动构建容器

​四、外部应用API调用方法​

​1. 通过Dify调用(业务层)​

  • ​Dify API地址​​:http://<服务器IP>:80/v1(默认端口)
  • ​认证​​:Header中添加 Authorization: Bearer {DIFY_API_KEY}
  • ​请求示例​​(生成文本):
import requests
url = "http://<服务器IP>/v1/completion"
data = {
  "inputs": "你好,介绍一下vLLM",
  "response_mode": "blocking"
}
headers = {"Authorization": "Bearer dify-api-key"}
response = requests.post(url, json=data, headers=headers)

​2. 直接调用VLLM(高性能场景)​

# 使用OpenAI兼容API(Python示例)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="your-token")
response = client.chat.completions.create(
  model="your-model-name",
  messages=[{"role": "user", "content": "解释量子力学"}]
)

​五、VLLM对比Ollama的核心优势​

​维度​​VLLM​​Ollama​
​多卡支持​✅ 原生6卡张量并行(--tensor-parallel-size=6❌ 仅支持单卡,多卡需手动切换
​吞吐量​⭐ 连续批处理技术,6卡并发提升5-10倍⚠️ 单请求处理,并发能力弱
​生产就绪​✅ 工业级部署(API密钥、监控、扩缩容)❌ 定位开发测试,无企业级特性
​显存管理​✅ PagedAttention动态分配,支持百亿模型⚠️ 全模型加载,易OOM
​安全性​✅ 内置API密钥认证❌ 默认无认证,需Nginx反向代理

💡 ​​关键结论​​:
VLLM是​​生产级AI服务​​的首选,尤其适合高并发、低延迟场景(如API服务);
Ollama更适合​​本地快速原型验证​​,但在多卡利用率和安全性上存在明显短板。


​六、常见问题排查​

  1. ​多卡启动失败​​: export VLLM_WORKER_MULTIPROC_METHOD=spawn # 解决多进程卡死
  2. ​显存不足​​:
    • 降低--gpu-memory-utilization至0.7
    • 添加--swap-space 16 使用主机内存扩展
  3. ​Dify连接VLLM失败​​:
    • 检查.envVLLM_API_BASE是否含/v1路径
    • 确保vLLM启动参数含--api-key且与Dify配置一致

部署完成后,可通过 nvidia-smi 监控GPU利用率,正常运行时6卡负载应均衡(±5%差异)。

英文参考原文:Based on the information available, here’s a comparison of vLLM and Ollama, two popular frameworks for running large language models (LLMs) locally: 

vLLM 

  • Focus: High-throughput, low-latency LLM inference and serving, particularly suited for production environments.
  • Key Features:
    • PagedAttention: A memory management technique that optimizes GPU memory usage for faster inference speeds, especially with long sequences and large models.
    • Continuous Batching: Processes incoming requests dynamically to maximize hardware utilization.
    • High Performance: Consistently delivers superior throughput and lower latency, particularly for concurrent requests.
    • Scalability: Designed for scalability, including support for tensor parallelism and pipeline parallelism for distributed inference across multiple GPUs or nodes.
    • OpenAI-compatible API: Simplifies integration with applications.
  • Hardware Requirements: Optimized for high-end, CUDA-enabled NVIDIA GPUs, although it technically supports CPU inference (less optimized).
  • Ease of Use: Offers more control and optimization options but has a steeper learning curve, requiring more technical knowledge for setup. 

Ollama 

  • Focus: User-friendly, local deployment and management of LLMs, prioritizing simplicity and accessibility.
  • Key Features:
    • Ease of Use: Offers a streamlined workflow for downloading, running, and managing models with a simple command-line interface (CLI) and an OpenAI-compatible API.
    • Broad Hardware Compatibility: Works well on both GPUs and CPUs, making it accessible to users with consumer-grade hardware.
    • Local Deployment with Privacy: Ensures data privacy and control by keeping data processing within your local environment.
    • Adaptable: Supports various model types and offers token streaming for faster responses.
    • Growing Performance: While potentially slower than vLLM on high-end GPUs, recent updates have significantly improved its performance.
  • Hardware Requirements: Designed to work reasonably well even on consumer-grade hardware.
  • Ease of Use: Prioritizes simplicity, making it easy to install and run models with just a few commands. 

In Summary:

  • Choose vLLM when: You need maximum performance and scalability in production environments, especially when utilizing high-end GPUs for high-throughput workloads.
  • Choose Ollama when: You prioritize ease of use, broad hardware compatibility (including CPU-only setups), and local data privacy for development, prototyping, or simpler projects. 

Hybrid Approach:

It’s worth considering a hybrid approach where you use Ollama for development and prototyping and then deploy with vLLM in production for optimal performance. 

一粒云图书馆智慧化知识管理解决方案

一、背景与目标

针对图书馆海量文献管理效率低、多模态资料检索困难、跨机构资源共享难等痛点,本方案构建「企业网盘+AI知识引擎」一体化平台,实现:

  1. 文献资源全生命周期数字化管理
  2. RAG驱动的智能知识服务
  3. 安全可控的多级权限体系
  4. 跨机构协同研究支持

二、核心痛点分析

图书馆业务痛点传统解决方案局限本方案创新点
海量古籍/论文语义检索困难关键词匹配准确率<60%RAG引擎理解上下文语义,准确率提升至92%
非结构化数据管理混乱仅支持基础文件夹分类智能元数据抽取+动态知识图谱
跨校区资源访问延迟高VPN传输效率低下边缘计算节点+智能缓存加速
科研协作版本管理缺失手动备份易出错自动版本树+差异对比功能
古籍数字化加工成本高OCR识别准确率不足85%多模态RAG增强识别准确率至98%

三、解决方案架构

1. 核心功能矩阵

2. RAG搜索特色功能

2.1 智能语义检索
• 支持自然语言提问:”20世纪中国近代史研究的高被引文献有哪些?”
• 上下文关联推荐:自动关联相关研究机构、学者著作
• 跨模态检索:通过上传手稿图片定位相似文献

2.2 学术知识图谱
• 自动生成学科关系网络:

{
  "核心实体": ["敦煌文献"],
  "关联维度": [
    {"类型":"作者", "关联度":0.92},
    {"类型":"年代", "关联度":0.88},
    {"类型":"研究机构", "关联度":0.79}
  ]
}

2.3 智能摘要中心
• 自动提取文献核心观点生成三分钟速读报告
• 支持学术论文的「研究空白检测」功能
• 提供跨世纪研究趋势可视化分析

四、特色应用场景

场景1:古籍数字化管理

• RAG增强OCR:自动识别异体字并关联《说文解字》数据库
• 智能编目:通过语义分析自动生成《四库全书总目》式分类
• 版本溯源:比对不同年代拓片差异并生成校勘报告

一粒云的优势在于,文档云系统自身携带分布式存储,同时有一粒云自研的OCR识别引擎,对古文集可以采用标注方法训练提高识别的准确率,从而

场景2:科研支持服务

• 智能预审:上传论文初稿自动匹配相似研究并提示查重风险
• 经费测算:根据引用文献自动生成文献采购预算建议
• 学术社交:基于研究方向的智能人脉推荐系统

五、技术实施路径

  1. 数据迁移阶段(6周)
    • 异构数据迁移工具:支持PDF/A、TIFF、手稿图片等12种格式
    • 智能清洗流水线:自动修复破损文献图像
  2. 系统部署架构
  1. 安全合规体系
    • 学术版权保护:水印追踪+动态脱敏技术
    • 双因子访问控制:支持研究团队V3证书认证
    • 审计追踪:完整操作日志保留10年以上

六、预期收益

  1. 文献检索效率提升300%
  2. 跨机构协作成本降低65%
  3. 古籍数字化加工周期缩短40%
  4. 年度文献采购预算节约23%

七、服务支持

  1. 知识工程服务包:包含学科本体构建、领域词表训练
  2. 智能运维系统:实时监测存储健康度与知识图谱完整性
  3. 定制开发支持:开放300+ API接口对接图书馆现有系统

方案亮点:将一粒云文档协同网盘的文件管理能力与RAG的知识理解能力深度融合,构建图书馆专属的「数字大脑」,实现从资源存储到知识服务的价值跃迁。建议优先实施古籍数字化与学术协作场景,6个月内可形成差异化竞争优势。

RAG搜索不准确,4个优化来解决

很多人发现自己建立的AI知识库非常不准确,那么用一下几个方法,优化优化看看效果吧!


1. 混合检索策略(稀疏 + 稠密检索)

功能选型:

  • 稀疏检索:选用 BM25 算法,如 Elasticsearch 内置的 BM25(成熟、易用、对词频敏感)。
  • 稠密检索:选用基于预训练嵌入模型的检索,如使用 Hugging Face 的 “all-MiniLM-L6-v2” 模型,通过 Faiss 或 Pinecone 进行向量化检索。

实现方式:

  • 数据预处理:对文档进行文本清洗和合理切分(如滑动窗口或递归分块),确保关键信息完整保留。
  • 独立检索模块
    • 使用 Elasticsearch 实现 BM25 检索。
    • 使用 Faiss(或 Pinecone 等向量数据库)对文档进行向量化,并实现稠密检索。
  • 混合策略:将两种检索得到的候选结果按权重组合,例如: 综合得分 = α * BM25 得分 + (1 – α) * 嵌入相似度得分
    通过调整 α 来平衡两者,确保召回结果既能捕捉到关键词匹配,也能理解语义相似性。

参考实现示例(Python + Elasticsearch + Faiss):


2. 重排序模块(多阶段检索)

功能选型:

  • 候选文档精排:采用交叉编码器(Cross-Encoder)模型,如 “cross-encoder/ms-marco-MiniLM-L-6-v2”,可以更好地捕捉 query 与候选文档之间的交互信息。

实现方式:

  • 第一阶段:使用混合检索策略快速召回一批候选文档(例如 top 100)。
  • 第二阶段:将 query 与每个候选文档拼接,输入交叉编码器模型,获得精确的相关性得分,然后重新排序,选择最优的 top K(例如 top 5)供生成模型使用。

参考实现示例(基于 Hugging Face Transformers):


3. 查询重写与上下文压缩

功能选型:

  • 查询重写:利用大语言模型(例如 GPT-3.5 / GPT-4 或开源模型如 ChatGLM)将用户原始查询改写为更明确、更细化的版本,从而提高检索器的召回率。
  • 上下文压缩:使用 LLM 或专门的摘要模型(如 T5、PEGASUS)对召回的文档进行压缩,只保留与查询最相关的部分,减少无关信息干扰生成过程。

实现方式:

  • 查询重写模块:构建一个函数,将原始查询发送给 LLM API,返回改写后的查询文本。
  • 上下文压缩模块:对每个候选文档,调用摘要模型生成“精炼版”上下文,然后再将这些压缩后的内容传给生成模块。

参考实现示例:


4. 用户反馈与持续优化

功能选型:

  • 在线反馈机制:集成反馈按钮或评分系统,让用户标注回答的准确性。
  • 持续优化:定期使用收集的反馈数据进行模型微调(可以采用自监督或知识蒸馏方法),进一步提高嵌入模型与检索器的表现。

实现方式:

  • 在系统前端为每个回答添加“反馈”按钮,记录用户评分和意见;
  • 后台记录反馈日志,构建反馈数据集;
  • 利用反馈数据(正反馈和负反馈样本)进行再训练或使用增量学习策略来调整检索模块(例如对负样本进行hard negative mining)或微调交叉编码器的排序能力。

参考实现思路:


总结

通过以上功能模块的选型与实现,可以构建一个具有以下能力的优化系统:

  • 混合检索 能同时利用 BM25 和嵌入模型的优势;
  • 重排序模块 通过交叉编码器精细调整候选文档顺序;
  • 查询重写与上下文压缩 优化检索输入和结果内容;
  • 用户反馈 帮助不断迭代和优化模型效果。

使用一粒云RAG,更好用更精准的RAG系统

RAG与传统搜索的本质区别


RAG(Retrieval-Augmented Generation)搜索 的本质区别在于,它结合了 信息检索(retrieval)生成(generation) 的能力,而传统的搜索方法通常只依赖于信息检索部分,主要进行匹配和排序。RAG 模型通过集成生成模型来提升搜索结果的丰富性和上下文适应能力,提供更为自然和智能的回答或结果。

1. 传统搜索(例如 Elasticsearch)

在传统的搜索系统中,信息检索的过程通常是通过 匹配查询词 和存储的文档(或向量)来找到最相关的结果。这类系统的核心特性是:

  • 基于关键词匹配:通过布尔查询、分词、匹配等技术来查找最匹配的文档。
  • 信息定位:用户的查询可以直接返回一个或多个精确匹配的文档或数据,这些文档是完全独立的,返回的内容多是片段或整篇文档。

举个例子:

  • 用户搜索“Java编程基础”,ES 系统会返回包含这个关键词的所有文档,用户可以浏览这些文档来获取答案。

2. RAG 搜索(Retrieval-Augmented Generation)

RAG 的本质区别在于它结合了 检索生成 这两部分:

  • 检索部分:类似传统搜索系统,首先从文档库或数据库中通过关键词检索到相关信息,确定出最相关的文档或信息片段。
  • 生成部分:在检索结果的基础上,RAG 使用 生成模型(如 GPT、T5 等) 来“生成”或“增强”最终的回答或结果。它不仅仅返回原始的检索结果,还能够 将检索到的信息整合,并生成一个更符合用户需求的输出。

举个例子:

  • 用户搜索“Java编程基础”,传统的搜索系统会返回相关的文档。而 RAG 系统 会检索相关的文档片段,然后利用生成模型生成一个更加定制化的回答,比如直接给出“Java编程基础包括变量、数据类型、控制结构等内容…”等具体信息。

3. 两者的对比

特点传统搜索RAG 搜索
基本原理关键词匹配,基于文档检索结合检索和生成,通过检索补充生成信息
返回内容直接返回相关的文档或片段在检索到的文档或片段基础上生成自然语言回答
结果类型片段、段落或完整文档生成的文本、回答、摘要等
准确度依赖于关键词和文档匹配的精确度依赖于检索的相关性以及生成模型的理解能力
适用场景文档查找、信息匹配复杂问题回答、聊天机器人、知识增强
理解与生成不具备生成能力,仅提供检索结果通过生成模型理解检索内容并提供自然语言生成的回答

4. RAG 的工作流程

RAG 搜索通常分为以下几个步骤:

  1. 检索:首先,检索系统(如 Elasticsearch)基于用户的查询,从文档库或数据库中提取相关的文档或信息片段。
  2. 信息聚合:将检索到的文档或片段作为背景知识输入到生成模型中。
  3. 生成:生成模型(如 GPT-3、T5、BART 等)基于背景知识和查询生成一个符合用户需求的答案或内容,可能还会补充上下文信息。
  4. 返回结果:将生成的答案返回给用户,通常会更加自然、流畅并且上下文相关。

5. RAG 与传统搜索的本质区别

  • 生成能力:RAG 结合了信息检索和生成模型,不仅提供检索到的信息片段,还能根据这些片段生成完整且自然的答案,而传统搜索系统仅返回检索到的原始文档或片段。
  • 上下文理解:RAG 在生成过程中能够理解检索到的上下文,并整合相关信息来生成更加精准和连贯的回答。传统的搜索系统并不具备这种能力,它仅仅依赖匹配结果。
  • 灵活性与适应性:RAG 能够适应复杂的查询,尤其是那些需要结合多个文档或上下文信息的查询。传统搜索则更多是简单的匹配和查找。

6. RAG 在实际应用中的优势

  • 复杂查询处理:RAG 特别适合处理复杂或开放式问题,例如当用户询问一个多方面的问题时,RAG 能够通过检索多个相关文档,并生成一个综合的答案。
  • 提升生成质量:生成模型可以结合检索到的信息,从而生成更符合用户需求的回答,避免生成模型单纯依赖预训练知识时可能产生的错误或不准确回答。
  • 提高智能问答系统效果:RAG 非常适合于问答系统,尤其是在需要外部知识库或文档库的场景下,生成部分能够通过集成检索结果提供更加智能的解答。

总结

  • 传统搜索:关注 检索匹配,返回最相关的文档或片段。
  • RAG 搜索:不仅执行检索,还通过 生成模型 结合检索到的信息生成一个智能的、上下文相关的答案,适应更复杂和多样化的查询需求。

构建企业数据安全传输的金盾-一粒云KWS4.5

摆渡与中转的需求不断提高

随着信息化程度的不断加深,企业面临的数据交换安全问题日益突出。传统的文件传输方式,无法在确保高效的同时满足企业对数据安全的严格需求。而一粒云科技的KWS隔离网文件安全交换系统,以强大的技术实力与丰富的功能设计,成为数据传输安全领域的标杆。

最近一粒云科技重磅推出的KWS隔离网文件安全交换系统4.5版本,以全新功能与优化升级,助力企业构建更安全、更高效的文件交换网络。


1️⃣全新功能,强势升级,即是摆渡又能中转

作为全新发布的4.5版本,KWS系统不仅继承了以往的强大功能,还针对实际使用场景进行了多项突破性优化,为企业提供更可靠的文件交换解决方案。

  1. 智能内容检测2.0
    4.5版本对内容检测模块进行了全面升级,引入更先进的AI算法,可识别更复杂的数据内容,并自动完成安全分级,支持文本、图片及多格式文件的深度扫描。
  2. 目标网段智能适配
    新版本实现了目标网段自动适配功能,系统能根据文件内容、传输场景及目标区域,动态推荐匹配网段,提升效率同时避免人工错误。
  3. 多流程并行审批
    为满足复杂审批需求,4.5版本新增了多流程并行审批功能,各部门负责人可同时处理审批任务,缩短审批周期,提升整体流转效率。
  4. 操作日志智能分析
    新版本新增日志智能分析功能,可自动识别异常行为,快速生成审计报告,为企业提供安全威胁的预警。
  5. 隔离交换与文件中转同时支持
    系统既可以实现多节点之间的隔离网文件安全交换,还能实现单个节点,上百个区域的实现更灵活、更精准的网络管控。

2️⃣案例:KWS 4.5版本助力大型制造企业实现安全升级

某大型制造企业拥有数十个分厂与研发中心,单个地区又有10多个网段,合计所有网段超过50个,文件传输需求复杂且安全等级要求极高。对市面上个种产品测试后发现没有能满足要求的,或者成本极度昂贵。

使用KWS 4.5版本后,通过多区域多网段分级功能,加上智能内容检测和目标网段适配功能,该企业将文件分类流转效率提升了十倍以上,传输错误率下降至0.2%。结合多流程审批与动态内外网隔离功能,该企业的跨网段文件交换在保证绝对安全的同时,也实现了极高的效率。

多区域、多网段隔离与交换:
A、B、C、D四个地理区域,各包含多个部门和实验室。
通过核心的KWS隔离网文件安全交换系统实现不同区域之间的文件传输。

3️⃣系统优势,独一无二

  1. 全新算法,效率倍增
    4.5版本采用更高效的核心算法,文件传输速度提升20%以上,同时确保传输过程的绝对安全。
  2. 智能化操作,简化流程
    从智能内容检测到日志分析,自动化程度更高,减少了人工参与,让数据传输既安全又轻松。
  3. 动态适配,贴合需求
    目标网段的动态适配功能帮助企业更灵活地分配传输资源,最大限度减少出错概率。
  4. 前瞻性设计,未来可扩展
    4.5版本设计充分考虑企业未来的扩展需求,支持模块化功能升级,保障投资的长远价值。

4️⃣价值所在:为什么选择KWS 4.5版本?

  1. 顶级安全:以4.5版本的新功能,为企业构建牢不可破的数据安全屏障。
  2. 更高效率:优化的流程和智能工具,让文件传输更加高效省时。
  3. 灵活拓展:模块化设计和动态控制,适配各种企业场景需求。
  4. 成本节约:通过智能化、自动化功能减少人工成本,提升投入产出比。

即刻升级,享受前沿技术带来的红利!

一粒云科技的KWS隔离网文件安全交换系统4.5版本,结合多项创新技术与优化设计,帮助企业轻松应对数据安全与高效传输的双重挑战。无论是科研机构、大型制造企业,还是金融、医疗行业,这款系统都将成为您不可或缺的核心助力。

快来联系一粒云科技,抢先体验4.5版本的革命性升级,让您的企业站在数据安全与高效管理的最前沿!

Python 语言检测

Python 中有多种优秀的语言识别工具,以下是一些常用的工具和库:

1. langdetect

简介: langdetect 是一个非常流行的语言检测库,基于 Google 的 language-detection 项目。它可以检测多种语言,并且对于短文本也有不错的识别效果。

安装:

pip install langdetect

使用示例:

from langdetect import detect

text = “Bonjour tout le monde”

language = detect(text)

print(language)  # 输出: ‘fr’ (法语)

2. langid

简介: langid 是另一个非常强大的语言识别库,支持97种语言。它的特点是完全自包含且无需外部依赖。

安装:

pip install langid

使用示例:

import langid

text = “Hola, ¿cómo estás?”

language, _ = langid.classify(text)

print(language)  # 输出: ‘es’ (西班牙语)

3. polyglot

简介: polyglot 是一个支持多语言处理的库,它不仅提供语言识别功能,还支持情感分析、实体识别等多种自然语言处理任务。

安装:

pip install polyglot

使用示例:

from polyglot.detect import Detector

text = “Ceci est un exemple de texte en français”

detector = Detector(text)

language = detector.language.code

print(language)  # 输出: ‘fr’ (法语)

4. TextBlob

简介: TextBlob 是一个简洁易用的自然语言处理工具包,虽然它主要用于情感分析、词性标注等任务,但也支持语言识别。

安装:

pip install textblob

使用示例:

from textblob import TextBlob

text = “Hello, how are you?”

blob = TextBlob(text)

print(blob.detect_language())  # 输出: ‘en’ (英语)

5. FastText (by Facebook)

简介: FastText 是一个由 Facebook 提供的开源库,除了高效的词向量表示外,它也能很好地进行语言识别。它支持多达170多种语言。

安装:

pip install fasttext

使用示例:

import fasttext

model = fasttext.load_model(‘lid.176.bin’)  # 下载预训练模型

text = “Ceci est un texte en français”

prediction = model.predict(text)

print(prediction)  # 输出: (‘__label__fr’,)

6. cld3 (Compact Language Detector v3)

简介: cld3 是一个高效的语言检测库,基于 Google 的 Compact Language Detector v3。它对短文本和多语言文本都有不错的支持。

安装:

pip install cld3

使用示例:

import cld3

text = “Hola, ¿cómo estás?”

language = cld3.get_language(text)

print(language)  # 输出: Language: es (西班牙语)

总结:

• 如果需要一个简单、易用的工具,langdetect 和 langid 都是不错的选择。

• 如果对处理多语言的文本和需要其他 NLP 功能有需求,可以考虑使用 polyglot 或 TextBlob。

• 如果需要更高精度的检测,尤其是在短文本的情况下,FastText 和 cld3 是更强大的选择。

你可以根据具体需求选择适合的工具!

PDF 内容提取对比Pymupdf4llm 和 pdf-extract-api

下面是对比 Pymupdf4llmpdf-extract-api 两种工具在多个维度上的分析:

1. 工具介绍

Pymupdf4llm

是基于 PyMuPDF 的轻量级库,用于解析 PDF 文档并将其输出为适合 LLM 使用的格式。主要侧重文本提取和结构化处理,适合生成上下文良好的段落,便于用于 LLM 的问答场景。

pdf-extract-api

是一个基于 API 的工具,专注于从 PDF 中提取特定的数据(如表格、元数据、关键段落等)。它通常提供更精细的配置选项,且需要在线服务支持。

2. 优点

Pymupdf4llm

开源和轻量化:基于 PyMuPDF,依赖简单,不需要网络请求。

灵活性:支持本地化部署和定制,适合对隐私敏感的数据处理。

LLM优化:文本提取经过优化,更适合直接喂给 LLM 使用。

社区支持:有 Python 社区的广泛支持,文档丰富。

pdf-extract-api

精确提取:通过 API 提供强大的功能,如识别表格、图像提取以及结构化内容分离。

便捷性:通常不需要用户过多了解 PDF 内部结构,适合快速实现提取目标。

扩展性:可与其他 API 组合实现复杂任务,如 OCR 集成处理扫描 PDF。

3. 缺点

Pymupdf4llm

复杂性有限:对非常复杂的 PDF(如多层嵌套、表格、图片)支持不如专业化工具。

手动调整需求高:对提取后的数据,需要编写代码进一步清洗和整理。

pdf-extract-api

依赖在线服务:需要网络访问,可能对敏感文档不适合。

成本问题:通常是收费服务,使用量大时费用可能较高。

上手门槛高:需要了解 API 调用的基础,复杂设置可能增加学习成本。

4. 准备度与上手难度

指标 Pymupdf4llm pdf-extract-api

部署与安装 安装简单(pip install pymupdf 等) 需要注册 API 服务并配置访问权限

学习曲线 易于上手,Python 开发者友好 需要熟悉 API 文档,配置参数稍复杂

定制化能力 高,代码灵活,自由控制输出内容和格式 中,定制需依赖 API 提供的接口和选项

速度 本地运行,速度快 API 请求受网络和服务端性能影响

环境依赖 本地运行,无需联网 需联网使用在线 API 服务

总结与建议

选择 Pymupdf4llm

如果你希望完全掌控 PDF 的提取逻辑、对敏感数据有隐私保护需求,并倾向于本地化轻量部署,Pymupdf4llm 是不错的选择。

选择 pdf-extract-api

如果需要快速处理复杂的 PDF 任务(如表格解析、精确提取特定内容),且不介意使用在线服务和支付一定费用,那么 pdf-extract-api 更加适合。

最终选择取决于项目的复杂性、隐私要求和开发资源

使用RAGFlow+iText2KG针对文档进行搜索与知识图片生成(一)

1、RAGFlow 的使用指南

RAGFlow 是一个基于对文档的深入理解的开源 RAG(检索增强生成)引擎。它为任何规模的企业提供了简化的 RAG 工作流程,结合了 LLM(大型语言模型)以提供真实的问答功能,并以来自各种复杂格式数据的有根据的引文为后盾。

demo链接:RAGFlow

特点:

1、有一定的数据质量保证,能从复杂的非结构化数据中提取基于文档理解的深度知识。

2、内置模板,可以基于模板形成知识库;文档分块可以实现人工干预,提高文档质量;

3、可以兼容异构数据源,支持 Word、幻灯片、excel、txt、图像、扫描副本、结构化数据、网页等。

4、 自动化且轻松的 RAG 工作流程

  • 简化的 RAG 编排同时满足了个人和大型企业的需求。
  • 可配置的 LLM 以及嵌入模型。
  • 多重召回与融合的重新排名配对。
  • 直观的 API,可与业务无缝集成。
    RAGFlow架构图

部署要求:

  • CPU >= 4 cores
  • RAM >= 16 GB
  • Disk >= 50 GB
  • Docker >= 24.0.0 & Docker Compose >= v2.26.1

启动 服务器

  1. 确保 >= 262144:vm.max_map_count要检查 的值 :vm.max_map_count$ sysctl vm.max_map_count如果不是,则重置为至少 262144 的值。vm.max_map_count
  1. # In this case, we set it to 262144:$ sudo sysctl -w vm.max_map_count=262144此更改将在系统重启后重置。为了确保您的更改保持永久,请相应地在 /etc/sysctl.conf 中添加或更新该值:vm.max_map_count
  2. vm.max_map_count=262144
  3. 克隆存储库:$ git clone https://github.com/infiniflow/ragflow.git构建预构建的 Docker 镜像并启动服务器:
  4. 以下命令下载 RAGFlow slim () 的开发版本 Docker 映像。请注意,RAGFlow slim Docker 映像不包括嵌入模型或 Python 库,因此大小约为 1GB。dev-slim$ cd ragflow/docker$ docker compose -f docker-compose.yml up -d注意:包含嵌入模型和 Python 库的 RAGFlow Docker 映像的大小约为 9GB,加载时间可能要长得多。
    • 要下载特定版本的 RAGFlow slim Docker 镜像,请将 docker/.env 中的变量更新为所需版本。例如。进行此更改后,请重新运行上述命令以启动下载。RAGFlow_IMAGERAGFLOW_IMAGE=infiniflow/ragflow:v0.12.0-slim
    • 要下载 RAGFlow Docker 映像的开发版本(包括嵌入模型和 Python 库),请将 docker/.env 中的变量更新为 。进行此更改后,请重新运行上述命令以启动下载。RAGFlow_IMAGERAGFLOW_IMAGE=infiniflow/ragflow:dev
    • 要下载特定版本的 RAGFlow Docker 映像(包括嵌入模型和 Python 库),请将 docker/.env 中的变量更新为所需的版本。例如。进行此更改后,请重新运行上述命令以启动下载。RAGFlow_IMAGERAGFLOW_IMAGE=infiniflow/ragflow:v0.12.0
  5. 在服务器启动并运行后检查服务器状态:$ docker logs -f ragflow-server以下输出确认系统已成功启动:
  6. ____ ___ ______ ______ __
    / __ \ / | / ____// ____// /____ _ __
    / /_/ // /| | / / __ / /_ / // __ \| | /| / /
    / _, _// ___ |/ /_/ // __/ / // /_/ /| |/ |/ /
    /_/ |_|/_/ |_|\____//_/ /_/ \____/ |__/|__/

    * Running on all addresses (0.0.0.0)
    * Running on http://127.0.0.1:9380
    * Running on http://x.x.x.x:9380 INFO:werkzeug:Press CTRL+C to quit如果您跳过此确认步骤并直接登录 RAGFlow,您的浏览器可能会提示错误,因为此时您的 RAGFlow 可能没有完全初始化。network abnormal
  1. 在您的 Web 浏览器中,输入服务器的 IP 地址并登录 RAGFlow。使用默认设置时,您只需输入 (sans port number) 作为使用默认配置时可以省略默认 HTTP 服务端口。http://IP_OF_YOUR_MACHINE80
  2. 在 service_conf.yaml 中,选择所需的 LLM 工厂,并使用相应的 API 密钥更新字段。user_default_llmAPI_KEY有关更多信息,请参阅 llm_api_key_setup。

部署完成后,还需要对RAGFlow进行配置,需要关注以下几点:

  • .env:保留系统的基本设置,例如SVR_HTTP_PORTMYSQL_PASSWORDMINIO_PASSWORD
  • service_conf.yaml:配置后端服务。
  • docker-compose.yml:系统依赖 docker-compose.yml 启动。

您必须确保对 .env 文件的更改与 service_conf.yaml 文件中的更改一致。

./docker/README 文件提供了环境设置和服务配置的详细描述,您需要确保 ./docker/README 文件中列出的所有环境设置都与 service_conf.yaml 文件中的相应配置保持一致。

要更新默认 HTTP 服务端口 (80),请转到 docker-compose.yml 并更改为 。80:80<YOUR_SERVING_PORT>:80

对上述配置的更新需要重启所有容器才能生效:

$ docker compose -f docker/docker-compose.yml up -d

🔧 在不嵌入模型的情况下构建 Docker 镜像

此映像的大小约为 1 GB,依赖于外部 LLM 和嵌入服务。

git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
docker build -f Dockerfile.slim -t infiniflow/ragflow:dev-slim .

🔧 构建包含嵌入模型的 Docker 镜像

此映像的大小约为 9 GB。由于它包括嵌入模型,因此它仅依赖于外部 LLM 服务。

git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
docker build -f Dockerfile -t infiniflow/ragflow:dev .

🔨 从源头启动服务进行开发

  1. 安装 Poetry,如果已安装,请跳过此步骤:curl -sSL https://install.python-poetry.org | python3 –
  2. 克隆源码并安装 Python 依赖项:git clone https://github.com/infiniflow/ragflow.git
    cd ragflow/
    export POETRY_VIRTUALENVS_CREATE=true POETRY_VIRTUALENVS_IN_PROJECT=true
    ~/.local/bin/poetry install –sync –no-root # install RAGFlow dependent python modules
  3. 使用 Docker Compose 启动依赖服务(MinIO、Elasticsearch、Redis 和 MySQL):docker compose -f docker/docker-compose-base.yml up -d
  4. 添加以下行以将 docker/service_conf.yaml 中指定的所有主机解析为:/etc/hosts127.0.0.1
  1. 127.0.0.1 es01 mysql minio redis
  2. 在 docker/service_conf.yaml 中,将 mysql 端口更新为 ,将 es 端口更新为 ,如 docker/.env 中指定。54551200
  1. 如果无法访问 HuggingFace,请将环境变量设置为使用镜像站点:HF_ENDPOINTexport HF_ENDPOINT=https://hf-mirror.com启动 backend service:
  2. source .venv/bin/activate
    export PYTHONPATH=$(pwd)bash docker/launch_backend_service.sh
  3. 安装前端依赖项:
  4. cd webnpm install –force
  5. 将前端配置为在 .umirc.ts 更新为:proxy.targethttp://127.0.0.1:9380

启动前端服务:

npm run dev 以下输出确认系统已成功启动完成。



1、Text2KG 的使用



Text2KG是一个开源项目,能够利用大型语言模型(zero-shot)跨领域从文本中提取实体和关系,自动构建和更新知识图谱,并通过Neo4j进行可视化。

iText2KG由四个主要模块组成:文档提取器、增量实体提取器、增量关系提取器、图形集成器和可视化。它们协同工作,从非结构化文本构建和可视化知识图谱。

  • 文档提取器(Document Distiller):该模块处理原始文档,并根据用户定义的模式将其重新表述为语义块。它通过关注相关信息并以预定义的格式对其进行结构化来提高信噪比。
  • 增量实体提取器(Incremental Entity Extractor):此模块从语义块中提取唯一实体并解决歧义以确保每个实体都有明确定义。它使用余弦相似度度量将局部实体与全局实体进行匹配。
  • 增量关系提取器(Incremental Relation Extractor):此模块识别提取实体之间的关系。它可以以两种模式运行:使用全局实体丰富图形中的潜在信息,或使用局部实体建立更精确的关系。
  • 图形集成器和可视化(Graph Integrator and Visualization):此模块将提取的实体和关系集成到 Neo4j 数据库中,提供知识图谱的可视化表示。它允许对结构化数据进行交互式探索和分析。

四个模块中,增量实体提取器与增量关系提取器最为关键,采用大模型来实现LLM提取代表一个唯一概念的实体,以避免语义混合的实体。显示了使用 Langchain JSON 解析器的实体和关系提取prompt。分类如下:蓝色 – 由 Langchain 自动格式化的prompt;常规 – iText2KG设计的prompt;斜体 – 专门为实体和关系提取设计的prompt。(a)关系提取prompt和(b)实体提取prompt。

为了说明知识图谱构建的结果,在三种不同场景下,将基线方法与iText2KG进行了比较:

  • 基线方法在所有三种知识图谱构建场景中都揭示了存在没有关系的孤立节点。这种现象可能归因于实体提取和关系提取的同时执行,这可能会在语言模型中引起幻觉效应,导致“遗忘”效应,即分离实体和关系提取的过程可以提高性能。
  • 在“网站到知识图谱”的场景中,输入文档数量的增加与图中噪声节点的出现有关。这强调了对文档进行有效精炼和蒸馏的模块1的关键需求。
  • iText2KG方法在三种知识图谱构建场景中展示了改进的实体和关系解析能力。当输入文档较少且由简单、非复杂短语组成时,语言模型在实体和关系解析方面表现出高效率,如“简历到知识图谱”过程中所证明的。相反,随着数据集变得更加复杂和庞大,挑战也随之增加,如“网站到知识图谱”场景所示。此外,重要的是要强调输入文档的分块大小和阈值对知识图谱构建的影响。文档分馏器的输入文档可以是独立的文档或分块。如果分块大小较小,则语义块将从文档中捕获更具体的详细信息,反之亦然

一种由 LLM 驱动的零样本方法,使用大型语言模型构建增量知识图谱(KG)

iText2KG 是一个 Python 包,通过利用大型语言模型从文本文档中提取实体和关系,逐步构建具有已解析实体和关系的一致知识图谱。

它具有零样本能力,无需专门的训练即可跨各个领域提取知识。

它包含四个模块:文档提炼器、增量实体提取器、增量关系提取器和图形集成器与可视化。

  • 文档提取器:此模块将原始文档重新表述为预定义的语义块,并由指导 LLM 提取特定信息的模式引导。
  • 增量实体提取器:此模块识别并解析语义块内的唯一语义实体,确保实体之间的清晰度和区别。
  • 增量关系提取器:此组件处理已解析的实体以检测语义上唯一的关系,解决语义重复的挑战。
  • Neo4j 图形集成器:最后一个模块以图形格式可视化关系和实体,利用 Neo4j 进行有效表示。

对于我们的 iText2KG 它包含了两大特点

  • 增量构建:iText2KG 允许增量构建 KG,这意味着它可以在新数据可用时不断更新和扩展图,而无需进行大量重新处理。
  • 零样本学习:该框架利用 LLM 的零样本功能,使其无需预定义集或外部本体即可运行。这种灵活性使其能够适应各种 KG 构建场景,而无需进行大量训练或微调。

一 、设置模型

在运行 iText2KG 之前,我们先设置好大模型,我这里选择的是 OpenAi 的模型以及 HuggingFace 的 bge-large-zh embedding 模型。这么选择也是考虑到构建 KG 的准确度。

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
import os
os.environ["OPENAI_API_KEY"] = "*****"
openai_api_key = os.environ["OPENAI_API_KEY"]
openai_llm_model = llm = ChatOpenAI(
model="gpt-4o-mini",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
messages = [
(
"system",
"You are a helpful assistant that translates English to French. Translate the user sentence.",
),
("human", "I love programming."),
]

ai_msg=openai_llm_model.invoke(messages)

开始部署我们的 Embedding 模型:

from langchain_huggingface.embeddings import HuggingFaceEmbeddings
openai_embeddings_model = HuggingFaceEmbeddings(model_name="BAAI/bge-large-zh-v1.5")
text = "This is a test document."
query_result = openai_embeddings_model.embed_query(text)
query_result[:3]
doc_result = openai_embeddings_model.embed_documents([text])

二 、使用 iText2KG 构建 KG

我们这里的场景是,给出一篇简历,使用知识图谱将在线职位描述与生成的简历联系起来。

设定目标是评估候选人是否适合这份工作。

我们可以为 iText2KG 的每个模块使用不同的 LLM 或嵌入模型。但是,重要的是确保节点和关系嵌入的维度在各个模型之间保持一致。

如果嵌入维度不同,余弦相似度可能难以准确测量向量距离以进行进一步匹配。

我们的简历放到根目录,加载简历:

from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader(f"./CV_Emily_Davis.pdf")
pages = loader.load_and_split()

初始化 DocumentDistiller 引入 llm :

from itext2kg.documents_distiller import DocumentsDisiller, CV
document_distiller = DocumentsDisiller(llm_model = openai_llm_model)

信息提炼:

IE_query = '''
# DIRECTIVES :
- Act like an experienced information extractor.
- You have a chunk of a CV.
- If you do not find the right information, keep its place empty.
'''
# 使用定义好的查询和输出数据结构提炼文档。
distilled_cv = document_distiller.distill(documents=[page.page_content.replace("{", '[').replace("}", "]") for page in pages], IE_query=IE_query, output_data_structure=CV)

将提炼后的文档格式化为语义部分。

semantic_blocks_cv = [f"{key} - {value}".replace("{", "[").replace("}", "]") for key, value in distilled_cv.items() if value !=[] and value != ""  and value != None]

我们可以自定义输出数据结构,我们这里定义了4种,工作经历模型,岗位,技能,证书。

from pydantic import BaseModel, Field
from typing import List, Optional

class JobResponsibility(BaseModel):
description: str = Field(..., description="A specific responsibility in the job role")

class JobQualification(BaseModel):
skill: str = Field(..., description="A required or preferred skill for the job")

class JobCertification(BaseModel):
certification: str = Field(..., description="Required or preferred certifications for the job")

class JobOffer(BaseModel):
job_offer_title: str = Field(..., description="The job title")
company: str = Field(..., description="The name of the company offering the job")
location: str = Field(..., description="The job location (can specify if remote/hybrid)")
job_type: str = Field(..., description="Type of job (e.g., full-time, part-time, contract)")
responsibilities: List[JobResponsibility] = Field(..., description="List of key responsibilities")
qualifications: List[JobQualification] = Field(..., description="List of required or preferred qualifications")
certifications: Optional[List[JobCertification]] = Field(None, description="Required or preferred certifications")
benefits: Optional[List[str]] = Field(None, description="List of job benefits")
experience_required: str = Field(..., description="Required years of experience")
salary_range: Optional[str] = Field(None, description="Salary range for the position")
apply_url: Optional[str] = Field(None, description="URL to apply for the job")

定义一个招聘工作需求的描述:

job_offer = """
About the Job Offer
THE FICTITIOUS COMPANY

FICTITIOUS COMPANY is a high-end French fashion brand known for its graphic and poetic style, driven by the values of authenticity and transparency upheld by its creator Simon Porte Jacquemus.

Your Role

Craft visual stories that captivate, inform, and inspire. Transform concepts and ideas into visual representations. As a member of the studio, in collaboration with the designers and under the direction of the Creative Designer, you should be able to take written or spoken ideas and convert them into designs that resonate. You need to have a deep understanding of the brand image and DNA, being able to find the style and layout suited to each project.

Your Missions

Translate creative direction into high-quality silhouettes using Photoshop
Work on a wide range of projects to visualize and develop graphic designs that meet each brief
Work independently as well as in collaboration with the studio team to meet deadlines, potentially handling five or more projects simultaneously
Develop color schemes and renderings in Photoshop, categorized by themes, subjects, etc.
Your Profile

Bachelor’s degree (Bac+3/5) in Graphic Design or Art
3 years of experience in similar roles within a luxury brand's studio
Proficiency in Adobe Suite, including Illustrator, InDesign, Photoshop
Excellent communication and presentation skills
Strong organizational and time management skills to meet deadlines in a fast-paced environment
Good understanding of the design process
Freelance cont

继续使用上面方法做信息提炼:

IE_query = '''
# DIRECTIVES :
- Act like an experienced information extractor.
- You have a chunk of a job offer description.
- If you do not find the right information, keep its place empty.
'''
distilled_Job_Offer = document_distiller.distill(documents=[job_offer], IE_query=IE_query, output_data_structure=JobOffer)
print(distilled_Job_Offer)
semantic_blocks_job_offer = [f"{key} - {value}".replace("{", "[").replace("}", "]") for key, value in distilled_Job_Offer.items() if value !=[] and value != "" and value != None]

到这里准备工作完成,简历和工作需求都已经提炼完毕,然后正式开始构建 graph,我们将简历的所有语义块作为一个块传递给了 LLM

也将工作需求作为另一个语义块传递,也可以在构建图时将语义块分开。

我们需要注意每个块中包含多少信息,然后好将它与其他块连接起来,我们在这里做的就是一次性传递所有语义块。

from itext2kg import iText2KG
itext2kg = iText2KG(llm_model = openai_llm_model, embeddings_model = openai_embeddings_model)

global_ent, global_rel = itext2kg.build_graph(sections=[semantic_blocks_cv], ent_threshold=0.6, rel_threshold=0.6)

global_ent_, global_rel_ = itext2kg.build_graph(sections=[semantic_blocks_job_offer], existing_global_entities = global_ent, existing_global_relationships = global_rel, ent_threshold=0.6, rel_threshold=0.6)

iText2KG 构建 KG 的过程我们看到有很多参数,下面分贝是对每个参数的表示做一些解释:

  • llm_model:用于从文本中提取实体和关系的语言模型实例。
  • embeddings_model:用于创建提取实体的向量表示的嵌入模型实例。
  • sleep_time (int):遇到速率限制或错误时等待的时间(以秒为单位)(仅适用于 OpenAI)。默认为 5 秒。

iText2KG 的 build_graph 参数:

  • sections (List[str]):字符串(语义块)列表,其中每个字符串代表文档的一部分,将从中提取实体和关系。
  • existing_global_entities (List[dict], optional):与新提取的实体进行匹配的现有全局实体列表。每个实体都表示为一个字典。
  • existing_global_relationships (List[dict], optional):与新提取的关系匹配的现有全局关系列表。每个关系都表示为一个字典。
  • ent_threshold (float, optional):实体匹配的阈值,用于合并不同部分的实体。默认值为 0.7。
  • rel_threshold (float, optional):关系匹配的阈值,用于合并不同部分的关系。默认值为 0.7。

从图中结果看到我们构建过程中的实体,和关联关系。

最后使用 GraphIntegrator 对构建的知识图谱进行可视化。

使用指定的凭据访问图形数据库 Neo4j,并对生成的图形进行可视化,以提供从文档中提取的关系和实体的视觉表示。

from itext2kg.graph_integration import GraphIntegrator
URI = "bolt://3.216.93.32:7687"
USERNAME = "neo4j"
PASSWORD = "selection-cosal-cubes"
new_graph = {}
new_graph["nodes"] = global_ent_
new_graph["relationships"] = global_rel_
GraphIntegrator(uri=URI, username=USERNAME, password=PASSWORD).visualize_graph(json_graph=new_graph)

打开我们的 Neo4j 图形数据库: