类似 cherry studio, dify 等软件可以使用第三方 ai 的 api 接口,然后在提供上传文档变成知识库,内部的实现原理是什么?求大佬指点

看大家大多都说是,向量数据库加上下文。那 cherry studio 等工具里要求的必须是嵌入模型又是为什么? deepseek 算嵌入模型吗?我看腾讯的 ima.copilot 这款软件里知识库是支持 deepseek 的。另外有 v2exer 感觉用这种上下文会耗大量 token,这个确实是个问题啊。

docs.cherry-ai.com/knowledge-base/knowledge-base

原理就是解析文件形成上下文记忆啊

首先,我们知道,和大模型聊天的时候,我们可以设计 prompt,例如:
请结合以下上下文内容,回答用户问题:

context

用户问题如下:
query


那么,上传文档变成知识库,就是把文档分段,使用向量数据库存起来。当用户提问的时候(假设内容叫 query),拿 query 内容通过向量搜索找到相关的知识片段,组合成 context,拼到上面类似的 prompt 里面一起给大模型回答。
另外,向量数据库搜索只是比较通用的一种方式。知识怎么分段怎么存,你可以自己设计比如存关系数据库都没问题。

最简单来说,就是文档切片转为向量存入向量数据库,Query 也转为向量,从向量库找出最相似的切分,文本拼接起来给 LLM 模型回答问题。

当然实际肯定比这个要复杂。

把你提供的文档 根据一定的规则拆成片段,通过一个模型( embedding 模型)转成向量,存起来就变成了知识库。这个过程类比 es 一类的搜索引擎,只不过常规搜索引擎是分词,他这个是向量。

当你问了一个问题,把你的问题也转成向量,和知识库里面的数据做向量计算,拿到最相似的,拼到上下文中,发给大模型,让大模型回答给你。

和搜索引擎差不多

尤你的 AI 前端程序(不是模型)在知识库搜索内容,然后插到聊天记录里面

矢量数据库,调好参数把数据扔进去解析,聊天的时候触发关键字去矢量数据库拿命中数据添加到上下文再聊天,好不好用全靠参数调的好不好

就是一个搜索引擎,从你的文档中选取和你问题最相关的段落连带着你的问题发给 LLM ,让 LLM 基于文档去回答你的问题。
可以说搜索这部分和 AI 一点关系都没有

我也想知道;例如我把我博客文章全部给 ai ,让 ai 根据我给它的数据,每次问它能找到对应的文章。该如何实现?最好能封装一个 api

模型貌似是无状态的,可以理解外靠外挂向量数据库来构建每一次的提问。

你每次问之前,外部程序都会先从自己的提问历史结合向量数据库构造出完整的上下文,再打包发给模型。

我之前还想调用 ollama 的 api ,想着应该会有个 token id 之类的,后面发现没有,想维持上下文,得把之前得提问历史也需要一并发过去给模型,相当于模型只是纯思考的机器,上下文还是得靠外部程序来构建。

小白问一下,那要是知识库很大,上下文很多,token 岂不是消耗很快?应该涉及多次问答会不会重复发送上下文?

RAG

嵌入模型是用来把文字转成向量的,这样就可以把文字的相似度匹配转成向量的相似度匹配,这样一来更快,二来还能匹配语义上相似但实际不同的句子。

#12 会返回知识库的 top k ,不会整个知识库一起给到大模型

小白再问一下,大语言模型是基于概率预测的,那即使有知识库,它一定能返回和知识库内容完全一样的结果么?比如让它基于条件选择合适的 row 并把知识库这一行完整返回来

我用 deepseek 试过,可以把知识库作为提示词一部分喂给他,基本上回答没啥问题,比别的 AI 模型要聪明。就是比较费 token 。

那要是知识库很大,上下文很多,token 岂不是消耗很快?

理论上是的,但是一般来讲,只有被匹配到的一段文本(和它们的上下文)会被发送给 LLM ,而且很多工具只会发送匹配度最高的 N 段文本,当然代价就是准确性降低。

涉及多次问答会不会重复发送上下文?

会,但有的模型是支持缓存的,比如 OpenAI 和 DeepSeek 连续对话时会自动缓存上下文,命中缓存就有折扣。不过也有模型比如 Claude 和 Gemini 得手动触发缓存,很多工具压根就没有适配……

如果知识库很大,会改用微调大模型,这方法不合适。这方法就是很消耗 token ,没办法。

这种基础的问题,你询问 AI 会更快一些...

好的了解,谢谢各位大佬解答

其实知识库的重点应该是文本的切片和向量化,尽可能使查询匹配的结果更精确

低于 token 的消耗,其实很多时候有了精确的匹配之后使用小型的模型也是可以的,而且小模型部署较为简单,也不必去担心持续大量的 token 消耗了

这个算是很基础的 RAG 了,粗暴的喂给大模型,其实还可以把文本转化为知识图谱,做图检索,如 arxiv.org/abs/2410.05779 还有领英这个 arxiv.org/abs/2404.17723