之所以想到使用LangChain [V0.0.123],是因为在应用中遇到了瓶颈问题,如在【使用自定义的岩土数据(GeotechSet)增强ChatGPT的回答能力】中讨论的,OpenAI的所有预训练模型都是收费的,尽管每个token的收费为$0.002~$0.005,但如果输入和输出的内容较多,特别在调试阶段,需要反复测试不同情况下系统的响应,这样积累下来的花费是非常大的。因此决定尝试使用其它的LLM模型代替OpenAI模型,例如Meta于2月份推出的LLaMa模型以及Google的flan-t5-xxl模型。
LangChain是一个围绕大型语言模型(Large Language Models, LLMs)建立的开源框架。LangChain不是LLM的提供者,而是提供了一个标准接口,它简化了提示(prompt)管理和优化,通过这个接口,用户可以与各种LLM进行交互,并包括与LLM一起工作的通用工具。LangChain为链(chains)提供了一个标准接口,使开发者能够创建超越单一LLM调用的调用序列。此外,它能够对长篇文字进行总结和对特定数据源的提问进行回答。
2 LangChain的特性
大型语言模型 (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 试验
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))
回答:Mining engineering is the engineering discipline that applies science and technology to the extraction of minerals from the earth.(采矿工程是将科学和技术应用于从地球上提取矿物的工程学科) [first.py]
4 结束语