发现LangChain:与您的文件聊天,聊天机器人翻译器,与维基百科聊天,合成数据生成器

发掘LangChain:与您的文件聊天、与聊天机器人翻译器交谈、与维基百科对话、使用合成数据生成器

生成型AI世界的增长也得益于一个重要的Python库:LangChain,最近几个月的兴趣也在增长,如下图所示。

Google Trends

什么是LangChain?

广义上讲,LangChain是一个封装库,更具体地说,它是一个用于开发基于大型语言模型的应用程序的开源框架。

该框架的构思是”链”起不同的组件来构建更高级的用例,以利用LLM(大型语言模型)。

LangChain由几个组件构成。

  • Schema(模式):用于构建AI模型的基础数据结构,包括文本、聊天消息和文件等多种形式。
  • Models(模型):框架中涵盖了几个模型。大型语言模型以文本字符串作为输入,返回文本字符串。聊天模型以聊天消息列表作为输入,并返回聊天消息。文本嵌入模型以文本作为输入,并返回一个向量,即一组浮点数。
  • Prompts(提示):它们代表了模型的新的编程方式。不好的提示会导致不好的输出,而好的提示则很有威力。良好的提示可以使用多个对象进行结构化,例如模板、具体示例和输出解析。
  • Indexes(索引):它们允许LLM与文档进行交互。它们接收用户的查询并返回最相关的信息。索引有多种类型,包括文档加载器、文本分割器、向量存储和检索器。文档加载器用于从各种来源加载文档,文本分割器用于将用户的查询拆分成较小的块,向量存储可以存储大量嵌入,检索器用于从加载的数据中检索相关信息。
  • Memory(记忆):它允许AI系统记住与用户的之前的对话,并更好地理解用户的上下文。记忆以聊天历史的形式存储。
  • Chains(链):它们是AI系统作为对用户输入的响应而产生的一系列回答。有简单的链,基于对用户问题的连续回答。同时,总结链则使用自然语言处理算法,生成用户输入的摘要以模拟类似人类的对话。
  • Agents(代理):它们是使AI系统能够与用户进行交互的软件组件。有两种类型的代理:工具包和代理。工具包是具备构建AI应用所需资源的框架。代理是预先构建的AI应用程序,可以直接用于与客户进行交互。

LangChain的典型用例包括文档分析、聊天机器人、摘要、代码分析等等…

在本文中,我探索了四个用例,您可以在此笔记本中跟随使用OpenAI的GPT 3.5 turbo进行实验。

与您的文档聊天

在第一个用例中,我围绕知识库问答进行了漫游。在这类应用程序中,文档被加载并拆分以创建嵌入并存储到向量存储中,这是一种方便进行向量搜索的数据结构。通过用户的查询,也被转换为嵌入,语义搜索工作会检索正确的信息以生成输出答案。

来自LangChain的QA流程

对于这个任务,我上传了一篇关于情感分析和情感检测评论的论文,然后是我其中一个查询的结果:

llm = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')chain = load_qa_chain(llm, chain_type="map_reduce")query1 = "可以解释一下文件中提到的情感分析和情感检测中的挑战吗?"docs = docsearch.similarity_search(query1)chain.run(input_documents=docs, question=query1)

根据提供的信息,文件中提到的情感分析和情感检测中的挑战包括:缺乏资源: 文档提到的挑战之一是缺乏资源,特别是难以为统计算法收集到大型注释数据集。大规模数据集的手动标注是耗时且可靠性较低的。情感的使用: 文档指出,在情感分析和情感检测中使用情感是一种挑战。它没有提供有关该挑战如何发生的进一步细节。网络俚语的传播: 文档提到网络俚语在情感和情感分析中是一种挑战。它没有提供有关该挑战如何影响分析的进一步细节。词汇和句法的歧义: 文档指出词汇和句法的歧义是情感分析和情感检测中的一个挑战。该文档没有提供进一步关于该挑战如何影响分析的细节。缺乏传达感受的标准规则: 文档强调在多个平台上缺乏传达感受的标准规则是一个挑战。它提到个体以不同方式表达情感,使得研究人员很难开发出可以在所有领域高效工作的技术。请注意,提供的信息基于对该文件提取的部分内容,可能还有其他未包含在此处的完整文档中提到的挑战。

聊天机器人翻译

在第二个用例中,我探索了典型的对话式人工智能,随着ChatGPT的出现,它已经被颠覆:聊天机器人。为了实现这个目标,我使用了一个基于系统的架构,将人类信息和人工智能信息进行编排,以执行翻译任务。

来自LangChain的聊天机器人流水线

以下是我查询的结果之一:

chat = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')chat([HumanMessage(content="将这句话从英文翻译成德文:我对创业公司的发展很感兴趣")])

AIMessage(content='Ich interessiere mich für die Entwicklung eines Start-up-Unternehmens.')

这是从德文到英文的结果,通过Google翻译作为测试…令人印象深刻!

