Langchain简单快速上手教程(二)——聊天模型之模型定义
聊天模型之模型定义
- 前言
- 一、聊天模型的定义
- (1) 通过API来定义聊天模型
- 1、使用LLM专门的包
- 2、使用init_chat_model()
- (2) 通过本地部署的 LLM 定义聊天模型
- ChatOllama
- 结语
前言
由于LLM在各种语言类与语言相关任务上的表现出色,现在LLM主要通过将消息列表作为输⼊,并返回消息作为输出的聊天模型接口来进行访问。故本文再介绍了langchain如何安装后,来进一步介绍langchain的聊天模型接口中的模型定义。
一、聊天模型的定义
(1) 通过API来定义聊天模型
1、使用LLM专门的包
在使用langchain去定义大语言模型的时候可以使用其专门的包的接口。下面演示用ChatOpenAI与ChatDeepSessk,由于deepseek兼容openai的调用方式,我们也可以用ChatOpenAI来调用deepseek
importosfromlangchain_openaiimportChatOpenAI# 定义模型model=ChatOpenAI(model="deepseek-v4-flash",api_key=os.environ.get('DEEPSEEK_API_KEY'),base_url="https://api.deepseek.com",)fromlangchain_deepseekimportChatDeepSeek# 定义模型model=ChatDeepSeek(model="deepseek-v4-flash")从上面两个例子里我们引出了关于ChatOpenAI或ChatDeepSeek这些函数接口的参数,下面来简单介绍一下其部分常见参数以便我们更好地使用。
| 参数名 | 参数描述 |
|---|---|
| model | 要使用的模型的名称 |
| api_key | API 密钥,如果未传入,将从环境变量中读取 |
| base_url | API 请求的基本 UR |
| temperature | 采样温度,温度值越⾼,AI 回答越天马行空;温度越低,回答则越保守 |
| max_tokens | 要⽣成的最大令牌数 |
| timeout | 请求超时时间 |
| max_retries | 最⼤重试次数 |
在讲下一种方式前,我们需要先见到介绍一下Runnable接口中的 .invoke() 调用。该方法是将单个输入转换为对应的输出。而其输入与输出都是Runnable实例。以下是class langchain_core.runnables.config.RunnableConfig 常用参数说明。
| 参数名 | 参数描述 |
|---|---|
| configurable | 通过 .configurable_fields()在此 Runnable 或子 Runnable 上配置的属性的运行时值。 |
| run_id | 针对此调用运行的跟踪器的唯⼀标识符。如果未提供,将⽣成新的 UUID。 |
| run_name | 此调用的跟踪器运⾏的名称。默认为类的名称。 |
| metadata | 此次调⽤和任何⼦调⽤的元数据。键是字符串,值是 JSON。类型:dict[str, Any] |
2、使用init_chat_model()
init_chat_model()是langchain对不同模型调用所实现的更上层的函数封装,用于定义与初始化不同的聊天模型。
fromlangchain.chat_modelsimportinit_chat_model gdp_model=init_chat_model("gpt-4o-mini",model_provider='openai')deepseek_model=init_chat_model('deepseek-v4-flash',model_provider='deepseek')上面的例子通过调用init_chat_model()其model与model_provider两个参数所实现的基本用法。我们还能通过其它参数实现模型的配置与定制。下面我们来展示一下其它用法。
fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.messagesimportHumanMessage,SystemMessage# 定制可配置的模型(模型模拟器)config_model=init_chat_model(temperature=0.3)messages=[SystemMessage(content="请补全一段故事,50字以内"),HumanMessage(content="薛定谔的猫"),]# # .invoke()的config参数才真正定义了模型print(f'config_model = {config_model.invoke(input=messages,config={'configurable':{'model':'deepseek-v4-flash'}}).content}')fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.messagesimportHumanMessage,SystemMessage# 可配置的模型(默认参数)model=init_chat_model(model='deepseek-chat',temperature=0.5,max_tokens=1024,configurable_fields=('temperature','max_tokens'),config_prefix='first')messages=[SystemMessage(content='请补全一段故事,50字以内"'),HumanMessage(content='薛定谔的猫"')]# 原本输出print(model.invoke(messages).content)result=model.invoke(input=messages,config={'configurable':{'first_temperature':0,'first_max_tokens':10,}})# 精简输出print(result.content)且init_chat_model()函数所返回的是⼀个与指定的 model_name 和 model_provider 相对应的聊天模型模拟器 BaseChatModel。该模型是可配置的,模拟器在传入配置后,在运行时才会初始化其底层模型。
(2) 通过本地部署的 LLM 定义聊天模型
该方式和通过API调用大模型不同的是,其是以调用通过Ollama所进行的本地部署的大模型进行的聊天模型定义。
ChatOllama
ChatOllama也是 LangChain 为通过 Ollama 部署的聊天模型所提供的具体实现类。因此ChatOllama 同样也实现了标准的 Runnable 接口。而用使用ChatOllama得先安装 Ollama包。
pipinstalllangchain_ollama安装完后便可使用。其常见参数同ChatOpenAI和ChatDeepSeek一样,这里所具体model与base_url得根据你通过Ollama本地部署得LLM来填。
fromlangchain_ollamaimportChatOllama ollama_model=ChatOllama(model='YOURMODEL',base_url='YOURURL')结语
以上就是langchain聊天模型定义的内容了。如果喜欢我的内容,请点赞、收藏加关注,多多支持我这个编程小白啊,以及欢迎各位在评论区讨论交流,并指出我的不足,谢谢大家。