卡卷网
当前位置:卡卷网 / 每日看点 / 正文

有推荐的开源知识库项目吗?

作者:卡卷网发布时间:2025-01-10 19:16浏览数量:79次评论数量:0次

<>一、背景

知识学习通常是总分总的形式推动,先了解整体方向之后再做细化。本篇是基于AI的开源应用项目来对AIGC领域的技术做整体性的了解,包括业务、技术栈、技术名词等等。目的是快速学习相关的基本知识,为此找到一些可了解的开源应用,可以先本地部署跑起来理解大致的方向。

有一些example,后续再可以做了解:

    SpeechandAudioField语音和音频领域:flinkerla/neal_speech_decodingHumorGeneration讲幽默笑话:CLoTAnimationField动漫领域:SaaRaaS-1300/InternLM2_horowagFoodField食品领域:SmartFlowAI/TheGodOfCookeryToolLearning工具学习:ToolenchAutonomousDrivingField自动驾驶领域:DriveVLM...

<>二、开源项目

这次寻找的是业务方向是基于开源项目构建属于自己的私域知识库问答,先来看行业项目的通常解决方案。

共两种:

    一是用私域数据在开源模型上进行训练微调二是结合向量检索,将专业领域知识和原始提问转化为向量,再使用通用大语言模型进行回答。

这两种方式各有利弊,基于开源模型训练微调存在成本高,包括机器成本和人力成本,另外时效性也较差,但是数据安全性更高;而第二种基于向量检索的形式,工程上需要做的工作较多,需要文档切片,向量存储,向量检索等技术,同时需要跟通用大模型进行交互,所以会有一些数据安全风险以及一些Token额度的消耗。

目前来看,方案二形成了很多行业解决方案,包括云上产品以及一些开源项目,这里介绍一个开源项目Dialoqase。这是一个开源应用程序,旨在通过使用个性化知识库来促进定制聊天机器人的创建。该应用程序利用先进的语言模型生成准确和上下文感知的回复。此外,它利用PostgreSQL,用于高效的向量搜索作和存储知识库。

<>2.1.Dialoqase

项目:s://githu/n4ze3m/dialoqase(部署方式查看readme,访问:://localhost:3000)

1.创建对话的root

2.创建的时候可以选择数据源,这里的数据源就是私域知识库,知识库的类型有很多种,可以是一个网页,可以是一段文本,也可以是一个文件,或者是爬虫等。数据源内容的多少决定了Emedding的时间长短,以及对应Emedding模型Token的消耗多少。

3.接下来再选择一个需要进行交互的ChatModel,支持OpenAI和Claude的模型。

4.接下来再选择Emedding模型,目前支持的有下面这些。注意对于创建的一个ot来说,Emedding模型一旦选择过后是不能进行修改的。

5.创建完成过后会进入到Playground模块,如果前面增加了DataSoce的话,这里就可以直接进行问答了,如果没有增加DataSoce的话,可以在左侧的DataSoce模块进行添加,支持添加多个。

6.可以将文章作为数据源添加,Dialoqase还支持集成到一些社交软件中。

<>三、项目架构

先来看看整体流程。这个流程中向量化的过程以及问答的时候都会涉及到跟大模型进行交互,而消耗的token跟上下文的内容的大小都有关系。

简单来说就分两步,一个是对文档的向量化并做持久化,二是对提问做向量化再组织提示词和大模型交互。

随着行业发展这种方案形成了很多框架,其中很著名的就是LangChain。如果自己想实现的话,也可以使用LangChain来实现上述的整个流程。那LangChain具体是什么?

<>四、LangChain

LangChain是一个框架,用于开发由LLM驱动的应用程序。可以简单认为是LLM领域的Spring,以及开源版的ChatGPT插件。核心的2个功能为:

1.可以将LLM模型与外部数据源进行连接。

2.允许与LLM模型与环境进行交互,通过Agent使用工具。

