LangChain API 调用语言模型
LangChain 核心功能轻松调用大语言模型附代码示例在大语言模型LLM应用开发中直接与各种模型 API 进行交互可能会变得复杂和繁琐。不同的模型提供商如 OpenAI、Google、Anthropic有不同的 SDK 和数据格式。LangChain 的核心价值之一就是提供了一个统一、标准化的接口来与这些模型进行交互极大地简化了开发流程。本文将详细介绍如何通过 LangChain 调用语言模型并提供清晰的代码示例帮助您快速上手。LangChain 的模型抽象两种基本类型LangChain 将模型抽象为两种主要类型以适应不同的应用场景LLMs: 这是对传统文本补全模型的封装。您输入一段文本prompt它会返回一段补全的文本。这种模型适合简单的问答或文本生成任务。ChatModels: 这是对更先进的对话模型的封装。它的输入是“消息列表”List of Messages输出也是一个“消息”Message。这种结构更适合构建多轮对话的聊天机器人因为它能更好地处理上下文和角色扮演。在当前的开发实践中ChatModels是更常用、更推荐的选择因为它们通常是更新、更强大的模型如 GPT-4、Claude 3并且其基于消息的输入方式更加结构化和灵活。第一步环境准备与安装在开始之前请确保您已经安装了必要的 Python 库。我们将以 OpenAI 的模型为例因此需要安装langchain-openai。pip install langchain langchain-openai python-dotenv为了安全地管理您的 API 密钥建议使用.env文件。在您的项目根目录下创建一个名为.env的文件并写入以下内容OPENAI_API_KEYsk-YourOpenAI_API_Key第二步调用聊天模型ChatModels- 推荐方式ChatModels是构建现代 LLM 应用的基础。它的交互模式模仿了真实的对话通过不同角色的消息如SystemMessage,HumanMessage,AIMessage来构建上下文。1. 基本调用最简单的调用方法是实例化一个ChatOpenAI对象并向其传递一个消息列表。import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage # 加载 .env 文件中的环境变量 load_dotenv() # 1. 初始化模型 # model_name 可以指定具体的模型如 gpt-4, gpt-3.5-turbo # temperature 控制输出的随机性0 表示最确定1 表示最随机 chat ChatOpenAI(model_namegpt-4o, temperature0) # 2. 准备输入消息 # SystemMessage 定义了 AI 的角色和行为准则 # HumanMessage 代表用户的输入 messages [ SystemMessage(content你是一名专业的旅行规划师。), HumanMessage(content我应该去哪里度过一个为期三天的浪漫周末请推荐一个城市并说明理由。), ] # 3. 调用模型并获取响应 # .invoke() 方法是 LangChain 中执行调用的标准方法 response chat.invoke(messages) # 4. 打印结果 print(AI的回答:) print(response.content) # AIMessageChunk(content当然对于一个为期三天的浪漫周末我强烈推荐**法国的巴黎**。\n\n**理由如下**\n\n1. **无与伦比的浪漫氛围**巴黎被誉为“爱之城”其街道、塞纳河畔、古老的建筑和迷人的咖啡馆都充满了浪漫气息。与伴侣在蒙马特高地漫步或是在埃菲尔铁塔下欣赏夜景都是非常难忘的体验。\n\n2. **世界级的艺术与文化**你们可以参观卢浮宫欣赏《蒙娜丽莎》的微笑也可以去奥赛博物馆沉浸在印象派的画作中。丰富的艺术展览为你们的旅行增添了文化深度。\n\n3. **精致的美食体验**从米其林星级餐厅到街角的面包店巴黎的美食总能满足你的味蕾。一起品尝法式蜗牛、马卡龙和现烤的可颂面包享受味觉上的盛宴。\n\n4. **便捷的交通**巴黎的公共交通系统非常发达地铁可以轻松带你们到达城市的任何一个角落让你们在有限的时间里高效地游览。)在这个例子中SystemMessage告诉模型它应该扮演什么角色而HumanMessage则是用户的具体问题。模型的返回结果是一个AIMessage对象其.content属性包含了生成的文本。第三步结合 PromptTemplate 和 LCEL 实现模块化调用在实际应用中我们很少直接硬编码提问。更好的方式是使用PromptTemplate来动态地构建输入。LangChain 表达式语言LCEL则提供了一种优雅的方式将提示、模型和输出解析器“链接”在一起。这被认为是LangChain 的标准实践。1. 创建提示模板ChatPromptTemplate允许我们定义一个包含变量的对话结构。from langchain_core.prompts import ChatPromptTemplate # 创建一个包含输入变量 {topic} 的模板 prompt_template ChatPromptTemplate.from_messages( [ (system, 你是一名专业的文案撰写人擅长写出吸引人的社交媒体帖子。), (human, 为关于“{topic}”的产品写一个三句话的推广文案。), ] )2. 使用 LCEL 构建调用链LCEL 使用管道符|将不同的组件链接在一起形成一个处理流水线。这使得代码非常简洁且易于理解。# 使用 LCEL 将 prompt, model 链接在一起 # 这是一个简单的 Chain (调用链) chain prompt_template | chat # 调用链并传入变量 response chain.invoke({topic: 新款智能手表}) print(文案内容:) print(response.content) # 文案内容: # 准备好迎接未来的科技浪潮了吗我们的新款智能手表不仅是时间的记录者更是您手腕上的健康伙伴和智能助理。现在就体验前所未有的便捷与时尚让每一刻都充满智慧。这种方法的优势在于可重用性prompt_template和chain可以被重复使用只需传入不同的topic。模块化可以轻松地在链中添加或替换组件例如在最后加上一个输出解析器| StrOutputParser()。第四步调用传统 LLMs较少使用虽然ChatModels是主流但了解如何调用基本的LLM也是有帮助的。其接口更简单只接受和返回字符串。from langchain_openai import OpenAI # 1. 初始化 LLM 模型 # 注意这里导入的是 OpenAI而不是 ChatOpenAI llm OpenAI(model_namegpt-3.5-turbo-instruct, temperature0) # 2. 准备输入文本 text 请解释一下什么是黑洞 # 3. 调用并打印结果 response llm.invoke(text) print(response) # 黑洞是一种极其神秘和强大的天体它的引力非常巨大以至于任何物质甚至光都无法逃脱它的引力范围。 # ... (省略部分输出)结论LangChain 通过其标准化的ChatModels和LLMs接口以及强大的PromptTemplate和 LCEL彻底改变了与大语言模型交互的方式。对于新项目强烈建议遵循以下最佳实践优先使用ChatModels因为它更强大且输入结构更清晰。利用ChatPromptTemplate管理你的提示使其动态化和可重用。拥抱 LangChain 表达式语言LCEL通过|符号构建清晰、模块化的调用链。掌握了这些核心技巧您就已经迈出了使用 LangChain 构建复杂、强大且可靠的 LLM 应用的关键一步。学习资源推荐如果你想更深入地学习大模型以下是一些非常有价值的学习资源这些资源将帮助你从不同角度学习大模型提升你的实践能力。一、全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能​因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示​因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取三、AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取四、AI大模型商业化落地方案作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量。

