【Langchain】+ 【baichuan】实现领域知识库【RAG】问答系统

这篇具有很好参考价值的文章主要介绍了【Langchain】+ 【baichuan】实现领域知识库【RAG】问答系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本项目使用Langchainbaichuan 大模型, 结合领域百科词条数据(用xlsx保存),简单地实现了领域百科问答实现。文章来源地址https://www.toymoban.com/news/detail-832318.html

from langchain.text_splitter import CharacterTextSplitter, RecursiveCharacterTextSplitter
from langchain_community.embeddings import OpenAIEmbeddings, SentenceTransformerEmbeddings
from langchain_community.vectorstores import Chroma, FAISS
from langchain_community.llms import OpenAI, Baichuan
from langchain_community.chat_models import ChatOpenAI, ChatBaichuan
from langchain.memory import ConversationBufferWindowMemory
from langchain.chains import ConversationalRetrievalChain, RetrievalQA
#import langchain_community import chat_models
#print(chat_models.__all__)

import streamlit as st
import pandas as pd
import os
import warnings
import time
warnings.filterwarnings('ignore')




# 对存储了领域百科词条的xlsx文件进行解析
def get_xlsx_text(xlsx_file):
    df = pd.read_excel(xlsx_file, engine='openpyxl')
    text = ""
    for index, row in df.iterrows():
        text += row['title'].replace('\n', '')
        text += row['content'].replace('\n', '')
        text += '\n\n'
    return text

# Splits a given text into smaller chunks based on specified conditions
def get_text_chunks(text):
    text_splitter = RecursiveCharacterTextSplitter(
        separators="\n\n",
        chunk_size=1000,
        chunk_overlap=200,
        length_function=len
    )
    chunks = text_splitter.split_text(text)
    return chunks


# 对切分的文本块构建编码向量并存储到FASISS
# Generates embeddings for given text chunks and creates a vector store using FAISS
def get_vectorstore(text_chunks):
    # embeddings = OpenAIEmbeddings() #有经济条件的可以使用 opanaiembending
    embeddings = SentenceTransformerEmbeddings(model_name='all-MiniLM-L6-v2')
    vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embeddings)
    return vectorstore
# Initializes a conversation chain with a given vector store

# 对切分的文本块构建编码向量并存储到Chroma
# Generates embeddings for given text chunks and creates a vector store using Chroma
def get_vectorstore_chroma(text_chunks):
    # embeddings = OpenAIEmbeddings()
    embeddings = SentenceTransformerEmbeddings(model_name='all-MiniLM-L6-v2')
    vectorstore = Chroma.from_texts(
        texts=text_chunks, embedding=embeddings)
    return vectorstore


def get_conversation_chain_baichuan(vectorstore):
    memory = ConversationBufferWindowMemory(
        memory_key='chat_history', return_message=True) # 设置记忆存储器
    conversation_chain = ConversationalRetrievalChain.from_llm(
        llm=Baichuan(temperature=temperature_input, model_name=model_select),
        retriever=vectorstore.as_retriever(),
        get_chat_history=lambda h: h,
        memory=memory
    )
    return conversation_chain


os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"
 # langchain 可以通过设置环境变量来设置参数
os.environ['BAICHUAN_API_KEY'] = 'sk-88888888888888888888888888888888'
temperature_input = 0.7
model_select = 'Baichuan2-Turbo-192K'
raw_text = get_xlsx_text('领域文件/twiki百科问答.xlsx')


text_chunks = get_text_chunks(raw_text)
vectorstore = get_vectorstore_chroma(text_chunks)
# Create conversation chain
qa = get_conversation_chain_baichuan(vectorstore)
questions = [
    "什么是森林经营项目?",
    "风电项目开发过程中需要的主要资料?",
    "什么是ESG"
]
for question in questions:
    result = qa(question)
    print(f"**Question**: {question} \n")
    print(f"**Answer__**: {result['answer']} \n")

