社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

【开源】基于LangChain实现的知识库问答工具,github斩获26.8K star

soft张三丰 • 1 年前 • 374 次点击  

知识库问答工具

知识库问答(Knowledge Base Question Answering, KBQA)工具是一种自然语言处理技术,它允许用户通过自然语言提问,并从结构化的知识库中找到答案。这种工具通常包括一个预先构建的知识库,其中包含大量的实体、属性和它们之间的关系,以及一个能够理解用户提问并从知识库中检索答案的问答系统。

知识库问答工具的核心功能如下:

1. 理解自然语言查询:系统需要解析用户的查询,理解其意图和所涉及的关键词。

2. 知识库检索:系统在知识库中搜索相关信息,通常使用结构化查询语言(如SPARQL)在图数据库中检索。

3. 答案生成:系统从检索到的信息中提取答案,并以自然语言的形式呈现给用户。

知识库问答工具广泛应用于客户服务、企业内部信息查询、在线教育等多个领域,它可以提供快速、准确的回答,提高信息检索效率,减轻人工客服的压力。在构建和使用这类工具时,需要遵循相关法律法规和社会主义价值观,确保信息的正确性和安全性。

LangChain 介绍

LangChain 是一个用于开发由语言模型驱动的应用程序的框架。它使得应用程序能够:

  • 具有上下文感知能力:将语言模型连接到上下文来源(提示指令,少量的示例,需要回应的内容等)

  • 具有推理能力:依赖语言模型进行推理(根据提供的上下文如何回答,采取什么行动等)


这个框架由几个部分组成。

  • LangChain 库:Python 和 JavaScript 库。包含了各种组件的接口和集成,一个基本的运行时,用于将这些组件组合成链和代理,以及现成的链和代理的实现。

  • LangChain 模板:一系列易于部署的参考架构,用于各种任务。

  • LangServe:一个用于将 LangChain 链部署为 REST API 的库。

  • LangSmith:一个开发者平台,让你可以调试、测试、评估和监控基于任何 LLM 框架构建的链,并且与 LangChain 无缝集成。


这些产品一起简化了整个应用程序的生命周期:

  • 开发:在 LangChain/LangChain.js 中编写你的应用程序。使用模板作为参考,快速开始。

  • 生产化:使用 LangSmith 来检查、测试和监控你的链,这样你可以不断改进并有信心地部署。

  • 部署:使用 LangServe 将任何链转换为 API。

LangChain 库

LangChain 包的主要价值主张是:

  1. 组件:用于处理语言模型的可组合工具和集成。无论你是否使用 LangChain 框架的其余部分,组件都是模块化的,易于使用

  2. 现成的链:用于完成高级任务的组件的内置组合


现成的链使得开始变得容易。组件使得定制现有链和构建新链变得容易。

LangChain 库本身由几个不同的包组成。

  • langchain-core:基础抽象和 LangChain 表达式语言。

  • langchain-community:第三方集成。

  • langchain:构成应用程序认知架构的链、代理和检索策略。


LangChain 是什么

LangChain 是一个开源的框架,旨在帮助开发者构建和部署语言模型的应用程序。它提供了一个模块化和可扩展的平台,使得整合多个语言模型和其他工具变得容易,从而创建更加强大和灵活的应用。

LangChain 的主要特点包括:

1. 模型集成:LangChain 支持多种语言模型,包括大型模型如 GPT-3,以及自定义模型。

2. 工具连接:LangChain 可以连接到各种工具和API,使得模型能够利用外部资源来增强其回答的准确性和实用性。

3. 记忆功能:LangChain 允许应用程序存储和检索对话历史,从而在对话中保持上下文连续性。

4. 模块化设计:LangChain 的设计是模块化的,使得开发者可以根据需要轻松地添加或替换组件。

5. 多语言支持:LangChain 支持多种编程语言,使得开发者可以使用他们熟悉的语言来构建应用程序。

LangChain 的目标是通过提供一个灵活的框架,使得开发者能够快速构建和迭代语言模型驱动的应用程序,从而推动语言模型的创新和应用。

使用步骤

1. 下载代码仓库准备基础环境

# 拉取仓库git clone https://github.com/chatchat-space/Langchain-Chatchat.git
# 进入目录cd Langchain-Chatchat
# 安装全部依赖pip install -r requirements.txt pip install -r requirements_api.txtpip install -r requirements_webui.txt
# 默认依赖包括基本运行环境(FAISS向量库)。如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装。

2. 下载模型文件

git lfs install
# 下载ChatGLM2模型git-lfs clone https://huggingface.co/THUDM/chatglm2-6b
# 下载文本转向量模型git-lfs clone https://huggingface.co/shibing624/text2vec-base-chinese

