大模型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()执行整个链式操作并获取结果。

posted @ 2024-09-08 16:25  我刀呢?  阅读(22)  评论(0编辑  收藏  举报