相关新闻

Unity集成PICO SDK 2.3.0:5分钟实现手势识别(点赞/握拳)交互Demo

Unity集成PICO SDK 2.3.0:5分钟实现手势识别(点赞/握拳)交互Demo

1. 项目概述与核心价值最近在捣鼓PICO VR设备,发现它的手势识别功能潜力巨大,但很多刚接触的开发者,包括我一开始,都觉得这玩意儿门槛不低。官方文档虽然详尽,但面对一堆API和概念,想快速做出一个能“动起来…

2026/10/8 5:59:42 阅读更多 →
大模型技术 Ollama 概述

大模型技术 Ollama 概述

如果说 LangChain 是构建 AI 应用的“大脑框架”,那么 Ollama 就是让这个大脑在你的本地电脑上跑起来的“发动机”。 一、 什么是 Ollama? Ollama 是一个开源的本地大模型运行框架,旨在让用户能够像使用 Docker 一样,通过简单的命…

2026/10/13 6:02:36 阅读更多 →
VC6.0下从零实现Web服务器:WinSock、多线程与HTTP协议解析实战

VC6.0下从零实现Web服务器:WinSock、多线程与HTTP协议解析实战

1. 项目概述:为什么要在VC6.0上“复古”实现Web服务器?最近在整理旧硬盘时,翻出了十几年前用VC6.0写的一些代码,其中一个“玩具”级别的Web服务器项目让我感触颇深。现在随便一个框架或者现成的组件就能轻松搭建服务器&#xff0c…

