LangChain接入azureopenai步驟(2025年初)

背景:
為了快速且規范的實現ai應用,可使用LangChain框架,便于后期維護。雖然deepseek異軍突起,在終端用戶占有率很高,但是仔細查閱相關api接口,尤其是自有知識庫需要使用的文本向量化模型方面,openai仍無法被替代。目前國內仍無法付費使用openai接口,需要迂回使用azure版的openai相關模型。

目前,ai類應用處于快速迭代期,很多一年前的教程已經過時,因此記錄下2025年最新的ai應用使用方法。

一、開通azureopenai需要注冊azure.microsoft.com微軟云服務,并綁定visa功能的信用卡。

openai.com不支持國內信用卡:

在azure的主頁左上角下拉菜單,找到“成本管理 + 計費”:

在“成本管理 + 計費”窗口左側導航欄,打開“計費-》付款方式”:

添加visa卡即可。

二、進入Azure AI Foundry,創建ai容器

訪問新版的ai地址:Azure AI Foundryhttps://ai.azure.com/

?

然后通過頂部“+創建項目”按鍵一鍵完成openai容器創建。

注意:我也試過舊版的創建容器方式,也許是訪問地址沒有搞對,使用api訪問總是報404錯誤。

用新版創建容器后,點擊項目名稱,直接進入項目。

點擊操場即可測試當前容器是否運行正常:

?在舊版的azure openai容器沒有找到類似功能。也許有,但是新版更好找。推薦小白初學者用新版

Azure AI Foundryhttps://ai.azure.com/

三、測試python接入azure openai

點擊聊天操場的“查看代碼”功能

?可以看到完整的python運行代碼:

?粘貼到https://colab.research.google.com/或者jupyter notebook中稍加改動(加入api key和endpoint)即可運行:

?api key在 Azure AI Foundry / 224199843-5323 /?概述 頁可以找到

endpoint在示例代碼上方的文本框中能找到:

?注意:在使用langchain_openai框架時,endpoint不填全,api接口無法訪問,會報404錯誤。比如只填域名部分:

https://ai-2241998435710ai347721904316.openai.azure.com/

https://ai-2241998435710ai347721904316.openai.azure.com/

?

被這個問題困惑了一天,最后填寫了正確的url地址才解決。

!pip install -U langchain_openai
from langchain_openai import AzureChatOpenAI
from google.colab import userdatachat = AzureChatOpenAI(azure_endpoint="https://ai-2241998435710ai347721904316.openai.azure.com/openai/deployments/gpt-4o-mini/chat/completions?api-version=2025-01-01-preview",# azure_endpoint="https://ai-2241998435710ai347721904316.openai.azure.com/", 錯誤urlazure_deployment="ai-2241998435710ai347721904316",api_key=userdata.get('AZURE_OPENAI_API_KEY'),api_version="2025-01-01-preview",temperature=0,max_tokens=None,timeout=None,max_retries=2,# organization="...",# model="gpt-35-turbo",# model_version="0125",# other params...
)messages = [("system","You are a helpful translator. Translate the user sentence to French.",),("human", "I love programming."),
]
chat.invoke(messages)

四、學會使用langchain的 提示詞模板(ChatPromptTemplate)和 輸出解析器(JsonOutputParser)

雖然吳恩達的課程已經過時,但是可以結合deepseek的提示和最新的langchain api文檔來學習,我覺得吳恩達的講課思路非常清晰,很適合看了一堆視頻,越看越沒有頭緒的初學者。

(超爽中英!) 2024公認最好的【吳恩達LangChain+RAG】教程!更適合中國寶寶體質,全程干貨無廢話,學完成為AGI大佬!(附課件+代碼)_嗶哩嗶哩_bilibili(超爽中英!) 2024公認最好的【吳恩達LangChain+RAG】教程!更適合中國寶寶體質,全程干貨無廢話,學完成為AGI大佬!(附課件+代碼)共計29條視頻,包括:基于LangChain的大語言模型應用開發1——介紹、基于LangChain的大語言模型應用開發2——模型,提示和輸出解析、基于LangChain的大語言模型應用開發3——記憶等,UP主更多精彩視頻,請關注UP賬號。https://www.bilibili.com/video/BV1TJ4zemETf/

