发布时间:2026/8/25 22:44:02
LangChain 入门到进阶:基于 OpenAI Compatible API 的实践指南 LangChain 入门到进阶基于 OpenAI Compatible API 的实践指南前言本文通过一系列由浅入深的练习帮助大家快速掌握 LangChain 的核心用法。所有示例均基于 OpenAI Compatible API通义千问等请根据实际情况替换模型配置。环境准备首先安装依赖pipinstalllangchain langchain-core python-dotenv pydantic配置.env文件DASHSCOPE_API_KEYyour_api_key_here DASHSCOPE_BASE_URLyour_base_url第一阶段基础对话1.1 模型初始化与批量调用test001.pyfromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv()modelinit_chat_model(modelqwen35-35b-a3b-fp8,model_provideropenai,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlos.getenv(DASHSCOPE_BASE_URL),temperature0.7,)# 批量调用responsesmodel.batch([你好简单介绍下自己。,用一句话介绍 LangChain。,什么是 OpenAI-compatible,])forresponseinresponses:print(response.content)知识点init_chat_model()统一初始化聊天模型model.batch()批量处理多个请求1.2 带历史的消息对话test005.pyfromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.messagesimportSystemMessage,HumanMessage,AIMessagefromdotenvimportload_dotenvimportos load_dotenv()modelinit_chat_model(modelqwen35-35b-a3b-fp8,model_provideropenai,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlos.getenv(DASHSCOPE_BASE_URL),temperature0.7,)messages[SystemMessage(content你是一个乐于助人的 AI 助手。),HumanMessage(content你好我是Yuan老师。),AIMessage(content你好很高兴认识你。),HumanMessage(content我刚才说我是谁),]responsemodel.invoke(messages)print(response.content)知识点SystemMessage系统消息设定 AI 角色HumanMessage用户消息AIMessageAI 回复消息完整的消息历史让模型能理解上下文第二阶段提示词模板2.1 ChatPromptTemplate 格式化test006.pyfromlangchain_core.promptsimportChatPromptTemplatefromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv()modelinit_chat_model(modelqwen35-35b-a3b-fp8,model_provideropenai,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlos.getenv(DASHSCOPE_BASE_URL),temperature0.7,)promptChatPromptTemplate.from_messages([(system,你是{device_type}设备的客服助手回答要简洁、准确。),(human,用户问题{question}),])messagesprompt.format_messages(device_type智能音箱,question你好我想知道怎么和智能音箱交互。,)responsemodel.invoke(messages)print(response.content)2.2 LCEL 管道符组合test007.pyfromlangchain_core.promptsimportChatPromptTemplatefromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv()modelinit_chat_model(modelqwen35-35b-a3b-fp8,model_provideropenai,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlos.getenv(DASHSCOPE_BASE_URL),temperature0.7,)promptChatPromptTemplate.from_messages([(system,你是{device_type}设备的客服助手回答要简洁、准确。),(human,用户问题{question}),])# 使用 LCEL 管道符chainprompt|model responsechain.invoke({device_type:智能音箱,question:你好我想知道手机怎么智能音箱连接,})print(response.content)知识点ChatPromptTemplate.from_messages()构建提示词模板|管道符LangChain Expression Language (LCEL)将 prompt 和 model 连接成链这种方式更灵活便于复用和调试第三阶段流式输出3.1 基本流式调用test001.py中的流式示例streammodel.stream(python和js的区别)forchunkinstream:print(chunk.content,end,flushTrue)3.2 Agent 流式输出处理test002.pyfromlangchain.agentsimportcreate_agentfromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.messagesimportSystemMessage,HumanMessage,AIMessagefromdotenvimportload_dotenvimportos load_dotenv()modelinit_chat_model(modelqwen35-35b-a3b-fp8,model_provideropenai,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlos.getenv(DASHSCOPE_BASE_URL),temperature0.7,)agentcreate_agent(modelmodel)messages[SystemMessage(content你是一个乐于助人的 AI 助手。),HumanMessage(content你好我是教 AI 的 Yuan 老师。),AIMessage(content你好Yuan 老师很高兴认识你。),HumanMessage(content请查询 SpaceX 最近 7 天的最新消息。),]resagent.stream({messages:messages})# 收集所有 chunkfull_responseNoneforchunkinres:iffull_responseisNone:full_responsechunkelse:full_response{**full_response,**chunk}formessageinfull_response[messages]:message.pretty_print()知识点model.stream()流式输出字词逐个返回agent.stream()Agent 流式响应返回消息列表流式输出提升用户体验尤其适合长文本生成第四阶段多模态 - 图片处理4.1 本地图片处理test003.pyimportbase64importmimetypesfrompathlibimportPathfromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.messagesimportHumanMessagefromdotenvimportload_dotenvimportos load_dotenv()modelinit_chat_model(modelqwen35-35b-a3b-fp8,model_provideropenai,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlos.getenv(DASHSCOPE_BASE_URL),temperature0.7,)deflocal_image_to_data_url(image_path:str)-str:pathPath(image_path).resolve()ifnotpath.exists():path(Path(__file__).parent/image_path).resolve()mime_type,_mimetypes.guess_type(path.suffix)ifnotmime_type:mime_typeimage/pngdatapath.read_bytes()b64base64.b64encode(data).decode()returnfdata:{mime_type};base64,{b64}image_urllocal_image_to_data_url(./avatar2.png)essageHumanMessage(content[{type:text,text:请描述这张图片。},{type:image_url,image_url:{url:image_url}},])resmodel.stream([message])forrinres:print(r.content,end,flushTrue)4.2 网络图片处理test004.pyfromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.messagesimportHumanMessagefromdotenvimportload_dotenvimportos load_dotenv()modelinit_chat_model(modelqwen35-35b-a3b-fp8,model_provideropenai,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlos.getenv(DASHSCOPE_BASE_URL),temperature0.7,)messageHumanMessage(content[{type:text,text:请描述这张图片。},{type:image_url,image_url:{url:https://example.com/image.png},},])forchunkinmodel.stream([message]):print(chunk.content)知识点图片需转为 Base64 Data URL 格式支持本地路径和网络 URL多模态模型可理解图像内容并回答相关问题第五阶段结构化输出test008.pyfromlangchain.chat_modelsimportinit_chat_modelfrompydanticimportBaseModel,Fieldfromdotenvimportload_dotenvimportos load_dotenv()modelinit_chat_model(modelqwen35-35b-a3b-fp8,model_provideropenai,api_keyos.getenv(DASHSCOPE_API_KEY),base_urlos.getenv(DASHSCOPE_BASE_URL),temperature0.7,)classMovie(BaseModel):title:strField(...,description电影名称)year:intField(...,description上映年份)director:strField(...,description导演)rating:floatField(...,description评分满分 10 分)model_with_structuremodel.with_structured_output(Movie,include_rawTrue)responsemodel_with_structure.invoke(你好我想知道电影如果爱的详细信息。)print(response)知识点with_structured_output()让模型输出符合 Pydantic 模型定义的结构化数据include_rawTrue同时返回原始响应和解析后的结构化对象适用于需要提取特定字段的场景总结阶段核心内容适用场景基础init_chat_model、invoke、batch简单对话、批量处理模板ChatPromptTemplate、LCEL|提示词复用、链式调用流式stream长文本生成、实时交互多模态图片 Base64/URL图文理解、视觉问答结构化with_structured_output数据提取、API 响应注意事项敏感信息生产环境中请勿将 API Key 硬编码建议使用环境变量或密钥管理服务编码处理Windows 环境下可能需要配置 UTF-8 编码importsysimportio sys.stdoutio.TextIOWrapper(sys.stdout.buffer,encodingutf-8)sys.stderrio.TextIOWrapper(sys.stderr.buffer,encodingutf-8)模型选择不同模型对多模态、结构化输出的支持程度不同请参考模型文档

