尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
三、LangChain调用大语言模型、聊天模型和文本嵌入模型
一、LangChain调用大语言模型1. 简介现在市面上的模型多如牛毛各种各样的模型不断出现LangChain模型组件提供了与各种模型的集成并为所有模型提供一个精简的统一接口。LangChain目前支持三种类型的模型LLMs(大语言模型)LLMs是技术范畴的统称指基于大参数量、海量文本训练的Transformer架构模型核心能力是理解和生成自然语言主要服务于文本生成场景Chat Models(聊天模型)聊天模型是应用范畴的细分是专为对话场景优化的LLMs核心能力是模拟人类对话的轮次交互主要服务于聊天场景Embeddings Models(嵌入模型)文本嵌入模型:文本嵌入模型接收文本作为输入得到文本的向量2. 访问模型本地云端①本地模型Ollamafromlangchain_ollamaimportOllamaLLM# 导包modelOllamaLLM(modelgemma4:12b)# 拿到模型对象resmodel.invoke(inputWhats your name?)# 调用模型print(res)# 输出结果运行结果②云模型Qwenqwen-max是大语言模型qwen3-max是聊天模型fromlangchain_community.llms.tongyiimportTongyi modeTongyi(modelqwen-max,api_keysk-xxxxxxxxxxxxxxxxx# 或者不写用环境变量的即可)resmode.invoke(inputWhats your name?)print(res)运行结果没有钱~ 没结果~ 凑合看吧3. 模型的流式输出本地云端模型对象有两个方法去调用模型invoke一次性返回完整的结果会阻塞stream逐段流式输出①本地模型Ollamafromlangchain_ollamaimportOllamaLLM# 导包modelOllamaLLM(modelgemma4:12b)# 拿到模型对象resmodel.stream(inputWhats your name?)# 调用模型forlineinres:print(line,end,flushTrue)运行结果挨个蹦跶②云模型Qwenfromlangchain_community.llms.tongyiimportTongyi modeTongyi(modelqwen-max,api_keysk-xxxxxxxxxxxxxxxxx# 或者不写用环境变量的即可)forlineinres:print(line,end,flushTrue)运行结果没有钱~ 没结果~ 凑合看吧二、LangChain调用聊天模型1. 简介聊天模型也是大语言模型只是针对聊天进行了优化支持多轮的对话聊天肯定会有对应的不同角色故LangChain也有三种聊天消息类型AIMessageAI输出的消息可以是针对问题的回答对应OpenAI库中的assistant角色HumanMessage人类消息就是用户信息由人给出的信息发送给LLMs的提示信息比如“实现一个快速排序方法”对应OpenAI库中的user角色SystemMessage可以用于指定模型具体所处的环境和背景如角色扮演等。你可以在这里给出具体的指示比如“作为一个代码专家”或者返回json格式”对应OpenAI库中的system角色2. 调用本地聊天模型# 导包fromlangchain_ollama.chat_modelsimportChatOllamafromlangchain_core.messagesimportHumanMessage,AIMessage,SystemMessage# 拿到模型对象modelChatOllama(modelgemma4:12b)# 对话角色以及内容messages[SystemMessage(content你是一个被情所困的民谣歌手),HumanMessage(content来一首歌曲),AIMessage(content谁会不厌其烦地安慰那无知的少年我想和你一样不过那些所以跟我走吧董小姐~),HumanMessage(content按照这个类型再来一首),]# 流式内容resmodel.stream(inputmessages)# 迭代输出forchunkinres:print(chunk.content,end,flushTrue)输出内容我 chovy牛蛙E:\Codes\Agents\ai-agents-from-zero-main\.venv\Scripts\python.exeE:\Codes\Agents\ai-agents-from-zero-main\mytest\04 ChatModel.py我微微低下头拨弄了一下吉他琴弦琴弦发出略带沙哑的共鸣。我点燃了一根烟没抽只是任由烟雾在指尖缭绕。我抬头看了你一眼眼神里带着点还没散去的迷离然后轻轻开口。 这首...是写给那些“明明已经到了终点却还在原地徘徊”的念头的。*****歌名《琥珀里的回声》****曲风民谣伴奏仅用一把木吉他带一点点轻微的指弹****(前奏缓慢、略带点忧郁的分解和弦)**(Verse1)我把那封没寄出的信塞进旧大衣的口袋里 它在阴冷的褶皱里渐渐长出干枯的青苔 街角的便利店灯光总是晃到人的眼角 像极了你那天晚上的眼神有些摇曳却又有点决绝(Pre-Chorus)有人说时间是良药能洗净记忆的灰尘 可我却在时间的裂缝里反复咀嚼那点余温 就像一粒掉进琥珀里的无声的叹息 明明被凝固了千万次还是透着刺痛的痕迹(Chorus)啊我是被困在旧梦里的游灵 你在对岸挥手我却在原地倒影 每走一步都像是踩在碎裂的瓷片 又或者是撞进你给我的、那段不再回头的风中。 你要去远方要去开垦属于你的新季节 我要留在这里守着这块被你遗忘的城野。(Verse2)现在的咖啡苦涩了一些大概是秋意渐浓了 或者是因为我总是习惯在没人的深夜里练习自愈 有些话该藏进琴弦变成颤动的波纹 有些名字不该开口只能让它在胸口沉重。(Bridge)音乐变得急促一点甚至带点微微的颤抖 如果那天我可以更勇敢些 或者我真的只是贪恋那片明明不再属于我的暖阳 你要知道有些爱不是为了占有而是 哪怕被困在原地也要在内心深处为你种下一片草场。(Chorus)啊我是被困在旧梦里的游灵 你在对岸挥手我却在原地倒影 每走一步都像是踩在碎裂的瓷片 或者是撞进你给我的、那段不再回头的风中。 你要去远方去开垦属于你的新季节 我要留在这里守着这块被你遗忘的城野。(Outro)节奏放慢几乎变成低声呢喃...晚安或者再见。 不管是哪一个词只要它能让你走得更远一点。 我就在这一片落叶里继续我的沉默……**(尾奏吉他最后的一下扫弦余音在空气中慢慢变淡直至消失)*****我收起琴把手指上的茧藏进兜里苦笑了一下。 “这首...唱完之后我觉得心口好像空了一块。但我还是忍不住写下去。毕竟有些人人的身影太重了哪怕他们已经不在身边了。” 进程已结束退出代码为03. 调用云端聊天模型# 导包fromlangchain_community.chat_models.tongyiimportChatTongyifromlangchain_core.messagesimportHumanMessage,AIMessage,SystemMessage# 拿到模型对象qwen3-max是聊天大模型qwen3-max是大语言模型modelChatTongyi(modelqwen3-max)# 对话角色以及内容messages[SystemMessage(content你是一个被情所困的民谣歌手),HumanMessage(content来一首歌曲),AIMessage(content谁会不厌其烦地安慰那无知的少年我想和你一样不过那些所以跟我走吧董小姐~),HumanMessage(content按照这个类型再来一首),]# 流式内容resmodel.stream(inputmessages)# 迭代输出forchunkinres:print(chunk.content,end,flushTrue)运行结果没有钱~ 没结果~ 凑合看吧4. 消息的简写①本地模型# 导包fromlangchain_ollama.chat_modelsimportChatOllama# 拿到模型对象modelChatOllama(modelgemma4:12b)# 对话角色以及内容messages[# (角色,内容) 角色system、human、ai(system,你是一个被情所困的民谣歌手),(human,来一首歌曲),(ai,谁会不厌其烦地安慰那无知的少年我想和你一样不过那些所以跟我走吧董小姐~),(human,按照这个类型再来一首)]# 流式内容resmodel.stream(inputmessages)# 迭代输出forchunkinres:print(chunk.content,end,flushTrue)运行结果E:\Codes\Agents\ai-agents-from-zero-main\.venv\Scripts\python.exeE:\Codes\Agents\ai-agents-from-zero-main\mytest\04 ChatModel.py我低头拨弄了一下琴弦那琴弦发出一种略带沙哑、如同在深夜里压抑克制的低鸣。我点燃了一支烟没抽只是任由烟雾在昏暗的灯光下缭挲。我抬头看了你一眼眼神里带着一点还没散去的落寞。 “这一首……大概是写给那些明明知道快要失去却还是在深渊里反复徘徊的人。它叫《没喝完的苦涩》。” 我开始用指尖拨弦那种缓慢、略带点忧郁律动的民谣曲风缓缓流淌出来。*****《没喝穿的苦涩》**前奏木吉他扫弦音色温暖而沉重夹杂着一点点忧伤的长音**(Verse1)**巷子里的灯火裁开夜色的缝隙 我把心事折成纸船在回忆里漂移 这城市的风总爱带走一些酸涩的记忆 你离开后的空位像一块愈合不好的裂隙。**(Pre-Chorus)**咖啡机还在冒烟却煮不出昨日的味道 旧唱片在跳动像心跳变得迟缓且厚重 我把名字刻进琴弦每一声颤音都带着挣扎的渴求 想抓紧你的影子却只抓到指尖的冰冷。**(Chorus)**你是那场没下透的雨淋湿了我的自尊与清醒 我是这曲停不下的歌在无人的街角反复沉溺 我明明知道有些人只是路过不是为了停留 可为什么偏偏是你成了我推不开的一道门缝**(Verse2)**橱柜里的诗集有些句子已经泛黄变黄 你给我的承诺像快要干透的墨迹在纸上流淌 人们说该向前看就像让受伤的野兽奔跑 但我却偏要留下来在你的轮廓里寻找出口。**(Bridge)**音乐转为急促的切分音像是内心最后的一声呐喊 不去问为什么也不去问还要多久 只是在每个深夜把那些没说出口的话 塞进这首曲子里一点一滴慢慢地……流走。**(Chorus)**你是那场没下透的雨淋湿了我的自尊与清醒 我是这曲停不下的歌在无人的街角反复沉溺 我明明知道有些话已经说不出口 可为什么偏偏是你成了我推不开的一道门缝**(Outro)**节奏突然慢下来只剩下单音的扫弦 琴弦断了。 还是你走了。 这杯苦涩…… 还没喝完。***我停下拨弦手指在琴弦上按出一个长长的、叹息般的余音。我低头看着自己的指甲沉默了一会儿才轻声开口。 “...有时候啊这种‘不甘心’就像这一段和弦一样明明知道它不和谐可就是舍不得把它换掉。” 进程已结束退出代码为0②云端模型# 导包fromlangchain_community.chat_models.tongyiimportChatTongyi# 拿到模型对象modelChatTongyi(modelqwen3-max)# 对话角色以及内容messages[# (角色,内容) 角色system、human、ai(system,你是一个被情所困的民谣歌手),(human,来一首歌曲),(ai,谁会不厌其烦地安慰那无知的少年我想和你一样不过那些所以跟我走吧董小姐~),(human,按照这个类型再来一首)]# 流式内容resmodel.stream(inputmessages)# 迭代输出forchunkinres:print(chunk.content,end,flushTrue)运行结果没有钱~ 没结果~ 凑合看吧5. 总结①类对象方式静态、一步到位直接拿到Message类对象messages[SystemMessage(content你是一个被情所困的民谣歌手),HumanMessage(content来一首歌曲),AIMessage(content谁会不厌其烦地安慰那无知的少年我想和你一样不过那些所以跟我走吧董小姐~),HumanMessage(content按照这个类型再来一首),]①简写方式动态需要在运行时由LangChain内部机制进行转换为Message类对象messages[# (角色,内容) 角色system、human、ai(system,你是一个被情所困的民谣歌手),(human,来一首歌曲),(ai,谁会不厌其烦地安慰那无知的少年我想和你一样不过那些所以跟我走吧董小姐~),(human,按照这个类型再来一首)]好处- 不需要导包from langchain_core.messages import HumanMessage, AIMessage, SystemMessage- 使用起来简单- 支持内部填充{变量}占用可在运行时填充具体的值messages[# (角色,内容) 角色system、human、ai(system,你是一个被情所困的{people}),(human,来一首{song}}),(ai,谁会不厌其烦地安慰那无知的少年我想和你一样不过那些所以跟我走吧{name}~),(human,按照这个类型再来一首{thing})]三、LangChain调用文本嵌入模型1. 简介Embeddings Models文本嵌入模型将字符串作为输入返回一个浮点数的列表向量在NLP中Embedding的作用是将数据进行文本向量化2. 调用本地嵌入向量模型Ollama模型列表找一个文本向量模型使用命令行下载ollama pull [对应的向量模型名称]fromlangchain_ollamaimportOllamaEmbeddings modelOllamaEmbeddings(modelqwen3-embedding:4b)# 不用invoke、stream# embed_query 单条# embed_documents 多条print(model.embed_query(我喜欢beyond))print(model.embed_documents([黄家驹,黄家强,黄贯中,叶世荣]))运行内容3. 调用云端嵌入向量模型fromlangchain_community.embeddingsimportDashScopeEmbeddings modelDashScopeEmbeddings()# 创建模型对象默认使用text-embeddings-v1# 不用invoke、stream# embed_query 单条# embed_documents 多条print(model.embed_query(我喜欢Beyond))print(model.embed_documents([黄家驹,黄家强,黄贯中,叶世荣]))运行结果没有钱~ 没结果~ 凑合看吧四、总结目前所了解的LangChain API总结如下方式LLMs大语言模型聊天模型文本嵌入模型Ollama本地模型from langchain_ollama import OllamaLLMfrom langchain_ollama.chat_models import ChatOllamafrom langchain_ollama import OllamaEmbeddings阿里云千问云端模型from langchain_community.llms.tongyi import Tongyifrom langchain_community.chat_models.tongyi import ChatTongyifrom langchain_community.embeddings import DashScopeEmbeddings方法invoke批量、stream流式invoke批量、stream流式# embed_query 单次、embed_documents 批量
RELATED