from langchain_openai import AzureChatOpenAI
from google.colab import userdatachat = AzureChatOpenAI(azure_endpoint="https://ai-2241998435710ai347721904316.openai.azure.com/openai/deployments/gpt-4o-mini/chat/completions?api-version=2025-01-01-preview",# azure_endpoint="https://ai-2241998435710ai347721904316.openai.azure.com/",azure_deployment="ai-2241998435710ai347721904316",api_key=userdata.get('AZURE_OPENAI_API_KEY'),api_version="2025-01-01-preview",temperature=0,max_tokens=None,timeout=None,max_retries=2,# organization="...",# model="gpt-35-turbo",# model_version="0125",# other params...
)from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
# from langchain_core.pydantic_v1 import BaseModel, Field, HttpUrl  
# langchain_core.pydantic_v1 已淘汰,langchain可以直接導入pydantic 2的對象
from pydantic import BaseModel, Field, HttpUrl
from typing import List, Optional, Union
from datetime import date# 1.1 創建含有動態字段的簡歷結構# 動態字段的基類
class DynamicSection(BaseModel):section_name: str = Field(description="模塊名稱")content: Union[str, List[str], dict] = Field(description="模塊內容")# 教育經歷、工作經歷、技能、項目經驗
class Education(BaseModel):"""教育背景條目(所有字段可選)"""sections: List[DynamicSection] = Field(default_factory=list, description="動態項或動態列表")class WorkExperience(BaseModel):"""工作經歷條目(所有字段可選)"""sections: List[DynamicSection] = Field(default_factory=list, description="動態項或動態列表")class Skill(BaseModel):"""技能條目(所有字段可選)"""sections: List[DynamicSection] = Field(default_factory=list, description="動態項或動態列表")class ProjectExperience(BaseModel):sections: List[DynamicSection] = Field(default_factory=list, description="動態項或動態列表")class Resume_dynamic(BaseModel):"""簡歷數據模型(所有字段可選)"""# 基礎信息seq_num: Optional[int] = Field(None, description="序號", gt=0)file_name: Optional[str] = Field(None, description="文件名", max_length=255)  # 允許字母數字/下劃線/點/橫線 regex=r"^[\w\-\.]+$"is_resume: Optional[bool] = Field(None, description="該文件是否是簡歷")# 個人信息name: Optional[str] = Field(None, description="姓名", min_length=2, max_length=50)gender: Optional[str] = Field(None, description="性別", examples=["男", "女", "其他"])birthday: Optional[date] = Field(None, description="生日")ethnicity: Optional[str] = Field(None, description="民族")political_affiliation: Optional[str] = Field(None, description="政治面貌")marital_status: Optional[str] = Field(None, description="婚姻狀況")native_place: Optional[str] = Field(None, description="籍貫或戶口所在地")address: Optional[str] = Field(None, description="現住址")id_number: Optional[str] = Field(None, description="身份證號碼", pattern=r"^\d{17}[\dXx]$")phone: Optional[str] = Field(None, description="手機號", pattern=r"^1[3-9]\d{9}$")email: Optional[str] = Field(None, description="郵箱", pattern=r"^[\w\.-]+@[\w\.-]+\.\w{2,4}$")# 教育信息highest_degree: Optional[str] = Field(None, description="最高學歷", examples=["高中", "專科", "本科", "碩士", "博士"])major: Optional[str] = Field(None, description="最高學歷專業", max_length=50)# 求職信息job_target: Optional[str] = Field(None, description="求職意向職業", max_length=100)# 結構化信息education_background: Optional[List[Education]] = Field(None, description="教育背景")work_experience: Optional[List[WorkExperience]] = Field(None, description="工作經歷")skills: Optional[List[Skill]] = Field(None, description="特殊技能或資格證書")project_experience: Optional[List[ProjectExperience]] = Field(None, description="項目經歷")# 2.1 創建簡歷結構json解析器
resume_output_parser = JsonOutputParser(pydantic_object=Resume_dynamic)# 3. 創建簡歷解析提示模板
prompt = ChatPromptTemplate.from_template("解析以下簡歷:{question}\n""請按照指定格式返回:\n""{format_instructions}"
)# 4. 組合成鏈
chain = prompt | chat | resume_output_parserresume_text = '''
應聘人員信息表
姓名 ...
電話 ...
... ...'''# 5. 調用
result = chain.invoke({"question": resume_text,"format_instructions": resume_output_parser.get_format_instructions()
})

