最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python通過LangChain調(diào)用LLM模型的完整過程

 更新時間:2026年06月15日 08:52:03   作者:copyer_xyf  
這篇文章主要介紹了如何使用Python和LangChain調(diào)用聊天模型,掌握ChatOpenAI的創(chuàng)建與調(diào)用,探索非流式與流式調(diào)用的區(qū)別與應(yīng)用場景,需要的朋友可以參考下

該篇解決 Agent 開發(fā)里最基礎(chǔ)的問題:怎么用 Python 通過 LangChain 調(diào)用一個聊天模型。

先抓住主線:

輸入消息 -> ChatOpenAI -> 模型回復(fù)

Agent 看起來復(fù)雜,但底層離不開模型調(diào)用。后面學(xué) Tool、RAG、Memory、LangGraph,都會繼續(xù)圍繞模型調(diào)用、消息組織和狀態(tài)流轉(zhuǎn)展開。

所以這一篇不是單純學(xué)“調(diào)一次大模型”,而是先把 Agent 的模型入口打通。

LangChain 是什么

LangChain 不是大模型本身。它是一套 AI 應(yīng)用開發(fā)框架,用來統(tǒng)一管理:

  • Model:調(diào)用不同模型提供商
  • Message:組織 system / user / assistant / tool 消息
  • Prompt:管理提示詞模板
  • Runnable:組合多個步驟
  • Tool:把外部函數(shù)暴露給模型
  • Agent:讓模型在多步任務(wù)里做決策

這一篇只看 Model 層,也就是怎么創(chuàng)建 ChatOpenAI 并調(diào)用它。

langchain-openai 是什么

langchain-openai 是 LangChain 的 OpenAI 集成包。

它提供 ChatOpenAI,用來連接 OpenAI 官方接口,或者 DeepSeek 這種兼容 OpenAI 接口格式的第三方模型服務(wù)。

# 它負(fù)責(zé)把 LangChain 的統(tǒng)一模型接口,轉(zhuǎn)換成“OpenAI 接口格式”的請求。
# 名字里有 openai,但不代表只能調(diào)用 OpenAI 官方模型。
# 只要第三方服務(wù)也支持 OpenAI 那套請求格式,比如 DeepSeek,也可以用它接入。
from langchain_openai import ChatOpenAI


# ChatOpenAI:代碼里真正創(chuàng)建和調(diào)用的聊天模型客戶端。
# 它不是模型本身,只負(fù)責(zé)接收配置、消息和參數(shù),然后去請求遠(yuǎn)程模型服務(wù)。
model = ChatOpenAI(
    model="deepseek-v4-pro",
    api_key="your_deepseek_api_key_here",
    base_url="https://api.deepseek.com",
)


# OpenAI 官方接口 / 兼容 OpenAI 格式的第三方接口:真正提供模型能力的遠(yuǎn)程接口。
# 這里 base_url 指向 DeepSeek,所以請求會發(fā)給 DeepSeek。
# 如果 base_url 指向 OpenAI,請求就會發(fā)給 OpenAI。
response = model.invoke("你好,請介紹一下 LangChain")

安裝依賴

本文默認(rèn)使用 uv 管理 Python 項(xiàng)目和依賴:

uv add langchain-openai python-dotenv

langchain-openai 負(fù)責(zé)模型集成,python-dotenv 負(fù)責(zé)讀取 .env 文件。

如果只是臨時用 pip 安裝,也可以寫成:

pip install langchain-openai python-dotenv

環(huán)境變量

這里以 DeepSeek 為例。DeepSeek 支持 OpenAI 那套接口格式,所以可以繼續(xù)使用 langchain-openaiChatOpenAI,只需要把模型名、API Key 和 base URL 換成 DeepSeek 的配置。

LLM_MODEL=deepseek-v4-pro
LLM_API_KEY=your_deepseek_api_key_here
LLM_BASE_URL=https://api.deepseek.com

說明:

  • LLM_MODEL:模型名稱。DeepSeek 當(dāng)前可以使用 deepseek-v4-flashdeepseek-v4-pro。
  • LLM_API_KEY:DeepSeek 平臺申請的 API Key。
  • LLM_BASE_URL:DeepSeek 提供的接口地址。它支持 OpenAI 那套請求格式,所以這里填 https://api.deepseek.com。

這里的關(guān)鍵點(diǎn)是:langchain-openai 不等于只能調(diào)用 OpenAI 官方模型。只要服務(wù)商支持 OpenAI 那套接口格式,就可以通過改 base_url 接入。

只使用 OpenAI 官方服務(wù)時,LLM_BASE_URL 可以不寫或改成 OpenAI 官方地址;使用 DeepSeek、代理、網(wǎng)關(guān)或其他兼容服務(wù)時再配置。

創(chuàng)建模型

import os

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI


load_dotenv()


