码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Kernel Memory 入门系列:文档的管理


    合集 - Kernel Memory(10)
    1.Kernel Memory 入门系列: RAG 简介2023-12-182.Kernel Memory 入门系列: Embedding 简介2023-12-193.Kernel Memory 入门系列:文档预处理2023-12-204.Kernel Memory 入门系列:快速开始2023-12-215.Kernel Memory 入门系列:Kernel Memory Service2023-12-226.Kernel Memory 入门系列:生成并获取文档摘要2023-12-25
    7.Kernel Memory 入门系列:文档的管理2023-12-26
    8.Kernel Memory 入门系列:自定义处理流程2023-12-279.Kernel Memory 入门系列:Semantic Kernel 插件2023-12-3010.Kernel Memory 入门系列:异步管道01-03
    收起

    Kernel Memory 入门系列: 文档的管理

    在Quick Start中我们了解到如何快速直接地上传文档。但是实际中,往往会面临更多的问题,例如文档如何更新,如何划定查询范围等等。这里我们将详细介绍在Kernel Memory文档的管理。

    使用Document管理一组文件

    当我们需要批量上传一组文件的时候,可以使用Document来管理。

    var document = new Document();
    document.AddFile("./sample-SK-Readme.pdf");
    document.AddFile("./sample-KM-Readme.md");
    await memory.ImportDocumentAsync(document);

    其中Document 作为一个对象,可以将多个文件归结到一起,可以自行指定对应的DocumentId,如果不指定的话,会生成一个随机的DocumentId,这个DocumentId后续可以用来查询文档的处理状态或者用于更新删除文档。

    后续的使用和管理,将会以Document为基本的文档单位进行管理。

    使用Tag进行文档标记

    当我们需要对上传的文档进行范围划定时,可以使用Tag来进行标记。Tag可以理解为一个文档的属性,可以充分的自定义,例如标记文档的类型、标记文档的来源、上传的用户、所属的项目、所属的领域等等。

    var document = new Document();
    document.AddFile("./sample-SK-Readme.pdf");
    document.AddTag("type", "pdf");
    document.AddTag("domain", "llm");
    document.AddTag("user", "xbotter");
    await memory.ImportDocumentAsync(document);

    如果导入的是单文件,或者文件流的话,可以通过另外一种方式来添加Tag。

    var tags = new TagCollection();
    tags.Add("type", "pdf");
    tags.Add("domain", "llm");
    tags.Add("user", "xbotter");
    await memory.ImportFileAsync("./sample-SK-Readme.pdf", tags: tags);

    同样也适用于文本和网页的导入:

    var tags = new TagCollection();
    await memory.ImportTextAsync("这是一段文本", tags: tags);
    await memory.ImportUrlAsync("https://www.github.com", tags: tags);

    检索时进行筛选

    使用Tag标记的最大用途就是在检索时候进行范围的筛选,例如我们可以指定,仅在所有pdf文档范围内搜索:

    await memory.AskAsync("What's the SK?", filters: MemoryFilters.ByTag("type", "pdf"));

    当然也可以指定文档进行筛选:

    await memory.AskAsync("What's the SK?", filters: MemoryFilters.ByDocument("documentId"));

    复杂筛选条件

    当我们需要复杂的筛选条件时,可以使用MemoryFilters来实现And和Or的组合方式。
    MemoryFilters多次的添加ByTag条件,表示为And的关系。

    await memory.AskAsync("What's the SK?", filters: MemoryFilters.ByTag("type", "pdf")
    .ByTag("domain", "llm"));

    添加多个MemoryFilters,表示为Or的关系。

    await memory.AskAsync("What's the SK?", filters: new List() {
    MemoryFilters.ByTag("type", "pdf"),
    MemoryFilters.ByTag("domain", "llm")
    });

    更新文档

    前面提及Document概念的时候已经提到,DocumentId用来指定一个文档,当我们需要更新文档的时候,可以直接指明DocumentId,然后上传新的文档即可。

    var document = new Document(docId);
    document.AddFile("./sample-SK-Readme.pdf");
    await memory.ImportDocumentAsync(document);

    此时,Kernel Memory会自动将原有的文档进行替换,实现文档的更新。

    删除文档

    当我们需要删除文档的时候,可以使用DeleteDocumentAsync方法,指定DocumentId即可。

    await memory.DeleteDocumentAsync(docId);

    使用Index进行隔离

    上传文档和搜索的时候,另外一个需要指定的参数是index,index在向量存储中,可以理解为一个命名空间,可以用来隔离不同的文档,而且在检索的时候,也是无法跨index进行检索的。

    当上传和检索文档时未指定index的时候,会使用默认的index。

    参考

    • SECURITY_FILTERS
  • 相关阅读:
    MVVM的前世今生与在苹果开发中的应用
    Python数据分析11——Seaborn绘图
    【数据结构】&&【C++】平衡搜索二叉树的模拟实现(AVL树)
    [Dubbo3.0.8源码解析系列]-26-消费者一个服务是如何通过RPC调用到提供者的
    淘宝/天猫api 收货地址列表 API接口
    Docker-consul容器服务更新与发现
    Android修行手册之Kotlin - 自定义View的几种写法
    将 APACHE 日志解析到 SQL 数据库中
    导航集成测试
    Pygame入门 2022 (2)
  • 原文地址:https://www.cnblogs.com/xbotter/p/kernel_memory_document_tag.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号