用LangChain教AI模仿你的写作风格:详细教程

近年来,大型语言模型(LLMs)在各类任务中的应用如雨后春笋般涌现。然而,如何让这些模型准确地模仿个人的写作风格仍是一个挑战。在本文中,我们将通过LangChain的工具链,向大家展示如何构建一个能模仿你写作风格的LLM。你将学习如何提取、处理文档,生成嵌入,以及创建一个高效的检索生成(RAG)管道,进而让AI更好地帮助你完成写作。


核心原理

    1. 文档提取与分块:通过LangChain的Documents对象加载原始文本,并将其分块以适配LLM的上下文窗口。这一步确保模型能有效处理大量内容,同时剔除冗余信息,提取关键文字。
    1. 嵌入生成:利用嵌入模型(如OpenAI Embeddings)将文本转化为数值向量,构建可供检索的语义索引。这些嵌入捕捉了文本的语义信息,为检索和生成提供精准的语义匹配。
    1. 高效检索:通过向量数据库(如ChromaDB),结合父子文档结构,实现对大文档的精准片段检索,确保模型生成的内容与原始写作风格保持一致。
    1. 上下文驱动生成:基于检索到的文档上下文,让LLM在保持风格一致性的同时生成新的内容。这种方法为模型提供了参考语料,从而增强生成内容的个性化与连贯性。
    1. 模仿写作风格:将作者过往的文字作为参考,提供给AI,让AI学会模仿特定的写作风格。通过将这些参考文本作为上下文,模型能够捕捉作者语言的独特节奏、用词和语调,生成高度相似的文本。

通过以上步骤,模型能够将作者的写作特点内化并体现在生成的内容中,使AI成为真正意义上的“写作助手”。


为什么选择LangChain?

LangChain是一款功能强大的RAG库,它支持Python和JavaScript。RAG技术通过结合外部文档增强LLM的生成能力,无需对模型进行繁琐的微调,是解决生成不可靠文本的利器。

虽然很多时候提示词已经够用,但结合RAG可以进一步增强模型的生成能力,特别是当需要生成更高质量和个性化内容时。探索LangChain的初衷正是希望用LLM辅助写作,通过增强上下文信息来获得更优质的生成效果。


步骤1:提取文档

LangChain的Documents对象让加载文本数据变得简单。这些文档可以轻松拆分后加入到生成链中。

首先,准备好你需要的文档(如博客文章)。以下代码展示了如何将存储在目录中的HTML文档加载到LangChain的Documents对象中:

from os import listdir  
from os.path import isfile, join  
  
mypath = 'project_directory'  
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]  
onlyfiles = [x for x in onlyfiles if 'htm' in x]

接着,使用LangChain的HTML解析器将这些文件转换为可用的文档:

from langchain_community.document_loaders import UnstructuredHTMLLoader  
  
data = {}  
for i, file in enumerate(onlyfiles):  
    loader = UnstructuredHTMLLoader(file)  
    data[i] = loader.load()

每个文档包括内容(page_content)和元数据(如标题)。由于LLM的上下文窗口有限(例如ChatGPT-3.5的窗口大小为4096个tokens),需要对文档进行分块以提高处理效率。

from langchain.text_splitter import TokenTextSplitter  
  
text_splitter = TokenTextSplitter(chunk_size=1000, chunk_overlap=25)  
texts = {data[i][0].metadata['source']: text_splitter.split_documents(data[i]) for i in range(len(data))}

步骤2:生成嵌入

嵌入(Embeddings)是将文本转换为向量的一种方式,是RAG管道的核心。在这里,我们使用OpenAI的嵌入模型,并将向量存储在本地的ChromaDB中。

from langchain_community.vectorstores import Chroma  
from langchain_openai.embeddings import OpenAIEmbeddings  
  
for i, key in enumerate(texts.keys()):  
    vectordb = Chroma.from_documents(  
        texts[key],  
        embedding=OpenAIEmbeddings(api_key='your_open_ai_key'),  
        persist_directory='./LLM_train_embedding/Doc'  
    )  
    vectordb.persist()

