关注我~第一时间学习如何更好地使用AI。
重要的不是我们是否会被AI替代,
而是我们要比被替代的人更懂AI。
大家好,在上一期文章(从零开始学LangGraph(0):如何搭建基本的AI应用开发学习环境)中,我们已经完成了学习AI应用开发的基本环境的搭建,本期开始我们将正式进入正题。
需要说明的是,虽然这个系列笔记的核心主题是LangGraph,但正如其官方文档站所述,在学习搭建AI Agent的过程中,熟悉LangChain中的一些基础组件仍然是非常有意义的,尤其是model
和tools
。
鉴于前期我已经写了一篇关于Chat Model
的学习笔记,今天我将根据LangChain 1.0版本的最新更新内容,以及贯彻“从零开始学”的原则出发,对该篇笔记进行重构。
Chat Model 概述
所谓AI应用开发,本质就是利用大模型的各种神奇能力来实现一个解决具体问题的方案。因此,如何使用想要用的大模型,自然是AI应用开发的起点。
在日常生活中,我们往往是通过DeepSeek、豆包等模型供应商官方的网页端、app,或者使用Cherry Studio等对话客户端,来使用大模型。
今天我们要学习的,就是如何通过编写Python代码来使用大模型。
在LangChain中,Chat Model
就是提供大模型调用能力的关键组件,它为我们使用各式各样的模型提供了统一的接口,让我们无须事先学习不同厂家的模型API调用方式,就能简单地通过几行代码去使用它们。
Chat Model 基本使用方法
Step 1.前置准备工作
(1)安装所需的模型集成
首先,进入并激活你的虚拟环境 (忘记了的同学请复习上一期文章内容),然后在终端中输入安装LangChain的指令:pip install langchain
然后,根据你的任务需求,确定具体想要使用的模型。
在LangChain中,使用特定模型的最基本方式,就是利用现成的第三方模型集成(third-party integrations)。目前LangChain已经集成了近80多种第三方模型服务,覆盖了从OpenAI、Anthropic、Google等国外大厂,到DeepSeek、Qwen、ZHIPU等民族之光的丰富资源。
你可以在LangChain官网上轻松找到你所需要的模型集成的安装方法,以DeepSeek为例,只需要继续在终端中输入指令:
pip install -qU "langchain-deepseek"
(2)获取模型的API key
安装好对应的模型集成后,接下来需要准备API Key。以DeepSeek为例(其他模型API Key获取方式大同小异,不确定的可以直接问AI),进入DeepSeek开放平台API key栏目,网址:
https://platform.deepseek.com/api\_keys
然后点击创建API key。如果提示你需要注册的,注册即可。
按照提示给新创建的API Key随意命名,接着会自动弹出key,你需要马上将key复制保存到安全的地方,这个key只有生成的时候会展示出来,如果你没有复制或者忘记了,这个key就废掉了,只能重新创建一个。
(3)设置模型的API key
获得了API key,我们就可以开始写代码了。
需要注意的是,在设置API key时,尽量不要把它明文写在你的代码里,这样会存在因为代码分享而暴露密钥的风险。这里推荐使用LangChain官方示例的API Key设置方式。
首先,在虚拟环境启动状态下的终端中输入jupyter notebook打开notebook,然后在单元格中输入下列代码(后文涉及的所有代码都是在notebook中执行):
import getpass
import os
if not os.environ.get("DEEPSEEK\_API\_KEY"):
os.environ["DEEPSEEK\_API\_KEY"] = getpass.getpass("Enter API key for DeepSeek: ")
这段代码的功能是,首先,检测系统环境变量中是否已设置所需的API key,如果没有,将用户输入的API key设置为"DEEPSEEK_API_KEY"环境变量的值。
在notebook中,当你点击上面的小三角箭头或使用快捷键shift+enter
执行运行,就可以看到代码的运行结果是弹出来一个要求你输入API Key的提示,将前面获取的key贴到对话框里再回车即可。
至此,你的大模型API key就设置完成了。
Step 2. 初始化Chat Model
在具体使用模型前,首先需要初始化模型。
(1)使用Chat Model子类初始化
你可以根据你需要使用的模型,查阅官方文档,使用对应包中的Chat Model子类来进行初始化。
所谓的“子类”、“类”,是Python和许多编程语言中的一种基本概念,你可以把它们简单理解为“模板”(感兴趣的朋友可以去学习“对象”的概念)。回想一下你日常工作学习中使用模板的场景,它的作用就是把一些会反复使用的元素提炼出来,形成一个可复用的框架,你每次具体使用时,根据需求修改一些细节即可。这个过程用编程术语描述,就是类的实例化。
比如你有一个日记模板(日记类),模板中包含了待填空的日期、天气、心情、日记内容等字段(日记类的属性),当你想要写今天的日记的时候,你使用这个模板,填好前面各项字段的内容,于是,一篇特属于“今天”的日记就产生了(日记类的实例对象)。
所谓的使用Chat Model子类来进行模型初始化,相当于就是在做这个事情,我们需要给ChatDeepSeek这个“模型模板”,填入我们具体想使用的模型、模型的温度、最大token数等参数。相关代码如下:
from langchain\_deepseek import ChatDeepSeek
llm = ChatDeepSeek(
model="deepseek-chat",
temperature=0,
max\_tokens=None,
timeout=None,
max\_retries=2,
# other params...
)
将上述代码填入notebook的单元格中,运行。如果你看到单元格左边出现了小数字,就说明代码运行成功,模型初始化也就完成了。
(2)使用init_chat_model函数初始化
对于某些供应商的模型,我们还可以利用init\_chat\_model
函数来初始化Chat Model。
函数也是编程语言中的基本概念,你只需要知道它的原理和数学中的函数基本一样即可。即,对于函数f(x)= y,我们输入x,x根据函数的计算式进行运算,将得到结果值y。
而如下图代码所示,我们向init\_chat\_model
函数输入两个参数(即括号内用逗号隔开的两个内容,分别为模型名称 (model),和模型供应商 (model_provider)),就相当于往f(x)中,代入x。而init\_chat\_model
函数的运算结果,将是一个实例化的模型对象。
from langchain.chat\_models import init\_chat\_model
model = init\_chat\_model("deepseek-chat", model\_provider="deepseek")
这里偷了个懒,在前面使用类的初始化的代码后面,直接贴入了init\_chat\_model
函数的代码,可以看到初始化同样顺利完成。为了区分,我使用了不同的变量来表示不同初始化方法产生的模型实例。
(3)暂没有集成的模型供应商的使用
虽然LangChain目前已经集成了数量可观的模型服务集成,但有些我们比较常用的供应商仍然没有独立的包,比如openrouter、硅基流动。
这时,我们可以看看想要使用的供应商是否兼容OpenAI API,如果是,那么就可以在LangChain中利用ChatOpenAI
子类来调用。以硅基流动为例:
首先,在终端中输入指令安装openai的包:pip install -qU langchain-openai
然后,在进行实例化的时候,填入硅基流动的base\_url
。这里有个细节,因为用的是openai的包,所以前面在系统变量里存入API Key的时候也要用“OPENAI\_API\_KEY”
的表述。
from langchain\_openai import ChatOpenAI
llm = ChatOpenAI(
model="xxxxxxxx",
temperature=0,
max\_tokens=None,
timeout=None,
max\_retries=2,
api\_key=""
base\_url="https://api.siliconflow.cn/",
)
让我们看下效果,通过硅基流动使用Qwen3-235B-A22B-Thinking-2507模型:
Step3. 使用Chat Model
初始化完成后,我们就可以使用Chat Model对象的各种方法(“方法”是python语言的术语,你可以简单理解成“功能”)来使用大模型,其中比较常用的方法如下:
- • invoke :与Chat Model交互的最基本方式,就是聊天本身,它接收一段消息列表作为输入,并返回一段消息列表作为输出。
- • stream :允许Chat Model在生成输出时采用流式输出的方式。
- • batch :允许用户将多个请求批量传入Chat Model以提高处理效率。
- • bind_tools :允许用户将一个工具绑定给Chat Model,使模型能在执行上下文时使用这个工具。
- • with_structured_output :针对支持结构化输出的模型,这个方法能够自动完成将模式绑定到模型并按给定模式解析输出的过程。
以最常用的invoke方法为例:
model.invoke("Hello")
上述代码中,model是我们已经初始化好的一个模型对象,使用.invoke来调用invoke方法,括号内输入我们需要传给模型的信息,这个过程,就相当于我们在DeepSeek网页端的对话栏中,输入“Hello”。
这段代码将生成一个AIMessage
对象。可以看到这个对象包含了一个content
属性,它的值就是模型对我们回复的内容。
然后,通过使用.content,我们可以直接访问content属性的值。如下图代码所示,先将invoke返回的这个message对象赋值给变量``res
,然后打印res.content
,就可以只看content的内容了。
这样,我们就初步学会了如何利用代码来使用DeepSeek啦~
好了,以上就是本期的主要内容,请大家尽情探索,祝大家玩得开心!
—— END——
往期精华:
1.LangGraph学习笔记
从零开始学LangGraph(0):如何搭建基本的AI应用开发学习环境
2.COZE教程
AI工作流编排手把手指南之一:Coze智能体的创建与基本设置
AI工作流编排手把手指南之二:Coze智能体的插件添加与调用
Agent | 工作流编排指南4:萌新友好的Coze选择器节点原理及配置教程
Agent | 工作流编排指南5:长文扩写自由 — Coze循环节点用法详解
Coze工作流编排指南6:聊天陪伴类智能体基本工作流详解-快来和玛奇玛小姐姐谈心吧~
PPT自由!Coze工作流 X iSlide插件-小白也能看懂的节点参数配置原理详解
3.MCP探索
Excel-MCP应用 | 自动提取图片数据到Excel的极简工作流手把手教程
markitdown-mcp联动Obsidian-mcp | 一个极简知识管理工作流
【15合1神器】不会代码也能做高级图表!这个MCP工具让我工作效率翻了不止三倍!
【效率翻倍】Obsidian自动待办清单实现:MCP联动Prompt保姆级教程(萌新3分钟上手)
萌新靠MCP实现RPA、爬虫自由?playwright-mcp实操案例分享!
高德、彩云MCP全体验:让Cherry Studio化身私人小助理的喂饭版指南!
4.Prompt设计
干货分享 | Prompt设计心法 - 如何3步做到清晰表达需求?