手把手带你学扣子Coze之知识库检索节点

知识库就像一个智能机器人的私人资料库,里面存着它知道的所有信息。当用户提问时,机器人会从这个资料库里快速搜索出最相关的答案,并把找到的所有结果整理成一个清单给你看。

输入

知识库节点的输入参数固定为 Query,表示用户希望在知识库中检索的关键信息,需要引用上游节点的输出参数。输入参数格式为 String,可以引用任何格式的数据。一般情况下,这里引用开始节点的user-input

知识库

支持选择任何格式的知识库,包含文本、表格、图片等

搜索策略保持默认即可

搜索策略:

从知识库中获取知识的检索方式,不同的检索策略可以更有效地找到正确的信息,提高其生成的答案的准确性和可用性。支持的检索策略包括:

  • 混合:结合全文检索和语义检索的优势,并对结果进行综合排序召回相关的内容片段。

  • 语义:像人类一样去理解词与词、句与句之间的关系。推荐在需要理解语义关联度和跨语言查询的场景使用。例如下面两组句子,第一组的语义关系更强。

    • "狼追小羊"和"豺狼追山羊"

    • "狼追小羊"和"我爱吃炸猪排"

  • 全文:基于关键词进行全文检索。推荐当查询内容包含以下场景时使用:

    • 特定名称或专有名词、术语等,例如比尔盖茨、 特斯拉 Model Y。

    • 缩写词,例如 SFT。

    • ID,例如 12s1w1s2 系列。

最大召回数量:

从知识库中返回的最大段落数量。数值越大,返回的条目越多。默认召回 5 条检索结果。

最小匹配度:

匹配度就像考试得分:假设标准答案是参考答案(ground-truth),系统检索到的内容与标准答案的相似度就是分数(0-1 分)。设置最低 0.5 分后,就像老师只收录及格以上的答案,低于 0.5 分的回答直接丢进垃圾桶,保证传给 AI 的信息都是靠谱的。

表格SQL查询:

当你给智能体添加了表格类的知识库后,系统就会自动解锁 "智能翻译查询" 功能。比如你问 "上个月华东区销售额前三名",系统会像翻译官一样把你的话转成数据库能听懂的 SQL 指令(类似 SELECT...WHERE...),精准查表算出结果,最后把表格查询的数值结果和常规的文本搜索结果打包发给 AI,双管齐下帮你找到最准确的答案。

查询改写:

在多轮对话中,用户的 Query 和对话的上下文息息相关,仅凭借用户最新一条提问可能无法正确识别用户的真实检索意图。查询改写是指根据对话历史对用户输入的 Query 进行优化或重构,从而更准确地捕捉真实的用户意图,提升信息检索的效率。知识库检索节点默认开启查询改写。

这就好比你和朋友聊天时,对方会自动记住之前的对话内容。比如你先问 "如何做蛋糕",接着问 "那糖要放多少",系统会像贴心的对话搭档,自动把你的问题补全成 "制作蛋糕时糖的用量",确保每次提问都能结合上下文精准搜索知识库,避免出现 "糖是指白糖还是剧情甜度" 这类误解。

例如用户对话的上下文为:

  • 问题1:知识库检索节点可以用来做什么?

  • 回复1:知识库检索节点可以基于用户输入查询指定的知识库,召回最匹配的信息,并将匹配结果以列表形式返回。

  • 问题2:怎么用?

对于问题2,不参考上下文的情况下无法判断用户的真实意图。开启查询改写后,问题2会被改写为“知识库检索节点怎么用?”

注意:开启查询改写后,会调用大模型进行问题改写,使用更多的Tokens,并增加一定的延迟。

结果重排:

结果重排就像图书馆管理员帮你二次筛书:原本系统只是按书名相似度把书堆在桌上(匹配度排序)。但当你开启 "智能整理" 功能后,管理员会快速翻看每本书的内容质量,把真正能解答你问题的那几本精准抽出来放在最上面,避免出现 "书名相关但内容跑题" 的情况。

假设用户查询“如何制作意大利面?” ,首先会从知识库中检索得到以下几个文档片段,其中先按照ABCD先后顺序排列:

  • 切片 A:介绍意大利面的历史。

  • 切片 B:讨论了不同种类的意大利面和它们的搭配。

  • 切片 C:详细描述了制作意大利面的步骤,包括所需材料和烹饪技巧。

  • 切片 D:提供了一些意大利面食谱。

