首页 > 其他分享 >山东大学项目实训-基于LLM的中文法律文书生成系统(十五)- RAG(4)

山东大学项目实训-基于LLM的中文法律文书生成系统(十五)- RAG(4)

时间:2024-05-31 09:12:05浏览次数:30  
标签:RAG text 模型 langchain 文档 实训 LLM import

引入RAG

RAG前的工作流程如下:向模型提问->模型从已训练数据中查询数据->组织语言->生成答案。

RAG后的工作流程如下:读取文档->分词->嵌入->将嵌入数据存入向量数据库->向模型提问->模型从向量数据库中查询数据->组织语言->生成答案。

嵌入

在人工智能中,嵌入(Embedding)是将数据向量化的一个过程,可以理解为将人类语言转换为大语言模型所需要的计算机语言的一个过程。在我们第二轮测试开始前,首先下载一个嵌入模型:nomic-embed-text 。它可以使我们的Ollama具备将文档向量化的能力。

from langchain_text_splitters import CharacterTextSplitter

text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=100, chunk_overlap=0
)
texts = text_splitter.split_text(state_of_the_union)
loader.load()

使用LangChain

接下来需要一个Document loaders文档

from langchain_community.document_loaders import TextLoader  
  
loader = TextLoader("./index.md")  
loader.load()

接下来需要一个分词器Text Splitter文档

from langchain_text_splitters import CharacterTextSplitter

text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=100, chunk_overlap=0
)
texts = text_splitter.split_text(state_of_the_union)

接下来需要一个向量数据库来存储使用nomic-embed-text模型项量化的数据。既然是测试,我们就使用内存型的DocArray InMemorySearch文档

embeddings = OllamaEmbeddings(model='nomic-embed-text')
vectorstore = DocArrayInMemorySearch.from_documents(doc_splits, embeddings)

测试

首先下载测试文档,我们将会把此文档作为外部数据库供模型检索。注意该文档中提到的:

忽见一彪军马,尽打红旗,当头来到,截住去路。为首闪出一将,身长七尺,细眼长髯,官拜骑都尉,沛国谯郡人也,姓曹,名操,字孟德。

编写代码如下:

from langchain_community.document_loaders import TextLoader
from langchain_community import embeddings
from langchain_community.chat_models import ChatOllama
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_community.embeddings import OllamaEmbeddings

model_local = ChatOllama(model="qwen:7b")

# 1. 读取文件并分词
documents = TextLoader("../../data/三国演义.txt").load()
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=7500, chunk_overlap=100)
doc_splits = text_splitter.split_documents(documents)

# 2. 嵌入并存储
embeddings = OllamaEmbeddings(model='nomic-embed-text')
vectorstore = DocArrayInMemorySearch.from_documents(doc_splits, embeddings)
retriever = vectorstore.as_retriever()

# 3. 向模型提问
template = """Answer the question based only on the following context:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | model_local
    | StrOutputParser()
)
print(chain.invoke("身长七尺,细眼长髯的是谁?"))

模型返回的答案:

身长七尺,细眼长髯的人物是曹操,字孟德,沛国谯郡人。在《三国演义》中,他是主要人物之一。

可见,使用RAG后,模型给到了正确答案。

本篇文章我们使用LangChainRAG对大语言模型进行了一些微调,使之生成答案前可以在我们给到的文档内进行检索,以生成更准确的答案。

RAG是检索增强生成(Retrieval Augmented Generation),主要目的是让用户可以给模型制定一些额外的资料。这一点非常有用,我们可以给模型提供各种各样的知识库,让模型扮演各种各样的角色。

LangChain是开发大语言模型应用的一个框架,内置了很多有用的方法,比如:文本读取、分词、嵌入等。利用它内置的这些功能,我们可以轻松构建出一个RAG的应用。

标签:RAG,text,模型,langchain,文档,实训,LLM,import
From: https://www.cnblogs.com/h1s97x/p/18223747

相关文章

  • Python实训的心路历程——第4天
    时间过得好快,转眼就第四天了,今天还是接着做界面,并往里面添加内容。========================================一天又过去了,但是每天都感觉自己成长了好多呢,哈哈来汇总一下今天的工作和收获今天把界面和一些基础的功能写完了,程序能正常跑了,可以处理实时摄像头、视频、图片三种......
  • 使用 LlamaIndex + Eleasticsearch ,进行 RAG 检索增强生成
    节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学.针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。合集:《大模型面试宝典》(2024版)正式发......
  • 创新实训(五)
    提交记录界面在该界面可以看到提交题目的情况可以查看题目,提交者,结果,用时,内存,使用语言,文件大小,提交时间等信息。点击编号可以查看详细答案和测试用例通过情况右下角可以对该提交记录进行管理......
  • 创新实训(四)
    添加新题功能在题库页面可添加新题点击添加新题按钮并确定后会首先生成一个空白的新题点击标题然后点击管理即可进入题目的管理界面题目部分使用markdown编写,右下角可以设置题目可见性题目管理者者管理页面数据管理页面......
  • 创新实训(二)
    项目测试从项目开发初期开始持续跟进项目功能测试,我主要负责管理员端内容。项目前端概览以下是我们的项目前端的大致框架结构,最上方从左到右依次是我们网站的logo,网站名称,登录注册按钮,再下方是导航栏,可导航到不同的子页面,在最右面是检索框,在下面就是子页面的主体。点击导航栏......
  • Kubernetes 硬盘持久化之 StorageClass
    Kubernetes硬盘持久化之StorageClassStorageClass定义StorageClass为管理员提供了描述存储"类"的方法。不同的类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略。这个类的概念在其他存储系统中有时被称为"配置文件"。每个StorageClass......
  • 创新实训(三)
    添加比赛功能仅展示大致框架,后续待功能完善后进行实际比赛的模拟报名选手列表管理页面......
  • 创新实训 (二)
    在对模型进行部署时,可以使用魔搭默认的环境,CPU免费,GPU有使用的时间限制,需要关联阿里云的账号,因为CodeGeeX要用GPU,所以先选择限制使用时长的GPU。在相应的模型库中选择:CodeFuse-CodeGeeX2-6B使用教程中对应的gitclonehttps://www.modelscope.cn/codefuse-ai/CodeFuse-C......
  • 创新实训 (一)
    为了提高在线评测系统的功能性,需要选择和集成一个强大的代码纠错大模型,用于自动分析和纠正用户提交的代码中的错误。这里的大模型我们选择使用清华大学开源的ChatGLM-CodeGeeX2。在该模型的基础上,选用程序设计试题的专门数据,进行Fine-turning的训练(即微调)。为了令CodeGeeX在......
  • 创新实训 (四)
    在线评测系统的前后端都是使用PHP进行开发的。PHP是一种广泛用于Web开发的服务器端脚本语言,有以下特点:开源和跨平台:PHP是一种开源语言,可以在各种操作系统上运行,如Windows、Linux和macOS。这使得PHP非常灵活和可访问。易学易用:与其他编程语言相比,PHP的语法相对简单,学习......