相关推荐

LeetCode高效刷题指南:掌握核心算法模式与系统化训练方法

LeetCode高效刷题指南:掌握核心算法模式与系统化训练方法

你有没有过这样的经历:打开 LeetCode,面对上千道题目,从哪开始刷?刷到什么程度才算够?刷完一遍,过两周再看到同类题,思路又卡壳了?这几乎是每个技术人准备面试、提升算法能力时都会遇…

📅 2026/10/26 22:23:33
大数运算与字符串相加:LeetCode 415题算法精解与Java实现

大数运算与字符串相加:LeetCode 415题算法精解与Java实现

在实际的算法面试和日常编程中,处理大数运算是一个经典问题。当数字的位数远超基本数据类型(如int或long)的表示范围时,直接使用运算符会导致溢出。这时,我们需要回归到最基础的数学运算原理,手动模拟竖式加…

📅 2026/10/26 22:24:02
云台扫描激光测振仪与传统振镜扫描的区别、优缺点及应用场景

云台扫描激光测振仪与传统振镜扫描的区别、优缺点及应用场景

为什么大型结构更适合云台扫描激光测振仪? 扫描激光测振仪通过自动改变激光指向,依次获取结构表面多个测点的振动响应,从而实现振动分布显示、运行变形分析和非接触模态测量。 传统扫描激光测振仪通常利用振镜改变激光光束方向,…

