直接创建LLM实例

本来想用openai的chatgpt的,但是奈何账号已经注册了很久了,早就没有免费额度了,外国网站充钱又很难,所以所幸去接入deepseek了,好在ds是适配openai的api格式的。

点我去申请DeepSeek API key

剩下的就是简单编个码开始调用api

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage,SystemMessage
# 定义大模型
model = ChatOpenAI(model="deepseek-chat",openai_api_base="https://api.deepseek.com/v1")

# 定义消息列表
messages = [
SystemMessage(content="translate the following from English into Chinese"),
HumanMessage(content="hi I'm Supdriver~")
]

# 调用大模型

resuilt = model.invoke(messages)
print(resuilt)

输出如下

然而结构化的输出可读性太差,所以我们要用到from langchain_core.output_parsers import StrOutputParser里面的解析器

1
2
3
4
5
# 调用大模型

result = model.invoke(messages)
outStr = StrOutputParser().invoke(result)
print(outStr)

输出

1
2
3
4
D:\program_software\AnaConda\envs\langChainP13\python.exe D:\codes\code_pycharm\langChainTool\main.py 
你好,我是Supdriver~

Process finished with exit code 0

然后我们来把这两步组成链式调用,首先引入包from langchain_core.output_parsers import StrOutputParser
,稍后修改调用部分

1
2
3
4
# 调用大模型,并使用链式执行 model->parser->output
parser = StrOutputParser()
chain = model | parser
print(chain.invoke(messages))

使用工厂函数

langchain还提供了init_chat_model()作为工厂函数,生成各类厂商的LLM实例

它的接口参数数量上比较自由,下面有一些常用接口的介绍

参数名 参数描述
model 要使用的模型名称
model_provider 模型提供方。可参阅langchain文档。形如"openai"deepseek之类,会自动映射到langchain-openai之类对应的组件
configurable_fields 设置哪些配置项可以在运行时重新配置,选项有:
None:没有可配置的字段
'any':所有字段均可更改
Union[List[str], Tuple[str, …]]:指定的字段是可配置的
temperature 采样温度,温度值越⾼,AI回答越天⻢⾏空;温度越低,回答越保守靠谱
max_tokens 要⽣成的最token数
timeout 请求超时时间
max_retries 最大重试次数
openai_api_key / api_key OpenAI API 密钥。如果未传入,将从环境变量中读取 OPENAI_API_KEY
base_url API 请求的基本 URL。
……

创建不可配置模型的示例

1
2
3
4
5
6
7
8
9
10
11
12
from langchain.chat_models.base import init_chat_model
from langchain_core.output_parsers import StrOutputParser
from langchain_core.messages import HumanMessage,SystemMessage
model = init_chat_model(model="deepseek-chat",model_provider="deepseek")

messages = [
SystemMessage("Response in Chinese"),
HumanMessage("What's your name,Response in Chinese")
]

chain = model | StrOutputParser()
print(chain.invoke(messages))

输出如下

1
2
3
4
5
6
7
8
D:\program_software\AnaConda\envs\langChainP13\python.exe D:\codes\code_pycharm\langChainTool\main.py 
我的名字是DeepSeek,由深度求索公司创造的AI助手!很高兴认识你!😊

我是一个纯文本模型,虽然不支持多模态识别,但我可以帮你处理上传的各种文件(图像、txt、pdf、ppt、word、excel等),从中读取文字信息来协助你。而且我完全免费,拥有128K的上下文长度,还支持联网搜索功能。

有什么我可以帮你的吗?无论是回答问题、协助工作还是日常聊天,我都很乐意为你提供帮助!

Process finished with exit code 0

创建可配置的模型的示例

我们要用到from langchain_core.runnables.config import RunnableConfig存储配置项

1
2
3
4
5
6
7
from langchain.chat_models.base import init_chat_model
from langchain_core.runnables.config import RunnableConfig

configurable_model = init_chat_model(temperature=0.5)
runnable_config = RunnableConfig({"configurable":{"model":"deepseek-chat","model_provider":"deepseek"}})

print(configurable_model.invoke("what's your name,response in chinese",config=runnable_config).content)
1
2
3
4
5
6
D:\program_software\AnaConda\envs\langChainP13\python.exe D:\codes\code_pycharm\langChainTool\main.py 
我的名字是DeepSeek,由深度求索公司创造的AI助手!很高兴认识你!😊

有什么我可以帮助你的吗?无论是回答问题、协助思考问题,还是进行有趣的对话,我都很乐意为你提供帮助!

Process finished with exit code 0

创建运行时可配置的模型的示例

我们来传入configurable_field参数,让模型能在运行时被配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from langchain.chat_models.base import init_chat_model
from langchain_core.runnables.config import RunnableConfig

configurable_model = init_chat_model(
model="gpt-5-mini",
temperature=0,
configurable_fields=("model", "model_provider", "temperature",
"max_tokens"),
config_prefix="pre_first",
)
runnable_config = RunnableConfig({
"configurable":{
"pre_first_model":"deepseek-chat",
"pre_first_model_provider":"deepseek",
"pre_first_temperature":0.5
}
})

print(configurable_model.invoke("what's your name,response in chinese",config=runnable_config).content)

输出如下,可以看到,实际上被调用的模型还是改成了DeepSeek

1
2
3
4
5
6
7
D:\program_software\AnaConda\envs\langChainP13\python.exe D:\codes\code_pycharm\langChainTool\main.py 
我的名字是DeepSeek,由深度求索公司创造的AI助手!很高兴认识你!😊

有什么我可以帮助你的吗?无论是回答问题、协助思考问题,还是进行有趣的对话,我都很乐意为你提供帮助!

Process finished with exit code 0