result輸出結果:

{'seq_num': None,'file_name': None,'is_resume': None,'name': '','gender': '男','birthday': '1900-00-00','ethnicity': '漢','political_affiliation': '群眾','marital_status': '未婚','native_place': '吉林省長春市','address': '高新技術開發區,保利羅蘭香谷','id_number': '221100000000000000','phone': '15922334455','email': None,'highest_degree': '碩士','major': '建筑與土木工程','job_target': '市政道路、排水設計','education_background': [{'sections': [{'section_name': '教育經歷','content': {'起止年月': '2012.09-2015.07','畢業院校及系名稱': '吉林建筑大學','專業': '建筑與土木工程','學位': '碩士'}},{'section_name': '教育經歷','content': {'起止年月': '2008.09-2012.07','畢業院校及系名稱': '長春工程學院',
...{'section_name': '項目經歷',

注意:langchain_core.pydantic_v1 已淘汰,langchain可以直接導入pydantic 2的對象

例子來自deepseek,在本例中class Resume_dynamic(BaseModel):對象即用于提示詞中對生成格式的要求,又用于將ai生成結果解析為dict對象,一箭雙雕。其余代碼非常直觀,鏈式編程也符合一般人的認知。這樣編寫的代碼即簡潔又高效。

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

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

相關文章

阿里云國際站代理商:模型訓練中斷數據丟失怎么辦?

定期保存訓練狀態:在訓練過程中,設定自動保存訓練狀態的頻率,將模型的參數、優化器狀態、訓練數據的中間結果等定期保存到存儲介質上。這樣,當中斷發生時,可以恢復到上次保存的狀態,避免訓練進度的損失。 …

C++17更新內容匯總

C17 是 C14 的進一步改進版本,它引入了許多增強特性,優化了語法,并提升了編譯期計算能力。以下是 C17 的主要更新內容: 1. 結構化綁定(Structured Bindings) 允許同時解構多個變量,從 std::tup…

2025年Axure RP9無法免費使用Axure Cloud的解決方案

解決方案 更換新賬號,換了一個郵箱注冊,再登陸,又會給你30天的試用期。 對,辦法就是換個郵箱注冊,又續上30天的試用期。

供應鏈中的的“四流合一”

在供應鏈中,物流、資金流、信息流、商流是共同存在的,商流、信息流和資金流的結合將更好的支持和加強供應鏈上、下游企業之間的貨物、服務往來(物流)。 一、商流 在供應鏈中,上下游供應商的資金鏈條均可被金融服務機構…

MonkeyDev 如何創建一個root級級別的app

前提條件:有越獄的手機,XCode中已經安裝了Monkeydev 1. 和普通應用一個創建一個ios的工程 2. 在App的TARGETS>build setting> 中設置Apple Development 3. 設置User-Defined的配置 CODE_SIGNING_ALLOWED = NO MonkeyDevBuildPackageOnAnyBuild = NO MonkeyDevClearUi…

Excel時間類型函數(包括today、date、eomonth、year、month、day、weekday、weeknum、datedif)

目錄 1. TODAY()2. DATE()3. EOMONTH()4. YEAR()5. MONTH()6. DAY()7. WEEKDAY()8. WEEKNUM()9. DATEDIF()10.📌 函數擴展與應用11. 📚 時間函數基礎概念與分類 Excel 提供了許多 日期與時間類型的函數,用于操作與處理日期或時間數據。這些函…

Lumerical ------ Edge coupler design

Lumerical ------ Edge coupler design 引言正文無 Si Substrate 的仿真步驟有 Si Substrate 的仿真步驟引言 本文,我們將使用官方提供的 Edge coupler 設計教程,但是中間會帶有作者本人的設計的感悟。 正文 無 Si Substrate 的仿真步驟 打開 Edge_Coupler_No_Substrate.l…

Spring筆記06-數據持久化

在 Spring 中,數據持久化是將應用程序中的數據保存到持久化存儲(如數據庫)中的過程 ,主要通過以下幾種方式實現: 1. JDBC(Java Database Connectivity) 原理:JDBC 是 Java 訪問關系…

spring boot集成reids的 RedisTemplate 序列化器詳細對比(官方及非官方)

RedisTemplate 序列化器詳細對比(官方及非官方) 1. 官方序列化器 (1) JdkSerializationRedisSerializer 特點: 基于 Java 原生序列化(Serializable)。支持復雜對象(需實現 Serializable 接口)…

ssh私鑰文件登錄問題:Load key invalid format

問題 在mac上面使用私鑰文件登錄時候,出現了如下錯誤: Load key “xxx.pem”: invalid format 但是,這個私鑰文件在win上面能夠正常使用ssh進行遠程登錄。在mac上面不能。而且,分別在win和mac上面分別查看了這兩個私鑰文件的md5…

AI戰略群與星際之門:軟銀AI投資版圖計劃深度解析

一、星際之門:萬億美元級 AI 基礎設施革命 1.1 項目背景與戰略定位 在 AI 技術迅猛發展的今天,算力已成為推動其前進的核心動力。軟銀聯合 OpenAI、甲骨文、英偉達、微軟、arm推出的 “星際之門”(Stargate)計劃,無疑是 AI 領域的一顆重磅炸彈。作為 AI 領域史上最大單筆…

教務系統ER圖

實體 1. 學生:具有姓名、學號、性別、系編號、電話、出生年月等屬性。學號通常是學生的唯一標識。 2. 課程:包含課程編號、課程名稱、課程學分、課程學時等屬性。課程編號一般用于唯一標識一門課程。 3. 教師:屬性有教師編號、教師名字、性別…

大數據(4.4)Hive多表JOIN終極指南:7大關聯類型與性能優化實戰解析

目錄 背景一、Hive JOIN類型與語法詳解1. 基礎JOIN類型2. 高級JOIN類型 二、JOIN實戰案例與調優案例1:兩表內連接(訂單與用戶關聯)案例2:多表鏈式JOIN(用戶-訂單-商品)案例3:處理數據傾斜&#…

【28BYJ-48】STM32同時驅動4個步進電機,支持調速與正反轉

資料下載:待更新。。。。 先驅動起來再說,干中學!!! 1、實現功能 STM32同時驅動4個步進電機,支持單獨調速與正反轉控制 需要資源:16個任意IO口1ms定時器中斷 目錄 資料下載:待更…

[Lc6_記憶化搜索] 不同路徑 | 解決智力問題 | 有序三元組中的最大值

目錄 1.不同路徑 題解 2140. 解決智力問題 題解 2873. 有序三元組中的最大值 題解 1.不同路徑 鏈接:62. 不同路徑 一個機器人位于一個 m x n 網格的左上角 (起始點在下圖中標記為 “Start” )。 機器人每次只能向下或者向右移動一步…

軟件重構與項目進度的矛盾如何解決

軟件重構與項目進度之間的矛盾可以通過明確重構目標與范圍、采用漸進式重構策略、優化項目管理流程、提高團隊溝通效率、建立重構意識文化等方式解決。其中,采用漸進式重構策略尤為關鍵。漸進式重構是指在日常開發過程中,以小步驟持續進行重構&#xff0…

多臺服務器上docker部署 Redis 集群

規劃集群節點 確保你的服務器有固定 IP,比如: 172.16.17.100 172.16.17.101 172.16.17.102 每臺服務器運行 2 個 Redis 節點,總共 6 個節點,滿足 Redis Cluster 最小節點數要求。 2. 在每臺服務器上運行 Redis 在每臺服務器上執行…

【Pandas】pandas DataFrame dtypes

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于獲取 DataFrame 的行索引DataFrame.columns用于獲取 DataFrame 的列標簽DataFrame.dtypes用于獲取 DataFrame 中每一列的數據類型 pandas.DataFrame.dtypes pandas.DataFrame.dtypes 屬性用…

如何實現局域網內無痛訪問Jupyter Notebook?

Jupyter Notebook是數據科學和機器學習領域非常常用的交互式開發環境。默認情況下,Jupyter Notebook啟動后只能本地訪問,并且會自動生成一個token用于身份驗證。當需要從其他電腦遠程訪問時,往往需要對配置進行修改。 本文將詳細介紹如何通過…

[Windows] eDiary 4.3.6 日記軟件

[Windows] eDiary 鏈接:https://pan.xunlei.com/s/VOMq6xmKTbEJtNaW-BXZ7KKSA1?pwdcrvu# 【應用功能】 加密 無論本地還是云端,都可以選擇高強度加密。系統以用戶密碼為種子,對數據進行…