相关新闻

2026/8/25 22:39:02

电商主图的生产成本账:外包、自研、AI 工具,怎么选更划算

电商主图看起来是"一张图",本质却是强视觉资源:能不能被一眼看懂、点击率、转化率,都压在图上。团队里没有专职设计的时候,主流的做法就三条——外包、自研、用现成的 AI 工具。我把自己算过的账整理一下,供…

2026/8/26 1:24:35

嵌入式库函数模板代码:可移植、防坑、实测可用的外设驱动骨架

1. 什么是嵌入式库函数模板代码?它到底解决什么问题?“嵌入式库函数模板代码”这个词乍一听像教科书里的术语,其实它根本不是某个官方标准名词,而是我们一线嵌入式工程师在日复一日填坑、调参、赶项目时,自发沉淀下来的…

2026/8/26 1:24:35

pc浏览器网页如何实现自动化操作

在日常工作和开发中,我们经常遇到需要自动化操作PC浏览器网页的场景——批量数据采集、表单自动填写、重复性点击确认等。本文将从实际出发,在Android设备上实现对PC浏览器网页的自动化操作,涵盖环境配置、脚本开发、核心API使用及最佳实践&a…

2026/8/26 1:24:35

C盘空间告急?一文教你将Codex等缓存安全迁移至D盘

C盘红了,第一反应通常是打开清理软件,但真正把系统盘塞满的,往往是 Codex 这类开发工具在用户目录里留下的缓存、配置和日志。我最近处理的一台电脑就是典型情况:装了 Codex 命令行工具,又用 VS Code,再加上…

2026/8/26 1:24:35

本地知识库部署与RAG性能评测

###本地知识库方案评测 1. 评测维度 评测维度说明部署简易性是否支持一键部署(如Docker)、是否需要复杂配置中文支持能力对中文文本的处理效果,包括分词、语义理解等RAG精度文档解析能力、重排序算法、检索准确率可视化编排是否提供图形化界…

2026/8/26 1:24:35

学习产品生命周期管理系统 —— 产品生命周期管理系统之十一

经理发现项目的推进速度在下降,他的记事本里几乎每个工作项目都是延迟的状态。整个进度受到各种问题的影响。公司的会议室里,针对项目近期遇到的问题,各级主管在开会。会议的结论是,目前项目的进展不够顺利,原因是多方…

2026/8/26 1:19:35

金融AI应用解决方案选型先看哪三项

金融AI应用解决方案不是把一个模型接进来就结束了。对持牌汽车金融、融资租赁和消费金融机构来说,真正容易出问题的,往往不是“功能够不够多”,而是上线后才发现算法看不懂、系统接不进、数据和审计对不上。 选型时,如果只看演示效…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…