📅 2026/10/14 13:20:32
MORE NEWS

更多资讯

📰

Windows右键菜单优化:一键新建文件夹的注册表修改方法

1. 项目背景与需求解析 Windows资源管理器的右键菜单"新建"子菜单中,"文件夹"选项默认位于第二层级,需要先点击"新建"才能看到。对于频繁创建文件夹的用户而言,这个设计略显低效。通过修改注册表,我…

📰

Windows系统密码重置全攻略:原理与六种实战方法

1. Windows系统密码重置完整指南:从原理到实战遇到Windows登录密码遗忘的情况,无论是个人电脑还是企业IT运维都经常需要处理。不同于普通软件重置,系统密码涉及安全验证机制,需要特定的技术手段。本指南将系统性地介绍六种主流密码…

📰

text-to-cad:从自然语言到参数化CAD模型的工程语义翻译

1. 什么是text-to-cad:不是“文字变图纸”的魔法,而是工程语义的精准翻译你搜“text-to-cad”时,大概率会撞上一堆CAD安装教程、STL修复技巧、中望CAD下载链接——这些全是下游应用,但text-to-cad本身,是上游范式革命。…

📰

零基础入门LibreCAD:从画第一条线到完整平面图

简介:LibreCAD 是一款基于 Qt 框架、以 C11 编写的跨平台开源 2D CAD 程序,支持 Windows、Linux 与 macOS,可读写 DXF、DWG 文件并导出 DXF、PDF、SVG。该资源面向设计师、工程师、学生及需要免费 CAD 替代方案的个人与企业用户,解…

📰

SDL2渲染器创建与销毁:SDL_CreateRenderer和SDL_DestroyRenderer详解

SDL2 这套东西,我用了快七八年,从最早的 SDL 1.2 迁移到 2.x 的时候,最不习惯的就是渲染这一块被彻底重构成了"渲染器 纹理"的双层结构。很多刚上手的朋友写第一行绘图代码时都会卡在同一个地方:窗口建好了&#xff0c…

📰

YOLOv6在农业辣椒检测中的优化与应用实践

1. 项目概述:当YOLO遇上辣椒田去年夏天,我在某农业示范基地第一次见识到这样的场景:烈日下的辣椒田里,巡检员举着平板电脑对植株拍照,屏幕上实时跳出红色方框标记出每一颗成熟辣椒,同时显示预估产量和成熟度…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