在结果重排的过程中,知识库检索节点会分析用户的真实意图,对切片重新排序,使得最相关的内容排在前面。最终的排序可能变为:

  • 切片 C:详细描述了制作意大利面的步骤,包括所需材料和烹饪技巧。

  • 切片 D:提供了一些意大利面食谱。

  • 切片 B:讨论了不同种类的意大利面和它们的搭配。

  • 切片 A:介绍意大利面的历史。

仅查看个人文档:

指定查询范围是否仅限于用户的个人文档。默认为关闭状态。

  • 开启:在知识库检索节点添加的全部知识库中,用户只能搜索自己通过知识库写入节点写入的文档,不能在开发者和其他人上传的文档中检索内容。

  • 关闭:检索范围为知识库节点中添加的全部知识库。

使用

随便询问一个问题,查看能否获取到数据库中的数据

可以看到,在outputList变量中返回了5条数据。

在后续节点中,可直接调用该节点返回的数据,帮助大模型进行解答问题。

知识库检索节点和大模型节点添加知识库有什么区别?

前者是人工指定输入的检索内容,百分百调用

后者是大模型根据query决定是否调用知识库、以及使用什么内容去检索知识库

 

文章转载自:https://gwl1554ppni.feishu.cn/wiki/G8YSwgk7MiW7rbkxCLcc35VjnPf
欢迎关注公众号【AI技术开发者】
 

 

### 如何使用 Coze 创建知识库文件 为了利用 Coze 构建有效的知识库,需遵循特定的方法论和实践指南。以下是通过 Python 实现的一个简单例子,展示如何初始化并填充基于 Coze知识库。 #### 初始化项目结构 首先,在目标目录中建立一个新的工作区,并设置必要的开发环境: ```bash mkdir my_knowledge_base_project cd my_knowledge_base_project python -m venv .venv # 创建Python虚拟环境[^3] source .venv/bin/activate # 激活虚拟环境 (Linux/MacOS) # 或者对于Windows用户: #.venv\Scripts\activate.bat # 激活虚拟环境 (Windows) ``` #### 安装依赖包 激活虚拟环境后,安装所需的软件包: ```bash pip install coze # 假设`coze`是一个可用的PyPI包用于管理知识库 ``` #### 编写代码以创建知识条目 下面是一段简单的 Python 脚本,它展示了怎样向 Coze 知识库添加新信息: ```python from coze import KnowledgeBase, EntryType def add_entry_to_kb(kb_path: str, title: str, content: str): """ 向指定路径下的Coze知识库添加新的条目 参数: kb_path (str): 存储知识库的位置. title (str): 新增条目的标题. content (str): 条目的具体内容. """ try: knowledge_base = KnowledgeBase.load_from_file(kb_path) # 加载现有知识库 except FileNotFoundError: print("未找到现有的知识库,正在新建...") knowledge_base = KnowledgeBase() # 如果不存在,则创建一个新的实例 entry_id = f"{title.replace(' ', '_').lower()}_{len(knowledge_base.entries)}" new_entry = { "id": entry_id, "type": EntryType.DOCUMENTATION.value, "metadata": {"created_at": datetime.now().isoformat()}, "content": content } knowledge_base.add_entry(new_entry) knowledge_base.save_to_file(kb_path) # 将更新后的知识库存回磁盘 print(f"'{title}' 已成功加入到 {kb_path}") if __name__ == "__main__": KB_PATH = "./my_custom_knowledgebase.json" TITLE = "我的第一个知识条目" CONTENT = """这是使用Coze框架创建的第一个知识条目。\n\n这里可以放置任何想要保存的信息...""" add_entry_to_kb(KB_PATH, TITLE, CONTENT) ``` 此脚本实现了基本的功能——即允许开发者轻松地将自己的笔记或其他形式的数据存储至由 `KnowledgeBase` 类表示的知识库对象之中。每次调用函数都会尝试加载已有的 JSON 文件作为输入;如果找不到该文件则会自动创建一个新的空知识库。之后再把传入的内容转换成适当格式并追加进去,最后再次序列化整个数据集以便持久化保存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值