Spaces:
Sleeping
Sleeping
""" | |
1. 只有使用PyPDFLoader(from langchain_community.document_loaders import PyPDFLoader), 才能获得在metadata中获得page的信息。 | |
""" | |
from langchain_community.vectorstores import FAISS | |
from langchain.embeddings.huggingface import HuggingFaceEmbeddings | |
import streamlit as st | |
import re | |
from langchain.llms.base import LLM | |
from langchain.llms.utils import enforce_stop_tokens | |
from typing import Dict, List, Optional, Tuple, Union | |
import requests | |
import json | |
# embeddings = HuggingFaceEmbeddings(model_name='/Users/yunshi/Downloads/360Data/Data Center/Working-On Task/演讲与培训/2023ChatGPT/RAG/bge-large-zh/') ## 切换成BGE的embedding。 | |
# from langchain.embeddings.openai import OpenAIEmbeddings | |
# embeddings = OpenAIEmbeddings(disallowed_special=()) ## 可能需要更新了。 | |
# vector_store = FAISS.load_local("./faiss_index/", embeddings=embeddings) ## 加载vector store到本地。 | |
## 在绝对路径中提取完整的文件名 | |
def extract_document_name(path): | |
# 路径分割 | |
path_segments = path.split("/") | |
# 文件名提取 | |
document_name = path_segments[-1] | |
return document_name | |
## 从一段话中提取 1 句完整的句子,且该句子的长度必须超过 5 个词,同时去除了换行符'\n\n'。 | |
import re | |
def extract_sentence(text): | |
""" | |
从一段话中提取 1 句完整的句子,且该句子的长度必须超过 5 个词。 | |
Args: | |
text: 一段话。 | |
Returns: | |
提取到的句子。 | |
""" | |
# 去除换行符。 | |
text = text.replace('\n\n', '') | |
# 使用正则表达式匹配句子。 | |
sentences = re.split(r'[。?!;]', text) | |
# 过滤掉长度小于 5 个词的句子。 | |
sentences = [sentence for sentence in sentences if len(sentence.split()) >= 5] | |
# 返回第一句句子。 | |
return sentences[0] if sentences else None | |
### 综合source的输出内容。 | |
##NOTE: 只有使用PyPDFLoader(from langchain_community.document_loaders import PyPDFLoader), 才能获得在metadata中获得page的信息。 | |
def rag_source(docs): | |
print('starting source function!') | |
print('docs now:', docs) | |
source = "" | |
for i, doc in enumerate(docs): | |
# for i, doc in enumerate(docs): ### original code here. | |
source += f"**【信息来源 {i+1}】** " + extract_document_name(doc.metadata['source']) + ',' + f"第{docs[i].metadata['page']+1}页" + ',部分内容摘录:' + extract_sentence(doc.page_content) + '\n\n' | |
# source += f"**【信息来源 {i+1}】** " + extract_document_name(doc.metadata['source']) + ',' + f"第{docs[i].metadata['page']+1}页" + ',部分内容摘录:' + extract_sentence(doc.page_content) + '\n\n' | |
### original code here. | |
print('source:', source) | |
return source | |