大模型agent开发之transformer
文档转换器
将文档分成小的,有意义的语句块。
将小的块组合成一个更大的块,直到达到一定大小。
一旦达到一定大小,接着开始创建与下一个块重叠的部分。
1. 分割文档
文档分割可以使用langchain组件中的RecursiveCharacterTextSplitter方法,这是一种文本分割器。可以根据指定的字符或者字符集进行递归分割,并且可以尽可能保持内容的完整性和连贯性。
def doc_segment(self, file): # 加载要分割的文档 with open(file) as f: fragment = f.read() # 初始化分割器 text_splitter = RecursiveCharacterTextSplitter( chunk_size=50, # 切割文本块大小,一般通过长度函数计算 chunk_overlap=20, # 切分的文本块重叠大小,一般通过长度函数计算 length_function=len, # 长度函数,也可以传递tokensize函数 add_start_index=True, # 是否添加起始索引 ) text = text_splitter.create_documents([fragment]) return text
这里chunk_size指定了每个文本块的最大长度,chunk_overlap指定了相邻块之间的重叠部分。length_function表示使用的长度函数,add_start_index添加起始索引。
2. 分割字符串
langchain组件中也可以使用CharacterTextSplitter作为文本分割器,这是一种基于字符串分割的简单分割器。这是一种按照预设字符串长度将文本划分为较小的段落,适合处理简单任务,将一段文本分会固定大小的块。
def str_segment(self, str_data): # 加载要分割的文档 with open(str_data) as f: fragment = f.read() # 初始化分割器 text_splitter = CharacterTextSplitter( chunk_size=50, # 切割文本块大小,一般通过长度函数计算 chunk_overlap=20, # 切分的文本块重叠大小,一般通过长度函数计算 length_function=len, # 长度函数,也可以传递tokensize函数 add_start_index=True, # 是否添加起始索引 is_separator_regex=False, # 是否使用正则表达式 ) text = text_splitter.create_documents([fragment]) return text
3. 代码文档分割
RecursiveCharacterTextSplitter.from_language()
是 Langchain 中 RecursiveCharacterTextSplitter
类的一个静态方法,用于根据指定的语言作为文本分割器并且支持解析编程语言。
def code_segment(self, code_file): py_spliter = RecursiveCharacterTextSplitter.from_language( language=Language.PYTHON, chunk_size=50, chunk_overlap=10, ) python_doc = py_spliter.create_documents([code_file]) return python_doc
这里的language参数为指定的语言。
4. token文本分割
CharacterTextSplitter.from_tiktoken_encoder是Langchain中CharacterTextSplitter类的静态方法,主要是利用OpenAI中tiktoken库来基于token长度来进行文本分割。
def token_segment(self, token_data): # 要分割的文档 with open(token_data) as f: frgment = f.read() text_spliter = CharacterTextSplitter.from_tiktoken_encoder( encoding_name="gpt-3.5-turbo", #指定 tiktoken 编码器 chunk_size=4000, # 切割文本块大小,一般通过长度函数计算 chunk_overlap=30, # 切分的文本块重叠大小,一般通过长度函数计算 ) text = text_spliter.create_documents([frgment]) return text
这里的encoding_name参数指定模型作为tiktoken的编码器,默认模型为gpt-3.5-turbo。
5. 文档总结和翻译
文档总结和翻译需要安装doctran
pip install doctran
doctran是专门进行文档翻译、总结和精练的库。
# 文档总结翻译 def summ_trans_doc(self, file): doctrans = Doctran( openai_api_key="http://localhost:11343/api/chat", openai_model="llama3", openai_token_limit=8000 ) docments = doctrans.parse(content=file) # 总结文档&翻译&精练文档 translated_summary = docments.summarize(token_limit=800).translate(language="chinese").refine( topics=["test1", "test2"]).execute() return translated_summary=
doctrans.parse用于解析输入file的内容。
.summarize()对文档进行总结,通过token设置来限制总结内容大小。
.translate()将文档总结翻译成中文。
.refine()对文档根据指定的主题进行精练。
.execute()执行整个链式操作并获取结果。