3. 初始化参数配置

复制配置文件

python copy_config_example.py

该脚本将会将所有config目录下的配置文件样例复制一份到config目录下,方便开发者进行配置。接着,开发者可以根据自己的需求,对配置文件进行修改。

  • 基础配置项 basic_config.py

该配置基负责记录日志的格式和储存路径,通常不需要修改。

  • 模型配置项 model_config.py的核心参数

    • MODEL_ROOT_PATH:本地模型路径配置。建议将所有下载的模型放到一个统一的目录下,然后将MODEL_ROOT_PATH指定为该目录

    • EMBEDDING_MODEL:文本向量化对应的模型名称,与MODEL_PATH里面的embed_model里面的key对应,key对应的value与MODEL_ROOT_PATH地址拼接形成完成的模型地址

    • LLM_MODELS:大语言模型的名称,与MODEL_PATH里面的llm_model里面的key对应,key对应的value与MODEL_ROOT_PATH地址拼接形成完成的模型地址

    • ONLINE_LLM_MODEL:在线模型API配置。在ONLINE_LLM_MODEL已经预先写好了所有支持的在线API服务,通常只需要把申请的API_KEY等填入即可。

    • HISTORY_LEN:历史对话轮数通常不建议设置超过10,因为这可能导致显存占用过高、速度处理慢

    • TEMPERATURE:通常不建议设置过高。在Agent对话模式和知识库问答中,我们强烈建议将要其设置成0或者接近于0。TEMPERATURE越高,生成内容的随机性越强

    • Agent_MODEL = None 我们支持用户使用“模型接力赛”的用法,即:选择的大模型仅能调用工具,但是在工具中表现较差,则这个工具作为 “模型调用工具” 如果用户设置了Agent_MODEL,则在 Agent 中,使用Agent_MODEL来执行任务,否则,使用LLM_MODEL


  • 知识库配置项 kb_config.py

配置与知识库相关的参数,包括知识库的名称,使用的向量数据库类型,文本拆分策略,采用哪种分词器等

  • 提示词配置项 prompt_config.py

    • llm_chat: 基础的对话提示词, 通常来说,直接是用户输入的内容,没有系统提示词。

    • knowledge_base_chat: 与知识库对话的提示词,在模板中,我们为开发者设计了一个系统提示词,开发者可以自行更改。

    • agent_chat: 与Agent对话的提示词,同样,我们为开发者设计了一个系统提示词,开发者可以自行更改。

prompt模板使用Jinja2语法,简单点就是用双大括号代替f-string的单大括号 请注意,本配置文件支持热加载,修改prompt模板后无需重启服务。

  • 服务配置项 server_config.py

配置服务绑定的IP和端口,以及相应超时时间等参数

4. 初始化知识库

python init_database.py --recreate-vs

5. 加载LoRA微调后的baichuan模型

6. 启动服务

详细步骤可以参考链接

https://zhuanlan.zhihu.com/p/669523311

可试用产品


作者简介:

张锋,微服务架构实战原创作者,拥有超过10年的软件开发和架构设计经验。他是一位热衷于探索新技术和模式的软件工程师,对微服务架构、容器技术、自动化部署等领域有深入研究。在职业生涯中,他曾任职于多家知名企业,担任过技术团队负责人,带领团队实现了一系列高并发、高可用的微服务架构项目。 

张锋老师在微服务架构领域有着丰富的实践经验,他的作品《微服务架构实战》深入浅出地介绍了微服务架构的设计理念、技术栈选择、项目实践等关键环节,广受读者好评。此外,他还活跃在技术社区,分享自己的见解和心得,助力更多开发者掌握微服务架构的精髓。


猜您喜欢:

【开源】微博开源的一款高性能、可扩展的分布式流程编排服务,具备以下核心特性:高性能日支持千万级任务执行,执行延迟低于100ms

【开源】消息推送平台(8K stars),可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。消息推送平台

【开源】基于vue可视化拖拽编辑,页面生成工具。提升前端开发效率,可集成至移动端项目作为通过定义 JSON 直接生成 UI 界面

【开源】此项目是极其简单的工作流,没有太多设计,代码量少,并且只有6张表,一个小时就可以看完整个设计。使用起来方便

【开源】一键部署即可使用系统支持 Word、PPT、Excel、PDF、图片等多种文档格式直接导入即可像ChatGPT一样问答


添加微信进相关交流群

备注“微服务”进群交流

备注“低开”进低开群交流

备注“AI”进AI大数据,数据治理群交流

备注“数字”进物联网和数字孪生群交流

备注“安全”进安全相关群交流

备注“自动”进自动化运维群交流

备注“试用”可以申请产品试用

关注公众号 soft张三丰 



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/169208
 
374 次点击