一、LangChain介绍
LangChain是一个强大的用于开发大模型应用程序的框架,为开发提供丰富的工具和组件,使得构造复杂的自然语言处理变得更加高效和便捷。它允许开发者将大语言模型与其他数据源工具集成,从而创建出能处理各种任务的智能体应用,如问答系统,聊天机器人,文本生成。
二、LangChain核心模块介绍
模型(Models)
在LangChain中,模型接口是与大语言模型进行交互的桥梁。它支持多种类型的模型,包含大语言模型(LLMs)和聊天模型(Chat Models)。
提示词模板(PromptTemplates)
提示词用于定义输入给语言模型的提示信息,帮助模型生成更符合预期的输出。它可以包含变量,通过填充变量来生成具体的提示。
链(Chains)
链是LangChain中一个重要的概念,它将多个组件组合在一起,按照一定的顺序执行,以实现更复杂的任务。常见的链类型包含顺序链(SequnentialChain)、并行链等。
工具(Tools)
工具是LangChain中用于执行特定任务的组件,如搜索引擎工具、数据库查询工具。开发者可以将工具集成到链中,以扩展应用的功能。
记忆(Menory)
在对话式应用中,记忆组件用于保存和管理对话中的历史信息,使模型能工具上下文进行更连贯的回复。LangChain提供了多种类型的记忆,如短期记忆,长期记忆等。
三、LangChain安装
安装环境要求
- python版本:建议使用python 3.7及以上版本
- 包管理工具:推荐pip
安装步骤
安装LangChain和相关依赖
pip install langchain==0.3.7
pip install langchain-core==0.3.43
pip install langchain-openai==0.3.1
四、LangChain实战
1、基本调用:简单问答机器人
演示任何使用LangChain调用大语言模型实现简单的问答功能
知识点:大模型配置和调用,以及SystemMessgae和HumanMessage。
在LangChain中,SystemMessage用于设置系统级别的提示词,HumanMessage用于表示用户的输入
from langchain.chains.conversation.base import ConversationChain
from langchain.chains.llm import LLMChain
from langchain.chains.sequential import SequentialChain
from langchain.memory import ConversationBufferMemory
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI# 创建一个大模型对象
llm = ChatOpenAI(openai_api_base="https://ark.cn-beijing.volces.com/api/v3",api_key="",temperature=0.7,max_tokens=10240,model_name="",
)# 简单的调用
def basic_demo():result = llm.invoke([SystemMessage(content="你是一个翻译小助手,请将输入的英文翻译成中文。"),HumanMessage(content="I love programming.")])print(result)
2、内存记忆:多轮聊天机器人
展示如何使用LangChain搭建一个聊天机器人,支持多轮聊天
知识点:ConversationBuffMemory、PromptTemplate、Memory
def multi_chat_demo():# 创建一个会话内存memory = ConversationBufferMemory()# 创建一个会话对象conversation = ConversationChain(llm=llm, memory=memory)while True:user_input = input("请输入:")if user_input == "退出":breakresult = conversation.predict(input=user_input)print(f"大模型输出:{result}")
3、单节点链调用:日报生成器
演示如何搭建一个简单的链(工作流)
# 单节点链路调用(工作流)
def basic_chat_demo():# 定义提示词模板prompt_template = PromptTemplate(input_variables=["job", "type"],template="你是一个职场文档专家,可以帮我生成一个{job}岗位的{type}文档,字数不要超过300")# 定义一个链(工作流),verbose= True将他调试信息全部打印出来chain = LLMChain(llm=llm, prompt=prompt_template, verbose=True, output_key="content")# 执行工作流result = chain.invoke({"job": "前端", "type": "工作日报"})print(result)
4、顺序链调用:美食推荐
实现美食推荐链路,根据用户输入的城市,推荐该城市的特殊菜谱。
知识点:顺序链、多节点参数传递
# 多节点链路调用
def sequential_chain_demo():# 第一第一个节点提示词prompt_templeate_1 = PromptTemplate(input_variables=["city"],template="你是一个美食家,可以告诉用户{city}地区特色菜是什么,只需要说一个菜名就可以,不需要对菜进行解释")# 定义第一个节点city_chain = LLMChain(llm=llm, prompt=prompt_templeate_1, verbose=True, output_key="food")prompt_templeate_2 = PromptTemplate(input_variables=["food"],template="你是一个厨师,可以输出一个{food}的菜谱,只需要输出一个{food}的菜谱,不需要对菜进行解释")food_chain = LLMChain(llm=llm, prompt=prompt_templeate_2, verbose=True, output_key="info")# 创建一个顺序链,把两个节点按照顺序组装all_chain = SequentialChain(chains=[city_chain, food_chain],input_variables=["city"],output_variables=["city","food","info"],verbose=True)result = all_chain.invoke({"city": "上海"})print(result)