LangChain使用方法以OpenAI 的聊天模型GPT-4o為例

以使用 OpenAI 的聊天模型(如 GPT-4)為例,從設置環境、初始化模型、調用模型到處理響應的各個方面進行介紹:

1. 環境設置

  • 安裝 langchain-openai 包。
  • 設置環境變量 OPENAI_API_KEY,用于認證(以linux為例,windows也可以手動添加環境變量)
pip install -U langchain-openai
export OPENAI_API_KEY="your-api-key"

2. 初始化參數

  • 模型參數:如模型名稱、溫度(temperature)、最大生成令牌數(max_tokens)等。
  • 客戶端參數:如請求超時時間(timeout)、最大重試次數(max_retries)、API 密鑰(api_key)等。
from langchain_openai import ChatOpenAIllm = ChatOpenAI(model="gpt-4o",temperature=0,max_tokens=None,timeout=None,max_retries=2,# api_key="...",# base_url="...",# organization="...",# other params...
)

3. 調用模型

  • 通過 invoke 方法調用模型,傳入對話消息。
  • 支持同步和異步調用。
messages = [("system", "You are a helpful translator. Translate the user sentence to French."),("human", "I love programming."),
]
response = llm.invoke(messages)
print(response.content)

完整代碼:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage# 使用LangChain調用DeepSeek模型
llm = ChatOpenAI(model="gpt-4o",  # 使用完整的模型名稱temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="******",base_url="https://openrouter.ai/api/v1",  # 添加OpenRouter的基礎URLopenai_api_base="https://openrouter.ai/api/v1",  # 有些版本可能需要這個參數
)
# 創建消息列表 - 使用LangChain的消息格式
messages = [SystemMessage(content="你是一個有幫助的助手,請用中文回答用戶的問題。"),HumanMessage(content="今天天氣如何?")
]try:response = llm.invoke(messages)print(response.content)
except Exception as e:print(f"發生錯誤: {e}")

4. 流式響應

  • 使用 stream 方法獲取流式響應,逐步處理生成的文本。
for chunk in llm.stream(messages):print(chunk.text(), end="")

完整代碼:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage# 使用LangChain調用DeepSeek模型
llm = ChatOpenAI(model="gpt-4o",  # 使用完整的模型名稱temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="******",base_url="https://openrouter.ai/api/v1",  # 添加OpenRouter的基礎URLopenai_api_base="https://openrouter.ai/api/v1",  # 有些版本可能需要這個參數
)
# 創建消息列表 - 使用LangChain的消息格式
messages = [SystemMessage(content="你是一個有幫助的助手,請用中文回答用戶的問題。"),HumanMessage(content="今天天氣如何?")
]try:for chunk in llm.stream(messages):print(chunk.text(), end="")
except Exception as e:print(f"發生錯誤: {e}")

5. 異步調用

  • 支持異步調用,適用于需要非阻塞操作的場景。
await llm.ainvoke(messages)

6. 工具調用

  • 可以綁定工具(如天氣查詢、人口查詢等),模型會自動調用這些工具。
from pydantic import BaseModel, Fieldclass GetWeather(BaseModel):location: str = Field(..., description="The city and state, e.g. San Francisco, CA")llm_with_tools = llm.bind_tools([GetWeather])
response = llm_with_tools.invoke("What is the weather in LA?")

完整代碼:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from pydantic import BaseModel, Fieldclass GetWeather(BaseModel):location: str = Field(..., description="The city and state, e.g. San Francisco, CA")# 使用LangChain調用DeepSeek模型
llm = ChatOpenAI(model="gpt-4o",  # 使用完整的模型名稱temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="******",base_url="https://openrouter.ai/api/v1",  # 添加OpenRouter的基礎URLopenai_api_base="https://openrouter.ai/api/v1",  # 有些版本可能需要這個參數
)llm_with_tools = llm.bind_tools([GetWeather])# 創建消息列表 - 使用LangChain的消息格式
messages = [SystemMessage(content="你是一個有幫助的助手,請用中文回答用戶的問題。"),HumanMessage(content="北京,今天天氣如何?")
]try:for chunk in llm_with_tools.stream(messages):print(chunk.text(), end="")
except Exception as e:print(f"發生錯誤: {e}")

