本文主要内容:
- bitsandbytes 量化
- llama_index 对多文档切分和节点信息
- faiss 使用
- 原始回答和 RAG 效果比较
不足之处,现在划分的 chunk_size 太小了,bge 最大输入是 512,并且没有层级关系,如果按照章节划分等形成文档树会好很多。
四大名著的 txt来自于。8G 的显存就可跑起来。
1. 使用 bitsandbytes 对 chatglm3-6b 量化
bitsandbytes 是一个高效的用于对 LLM(Large Language Models)进行量化的工具包。该工具包由 Tim Dettmers 创建,旨在提供对大型语言模型进行位宽量化的功能,以降低模型的计算和存储开销,同时保持尽可能高的性能。
对于 chatglm3-6b 的进行 4bit 量化,从 12227MB 的内存消耗中节省到 4771MB,实现了约 60% 的显存优化。
import os | |
import torch | |
import torch.nn as nn | |
from transformers import (AutoConfig, | |
AutoModel, | |
AutoTokenizer, | |
BitsAndBytesConfig | |
) | |
import warnings | |
warnings.filterwarnings('ignore') | |
import torch | |
class Config: | |
def __init__(self): | |
self.model_name = r"./chatglm3-6b" | |
self.use_4bit = True | |
self.bnb_4bit_compute_dtype = "float16" | |
self.bnb_4bit_quant_type = 'nf4' | |
self.use_nested_quant = False | |
self.compute_dtype = getattr(torch, self.bnb_4bit_compute_dtype) | |
self.chunk_size = 512 | |
self.small_size = 128 | |
self.emb_model_name = "BAAI/bge-large-zh-v1.5" | |
self.input_text1 = "刘备第一次遇见关羽?" | |
self.input_text2 = "曹操在哪和袁绍决战,烧毁了袁绍哪儿的粮草才取胜的?" | |
self.input_text3 = "孙权第一次立的太子是谁,在什么时间被废?" | |
cfg = Config() | |
tokenizer = AutoTokenizer.from_pretrained(cfg.model_name, | |
trust_remote_code=True, | |
use_fast=True, | |
pad_token_id=2 | |
) | |
bnb_config = BitsAndBytesConfig( | |
load_in_4bit=cfg.use_4bit, | |
bnb_4bit_quant_type=cfg.bnb_4bit_quant_type, | |
bnb_4bit_compute_dtype=cfg.compute_dtype, | |
bnb_4bit_use_double_quant=cfg.use_nested_quant | |
) | |
model = AutoModel.from_pretrained( | |
cfg.model_name, | |
trust_remote_code=True, | |
quantization_config = bnb_config | |
) | |
history = [] | |
response, history = model.chat(tokenizer, cfg.input_text1, history=history) | |
print(response) |
回答是 刘备遇见关羽是在《三国演义》中,刘备是蜀汉的开国皇帝,关羽则是刘备麾下的重要将领。在故事中,刘备三顾茅庐才请出诸葛亮,后来关羽加入刘备的队伍,成为他的亲密战友。
这个就很胡编了。另外也可试试其他的回答。
2. 对 4 大名著切分设置 node_info 和 faiss 检索
from langchain.text_splitter import RecursiveCharacterTextSplitter | |
from langchain_community.vectorstores import FAISS | |
from llama_index import Document | |
from llama_hub.file.unstructured import UnstructuredReader | |
from llama_index.node_parser import SentenceSplitter | |
from llama_index.schema import IndexNode | |
def find_files(directory, file_suffix='*.txt'): | |
import glob | |
file_paths = glob.glob(os.path.join(directory, file_suffix)) | |
return file_paths | |
def chunk_docs_and_add_node(data_dir, chunk_size): | |
file_paths = find_files(data_dir) | |
all_nodes = [] | |
names = ['红楼梦', '三国演义', '水浒传', '西游记'] | |
for i, file in enumerate(file_paths): | |
file_name = os.path.splitext(os.path.basename(file))[0] | |
# print(file_name) | |
loader = UnstructuredReader() | |
documents = loader.load_data(file=file) | |
doc_text = "\n\n".join([d.get_content() for d in documents]) | |
docs = [Document(text=doc_text)] | |
node_parser = SentenceSplitter(chunk_size=chunk_size) | |
nodes = node_parser.get_nodes_from_documents(docs) | |
# set node ids to be a constant | |
for idx, node in enumerate(nodes): | |
# print(f"{names[i]}-{idx}") | |
node.id_ = f"{file_name}-{idx}" | |
all_nodes.extend(nodes) | |
return all_nodes | |
all_nodes = chunk_docs_and_add_node('./data', chunk_size=cfg.chunk_size) | |
from langchain.docstore.document import Document | |
docs = [Document(page_content=node.node_id + ":" + node.get_text()) for node in all_nodes] | |
from langchain.vectorstores.faiss import FAISS | |
from langchain_community.embeddings import HuggingFaceBgeEmbeddings | |
model_name = cfg.emb_model_name | |
model_kwargs = {"device": "cuda"} | |
encode_kwargs = { | |
"batch_size":8, | |
"normalize_embeddings": True | |
} | |
hf = HuggingFaceBgeEmbeddings( | |
model_name=model_name, | |
model_kwargs=model_kwargs, | |
encode_kwargs=encode_kwargs, | |
) | |
db = FAISS.from_documents(docs, hf) |
例如,embedding 部分还可以微调,这里有个开箱即用的包 , 还有。
docs = db.similarity_search(cfg.input_text1, k=3) | |
print(f"相关文档有:") | |
for i,c in enumerate(docs): | |
print(i, ":", c.page_content.replace("\n", ''), end='\n\n') |
检索到的片段如下,效果不太好,检索到有部分是三顾诸葛亮的部分。是不是 bge-large-zh-v1.5 中文语料跟这个相关的太多了。也有比较好的,下面检索回答再说。
{ | |
相关文档有: | |
0 : "三国演义 -593:”关公大惊,急退左右,问曰:“先生此来,必有所为?”震出书一缄,递与关公。公视之,乃玄德书也。其略云:备与足下,自桃园缔盟,誓以同死。今何中道相违,割恩断义?君必欲取功名、图富贵,愿献备首级以成全功。书不尽言,死待来命。关公看书毕,大哭曰:“某非不欲寻兄,奈不知所在也。安肯图富贵而背旧盟乎?”震曰:“玄德望公甚切,公既不背旧盟,宜速往见。”关公曰:“人生天地间,无终始者,非君子也。吾来时明白,去时不可不明白。吾今作书,烦公先达知兄长,容某辞却曹操,奉二嫂来相见。”震曰:“倘曹操不允。为之奈何?”公曰:“吾宁死,岂肯久留于此!震曰:“公速作回书,免致刘使君悬望。”关公写书答云:窃闻义不负心,忠不顾死。羽自幼读书,粗知礼义,观羊角哀、左伯桃之事,未尝不三叹而流涕也。前守下邳。", | |
1 : "三国演义 -841: 不期为尊客所闻。”玄德曰:“曾见令婿否?”承彦曰:“便是老夫也来看他。”玄德闻言,辞别承彦,上马而归。正值风雪又大,回望卧龙冈,悒怏不已。后人有诗单道玄德风雪访孔明。诗曰:一天风雪访贤良,不遇空回意感伤。冻合溪桥山石滑,寒侵鞍马路途长。当头片片梨花落,扑面纷纷柳絮狂。回首停鞭遥望处,烂银堆满卧龙冈。玄德回新野之后,光阴荏苒,又早新春。乃令卜者揲蓍,选择吉期,斋戒三日,薰沐更衣,再往卧龙冈谒孔明。关、张闻之不悦,遂一齐入谏玄德。正是:高贤未服英雄志,屈节偏生杰士疑。未知其言若何,下文便晓。第三十八回 定三分隆中决策 战长江孙氏报仇却说玄德访孔明两次不遇,欲再往访之。关公曰:“兄长两次亲往拜谒,其礼太过矣。想诸葛亮有虚名而无实学,故避而不敢见。兄何惑于斯人之甚也!", | |
2 : "三国演义 -790:”玄德曰:“偶尔经由此地,因小童相指,得拜尊颜,不胜万幸!”水镜笑曰:“公不必隐讳。公今必逃难至此。”玄德遂以襄阳一事告之。水镜曰:“吾观公气色,已知之矣。”因问玄德曰:“吾久闻明公大名,何故至今犹落魄不偶耶?”玄德曰:“命途多蹇,所以至此。”水镜曰:“不然。盖因将军左右不得其人耳。”玄德曰:“备虽不才,文有孙乾、糜竺、简雍之辈,武有关、张、赵云之流,竭忠辅相,颇赖其力。”水镜曰:“关、张、赵云,皆万人敌,惜无善用之之人。若孙乾、糜竺辈,乃白面书生,非经纶济世之才也。”玄德曰:“备亦尝侧身以求山谷之遗贤,奈未遇其人何!”水镜曰:“岂不闻孔子云十室之邑必有忠信,何谓无人?”玄德曰:“备愚昧不识,愿赐指教。”水镜曰:“公闻荆襄诸郡小儿谣言乎?其谣曰:八九年间始欲衰,至十三年无孑遗。到头天命有所归,泥中蟠龙向天飞。" | |
} |
3. RAG
使用 ChatGLM3 这类模型,要结合 LangChain 的 Chain 功能,通常需要将模型通过 pipeline
封装,以便转换为 HuggingFacePipeline
对象。
from transformers import pipeline | |
from langchain.prompts import PromptTemplate | |
from langchain_core.runnables import RunnablePassthrough | |
from langchain.chains.question_answering import load_qa_chain | |
from langchain.chains import LLMChain | |
from langchain.llms.huggingface_pipeline import HuggingFacePipeline | |
text_generation_pipeline = pipeline( | |
model=model, | |
tokenizer=tokenizer, | |
task="text-generation", | |
temperature=0., | |
repetition_penalty=1.1, | |
return_full_text=True, | |
max_new_tokens=2048, | |
do_sample=False | |
) | |
chatglm_llm = HuggingFacePipeline(pipeline=text_generation_pipeline) |
接下来实现检索到相关的上下文和 llm 生成答案。
prompt_template = """ | |
尽可能详细地回答问题,从提供的上下文中提供所有细节。如果答案不在提供的上下文中,请说“答案在上下文中不可用”,不要提供错误的答案。\n\n | |
上下文:\n {context}?\n | |
问题: \n{question}\n | |
答案: | |
"""prompt = PromptTemplate(template=prompt_template, input_variables=["context","question"]) | |
llm_chain = LLMChain(llm=chatglm_llm, prompt=prompt) | |
def user_input(user_question, llm_chain, db, return_context=True): | |
retriever = db.as_retriever( | |
search_type="similarity", | |
search_kwargs={'k': 3}, | |
) | |
chain = ( | |
{ | |
"context": retriever, | |
"question": RunnablePassthrough()} | |
| llm_chain) | |
response = chain.invoke(user_question) | |
if return_context: | |
return response | |
return response['text'] |
看看一些例子:
response = user_input(cfg.input_text1, llm_chain, db) | |
from rich import print | |
print(response) |
回答比直接回答要好一些:
{ | |
'context': [ | |
Document( | |
page_content=' 三国演义 -593:”关公大惊,急退左右,问曰:“先生此来,必有所为?”震出书一缄,递与关公。公视之,乃玄德书也。其略云:\n\n 备与足下,自 | |
桃园缔盟,誓以同死。今何中道相违,割恩断义?君必欲取功名、图富贵,愿献备首级以成全功。书不尽言,死待来命。\n\n 关公 | |
看书毕,大哭曰:“某非不欲寻兄,奈不知所在也。安肯图富贵而背旧盟乎?”震曰:“玄德望公甚切,公既不背旧盟,宜速往见。”关公曰:“人生天地间,无终始者,非君子也。吾来时明白,去时不可不明白。吾今作书,烦公先达知兄长,容某辞却曹操,奉二嫂 | |
来相见。”震曰:“倘曹操不允。为之奈何?”公曰:“吾宁死,岂肯久留于此!震曰:“公速作回书,免致刘使君悬望。”关公写书答 | |
云:\n\n 窃闻义不负心,忠不顾死。羽自幼读书,粗知礼义,观羊角哀、左伯桃之事,未尝不三叹而流涕也。前守下邳。' | |
), | |
Document( | |
page_content=' 三国演义 -841: | |
不期为尊客所闻。”玄德曰:“曾见令婿否?”承彦曰:“便是老夫也来看他。”玄德闻言,辞别承彦,上马而归。正值风雪又大,回望 | |
卧龙冈,悒怏不已。后人有诗单道玄德风雪访孔明。诗曰:\n\n 一天风雪访贤良,不遇空回意感伤。冻合溪桥山石滑,寒侵鞍马路 | |
途长。\n\n 当头片片梨花落,扑面纷纷柳絮狂。回首停鞭遥望处,烂银堆满卧龙冈。\n\n 玄德回新野之后,光阴荏苒,又早新春。乃令卜者揲蓍,选择吉期,斋戒三日,薰沐更衣,再往卧龙冈谒孔明。关、张闻之不悦,遂一齐入谏玄德。正是:\n\n 高贤未服英 | |
雄志,屈节偏生杰士疑。\n\n 未知其言若何,下文便晓。\n\n 第三十八回 定三分隆中决策 | |
战长江孙氏报仇 \n\n 却说玄德访孔明两次不遇,欲再往访之。关公曰:“兄长两次亲往拜谒,其礼太过矣。想诸葛亮有虚名而无实学,故避而不敢见。兄何惑于斯人之甚也!' | |
), | |
Document( | |
page_content=' 三国演义 -790:”玄德曰:“偶尔经由此地,因小童相指,得拜尊颜,不胜万幸!”水镜笑曰:“公不必隐讳。公今必逃难至此。”玄德遂以襄阳一事告 | |
之。水镜曰:“吾观公气色,已知之矣。”因问玄德曰:“吾久闻明公大名,何故至今犹落魄不偶耶?”玄德曰:“命途多蹇,所以至此。”水镜曰:“不然。盖因将军左右不得其人耳。”\n\n 玄德曰:“备虽不才,文有孙乾、糜竺、简雍之辈,武有关、张、赵云之流,竭忠辅相,颇赖其力。”水镜曰:“关、张、赵云,皆万人敌,惜无善用之之人。若孙乾、糜竺辈,乃白面书生,非经纶济世之才也。”玄德曰:“备亦尝侧身以求山谷之遗贤,奈未遇其人何!”水镜曰:“岂不闻孔子云十室之邑必有忠信,何谓无人?”玄德曰:“备 | |
愚昧不识,愿赐指教。”水镜曰:“公闻荆襄诸郡小儿谣言乎?其谣曰:八九年间始欲衰,至十三年无孑遗。到头天命有所归,泥中 | |
蟠龙向天飞。' | |
) | |
], | |
'question': '刘备在什么时候遇见关羽?', | |
'text': '刘备在《三国演义》中的第一次遇见关羽是在桃园缔盟之后,当时刘备与关羽、张飞结为兄弟,共同创业。' | |
} |
效果对比
红楼梦 Q1
user_question = "刘姥姥进大观园都得了哪些东西?" | |
response = user_input(user_question, llm_chain, db) | |
print(response) |
直接回答,使用量化后的 4bit 模型直接回答,后面都是这样
response, history = model.chat(tokenizer, user_question, history=[]) | |
print(response) |
回答:
《刘姥姥进大观园》是曹雪芹所著中国古典文学名著《红楼梦》中的一段情节。这段情节中,刘姥姥因为久仰贾府的名声,便来到 | |
了荣国府,并得到了贾母的接见。在这次拜访中,刘姥姥得到了许多珍稀的礼物,如贾母赐给她的金条、贾宝玉送她的青云锁等。此外,刘姥姥还看到了贾府中许多稀奇古怪的景物,如贾宝玉与林黛玉、薛宝钗等人的爱情故事。 |
RAG 回答:好一点吧。
{ | |
'context': [ | |
Document( | |
page_content=' 红楼梦 -1184:”凤姐儿听了,自是欢喜,忙谢道:“只保佑他应了你的话就好了。”说着,叫平儿来吩咐道:“明儿咱们有事,恐怕不得闲儿,你这 | |
会子闲着,把送姥姥的东西打点了,他明儿一早就好走的便宜了。”\n\n 刘姥姥道:“不敢多破费了。已经遭扰了几天,又拿着走,越发心里不安了。”凤姐儿笑道:“也没有什么,不过随常的东西。好也罢,歹也罢,带了去,你们街坊邻舍看着也热闹些,也是上 | |
城一趟。”说着只见平儿走来说:“姥姥过这边瞧瞧。”刘姥姥忙跟了平儿到那边屋里,只见堆着半炕东西。平儿一一的拿给他瞧着,又说道:“这是昨日你要的青纱一匹,奶奶另外送你一个实地月白纱做里子。这是两个茧绸,做袄儿裙子都好。这包袱里是两匹绸子,年下做件衣裳穿。这是一盒子各样内造小饽饽儿,也有你吃过的,也有没吃过的,拿去摆碟子请人,比买的强些。' | |
), | |
Document( | |
page_content=' 红楼梦 -1193: | |
我有好些呢。留着年下给小孩子们罢。”说着,只见一个小丫头拿着个成窑钟子来,递给刘姥姥,说:“这是宝二爷给你的。”刘姥姥 | |
道:“这是那里说起?我那一世修来的,今儿这样!”说着便接过来。鸳鸯道:“前儿我叫你洗澡,换的衣裳是我的,你不弃嫌,我还 | |
有几件也送你罢。”刘姥姥又忙道谢。鸳鸯果然又拿出几件来,给他包好。刘姥姥又要到园中辞谢宝玉和众姊妹王夫人等去,鸳鸯道:“不用去了。他们这会子也不见人,回来我替你说罢。闲了再来。”又命了一个老婆子,吩咐他:“二门上叫两个小厮来,帮着姥姥 | |
拿了东西送去。”婆子答应了。又和刘姥姥到了凤姐儿那边,一并拿了东西,在角门上命小厮门搬出去,直送刘姥姥上车去了,不在 | |
话下。\n\n 且说宝钗等吃过早饭,又往贾母处问安,回园至分路之处,宝钗便叫黛玉道:“颦儿跟我来!有一句话问你。”黛玉便笑 | |
着跟了来。' | |
), | |
Document( | |
page_content=' 红楼梦 -1192: | |
老太太从不穿人家做的,收着也可惜,却是一次也没穿过的,昨日叫我拿出两套来送你带了去,或送人,或自己家里穿罢。这盒子 | |
里头是你要的面果子。这包儿里头是你前儿说的药,梅花点舌丹也有,紫金锭也有,活络丹也有,催生保命丹也有:每一样是一张 | |
方子包着,总包在里头了。这是两个荷包,带着玩罢。”说着,又抽开系子,掏出两个“笔锭如意”的锞子来给他瞧,又笑道:“荷包 | |
你拿去,这个留下给我罢。”刘姥姥已喜出望外,早又念了几千佛,听鸳鸯如此说,便忙说道:“姑娘只管留下罢。”鸳鸯见他信以为 | |
真,笑着仍给他装上,说道:“哄你玩呢!我有好些呢。留着年下给小孩子们罢。”说着,只见一个小丫头拿着个成窑钟子来,递给 | |
刘姥姥,说:“这是宝二爷给你的。”刘姥姥道:“这是那里说起?我那一世修来的,今儿这样!”说着便接过来。鸳鸯道:“前儿我叫 | |
你洗澡,换的衣裳是我的,你不弃嫌,我还有几件也送你罢。”刘姥姥又忙道谢。' | |
) | |
], | |
'question': '刘姥姥进大观园都得了哪些东西?', | |
'text': '刘姥姥进大观园得到了许多东西,包括青纱、实地月白纱、茧绸、绸子、各样内造小馒头、面果子、药、锞子等。' | |
} |
水浒传 Q1
user_question = "武松杀死西门庆后被流放到哪里?" | |
response = user_input(user_question, llm_chain, db) | |
print(response) |
回答:
武松杀死西门庆后,因遭受官府通缉,被流放到了外地。具体来说,武松被流放到恩州(今甘肃省庆阳市)。在《水浒传》中,武 | |
松在杀掉西门庆后,为了躲避官府的追捕,便离开清河县,前往他人在恩州避难。后来,武松在恩州结识了鲁智深,两人结为兄弟。 |
RAG 回答:这个效果非常好,检索到了答案,相对比原来的回答具体很多。
{ | |
'context': [ | |
Document( | |
page_content=' 水浒传 -941: | |
据武松虽系报兄之仇,斗杀西门庆奸夫人命,亦则自首,难以释免:脊杖四十,刺配二千里外。奸夫淫妇虽该重罪,已死勿论。其 | |
余一干人犯释放宁家。文书到日,即便施行。”东平府尹陈文昭看了来文,随即行移,拘到何九叔、郓哥并四家邻舍和西门庆妻小,一干人等都到厅前听断。牢中取出武松,读了朝廷明降,开了长枷,脊杖四十。上下公人都看觑他,止有五七下着肉。取一面七斤 | |
半铁叶团头护身枷钉了,脸上免不得刺了两行金印,迭配孟州牢城。其余一干众人,省谕发落,各放宁家。大牢里取出王婆,当厅 | |
听命。读了朝廷明降,写了犯由牌,画了伏状,便把这婆子推上木驴,四道长钉,三条绑索,东平府尹判了一个剐字,拥出长街。两声破鼓响,一棒碎锣鸣,犯由前引,混棍后催,两把尖刀举,一朵纸花摇,带去东平府市心里,吃了一剐。\n\n 话里只说武松带 | |
上行枷,看剐了王婆。' | |
), | |
Document( | |
page_content=' 水浒传 -928: | |
肐查一刀,便割下那妇人头来,血流满地。四家邻舍,吃了一惊,都掩了脸。见他凶了,又不敢动,只得随顺他。武松叫土兵去楼 | |
上取下一床被来,把妇人头包了,揩了刀,插在鞘里。洗了手,唱个喏,说道:“有劳高邻,甚是休怪。且请众位楼上少坐,待武二 | |
便来。”四家邻舍都面面相看,不敢不依他,只得都上楼去坐了。武松分付土兵,也教押那婆子上楼去。关了楼门,着两个土兵在楼 | |
下看守。\n\n 武松包了妇人那颗头,一直奔西门庆生药铺前来,看着主管唱个喏:“大官人宅上在么?”主管道:“却才出去。”武松 | |
道:“借一步,闲说一句话。”那主管也有些认得武松,不敢不出来。武松一引引到侧首僻净巷内,武松翻过脸来道:“你要死却是要 | |
活?”主管慌道:“都头在上,小人又不曾伤犯了都头。”武松道:“你要死,休说西门庆去向;你若要活,实对我说,西门庆在那里?”主管道:“却才和一个相识,去狮子桥下大酒楼上吃酒。' | |
), | |
Document( | |
page_content=' 水浒传 -932:”\n\n 那西门庆一者冤魂缠定,二乃天理难容,三来怎当武松勇力。只见头在下,脚在上,倒撞落在当街心里去了,跌得个发昏章第 | |
十一。街上两边人都吃了一惊。武松伸手去凳子边提了淫妇的头,也钻出窗子外,涌身望下只一跳,跳在当街上。先抢了那口刀在 | |
手里,看这西门庆已自跌得半死,直挺挺在地下,只把眼来动。武松按住,只一刀,割下西门庆的头来.把两颗头相结做一处,提 | |
在手里,把着那口刀,一直奔回紫石街来.叫土兵开了门,将两颗人头供养在灵前,把那碗冷酒浇奠了,说道:“哥哥魂灵不远,早 | |
生天界!兄弟与你报仇,杀了奸夫和淫妇。今日就行烧化。”便叫土兵,楼上请高邻下来,把那婆子押在前面。武松拿着刀,提了两 | |
颗人头,再对四家邻舍道:“我还有一句话,对你们四位高邻说则个。”那四家邻舍叉手拱立,尽道:“都头但说,我众人一听尊命。”武松说出这几句话来,有分教:\n\n 名标千古,声播万年。' | |
) | |
], | |
'question': '武松杀死西门庆后被流放到哪里?', | |
'text': '武松杀死西门庆后被流放到孟州牢城。' | |
} |
西游记 Q1
user_question = "孙悟空取经后被封为什么职位?" | |
response = user_input(user_question, llm_chain, db) | |
print(response) |
回答:
孙悟空在《西游记》中取经成功后,被封为“斗战胜佛”。这是因为在取经过程中,孙悟空凭借着自己的勇敢、智慧和战斗力,多次 | |
战胜了妖魔鬼怪,帮助唐僧成功取得真经。因此,孙悟空被尊奉为斗战胜佛,成为了佛教中的保护神。 |
RAG 回答:这个也比较好,看起来利用了检索到的上下文。
{ | |
'context': [ | |
Document( | |
page_content=' 西游记 -3174: | |
此时灵山诸神,都在佛前听讲。八金刚引他师徒进去,对如来道:“弟子前奉金旨,驾送圣僧等,已到唐国,将经交纳,今特缴旨。”遂叫唐僧等近前受职。如来道:“圣僧,汝前世原是我之二徒,名唤金蝉子。因为汝不听说法,轻慢我之大教,故贬汝之真灵,转 | |
生东土。今喜皈依,秉我迦持,又乘吾教,取去真经,甚有功果,加升大职正果,汝为旃檀功德佛。孙悟空,汝因大闹天宫,吾以 | |
甚深法力,压在五行山下,幸天灾满足,归于释教,且喜汝隐恶扬善,在途中炼魔降怪有功,全终全始,加升大职正果,汝为斗战 | |
胜佛。猪悟能,汝本天河水神,天蓬元帅,为汝蟠桃会上酗酒戏了仙娥,贬汝下界投胎,身如畜类,幸汝记爱人身,在福陵山云栈 | |
洞造孽,喜归大教,入吾沙门,保圣僧在路,却又有顽心,色情未泯,因汝挑担有功,加升汝职正果,做净坛使者。' | |
), | |
Document( | |
page_content=' 西游记 -3173:”这底下行者三人,连白马平地而起,长老亦将经卷丢下,也从台上起于九霄,相随腾空而去,慌得那太宗与多官望空下拜。这正是:\n\n 圣僧努力取经编,西宇周流十四年。苦历程途遭患难,多经山水受迍邅。\n\n 功完八九还加九,行满三千及大千。大觉妙文 | |
回上国,至今东土永留传。\n\n 太宗与多官拜毕,即选高僧,就于雁塔寺里,修建水陆大会,看诵《大藏真经》,超脱幽冥孽鬼,普施善庆,将誊录过经文,传布天下不题。却说八大金刚,驾香风,引着长老四众,连马五口,复转灵山,连去连来,适在八日之 | |
内。此时灵山诸神,都在佛前听讲。八金刚引他师徒进去,对如来道:“弟子前奉金旨,驾送圣僧等,已到唐国,将经交纳,今特缴 | |
旨。”遂叫唐僧等近前受职。如来道:“圣僧,汝前世原是我之二徒,名唤金蝉子。因为汝不听说法,轻慢我之大教,故贬汝之真灵,转生东土。' | |
), | |
Document( | |
page_content=' 西游记 -124:”这猴亦止朝上唱个喏,道声谢恩。玉帝即命工干官张、鲁二班,在蟠桃园右首起一座齐天大圣府,府内设个二司:一名安静司,一 | |
名宁神司。司俱有仙吏,左右扶持。又差五斗星君送悟空去到任,外赐御酒二瓶,金花十朵,着他安心定志,再勿胡为。那猴王信 | |
受奉行,即日与五斗星君到府,打开酒瓶,同众尽饮。送星官回转本宫,他才遂心满意,喜地欢天,在于天宫快乐,无挂无碍。正 | |
是:\n\n 仙名永注长生箓,不堕轮回万古传。\n\n 毕竟不知向后如何,且听下回分解。\n\n 第五回 乱蟠桃大圣偷丹 | |
反天宫诸神捉怪 \n\n 话表齐天大圣到底是个妖猴,更不知官衔品从,也不较俸禄高低,但只注名便了。那齐天府下二司仙吏,早晚 | |
伏侍,只知日食三餐,夜眠一榻,无事牵萦,自由自在。闲时节会友游宫,交朋结义。见三清称个“老”字,逢四帝道个“陛下”。' | |
) | |
], | |
'question': '孙悟空取经后被封为什么职位?', | |
'text': '孙悟空取经后被封为“斗战胜佛”。' | |
} |
参考
[1] Langchain+RAG+ChatGLM3 量化推理
[2] bge_huggingface
[3] TypeError when chaining Runnables in LangChain: Expected a Runnable, callable or dict
[4] 5-basic-of-large-language-model
ks: chatglm3 quant4bit and rag