LangChain---大型语言模型(LLM)的标准接口和编程框架

时间:2024-04-15 19:18:07

1.背景说明

        公司在新的一年规划中突然提出要搞生成式AI(GenAI)的相关东西,在公司分享的参考资料中了解到了一些相关的信息,之所以想到使用LangChain,是因为在应用中遇到了瓶颈问题,除了已经了解和研究过的OpenAI的ChatGpt,基本再没有别的生成AI的相关应用落地。一方面,gpt的目前使用仅限于通过接口秘钥去调用将结果返回到页面上,而公司希望能够通过代码接口的方式传入数据调用不同的开源大语言模型,然后实时返回解析结果。另一方面,OpenAI的所有预训练模型及使用都是收费的,尽管每个token的收费为$0.002~$0.005,但如果输入和输出的内容较多,特别在调试阶段,需要反复测试不同情况下系统的响应,这样积累下来的花费是非常大的。因此决定尝试使用其它的LLM模型代替OpenAI模型,例如Meta于2月份推出的LLaMa模型以及Google的flan-t5-xxl模型。而不管要使用别的任意开源模型,都需要依赖一个访问接口才可以。

2.LangChain

        介绍

        LangChain是一个围绕大型语言模型(Large Language Models, LLMs)建立的开源框架。LangChain不是LLM的提供者,而是提供了一个标准接口,它简化了提示(prompt)管理和优化,通过这个接口,用户可以与各种LLM进行交互,并包括与LLM一起工作的通用工具。LangChain为链(chains)提供了一个标准接口,使开发者能够创建超越单一LLM调用的调用序列。此外,它能够对长篇文字进行总结和对特定数据源的提问进行回答。

        特性

        大型语言模型 (LLMs) 是一种日益变革的技术,使开发者能够建立以前无法想象的应用程序。然而,孤立地使用LLM往往不足以创建真正强大的应用程序,LLMs的真正力量在于它们与其他计算或知识来源的整合。Langchain是一个尖端的开源Python库,专门提供先进的LLM链、代理、工具和索引,它以创新的面向对象的方式创建提示 (prompts),并将工具的输出链化。LangChain和Llama-index正试图准确地解决这些挑战。LangChain为开发者提供了以下功能,其复杂程度依次递增:

(1) LLMs and Prompts

(2) Chains

(3) Data Augmented Generation

(4) Agents

(5) Memory

(6) Evaluation

LangChain的其他一些特点包括它对数据增强生成、代理、内存和评估的支持。它为链提供了一个标准的接口,并与其他工具进行了大量的整合。LangChain还提供了一个标准的代理(agents)接口,提供了一些可供选择的代理,以及端到端的代理实例。这些代理可用于更接地气的问题回答、与API的互动,甚至采取行动。在LangChain中,代理是使用语言模型与其他工具互动的系统。这些代理可以用来为下一代个人助理提供动力--这些系统可以智能地理解用户的意思,然后采取行动来帮助完成目标。内存是LangChain的另一个特点,它允许在链或代理的调用之间持久保存状态。

3 测试

        为了取代OpenAI,首先想到的是HuggingFace库中的模型,在GPT-2时代,我们一直使用该库中的模型,本公众号在2021年写了大量这方面的文章,下面是一个简单应用例子,在这个例子中,共使用了3个类:PromptTemplate用来创建创建提示行的格式prompt,HuggingFaceHub用来建立预训练模型hub_llm,LLMChain用来产生模型链llm_chain。在本例中,使用了google/flan-t5-xxl模型,该模型是在T5【生成摘要(Summarization)的新方法】的基础上发展而来的。

from langchain import PromptTemplate, HuggingFaceHub, LLMChaintemplate = """Question: {question}Answer: Let's think step by step."""prompt = PromptTemplate(template=template, input_variables = ["question"])hub_llm = HuggingFaceHub(        repo_id = model_id,    model_kwargs={"temperature":1, "max_length":364})llm_chain = LLMChain(prompt=prompt, llm=hub_llm)question = "What is mining engineering?"print(llm_chain.run(question))

问题:What is mining engineering?

回答:Mining engineering is the engineering discipline that applies science and technology to the extraction of minerals from the earth.(采矿工程是将科学和技术应用于从地球上提取矿物的工程学科) [first.py]

4 结束语

        本文讨论了LangChain的使用,LangChain是一个围绕大型语言模型(LLM)建立的开源框架,是为了解决成本问题预先训练好的模型。LangChain简化了提示管理和优化,允许用户与各种LLM互动,并创建调用链以超越单一的LLM。该框架还支持数据生成文章。提供了一个使用LangChain的例子,用HuggingFace库中的模型作为预训练模型,用LLMChain生成一个模型链。这个例子的应用成功地回答了"什么是采矿工程"的问题。