# 讀取必填環(huán)境變量。
# 如果變量不存在,直接拋錯,讓問題在啟動階段暴露出來,而不是等到請求模型時才失敗。
def required_env(name: str) -> str:
    value = os.getenv(name)

    if not value:
        raise RuntimeError(f"Missing environment variable: {name}")

    return value


# 創(chuàng)建聊天模型客戶端。
# 后續(xù)所有模型調(diào)用都從這里拿實(shí)例,避免每個示例重復(fù)配置 model、api_key、base_url。
def create_model() -> ChatOpenAI:
    base_url = os.getenv("LLM_BASE_URL")

    # 模型初始化集中在這里,后續(xù) Prompt、Tool、Runnable 都復(fù)用同一個入口。
    model_kwargs = {
        "model": required_env("LLM_MODEL"),
        "api_key": required_env("LLM_API_KEY"),
        "temperature": 0.2,
        "timeout": 30,
        "max_retries": 2,
    }

    # 不配置 LLM_BASE_URL 時走默認(rèn) OpenAI 地址;配置后可以接 DeepSeek 這類服務(wù)。
    if base_url:
        model_kwargs["base_url"] = base_url

    return ChatOpenAI(**model_kwargs)

這里重點(diǎn)看兩個自定義函數(shù):required_env() 負(fù)責(zé)校驗(yàn)必填配置,create_model() 負(fù)責(zé)收口模型初始化。

非流式調(diào)用

非流式調(diào)用會等模型完整生成后,一次性返回結(jié)果。

def invoke_demo() -> None:
    model = create_model()

    # invoke 會等模型完整生成后再返回,適合一次性拿完整結(jié)果。
    response = model.invoke(
        [
            {
                "role": "user",
                "content": "用三句話解釋 LangChain 是什么。",
            }
        ]
    )

    print(response.content)

invoke 返回的是一個 AIMessage。最常用的是 content,也就是模型回復(fù)內(nèi)容。

后面學(xué) Tool 時,還會重點(diǎn)關(guān)注 tool_calls,因?yàn)槟P拖胝{(diào)用工具時,調(diào)用意圖會出現(xiàn)在那里。

流式調(diào)用

流式調(diào)用會邊生成邊返回,適合聊天界面、命令行輸出、長文本生成。

import sys


def stream_demo() -> None:
    model = create_model()

    # stream 會返回一段段 AIMessageChunk,適合做實(shí)時輸出。
    stream = model.stream(
        [
            {
                "role": "user",
                "content": "介紹一下重慶火鍋文化。",
            }
        ]
    )

    for chunk in stream:
        # 這里只處理文本片段;后面接觸多模態(tài)或工具調(diào)用時,content 可能會更復(fù)雜。
        if isinstance(chunk.content, str):
            sys.stdout.write(chunk.content)
            sys.stdout.flush()

    sys.stdout.write("\n")

這里的關(guān)鍵是 for chunk in stream。

可以把 stream 理解成一個不斷產(chǎn)出內(nèi)容片段的迭代器。模型每生成一小段內(nèi)容,就拿到一個 chunk,然后立刻輸出。

參數(shù)怎么放

ChatOpenAI 初始化時常見的模型參數(shù)。

可以先按三類理解:

連接參數(shù)

ChatOpenAI(
    api_key="...",
    base_url="...",
    model="deepseek-v4-pro",
)
  • api_key:訪問模型服務(wù)的密鑰,應(yīng)該從環(huán)境變量讀取,不要寫死在代碼里。
  • base_url:模型服務(wù)地址。使用 OpenAI 官方服務(wù)時可以不寫;接 DeepSeek 這類服務(wù)時需要配置。
  • model 決定調(diào)用哪個模型。它適合放進(jìn)環(huán)境變量,因?yàn)殚_發(fā)、測試、生產(chǎn)環(huán)境可能會使用不同模型。

生成控制

ChatOpenAI(
    temperature=0.2,
    max_tokens=1000,
    top_p=1,
)
  • temperature:控制隨機(jī)性。越低越穩(wěn)定,越高越發(fā)散。寫代碼、分類、抽取信息時通常調(diào)低;創(chuàng)意寫作可以調(diào)高。
  • max_tokens:限制模型最多生成多少 token,避免輸出太長。
  • top_p:另一種控制隨機(jī)性的參數(shù)。入門階段一般先調(diào) temperature,不要同時亂調(diào)兩個。

請求控制

ChatOpenAI(
    timeout=30,
    max_retries=2,
)
  • timeout:請求超時時間,避免網(wǎng)絡(luò)卡住導(dǎo)致程序一直等待。
  • max_retries:請求失敗后的重試次數(shù),適合處理臨時網(wǎng)絡(luò)波動。

小結(jié)

這一篇只需要記住三件事:

  1. ChatOpenAI 是 LangChain 的模型調(diào)用層。
  2. invoke 一次性返回完整回復(fù),stream 邊生成邊返回。
  3. 參數(shù)先按連接、模型選擇、生成控制、請求控制四類理解。

