AI - 使用LangChain构建简单LLM应用程序
什么是LLM
LLM(Large Language Model,大型语言模型)是一种由大量文本数据训练而成的深度学习模型,能够理解和生成自然语言。例如,GPT-3就是一种流行的LLM,可以用于执行各种自然语言处理任务,如语言翻译、文本生成、问答系统等。这些模型在理解和生成自然语言方面表现出色,因其可以处理复杂的语言任务而备受关注。
A large language model (LLM) is a type of computational model designed for natural language processing tasks such as language generation. As language models, LLMs acquire these abilities by learning statistical relationships from vast amounts of text during a self-supervised and semi-supervised training process.
– From Wikipedia
什么是LangChain
LangChain是一个强大的框架,旨在简化与大型语言模型(LLM)的交互。这一框架为开发人员提供了结构化的方式来调用和操作语言模型,从而增加开发效率和应用程序的可维护性。
LangChain is a software framework that helps facilitate the integration of large language models (LLMs) into applications. As a language model integration framework, LangChain’s use-cases largely overlap with those of language models in general, including document analysis and summarization, chatbots, and code analysis.
– From Wikipedia
LangChain 的组成部分
LangChain 主要由以下几个核心组件构成:
- 模型(Models):
- OpenAI:一个具体实现 LLM 接口的类,用于与 OpenAI 的 API 交互。
- 其他 LLM 提供商:可以扩展以支持不同的 LLM 提供商,如 Hugging Face 等。
- 链(Chains):
- LLMChain:这是 LangChain 的核心功能模块,负责处理输入、构建请求、调用 LLM 提供商的 API 并返回处理后的响应。它提供了一个统一的接口来与不同的 LLM 提供商交互。
- 提示工程(Prompt Engineering):
- 模板(Templates):模板用于定义如何构建请求的格式和结构,帮助规范化输入数据,从而使 LLM 可以更加准确地理解和处理请求。
- 中间件和工具(Middleware & Tools):
- 错误处理:提供内置的错误处理机制,确保在遇到错误时能够优雅地恢复和处理。
- 日志记录:记录 API 请求和响应的日志,以便进行调试和分析。
- 缓存:支持请求的缓存机制,以提升响应速度和减少 API 调用次数。
为什么使用LangChain
使用LangChain有以下几个主要优点:
- 简化与LLM的交互:LangChain提供了一套抽象层,使得与LLM的交互变得更加简便。
- 提高代码可读性和可维护性:通过LangChain,开发者可以使用清晰、结构化的代码,与传统上直接调用API的方式相比,代码更加易读和易维护。
- 可扩展性和灵活性:LangChain支持多种LLM提供商,并且可以根据需求进行扩展,非常适合多种应用场景。
LangChain 的设计宗旨是为开发人员与大型语言模型交互提供方便、灵活和高效的解决方案。通过利用其抽象层和工具,开发人员可以专注于核心业务逻辑的实现,提升开发效率并确保应用的可靠性,这也是为什么在开发 LLM 应用时推荐使用 LangChain 的原因,就像和web服务器交互一样,客户端使用http client library,而不会去直接按照http协议去拼写http文本。
示例应用
目前,由于OpenAI对中国地区已经不在开放API Key,本文选择使用Groq作为LLM。Groq是一家Fast AI Inference公司,更多信息请参考其官网。
以下我们将利用LangChain和Groq API创建一个简单的JavaScript应用程序,实现将英文单词翻译为其他语言的功能。
第一步:设置开发环境
首先,创建一个新目录并进入该目录:
mkdir langchain-translation-app
cd langchain-translation-app
初始化一个新的Node.js项目:
npm init -y
安装必要的依赖:
# 安装langchain
npm install langchain @langchain/core --save# 安装groq的langchain开发包
npm install @langchain/groq --save# 安装环境变量配置库
npm install dotenv --save
第二步:创建项目结构
创建项目所需的文件和目录结构:
langchain-translation-app
├── index.js
├── .env
└── package.json
第三步:配置环境变量
在项目目录中创建一个 .env
文件,并添加Groq API密钥:
GROQ_API_KEY=your_groq_api_key_here
第四步:编写主应用程序
在 index.js
中编写应用程序代码,配置LangChain并创建翻译功能。
// 引入LangChain开发包
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
import { StringOutputParser } from "@langchain/core/output_parsers";
import { ChatGroq } from "@langchain/groq";import readline from "readline";
import dotenv from "dotenv";// 加载 .env 文件中的环境变量GROQ_API_KEY
dotenv.config();// 配置Groq LLM
const model = new ChatGroq({model: "mixtral-8x7b-32768",temperature: 0,
});// 创建翻译功能
async function translateWord(word, targetLanguage) {try {/// 构建Prompt Messageconst messages = [new SystemMessage(`Translate the following from English into ${targetLanguage}`),new HumanMessage(`${word}`),];/// 调用LLM API 进行翻译const result = await model.invoke(messages);/// 对返回结果进行解析const parser = new StringOutputParser();const answer = await parser.invoke(result);return answer;} catch (error) {console.error("翻译时出错:", error);}
}const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});console.log("欢迎使用LangChain单词翻译应用程序");
console.log("请输入要翻译的单词,并按回车键确认。");rl.on("line", async (input) => {const [word, targetLanguage] = input.split(" to ");if (!word || !targetLanguage) {console.log('输入格式错误,请使用 "word to language" 的格式,例如 "hello to Spanish"。');return;}const translation = await translateWord(word, targetLanguage);console.log(`翻译结果: ${translation}`);console.log("\n请输入其他单词或按 Ctrl+C 退出。");
});
时序图如下:
通过上述序列图,我们详细展示了LangChain在处理用户输入并与LLM(如OpenAI,GroqAI)进行交互时的工作流程。LangChain简化了与LLM的交互过程,通过抽象和模板使开发者能够高效地构建语言模型应用程序。在实际开发中,LangChain不仅提升了开发效率,还增强了应用的稳定性和可靠性。
第五步:运行应用程序
用以下命令或者npm start
运行应用程序:
node index.js
应该会在终端中看到一个提示,要求输入要翻译的单词。输入单词及其目标语言后,应用程序将调用LangChain和LLM API进行翻译,并输出结果。
bash-3.2$ npm start> langchain-translation-app@1.0.0 start
> node index欢迎使用LangChain单词翻译应用程序
请输入要翻译的单词,并按回车键确认。
西班牙语翻译
> hello to Spanish
翻译结果: HolaThat is the correct translation of "hello" into Spanish. "Hola" is a common greeting used in Spanish-speaking countries, similar to how "hello" is used in English-speaking countries. It can be used in both formal and informal settings, making it a versatile and widely-used greeting.请输入其他单词或按 Ctrl+C 退出。
汉语翻译
> hello to Chinese
翻译结果: 你好 (nǐ hǎo)This is the most common way to say "hello" in Chinese. It can be used in both formal and informal situations.请输入其他单词或按 Ctrl+C 退出。
总结
在本文中,我们使用LangChain和JavaScript创建了一个简单的单词翻译应用程序,通过配置Groq API并使用LangChain框架,我们能够轻松构建出功能强大的语言模型应用程序。在这个基础上,您可以扩展该应用程序,以支持更多的功能和更复杂的应用场景。希望本文对您有所帮助!