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.mzph.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# 【应用功能】 加密 无论本地还是云端,都可以选择高强度加密。系统以用户密码为种子,对数据进行…