以上就是Python通過LangChain調(diào)用LLM模型的完整過程的詳細(xì)內(nèi)容,更多關(guān)于Python LangChain調(diào)用LLM模型的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python使用Pandas讀寫Excel實(shí)例解析

    Python使用Pandas讀寫Excel實(shí)例解析

    這篇文章主要介紹了Python使用Pandas讀寫Excel實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 對python中return與yield的區(qū)別詳解

    對python中return與yield的區(qū)別詳解

    這篇文章主要介紹了對python中return與yield的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Pycharm中flask開啟debug模式的詳細(xì)流程

    Pycharm中flask開啟debug模式的詳細(xì)流程

    PyCharm是一個強(qiáng)大的集成開發(fā)環(huán)境(IDE),非常適合Python開發(fā)者,包括Flask框架,當(dāng)你在使用Flask開發(fā)Web應(yīng)用時,Debug功能是非常重要的,它允許你在運(yùn)行時檢查程序的狀態(tài)、調(diào)試代碼錯誤,本文將介紹Pycharm中flask開啟debug模式的詳細(xì)流程,需要的朋友可以參考下
    2024-08-08
  • Python 代碼中的 yield 關(guān)鍵字到底是什么

    Python 代碼中的 yield 關(guān)鍵字到底是什么

    yield是Python中一個強(qiáng)大的工具,它可以幫助你以一種高效的方式處理大量數(shù)據(jù),理解yield的工作原理對于掌握Python編程至關(guān)重要,這篇文章主要介紹了Python 代碼中的 yield 到底是什么,需要的朋友可以參考下
    2024-07-07
  • Django生成PDF文檔顯示網(wǎng)頁上以及PDF中文顯示亂碼的解決方法

    Django生成PDF文檔顯示網(wǎng)頁上以及PDF中文顯示亂碼的解決方法

    今天小編就為大家分享一篇Django生成PDF文檔顯示網(wǎng)頁上以及PDF中文顯示亂碼的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python實(shí)現(xiàn)數(shù)據(jù)圖表

    python實(shí)現(xiàn)數(shù)據(jù)圖表

    plotly是現(xiàn)代平臺的敏捷商業(yè)智能和數(shù)據(jù)科學(xué)庫,它作為一款開源的繪圖庫,可以應(yīng)用于Python、R、MATLAB、Excel、JavaScript和jupyter等多種語言,主要使用的js進(jìn)行圖形繪制,實(shí)現(xiàn)過程中主要就是調(diào)用plotly的函數(shù)接口,底層實(shí)現(xiàn)完全被隱藏,便于初學(xué)者的掌握。
    2017-07-07
  • 基于Python實(shí)現(xiàn)一個Word表格合并單元格工具

    基于Python實(shí)現(xiàn)一個Word表格合并單元格工具

    這篇文章主要介紹了如何基于Python實(shí)現(xiàn)一個Word表格合并單元格工具,用于處理Word文檔中的表格,主要功能是合并指定列中內(nèi)容相同的單元格,并支持多種格式設(shè)置選項(xiàng),需要的朋友可以參考下
    2025-11-11
  • Python使用Beautiful?Soup(BS4)庫解析HTML和XML

    Python使用Beautiful?Soup(BS4)庫解析HTML和XML

    這篇文章介紹了Python使用Beautiful?Soup(BS4)庫解析HTML和XML的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python實(shí)現(xiàn)圖算法、堆操作和并查集代碼實(shí)例

    Python實(shí)現(xiàn)圖算法、堆操作和并查集代碼實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)圖算法、堆操作和并查集代碼實(shí)例,圖算法、堆操作和并查集是計(jì)算機(jī)科學(xué)中常用的數(shù)據(jù)結(jié)構(gòu)和算法,它們在解決各種實(shí)際問題中具有重要的應(yīng)用價值,需要的朋友可以參考下
    2023-08-08
  • python框架Django實(shí)戰(zhàn)商城項(xiàng)目之工程搭建過程圖文詳解

    python框架Django實(shí)戰(zhàn)商城項(xiàng)目之工程搭建過程圖文詳解

    這篇文章主要介紹了python框架Django實(shí)戰(zhàn)商城項(xiàng)目之工程搭建過程,這個項(xiàng)目很像京東商城,項(xiàng)目開發(fā)采用前后端不分離的模式,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-03-03

最新評論

鹤岗市| 伊通| 康马县| 呼和浩特市| 平定县| 兖州市| 青冈县| 营口市| 老河口市| 广河县| 保定市| 广宁县| 玉林市| 淮滨县| 安庆市| 雷山县| 义马市| 砀山县| 广河县| 从化市| 剑河县| 娱乐| 乾安县| 达孜县| 广州市| 彭州市| 西安市| 北碚区| 探索| 龙游县| 普格县| 天长市| 苏尼特左旗| 阿巴嘎旗| 龙川县| 东丽区| 延长县| 稻城县| 吴堡县| 二手房| 合山市|