2026/10/11 15:42:00 阅读更多 →

最新新闻

Java Web大文件上传:分段传输与断点续传完整方案

Java Web大文件上传:分段传输与断点续传完整方案

做Java Web的老哥应该都遇到过这种场景:用户在页面上传一个几个G的视频素材,结果等了十分钟报了一个Connection reset,或者直接在Tomcat日志里看到maxPostSize exceeded。我第一次被这种问题找上门,是在给某内部系统做附件管理的时…

2026/10/14 2:50:29 阅读更多 →
Agent-Reach:破解多Agent协作中可达性与动态发现难题

Agent-Reach:破解多Agent协作中可达性与动态发现难题

做多智能体协作时,我踩过的最大坑是什么?不是模型推理不够快,也不是Prompt写得不够好,而是Agent根本不知道该去找谁。当系统里跑着十几个职责不同的Agent,有的负责解析需求,有的负责调用工具,有…

2026/10/14 2:50:29 阅读更多 →
社区医疗问答小程序设计与适老化交互实践

社区医疗问答小程序设计与适老化交互实践

1. 项目背景与核心价值社区医疗服务鼓号系统问答小程序的设计与开发,是针对当前基层医疗资源分布不均、居民健康咨询渠道有限等痛点提出的创新解决方案。我在参与某三甲医院社区医疗支援项目时,亲眼目睹了许多老年人因不熟悉智能手机操作,无法…

2026/10/14 2:50:29 阅读更多 →
深入剖析ArrayList:顺序表底层原理、扩容机制与性能实战

深入剖析ArrayList:顺序表底层原理、扩容机制与性能实战

1. 从一道面试题说起&#xff1a;ArrayList到底是什么在Java开发圈子里&#xff0c;ArrayList绝对是使用频率最高的集合类之一。日常写代码时&#xff0c;Listlist new ArrayList<>();这行代码几乎是肌肉记忆。但很多用了三五年的老手&#xff0c;面对"ArrayList的…

2026/10/14 2:50:29 阅读更多 →
Ubuntu 24.04部署ZeroTier Web管理界面ztncui教程

Ubuntu 24.04部署ZeroTier Web管理界面ztncui教程

1. 项目背景与核心价值ZeroTier作为一款成熟的分布式网络虚拟化方案&#xff0c;其官方控制器虽然功能完善&#xff0c;但默认只提供命令行管理界面。ztncui项目恰好填补了这一空白——它用直观的Web界面封装了ZeroTier控制器的核心功能&#xff0c;让网络管理员能够通过浏览器…

2026/10/14 2:50:29 阅读更多 →
问题:RK3576 开发板 SSH 终端彩色显示配置

问题:RK3576 开发板 SSH 终端彩色显示配置

问题&#xff1a;RK3576 开发板 SSH 终端彩色显示配置 一、问题背景 使用 Windows CMD 通过 SSH 连接 RK3576 开发板时&#xff0c;终端默认没有颜色&#xff0c;但连接 Ubuntu 时有颜色。 在 RK3576 上检查&#xff1a; echo $0 # -bash echo $SHELL # /bin/bash echo…

2026/10/14 2:49:29 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →