掘金 人工智能 22小时前
LangChain框架入门04:10分钟优雅接入主流大模型
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细阐述了LangChain框架如何接入和使用各类大语言模型。文章首先区分了文本生成模型(LLMs)与聊天模型(Chat models),并介绍了它们在LangChain中的类结构和接口规范。通过具体的代码示例,演示了如何使用ChatOpenAI和OpenAI模型,并深入解析了Message组件的多种类型及其作用。此外,文章还以阿里巴巴的通义千问为例,展示了接入第三方大语言模型的具体步骤和方法。LangChain通过模型抽象,能够灵活支持多种主流和国产大模型,为开发者提供了便捷的模型集成方案。

💡 LangChain通过定义统一接口规范,实现了对多种第三方大语言模型的灵活接入,其核心在于Model组件的设计。模型被分为文本生成模型(LLMs)和聊天模型(Chat models),两者在输入输出形式和类继承结构上有所区别,但都遵循BaseLanguageModel的顶层接口。

💬 聊天模型(Chat models)接受消息列表作为输入,输出封装为BaseMessage实例,支持更复杂的对话交互。LangChain提供了ChatOpenAI等示例,并详细列出了model、temperature、timeout等标准化参数,这些参数主要对官方集成包的模型生效。

📝 文本生成模型(LLMs)接受字符串输入,输出字符串,LangChain也支持其接收消息输入以保持接口一致性。以OpenAI模型为例,展示了PromptTemplate与LLM的结合使用,实现文本内容的生成。

📦 Message组件是聊天模型交互的关键,包括HumanMessage、AIMessage、SystemMessage、ToolMessage等类型,它们各自承载不同角色信息,并包含content、type、response_metadata等属性,为模型理解和响应提供结构化信息。

🚀 LangChain不仅支持OpenAI模型,还能通过简单的配置和安装依赖包接入其他第三方模型,如阿里巴巴的通义千问。通过LangChain官网的Integrations页面,开发者可以轻松找到并集成各类主流和国产大语言模型,实现AI应用的快速开发。

一个 AI 应用的核心就是它所依赖的大语言模型,LangChain 框架本身不内置任何大模型,但它通过定义统一的接口规范,可以将各种第三方大语言模型接入进来。本文将详细介绍如何在 LangChain 中接入大语言模型,以及如何使用不同的大语言模型。

一、Model的分类

LangChain中将大语言模型分为:文本生成模型(LLMs) 和支持多轮对话的聊天模型(Chat models)

聊天模型:接受消息输入,并且输出消息,返回的消息封装为不同类型的 BaseMessage 实例, LangChain 也允许聊天模型以字符串作为输入。这样做可以轻松地用聊天模型代替 LLMs,当以字符串作为输入时,该字符串会被转换为 HumanMessage ,然后传递给底层聊天模型。

文本生成模型:接受字符串输入,并且输出字符串,LangChain 也允许文本模型也以“消息”作为输入,从而与聊天模型的接口保持一致。当以消息作为输入时,这些消息会在传递给LLM之前被转换为字符串。

在 LangChain 的类结构中,顶层基类是 BaseLanguageModel,用于定义模型的通用接口。它分为两支:BaseChatModelBaseLLM。接入聊天模型时需继承 BaseChatModel,如常用的 ChatOpenAI;而文本生成模型则继承 BaseLLM,如 OpenAI

二、Chat Model聊天模型

在构建聊天模型时,有一些标准化参数:

参数名参数含义
model指定使用的大语言模型名称(如 "gpt-4""gpt-3.5-turbo" 等)
temperature温度,温度越高,输出内容越随机;温度越低,输出内容越确定
timeout请求超时时间
max_tokens生成内容的最大token数
stop模型在生成时遇到这些“停止词”将立刻停止生成,常用于控制输出的边界。
max_retries最大重试请求次数
api_key大模型供应商提供的API秘钥
base_url大模型供应商API 请求地址

以上的标准参数,也只是适用于部分的大语言模型,有些参数在特定模型中可能是无效的,这些标准化参数仅对 LangChain 官方提供集成包的模型(如 langchain-openailangchain-anthropic)生效,在langchain-community包中的第三方模型,则不需要遵守这些标准化参数的规则。

ChatOpenAI完整示例:

import dotenvfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAI# 读取env配置dotenv.load_dotenv()# 1.构建提示词prompt = ChatPromptTemplate.from_messages([    ("system", "你是一个资深的Python开发工程师"),    ("human", "{question}")])# 2.创建模型llm = ChatOpenAI()# 3.生成提示词prompt_value = prompt.invoke({"question": "请你帮我写一个求最大公约数方法"})# 4.大模型接受promptValue,输出AI消息aiMessage = llm.invoke(prompt_value)# 5.打印AI消息和AI消息内容print(aiMessage.content)

执行结果如下:

好的!求最大公约数(GCD)可以用欧几里得算法,这是一种高效的算法。下面是用 Python 实现的代码:```pythondef gcd(a, b):    while b:        a, b = b, a % b    return a```### 解释:- 这个方法使用了 **欧几里得算法**,通过反复取模来缩小问题的规模,直到 `b` 为 0- 当 `b` 为 0 时,`a` 就是两个数的最大公约数。你可以用这个函数来求两个数的最大公约数。例如:```pythonprint(gcd(56, 98))  # 输出:14```这种方法的时间复杂度是 (O(\log(\min(a, b)))),非常高效。

三、LLM文本生成模型

LLM文本生成模型使用方式如下:

import dotenvfrom langchain_core.prompts import PromptTemplatefrom langchain_openai import OpenAI# 读取env配置dotenv.load_dotenv()# 1.构建提示词prompt = PromptTemplate.from_template("{question}")# 2.创建模型llm = OpenAI()prompt_value = prompt.invoke({"question": "请完整输出悯农这首诗"})# 3.文本生成模型接受promptValue,并输出结果print(llm.invoke(prompt_value))

执行结果:

《悯农》是唐代诗人李绅创作的一首诗,原文如下:**悯农**锄禾日当午,  汗滴禾下土。  谁知盘中餐,  粒粒皆辛苦。这首诗通过描写农民在烈日下辛勤耕作的情景,表达了对农民劳动的同情与敬意。

四、Message组件

在之前介绍聊天模型ChatOpenAI的案例中,调用模型后返回了一条AI消息,在LangChain中,消息有几种不同的类型。所有消息都有 typecontentresponse_metadata 等属性。

下面是这几个属性的作用:

属性名属性作用
typetype 描述了是哪个类型的消息,包含类型有"user"、"ai"、"system" 和 "tool"
content通常是字符串,有些情况下可能是字典列表,这个字典列表用于大模型的多模态输出。
name用来区分当消息类型相同,对消息进行区分,但不是所有模型都支持这一功能。
response_metadataAI消息才会包含的属性,大语言模型的响应中附加元数据,根据不同模型会有不同,如可能会包含本次 token 使用量等信息。
tool_callsAI消息才会包含的属性,当大语言模型决定调用工具时,在 AIMessage 中就会包含这个属性,可以通过 .tool_calls 属性进行获取该属性返回一个 ToolCall 列表,每个 ToolCall 是一个字典,包含以下字段: name : 应调用的工具名称 args : 调用工具的参数 id : 工具调用的唯一标识 ID

根据消息类型的不同, Message组件被分为:

HumanMessage:人类消息,type为"user"

AIMessage: AI 消息,type为"ai"

SystemMessage:系统消息,type为"system",告诉大模型当前的背景是什么,应该如何做,并不是所有模型提供商都支持这个消息类型

ToolMessage:工具消息,type为"tool"

FunctionMessage:旧的函数调用消息类型,现已被 ToolMessage 取代。

五、使用其他大语言模型

除了使用OpenAI的大语言模型之外,LangChain还可以使用很多的大语言模型,下面我们以接入阿里巴巴的通义千问聊天模型为例。

首先,申请阿里云百炼平台API KEY:

在.env文件中,加入阿里云百炼平台的API Key

# 阿里云百炼平台API KEYDASHSCOPE_API_KEY=sk-***********************

安装依赖包

pip install dashscope

调用通义千问模型示例如下:

import dotenvfrom langchain_community.chat_models import ChatTongyifrom langchain_core.prompts import PromptTemplate# 读取env配置dotenv.load_dotenv()# 1.构建提示词prompt = PromptTemplate.from_template("{question}")# 2.构建通义模型tongyi_chat = ChatTongyi(    model="qwen-turbo-2025-04-28")prompt_value = prompt.invoke({"question": "请完整输出短歌行"})# 3.文本生成模型接受promptValue,并输出结果print(tongyi_chat.invoke(prompt_value).content)

执行结果:

《短歌行》是东汉末年曹操所作的一首乐府诗,全诗如下:---**短歌行**  **曹操**对酒当歌,人生几何!  譬如朝露,去日苦多。  慨当以慷,忧思难忘。  何以解忧?唯有杜康。  青青子衿,悠悠我心。  但为君故,沉吟至今。  呦呦鹿鸣,食野之苹。  我有嘉宾,鼓瑟吹笙。  明明如月,何时可掇?  忧从中来,不可断绝。  越陌度阡,枉用相存。  契阔谈讌,心念旧恩。  月明星稀,乌鹊南飞。  绕树三匝,何枝可依?  山不厌高,海不厌深。  周公吐哺,天下归心。---这首诗表达了诗人对人生短暂的感慨、对贤才的渴求以及统一天下的雄心壮志。

接入更多模型的文档在LangChain官网的Integrations中

在 LangChain Integrations 页面点击“More”进行查找

找到阿里巴巴

在这里就可以看到接入ChatTongyi等模型的文档了,点击API Reference,查看具体文档。

开发者可以根据文档说明,快速集成各类主流和国产大语言模型。

六、总结

本文详细介绍了 LangChain 中模型组件(Model)的使用方法与设计思路,首先从模型的分类开始,分析了文本生成模型和聊天模型的区别,接下来通过具体的代码示例,来演示聊天模型ChatOpenAI和文本生成模型OpenAI的基本用法。

我们还学习了聊天模型输入输出都要用到的Message组件,了解了 Message 组件的几种类型(如 HumanMessageAIMessageSystemMessageToolMessage),最后,我们以接入阿里巴巴的通义千问的聊天模型为例,展示如何在LangChain中接入其他第三方模型。

总的来说,LangChain 在模型接入方面做了大量抽象,可以灵活支持 OpenAI、Anthropic、阿里通义千问、百度文心一言等主流模型。通过本文,相信你已经理解Model组件的设计思想和使用方法,后续将继续深入介绍LangChain的核心模块和高级用法,敬请期待。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangChain 大语言模型 AI集成 聊天模型 文本生成模型
相关文章