:GitHu-langchain-ai/langchain:uildcontext-awarereasoningapplications(s://githu/langchain-ai/langchain

下图是根据一些LangChain的一些资料画出来的一张整体架构图,可以看到,它具体分了六个部分,分别是:Models、Prompts、Indexes、Memory、Chains、Agents。

LangChain的六个组件可以分为以下几个层次:

●数据层(Indexes和Memory):负责存储和检索数据,保证上下文的连贯性。

●模型层(Models和Prompts):直接与LLM交互,提供标准化的接口和提示设计。

●流程控制层(Chains和Agents):负责控制任务执行的逻辑和顺序,能够灵活地调整作流程。

<>4.1Models

架构的核心,负责和底层的语言模型进行交互的。<>抽象了各种语言模型(包括OpenAI的GPT-3/4、Cohere、HuggingFace等)的<>接口,以一的方式处理多种模型。

这里models组件分了3个部分:ChatModels、Emedding、LLMs

ChatModels就是支持一些消息类型:AIMessage、HumanMessage、SystemMessage和ChatMessage。它还支持批处理和结果的缓存。

Emedding就是用于文本数据的总结和问答,一般和向量库一起使用,实现向量匹配。其实就是把文本等内容转成数组,可以后续进行相似性的计算和检索。

LLMs就是大语言模型了,这个官网有支持清单。使用基本上就是import不同的SDK连接到不同LLM提供商,用API密钥取调用。

<>4.2Prompts

专注于如何<>为语言模型设计合适的提示(Prompt),因为模型的输出质量很大程度上取决于输入提示的设计。这个就是可以帮开发创建高效的提示,引导模型生成所需的输出。

它包含了<>PromptTemplates、Few-shotexample、ExampleSelector,支持参数化提示,简化了复杂提示的生成。

可以将固定的模板与动态内容组合,生成灵活的提示。例如,可根据上下文生成问题的前缀或参数化内容。

<>4.3Indexes

<>旨在和组织数据,使语言模型能够有效地在大规模数据集上查找信息。个人理解和sql的索引类似。就是把文档进行结构化,以便LLM能够更好地与之交互。这个组件主要包括:DocumentLoaders(文档加载器)、TextSplitters(文本拆分器)、VectorStores(向量存储器)以及Retrievers(检索器)。

创建数据索引,支持在大型文本库中快速检索相关内容。包括向量索引、倒排索引、文本分块等,用于处理结构化和非结构化数据。通过将文本数据向量化存储,可以使用向量数据库(如Pinecone、Weiate、FAS)进行快速检索。

<>4.4Memory

其实是为了让LLM具有“<>记忆”功能,使其能够在<>会话中保持上下文连续性。

如果我们一直聊天,发送的内容越来越多,可能就碰到token的。memory的话可以带着上下文保留最近几次的聊天记录。

langchain提供了不同的Memory组件完成内容记忆,可以保存和检索上下文信息,支持短期和长期记忆,各个组件记忆策略都不一样,这些可以在图中看到。

重点看下<>VectorStoreRetrieverMemory,它是将所有之前的对话通过向量的方式存储到VectorD(向量数据库)中,在每一轮新的对话中,会根据用户的输入信息,匹配向量数据库中最相似的K组对话。也就是可以把记忆存储在本地或外部数据库中,通过算法控制记忆的生命周期和使用范围。

<>4.5Chains

链是一种用于<>连接多个模型调用的机制,使得开发者可以通过流水线方式实现复杂的任务。链允许我们将多个组件组合在一起以创建一个单一的、连贯的任务。

例如,我们可以创建一个链,它接受用户输入,使用PromptTemplate对其进行格式化,然后将格式化的响应传递给LLM。另外我们也可以通过将多个链组合在一起,或者将链与组件组合来构建更复杂的链。

它支持顺序执行、条件执行和循环调用,可以在链的不同步骤间传递信息。可以将不同的Prompt、模型调用、API请求等串联起来,完成类似“问题->搜索->生成答案”这样的复杂任务。

<>4.6Agents

Agents是LangChain中最灵活的组件,它们可以根<>据上下文自由选择调用哪个链或模型,实现更复杂的决策逻辑。个人理解它类似于P模型中的Processor,动态编排调用模型的。

一些应用程序需要根据用户输入灵活地调用LLM和工具的链。接口为这样的应用程序提供了灵活性。可以访问一套工具,并根据用户输入确定要使用哪些工具。我们可以简单的理解为他可以动态的帮我们选择和调用chain或者已有的工具。主要有两种类型Actionagents(行为:在每个时间步,使用所有先前动作的输出来决定下一个动作)和Plan-and-executeagents(预先决定完整的作顺序,然后执行所有作而不更新计划)。

作为一个智能,能够根据环境和任务动态选择模型和链条,适用于需要自适应的应用场景。包含动作决策逻辑,支持使用工具(例如数据库查询、外部API调用)来完成复杂任务。通过结合不同的模型调用、提示、索引和内存模块,Agents能够根据需求动态执行不同的作。

<>五、技术名词解释

<>5.1.Milvus

Milvus是一个开源的向量数据库,专门为非结构化数据(如文本、图像、视频等)而设计。它特别适合用于高维向量检索,通常应用在AI和机器学习领域,用于处理和存储Emedding向量。

Milvus支持高效的向量检索算法,能够处理大量数据并进行快速的相似性搜索。它的典型应用场景包括推荐、自然语言处理和图像识别等领域。

<>5.2.HuggingFace

HuggingFace提供了一个开源的机器学习平台和大量的预训练模型,如Tranormer模型(ERT、GPT-2、T5等)。HuggingFace拥有一个称为Tranormers库的Python库,为开发者提供了便捷的工具,用于加载和微调各种预训练的NLP模型。

:HuggingFace(s://githu/huggingface

此外,HuggingFace也为开发者提供了一个模型库和数据集库,方便使用、共享和训练AI模型,极大地简化了NLP开发的流程。

<>5.3.Vector

Vector(向量)在数学和计算机科学中指的是一组数字的有序。在AI和机器学习中,向量通常用于表示数据的特征或嵌入。例如,一段文本、一个图像、一个视频片段可以被转换为向量表示,以便机器进行处理和分析。

向量可以被看作是在高维空间中的一个点,向量之间的距离表示了它们的相似性。这种表示方法在相似性搜索、推荐和聚类分析中非常重要。

<>5.4.LLM(LargeLanguageModel)

LLM指的是大语言模型,例如GPT-3、GPT-4、ERT等,它们通常由数十亿到数千亿个参数构成,具备对自然语言进行生成、理解、翻译等多种任务的能力。

:GitHu-run-l/l_index:LIndexisadataframeworkforyoLLMapplications

LLM通过在海量文本数据上进行训练,学习到语言的复杂模式和结构,并可以执行各种自然语言处理任务。大语言模型在对话、文本生成、问答和信息提取等应用场景中具有广泛应用。

<>本文参考链接:

1、中文教程:s://liaokong.gitook.io/llm-kai-fa-jiao-cheng

2、:s://python.langchain/do/introduction/

3、:s://juejin/post/7355525978594983988

4、代码走读:s://mp.weixin./s/YzNNL3F0998Do2Jl0PQtw

5、...

作者:<>乔凯佳|云原生开发工程师

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码