步骤3:实现文档检索

为了让LLM能够基于上下文生成内容,我们需要一个高效的检索机制。以下代码展示了如何使用ChromaDB的检索功能:

retriever = vectordb.as_retriever(search_type='mmr', search_kwargs={'k': 1})  
retriever.get_relevant_documents('What is a Sankey?')

此外,我们还可以实现父文档检索,通过将大文档拆分为父子文档,提高检索的精确度:

from langchain.retrievers import ParentDocumentRetriever  
from langchain.storage import InMemoryStore  
from langchain.text_splitter import TokenTextSplitter  
  
child_splitter = TokenTextSplitter(chunk_size=250, chunk_overlap=10)  
parent_splitter = TokenTextSplitter(chunk_size=1000, chunk_overlap=50)  
  
vectorstore = Chroma(  
    collection_name="full_documents",  
    embedding_function=OpenAIEmbeddings(api_key='your_api_key')  
)  
  
store = InMemoryStore()  
retriever = ParentDocumentRetriever(  
    vectorstore=vectorstore,  
    docstore=store,  
    child_splitter=child_splitter,  
    parent_splitter=parent_splitter  
)  
  
for i inrange(len(data)):  
    retriever.add_documents(data[i])  
retriever.get_relevant_documents('What is a Sankey?')

步骤4:生成文本

最后,我们利用检索到的文档作为上下文,让LLM生成模仿你写作风格的文本。以下是一个使用LangChain RetrievalQA链的实现示例:

from langchain_core.output_parsers import StrOutputParser  
from langchain_core.prompts import ChatPromptTemplate  
from langchain_openai import ChatOpenAI  
  
template = """Mimic the writing style in the context:  
{context} and produce a blog on the topic  
  
Topic: {topic}  
"""  
  
prompt = ChatPromptTemplate.from_template(template)  
model = ChatOpenAI(api_key='your_api_key')  
  
chain = (  
    {  
        "context": retriever,  
        "topic": lambda x: x["topic"]  
    }  
    | prompt  
    | model  
    | StrOutputParser()  
)  
  
output = chain.invoke({"topic": "Pakistan"})  
print(output)

总结

通过以上步骤,你已经掌握了如何使用LangChain构建一个模仿你写作风格的LLM。从文档提取、嵌入生成,到检索与内容生成,每一步都至关重要。

结合RAG技术,LLM不仅能生成高质量内容,还能精准模仿你的写作风格,为你的创作带来更多可能性。

那么,如何系统的去学习大模型LLM?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

所有资料 ⚡️ ,朋友们如果有需要全套 《AI大模型入门+进阶学习资源包**》,扫码获取~

篇幅有限,部分资料如下:

👉LLM大模型学习指南+路线汇总👈

💥大模型入门要点,扫盲必看!
在这里插入图片描述
💥既然要系统的学习大模型,那么学习路线是必不可少的,这份路线能帮助你快速梳理知识,形成自己的体系。

路线图很大就不一一展示了 (文末领取)
在这里插入图片描述

👉大模型入门实战训练👈

💥光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

👉国内企业大模型落地应用案例👈

💥两本《中国大模型落地应用案例集》 收录了近两年151个优秀的大模型落地应用案例,这些案例覆盖了金融、医疗、教育、交通、制造等众多领域,无论是对于大模型技术的研究者,还是对于希望了解大模型技术在实际业务中如何应用的业内人士,都具有很高的参考价值。 (文末领取)
在这里插入图片描述

👉GitHub海量高星开源项目👈

💥收集整理了海量的开源项目,地址、代码、文档等等全都下载共享给大家一起学习!
在这里插入图片描述

👉LLM大模型学习视频👈

💥观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 (文末领取)
在这里插入图片描述

👉640份大模型行业报告(持续更新)👈

💥包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

👉获取方式:

这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