到了这里,关于【Langchain】+ 【baichuan】实现领域知识库【RAG】问答系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零实现Transformer、ChatGLM-6B、LangChain+LLM的本地知识库问答

    最近一直在做类ChatGPT项目的部署 微调,关注比较多的是两个:一个LLaMA,一个ChatGLM,会发现有不少模型是基于这两个模型去做微调的,说到微调,那具体怎么微调呢,因此又详细了解了一下微调代码,发现微调LLM时一般都会用到Hugging face实现的Transformers库的Trainer类 从而发现

    2024年02月08日
    浏览(34)
  • Chinese-LangChain:基于ChatGLM-6b+langchain实现本地化知识库检索与智能答案生成

    Chinese-LangChain:中文langchain项目,基于ChatGLM-6b+langchain实现本地化知识库检索与智能答案生成 https://github.com/yanqiangmiffy/Chinese-LangChain 俗称:小必应,Q.Talk,强聊,QiangTalk 🐯 2023/04/19 引入ChuanhuChatGPT皮肤 📱 2023/04/19 增加web search功能,需要确保网络畅通! 📚 2023/04/18 webui增加知

    2024年02月06日
    浏览(41)
  • 【ChatGLM】基于 ChatGLM-6B + langchain 实现本地化知识库检索与智能答案生成: 中文 LangChain 项目的实现开源工作

      目录 【ChatGLM】基于 ChatGLM-6B + langchain 实现本地化知识库检索与智能答案生成: 中文 LangChain 项目的实现开源工作 1.克隆源代码:

    2024年02月11日
    浏览(34)
  • AIGC内容分享(三):AIGC应用:基于RAG构建个人知识库

    目录 前言 Collect (收集) 收集是什么? Organize (组织) 组织信息 Distill (提炼) 提炼信息 Express (表达) 表达见解 Finetune调优 调整输出内容 总结一下 在信息爆炸的时代,如何有效地处理和汲取大量的信息成为一个关键的挑战,尤其对于知识工作者。如果有一个知识库就像外挂大脑

    2024年02月02日
    浏览(33)
  • AnythingLLM:基于RAG方案构专属私有知识库(开源|高效|可定制)

    继OpenAI和Google的产品发布会之后,大模型的能力进化速度之快令人惊叹,然而,对于很多个人和企业而言,为了数据安全不得不考虑私有化部署方案,从GPT-4发布以来,国内外的大模型就拉开了很明显的差距,能够实现的此路径无非就只剩下国内的开源大模型可以选择了。而

    2024年02月04日
    浏览(43)
  • 【高级RAG技巧】在大模型知识库问答中增强文档分割与表格提取

    文档分割是一项具有挑战性的任务,它是任何知识库问答系统的基础。高质量的文档分割结果对于显著提升问答效果至关重要,但是目前大多数开源库的处理能力有限。 这些开源的库或者方法缺点大致可以罗列如下: 只能处理文本,无法提取表格中的内容 缺乏有效的分割策

    2024年04月22日
    浏览(24)
  • langchain ChatGPT AI私有知识库

    原理就是把文档变为向量数据库,然后搜索向量数据库,把相似的数据和问题作为prompt, 输入到大模型,再利用GPT强大的自然语言处理、推理和分析等方面的能力将答案返回给用户 langchain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了

    2024年02月11日
    浏览(29)
  • LangChain-Chatchat 开源知识库来了

    LangChain-Chatchat 是基于 ChatGLM 等大语言模型与 LangChain 等应用框架实现,开源、可离线部署的 RAG 检索增强生成大模型知识库项目。最新版本为 v0.2.10,目前已收获 26.7k Stars,非常不错的一个开源知识库项目。 项目地址:https://github.com/chatchat-space/Langchain-Chatchat 顾名思义,LangC

    2024年04月17日
    浏览(29)
  • LangChain + ChatGLM2-6B 搭建个人专属知识库

    之前教过大家利用 langchain + ChatGLM-6B 实现个人专属知识库,非常简单易上手。最近,智谱 AI 研发团队又推出了 ChatGLM 系列的新模型 ChatGLM2-6B,是开源中英双语对话模型 ChatGLM-6B 的第二代版本,性能更强悍。 树先生之所以现在才更新 ChatGLM2-6B 知识库教程,是想等模型本身再多

    2024年02月16日
    浏览(41)
  • 基于 InternLM 和 LangChain 搭建你的知识库

    如何打造垂域大模型是一个重要落地方向。 如何打造个人专属的大模型应用也是重要的问题。 RAG 外挂一个知识库 优势:成本低,实时更新 劣势:能力受基座模型影响大,RAG每次需要将检索文档和问题提交给大模型,极大占用上下文限制。 Finetune 轻量级的微调 优势:可以充

    2024年01月19日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包