7. 內置工具

  • 使用 OpenAI 的內置工具,如搜索、文檔解析等。
tool = {"type": "web_search"}
llm_with_tools = llm.bind_tools([tool])
response = llm_with_tools.invoke("What was a positive news story from today?")

8. 對話狀態管理

  • 通過 previous_response_id 維護對話狀態,確保對話連貫性。
response = llm.invoke("Hi, I'm Bob.")
second_response = llm.invoke("What is my name?", previous_response_id=response.response_metadata["id"])

9. 結構化輸出

  • 可以指定輸出格式為特定的 Pydantic 模型。
class Joke(BaseModel):setup: str = Field(description="The setup of the joke")punchline: str = Field(description="The punchline to the joke")structured_llm = llm.with_structured_output(Joke)
response = structured_llm.invoke("Tell me a joke about cats")

10. JSON 模式

  • 指定響應格式為 JSON 對象。
json_llm = llm.bind(response_format={"type": "json_object"})
response = json_llm.invoke("Return a JSON object with key 'random_ints' and a value of 10 random ints in [0-99]")

11. 圖像輸入

  • 支持將圖像作為輸入,模型可以處理圖像內容。
import base64
import httpximage_url = "https://example.com/image.jpg"
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")
message = HumanMessage(content=[{"type": "text", "text": "describe the weather in this image"},{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}},]
)
response = llm.invoke([message])

12. 令牌使用

  • 獲取每次調用的令牌使用情況,包括輸入、輸出和總令牌數。
response = llm.invoke(messages)
print(response.usage_metadata)

13. 日志概率

  • 獲取生成文本的日志概率信息。
logprobs_llm = llm.bind(logprobs=True)
response = logprobs_llm.invoke(messages)
print(response.response_metadata["logprobs"])

14. 響應元數據

  • 獲取響應的元數據,包括模型名稱、完成原因等。
response = llm.invoke(messages)
print(response.response_metadata)

15. 靈活處理

  • 使用 OpenAI 的靈活處理(flex processing)服務,適用于非關鍵任務。
llm = ChatOpenAI(model="o4-mini", service_tier="flex")

16. OpenAI 兼容 API

  • 支持與 OpenAI 兼容的 API(如 LM Studio、vLLM 等),通過 extra_body 參數傳遞特定參數。
llm = ChatOpenAI(base_url="http://localhost:8000/v1",api_key="EMPTY",model="meta-llama/Llama-2-7b-chat-hf",extra_body={"use_beam_search": True, "best_of": 4},
)

17. 參數選擇

  • 使用 model_kwargs 傳遞標準 OpenAI 參數。
  • 使用 extra_body 傳遞特定于兼容 API 的自定義參數。

18. 提示緩存優化

  • 使用 prompt_cache_key 參數優化緩存命中率,減少成本。
response = llm.invoke(messages, prompt_cache_key="example-key-a")

總結

本位提供了非常全面的指導,幫助開發者快速集成和使用 OpenAI 的聊天模型,包括環境設置、參數配置、調用方法、工具集成、響應處理等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/98271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/98271.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/98271.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle為數據大表創建索引方案

在日常業務中,避免不了為數據量大表補充創建索引的情況,如果快速、有效地創建索引成了一個至關重要的問題(注意:雖然提供有ONLINE在線執行的方式,理想狀態下不會阻塞DML操作,但ONLINE在開始、結束的兩個時刻…

網站服務相關問題

目錄 HTTP常見的狀態碼 http和https的區別以及使用的端口號 http處理請求的過程 https認證過程 正向代理和反向代理的區別 HTTP常見的狀態碼 HTTP(超文本傳輸協議)定義了一系列的狀態碼,用于表示客戶端請求的處理結果。以下是一些常見的…

Go并發編程實戰:深入理解Goroutine與Channel

Go并發編程實戰:深入理解Goroutine與ChannelGo并發編程實戰:深入理解Goroutine與Channel概述1. 為什么是Go的并發?從“線程”與“協程”說起2. Goroutine:如何使用?3. Channel:Goroutine間的安全通信創建與…

2025服貿會“海淀之夜”,點亮“科技”與“服務”底色

2025年9月12日傍晚,北京頤和園,十七孔橋旁,2025年中國國際服務貿易交易會“海淀之夜”如約而至。在“海淀之夜”,科技機構、金融機構、咨詢服務機構、出海服務企業以及跨國企業和國際友人等,將目光聚焦于此。被第三方機…

qt使用camke時,采用vcpkg工具鏈設置VTK的qt模塊QVTKOpenGLNativeWidget

下載:QVTKOpenGLNativeWidget嵌入qt應用中資源-CSDN下載 1.通過vcpkg安裝VTK,目前的VTK里面默認為qt6,如果需要安裝qt5,需要將端口配置進行修改 筆者的vcpkg的vtk端口路徑:D:\vcpkg\ports\vtk portfile.cmake 修改點: #第一處 #file(READ "${CURRENT_INSTALLED_DIR}/sh…

Axios在鴻蒙應用開發中的使用

目錄一、簡介二、安裝與配置三、axios用法1.axios泛型參數(1).第三個泛型參數-約束data請求參數的類型(2).第二個泛型參數-決定后臺返回數據的類型2.axios攔截器3.請求工具封裝統一處理業務狀態碼錯誤統一處理401或404錯誤一、簡介 Axios 是一個基于 Promise 的網絡請求庫&…

第九周文件上傳

文件上傳漏洞 不同的網站要不同的webshell。我們使用是php開發的網站。 一服務器白名單繞過 服務端白名單(Whitelist)是?種安全機制,它只允許預定義的合法元素通過(只有有限的元素進入),其他所有內容默認被拒絕。相比黑名單&am…

計算機視覺必讀論文:從經典到前沿

計算機視覺必讀論文:從經典到前沿 一、前言 二、經典論文解讀? 2.1 圖像分類? 2.1.1 《ImageNet Classification with Deep Convolutional Neural Networks》(AlexNet)? 2.1.2 《Very Deep Convolutional Networks for Large-Scale Image Recognition》(VGGNet)? 2.1.…

對比PowerBI的字段參數,QuickBI的已選字段還有改進的空間

對比PowerBI的字段參數,QuickBI的已選字段還有改進的空間 之前分享過QuickBI的已選字段 vs PowerBI的字段參數,QuickBI可以在表格中實現PowerBI的字段參數效果,甚至比PowerBI實現的過程和使用方式更絲滑。 但如果應用到圖形中會怎么樣呢&am…

飛算JavaAI:Java開發新時代的破曉之光

免責聲明:此文章的所有內容皆是本人實驗測評,并非廣告推廣,并非抄襲。如有侵權,請聯系,謝謝!【#飛算JavaAl炫技賽】 【#Java開發】摘要:飛算JavaAI作為全球首款聚焦Java的智能開發助手&#xff…

vulntarget-c靶場內網滲透

1. 環境搭建 2.對ubuntu20的滲透 對其進行端口掃描 訪問80端口 發現是laravel框架。版本是v8.78.1 使用 kaili 自帶的msf 進行滲透 search laravel use exploit/multi/php/ignition_laravel_debug_rce執行利用完成檢測 上傳木馬 先將木馬進行base64編碼 <?php eval($_P…

基于大模型多模態的人體體型評估:從“尺碼測量”到“視覺-感受”范式

基于大模型多模態的人體體型評估&#xff1a;從“尺碼測量”到“視覺-感受”范式摘要&#xff1a;傳統體型識別依賴CV骨架/關鍵點與像素量尺&#xff0c;容易受衣物、發型、姿態、光照影響&#xff0c;且“厘米級數值”與穿衣體驗、審美感受之間存在鴻溝。本文提出一種基于大模…

【docker】——docker國內可用的源

不知道哪里來的&#xff0c;但是可以用。1. 解決方案打開配置文件&#xff08;若文件不存在&#xff0c;會自動創建&#xff09; sudo vim /etc/docker/daemon.json將以下內容粘貼進去{"builder": {"gc": {"defaultKeepStorage": "20GB&quo…

【Windows端口管理】快速查看和釋放被系統保留的TCP端口

問題描述在Windows系統開發時&#xff0c;經常遇到端口無法使用的問題。系統會自動保留一系列TCP/UDP端口范圍&#xff0c;導致應用程序無法綁定這些端口。查看所有被保留的端口范圍查看TCP保留端口# 查看所有TCP端口排除范圍 netsh interface ipv4 show excludedportrange pro…

面經匯總(1)

1.介紹C面向對象的三大特性2.介紹常見的排序算法3.介紹TCP/UDP區別4.TCP三次握手四次揮手5.如果四次揮手第四次客戶端的ACK沒有發出去會有什么結果&#xff1f;6.介紹MYSQL的事務7.介紹線程池8.主要的線程池有哪幾種&#xff1f;9.手撕反轉鏈表10.介紹對象存儲以及常見的對象存…

遙感圖像數字水印系統優化方案

遙感圖像數字水印系統優化方案 1. 引言 遙感圖像在現代地理信息系統、環境監測、軍事偵察等領域發揮著重要作用。為了保護遙感圖像的版權和完整性&#xff0c;數字水印技術被廣泛應用。然而&#xff0c;現有的遙感圖像水印方案往往在不可見性、魯棒性和容量之間存在權衡&#x…

鴻蒙高效數據處理框架全攻略:緩存、并行與流式實戰

摘要 在如今的物聯網和智能設備世界里&#xff0c;數據已經成為最關鍵的資源。無論是可穿戴設備、智能家居&#xff0c;還是車載系統&#xff0c;每一秒都會產生大量數據。如果缺少一套高效的數據處理框架&#xff0c;開發者就可能面臨內存溢出、處理延遲大、設備卡頓等問題。本…

零售企業數字化轉型的道、法、術:基于開源AI大模型AI智能名片S2B2C商城小程序的戰略重構

摘要 在數字經濟與消費升級的雙重驅動下&#xff0c;零售企業正經歷從"流量爭奪"到"用戶時間爭奪"的范式轉變。本文以阿里巴巴、京東、萬達三大巨頭的戰略實踐為樣本&#xff0c;結合開源AI大模型、AI智能名片與S2B2C商城小程序的技術特性&#xff0c;提出…

瑞云渲染為電影《731》提供云渲染技術支持,助力影片全球上映

在“九一八事變”94周年這一莊嚴沉重的紀念時刻&#xff0c;抗戰電影《731》&#xff08;海外名&#xff1a;《EVIL UNBOUND》&#xff09;于世界各地上映&#xff0c;激起廣泛的社會反響與深遠的歷史思考。 瑞云渲染&#xff08;Renderbus&#xff09;作為全球領先的云渲染服…

EasyDSS視頻直播RTMP推流技術如何實現多機型的無人機視頻統一直播

在當今這個瞬息萬變的傳媒時代&#xff0c;無人機與推流直播的結合&#xff0c;正以前所未有的方式重塑著信息傳播的邊界。無人機以其獨特的空中視角和靈活的機動性&#xff0c;為直播行業帶來了革命性的變化&#xff0c;而推流直播技術的成熟&#xff0c;則讓這一變化得以實時…