我不精通德文,但我认为当你需要用另一种语言写作/阅读时,这可能很有帮助。

与维基百科聊天

对于第三个任务,我曾考虑过维基百科页面的网页抓取,但我决定选择最简单的方法,利用Python库来方便地访问和解析维基百科上的数据。通过“WikipediaRetriever”,我能够提问并获得所需的信息。然后,这是我提问的结果。

model = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')qa = ConversationalRetrievalChain.from_llm(model, retriever=retriever)questions = [    "什么是风暴?",    "什么是可持续发展?",    "什么是气候变化?",]chat_history = []for question in questions:    result = qa({"question": question, "chat_history": chat_history})    chat_history.append((question, result["answer"]))    print(f"-> **问题**: {question} \n")    print(f"**回答**: {result['answer']} \n")

-> **问题**: 什么是风暴? **回答**: 风暴是一种以强风、降水(如雨、雪或冰雹)以及经常伴有雷电的天气事件。风暴的强度和持续时间各不相同,可以出现在各种形式,如雷暴、飓风、暴风雪或龙卷风等。风暴可以对财产造成重大损害,并对人类安全构成风险。-> **问题**: 什么是可持续发展? **回答**: 可持续发展是指在长期内维持或支持某种事物的能力。在环境的背景下,可持续发展通常关注对抗主要环境问题,如气候变化、生物多样性丧失和污染。它涉及在经济发展、环境保护和社会福祉之间找到平衡。可持续发展可以指导全球、国家和个人层面的决策,旨在满足当前一代的需求,而不 comprom 子不危及未来各代满足自身需求的能力。-> **问题**: 什么是气候变化? **回答**: 气候变化指的是地球气候模式的长期变化,包括温度、降水、风模式和气候系统的其他方面的变化。它主要由人类活动引起,特别是燃烧化石燃料释放出温室气体到大气中。这些温室气体,如二氧化碳和甲烷,会吸收热量并导致地球变暖。气候变化对环境、生态系统和人类社会产生广泛影响,包括海平面上升、更频繁和强烈的极端天气事件、生物多样性丧失以及对人类健康和福祉构成威胁。它被认为是人类面临的最大挑战之一,需要全球努力来减轻其影响并适应变化。

我认为这是一个有用的工具,当你想要查询维基百科中的概要信息时。

合成数据生成器

最后一个任务中,我想利用ChatGPT的生成能力来生成合成数据。这些人工生成的数据模拟真实数据的特征,而不包含任何真实个体或实体的信息。

首先,需要给出你想要生成的数据的结构,例如,我想要生成的变量是有关医疗费用的数据。

class MedicalCharges(BaseModel):    ID: int    Age: int    BMI: float    Height: int    Children: int    Charges: float

为了给合成数据生成器提供一个方向,提供一些与现实世界相似的例子是有帮助的。

examples = [    {        "example": """ID: 123456, 年龄: 34, BMI: 27.9,        子女数: 0, 身高: 170, 费用: 1884.90"""    },    {        "example": """ID: 253459, 年龄: 45, BMI: 22.7,        子女数: 2, 身高: 167, 费用: 1725.34"""    },    {        "example": """ID: 323758, 年龄: 23, BMI: 18.9,        子女数: 0, 身高: 178, 费用: 3866.60"""    }]

在这一步,我可以指导合成数据生成器创建一个带有指令的提示模板,告诉大型语言模型如何以正确的格式生成合成数据。

OPENAI_TEMPLATE = PromptTemplate(input_variables=["example"], template="{example}")prompt_template = FewShotPromptTemplate(    prefix=SYNTHETIC_FEW_SHOT_PREFIX,    examples=examples,    suffix=SYNTHETIC_FEW_SHOT_SUFFIX,    input_variables=["subject", "extra"],    example_prompt=OPENAI_TEMPLATE,)

现在,一切都准备好建立一个数据生成器模型和合成数据了。

synthetic_data_generator = create_openai_data_generator(    output_schema=MedicalCharges,    llm=ChatOpenAI(temperature=1, model_name='gpt-3.5-turbo'),    prompt=prompt_template,)synthetic_results = synthetic_data_generator.generate(    subject="Medical_Charges",    extra="chosen at random",    runs=10)

这里是10个样本的结果。

合成数据生成是每个数据科学家都必不可少的工具,因为它可以用于测试、研究和训练机器学习模型,同时保护隐私和安全。

最后的想法

LangChain GitHub 仓库已经获得了超过66k的星标。它是一个强大的工具,可提供访问多个供应商的大型语言模型,如OpenAI、Hugging Face和Google等等。这些模型可以通过API调用进行访问,使开发人员能够构建面向更好生产力的应用程序,只需少量代码。

LangChain 具有的特点使其适合集成到每个公司中,以构建基于大型语言模型的对话AI和其他生成型AI工具,并成为必备工具。

参考资料:

Notebook

LangChain

LangChain 教程

情感分析和文本情感检测的评论