LangChain:大模型AI应用开发的强大引擎

文章目录

  • LangChain的核心功能
  • LangChain的典型使用场景
  • LangChain的未来展望
  • 《LangChain大模型AI应用开发实践》
    • 编辑推荐
    • 内容简介
    • 作者简介
    • 目录


在人工智能领域,大型语言模型(LLMs)的应用开发正逐渐成为技术前沿的热门话题。随着技术的不断进步,开发者们正面临如何高效、便捷地构建基于LLMs的应用程序这一挑战。LangChain框架应运而生,以其模块化的设计和丰富的功能,成为众多开发者在构建大模型应用时的得力助手。本文将通过代码实例展示LangChain在AI应用开发中的实际应用。

LangChain的核心功能

LangChain是一个专门为构建大型语言模型应用程序设计的框架,其核心功能包括Model I/O、Retrieval、Memory、Chains和Agents等。这些功能极大地简化了开发流程,提高了开发效率,使得开发者能够更专注于业务逻辑的实现。

  1. Model I/O
    LangChain允许开发者直接与模型进行交互,无需关心输入输出的细节。以下是一个简单的示例,展示如何使用LangChain与模型进行交互:

    from langchain.models import OpenAI
    from langchain.prompts import PromptTemplate
    
    # 初始化模型
    model = OpenAI(temperature=0.7)
    
    # 定义提示模板
    prompt_template = PromptTemplate(
        input_variables=["query"],
        template="请回答以下问题:{query}",
    )
    
    # 生成回答
    response = model.generate(
        prompt_template.format(query="什么是人工智能?"),
        max_tokens=150,
        stop=None,
    )
    print(response)
    
  2. Retrieval
    LangChain的Retrieval能力允许开发者从模型中检索所需信息。以下是一个示例,展示如何使用LangChain的Retrieval功能:

    from langchain.retrieval import VectorStoreRetriever
    
    # 初始化向量存储检索器
    retriever = VectorStoreRetriever.from_documents(
        documents=[
            "人工智能是计算机科学的一个分支。",
            "机器学习是人工智能的一个子领域。",
            "深度学习是机器学习的一种方法。",
        ],
        vector_store_path="path_to_vector_store",
    )
    
    # 检索与查询最相关的文档
    query = "什么是深度学习?"
    results = retriever.retrieve(query)
    for result in results:
        print(result.document)
    
  3. Memory
    LangChain的Memory能力允许开发者利用模型的记忆能力来存储和更新上下文。以下是一个示例,展示如何使用LangChain的Memory功能:

    from langchain.memory import Memory
    
    # 初始化内存
    memory = Memory()
    
    # 存储上下文
    memory.add("用户:你好!", "AI:你好!有什么我可以帮助你的吗?")
    
    # 获取上下文
    response = memory.get("用户:你好!")
    print(response)  # 输出:AI:你好!有什么我可以帮助你的吗?
    
  4. Chains
    Chains是LangChain中的一个关键组件,它允许开发者将多个处理步骤组织起来,形成一个完整的流程。以下是一个示例,展示如何使用LangChain的Chains功能:

    from langchain.chains import Chain
    
    # 定义链的步骤
    steps = [
        {
            "function": "retriever.retrieve",
            "inputs": {"query": "query_variable"},
        },
        {
            "function": "model.generate",
            "inputs": {
                "prompt": "根据检索结果回答以下问题:{retrieved_result}",
                "retrieved_result": {"$ref": "previous.results[0].document"},
            },
        },
    ]
    
    # 初始化链
    chain = Chain.from_json(steps)
    
    # 执行链
    result = chain.run(query_variable="什么是机器学习?")
    print(result)
    
  5. Agents
    Agents是LangChain中推动决策制定的实体,它们可以访问一套工具,并可以根据用户输入决定调用哪个工具或组件来生成响应。以下是一个示例,展示如何使用LangChain的Agents功能:

    from langchain.agents import Agent
    
    # 定义代理的工具集
    tools = {
        "retriever": retriever,
        "model": model,
    }
    
    # 初始化代理
    agent = Agent(tools=tools)
    
    # 与代理进行交互
    conversation = agent.chat(
        inputs=["什么是人工智能?", "它与机器学习有什么关系?"]
    )
    for message in conversation:
        print(message)
    

LangChain的典型使用场景

LangChain的灵活性和强大的集成功能使其在多个领域都有广泛的应用场景。以下是一些典型的使用案例:

  1. 问答系统:利用LangChain的Retrieval和Memory能力,可以构建能够准确回答用户问题的问答系统。

  2. 聊天机器人:通过Model I/O和ChatMessageHistory能力,可以创建能够与用户进行自然对话的聊天机器人。

  3. 智能代理:结合Agents和Components能力,可以开发可以自适应决策并执行任务的智能代理。

  4. 企业知识库应用:利用LangChain的Retrieval和Memory能力,可以构建企业知识库应用,帮助企业实现知识的有效管理和利用。

  5. AI翻译助手:结合语言模型和翻译技术,LangChain可以构建更准确、流畅的翻译服务。

LangChain的未来展望

随着AI技术的不断发展和完善,LangChain有望在更多领域和场景中发挥重要作用。未来的研究将重点关注如何优化系统性能、提升用户隐私保护,以及如何简化多智能体系统的开发和维护。同时,与大模型的深度集成、多模态交互、性能优化、模型压缩与量化等也将是LangChain发展的重要方向。

总的来说,LangChain作为一个强大的框架,为开发者提供了利用大型语言模型构建端到端应用程序的便捷途径。通过其Model I/O、Retrieval、Memory、Chains和Agents等核心能力,以及丰富的核心概念和使用案例,开发者可以更加高效地构建和部署AI大模型应用。未来,随着技术的不断进步,LangChain有望在更多领域发挥重要作用,为行业创新提供强有力的支持。


《LangChain大模型AI应用开发实践》

在这里插入图片描述

获取方式:https://item.jd.com/14848506.html

编辑推荐

《LangChain大模型AI应用开发实践》是一本为AI领域的中级和高级技术人员量身打造的专业指南。本书以实战案例为脉络,深入剖析了LangChain框架的核心原理与应用策略,从基础到高级,逐步引导读者构建高效的AI应用。它不仅涵盖了Chain结构的构建、大模型的优化接入,还深入探讨了智能体开发和上下文感知能力的设计,为读者提供了一套完整的AI开发工具箱。无论你是数据科学家还是机器学习工程师,本书都将是你解锁人工智能新维度、提升技术实践能力的不二之选。

内容简介

《LangChain大模型AI应用开发实践》是一本深度探索LangChain框架及其在构建高效AI应用中所扮演角色的权威教程。本书以实战为导向,系统介绍了从LangChain基础到高级应用的全过程,旨在帮助开发者迅速掌握这一强大的工具,解锁人工智能开发的新维度。

本书内容围绕LangChain快速入门、Chain结构构建、大模型接入与优化、提示词工程、高级输出解析技术、数据检索增强(RAG)、知识库处理、智能体(agent)开发及其能力拓展等多个层面展开。通过详实的案例分析与步骤解说,读者可以学会整合如ChatGLM等顶尖大模型,运用ChromaDB进行高效的向量检索,以及设计与实现具有记忆功能和上下文感知能力的AI智能体。此外,书中还介绍了如何利用LangChain提升应用响应速度、修复模型输出错误、自定义输出解析器等实用技巧,为开发者提供了丰富的策略与工具。

本书主要面向AI开发者、数据科学家、机器学习工程师,以及对自然语言处理和人工智能应用感兴趣的中级和高级技术人员。

作者简介

陈鹏,哔哩哔哩知名UP主【老陈打码】,精通Python编程和前端开发,全网AI技术教程千万播放量,广州麒跃科技有限公司创始人,致力于AI技术开发与应用。

目录

1 章 快速认识 LangChain 1

1.1 LangChain概 述 2

1.1.1 认识 LangChain 2

1.1.2 LangChain的用途 3

1.1.3 LangChain生态与开源项目概览 4

1.2 安装Python环境 5

1.2.1 下载 Anaconda 5

1.2.2 安装 Anaconda 7

1.3 使用Jupyter Notebook 学习LangChain 8

1.3.1 安装 JupyterNotebook 8

1.3.2 启动JupyterNotebook 9

1.3.3 创建新的 Notebook 10

1.3.4 使用JupyterNotebook 学习LangChain 10

1.3.5 Jupyter Notebook 快捷键 11

1.3.6 使用快捷键的好处 13

1.4 安装和配置 LangChain环境 13

1.5 第一个LangChain应用示例 152 章 接入大模型 21

2.1 在LangChain中使用免费的文心大模型 API 22

2.1.1 文心大模型简介 22

2.1.2 基础使用 22

2.1.3 链式调用 25

2.1.4 流式生成 25

2.1.5 批量生成 26

2.2 使用 DeepSeek API进行 LangChain 开发 26

2.2.1 DeepSeek -V2概述 27

2.2.2 获取 API 密 钥 27

2.2.3 配置环境 27

2.2.4 集成 DeepSeek API 28

2.3 在LangChain 中使用 ChatGLM-4 API 30

2.3.1 GLM-4模型简介 30

2.3.2 在LangChain中集成 ChatGLM-4 30

2.4 LangChain 调用本地开源大模型ChatGLM3 32

2.4.1 ChatGLM3-6B 模型简介 32

2.4.2 安装和准备工作 33

2.4.3 实现基本对话 34

2.4.4 LangChain 调用本地开源大模型 ChatGLM3 34

2.5 接入部署的开源大模型的类OpenAI 服务器 37

2.5.1 为什么要实现 OpenAI 类似的响应 38

2.5.2 常见本地部署提供兼容的 OpenAIAPI 应用 38

2.6 LM Studio 搭 建OpenAI API 服务器 41

2.6.1 安装 LM Studio 41

2.6.2 下载和加载模型 43

2.6.3 配置和运行本地服务器 48

2.6.4 链式调用 49



第3章 LangChain提示词工程 51

3.1 利用提示词工程构建 LangChain AI应 用 52

3.1.1 基础策略 52

3.1.2 高级技巧 52

3.1.3 实际案例分析 53

3.2 LangChain 提示词模块 54

3.2.1 PromptTemplate 的使用 54

3.2.2 ChatPromptTemplate 的使用 56

3.3 少样本提示示例 57

3.3.1 理解少样本提示 58

3.3.2 LangChain 中的少样本提示应用 58

3.3.3 编写少样本提示 584 章 高级提示词技术 65

4.1 巧用提示词的案例选择器 66

4.1.1 根据长度优化示例选择器 66

4.1.2 使用最大余弦相似度嵌入示例 69

4.1.3 使用 MMR 选择示例 71

4.1.4 构建和格式化提示 72

4.1.5 调用和解析结果 74

4.2 消息对话提示词实现少样本学习 74

4.3 向量存储实现消息对话的示例选择 77

4.3.1 引入必要的库 77

4.3.2 加载模型 77

4.3.3 创建示例集合 78

4.3.4 利 用Chroma 向量存储和语义相似度选择示例 78

4.3.5 选择语义相似的示例 79

4.3.6 应用示例格式化对话 80

4.4 管理历史消息 82

4.4.1 MessagesPlaceholder 组 件 82

4.4.2 如何使用MessagesPlaceholder 82

4.4.3 实际使用场景 83

4.5 预设部分提示词变量 84

4.6 动态预设提示词变量 87

4.7 管道提示词 90



第5章 LangChain 输出解析 94

5.1 CSV 格式解析器 95

5.1.1 理解 CommaSeparatedListOutputParser 95

5.1.2 配置输出解析器 95

5.1.3 创建 Prompt 模板 96

5.1.4 应用解析器 97

5.1.5 示例应用:列出冰淇淋口味 97

5.2 日期时间格式解析器 98

5.3 枚举解析器 100

5.3.1 引入枚举类型 100

5.3.2 枚举解析器的配置与使用 101

5.3.3 构建 LangChain 调用链 101

5.3.4 执行与输出 102

5.4 XML 格式解析器 102

5.5 自定义大模型输出解析器 104

5.5.1 使用RunnableLambda 或 RunnableGenerator 105

5.5.2 将关键词替换为表情符号 1056 章 检索增强生成 107

6.1 详解 RAG 108

6.1.1 认识RAG 108

6.1.2 RAG 的技术原理 109

6.1.3 RAG 的应用 110

6.1.4 RAG 的挑战与未来发展 111

6.2 RAG 应用案例 113

6.2.1 创建向量数据库 113

6.2.2 使用检索器检索相关文档 114

6.2.3 结 合LangChain 进行问答 114

6.3 知识库文档的多种加载方式 115

6.3.1 加载单个文本文档 116

6.3.2 加载整个目录的文档 116

6.3.3 加载 HTML 格式的文档 117

6.4 处 理PDF 格式的知识库文档 118

6.5 分割长文本 120

6.5.1 加载文档 120

6.5.2 创建文本分割器 121

6.5.3 分割文档 122

6.6 分割不同语言的代码 123

6.6.1 必要模块引入和语言支持 123

6.6.2 分割器配置与使用 125

6.6.3 处理其他语言 126

6.7 Markdown 文本分割 126

6.7.1 MarkdownHeaderTextSplitter 概述与基本使用 127

6.7.2 分割选项 128



第7章 高级 RAG 应用 129

7.1 最大边际相关性检索 130

7.1.1 基本概念 130

7.1.2 文档库设置与向量存储构建 130

7.1.3 MMR 检索集成与回答生成 131

7.2 实现相似性分数阈值检索 132

7.2.1 相似性分数阈值检索的概念及基本设置 133

7.2.2 相似性分数阈值检索与MMR 检索的比较 133

7.3 自查询检索器的使用 134

7.3.1 工作原理和代码配置 134

7.3.2 文档和向量存储配置 135

7.3.3 自查询检索器配置与操作示例 136



第8章 AI应用流程控制 139

8.1 并行处理任务 140

8.2 管道中添加自定义函数 142

8.3 LangChain 动态路由逻辑 144

8.4 运行时配置链的内部结构 148

8.4.1 两种方法的使用 148

8.4.2 实际应用示例 149

8.5 使用@chain 装饰器 150

8.6 自定义流式生成器函数 152

8.7 异步的自定义流式生成器函数 154



第9章 智能体开发 156

9.1 什么是智能体 157

9.1.1 智能体的核心功能 157

9.1.2 智能体的应用 157

9.1.3 开发智能体的挑战 158

9.2 智能体开发的关键组件 158

9.3 案例分析:智能体自动处理 GitHub 问题 160

9.4 @tool 快速定义智能体工具 161

9.4.1 理 解 @tool 装饰器 161

9.4.2 示例:定义天气查询工具 162

9.4.3 使用场景和最佳实践 164

9.5 定义智能搜索工具 164

9.6 快速搭建第一个智能体 168

9.7 提示词引导智能体使用工具 170

9.8 格式化中间步骤构建智能体 174

9.8.1 中间步骤格式化和输出解析 174

9.8.2 构建智能体执行流程 178

9.8.3 执行智能体 179

9.9 为智能体添加历史聊天记录 1811 0 章 智能体强化 184

10.1 获取并处理学术论文 185

10.2 AI调用 Shell 命令控制电脑 187

10.3 AI自动生成与执行代码 189

10.3.1 利 用LangChain 构建自动化代码生成流程 189

10.3.2 示例:自动解决数学问题 1911 1 章 LangGraph 多智能体 192

11.1 LangGraph 的核心概念 193

11.2 搭建 LangGraph 应用 194

11.2.1 定义节点和边 194

11.2.2 创建和配置图 196

11.2.3 展示图结构 198

11.2.4 执行图 198

11.2.5 图的动态行为和状态管理 199

11.3 LangGraph 灵活自定义智能体 199

11.3.1 定义大语言模型 200

11.3.2 定义智能体提示词 200

11.3.3 定义工具 201

11.3.4 定义状态 203

11.3.5 定义是否使用工具条件 203

11.3.6 定义图 204

11.3.7 使用智能体 207

11.4 多智能体模拟圆桌派综艺节目 208

11.4.1 智能体配置 209

11.4.2 信息流与处理逻辑 209

11.4.3 构建数据流图 214



第12章 人工智能销售助手 218

12.1 概述与核心概念 218

12.2 SalesGPT 智能体的架构 219

12.2.1 销售代理的运行机制 219

12.2.2 销售阶段识别代理 220

12.2.3 系统整合与数据流 220

12.3 定义销售对话阶段分析链 221

12.3.1 理 解LangChain 链的基础 221

12.3.2 设计 StageAnalyzerChain 221

12.3.3 实现 StageAnalyzerChain 222

12.4 LangChain 实现历史对话生成销售话语的类 224

12.4.1 设计 SalesConversationChain类 224

12.4.2 实施 SalesConversationChain 225

12.5 构建和利用产品知识库 228

12.5.1 设计产品知识库 229

12.5.2 实施和部署产品知识库 230

12.5.3 利用产品知识库进行销售支持 232

12.5.4 维护和优化知识库 232

12.6 定义知识库工具的模板和解析器 233

12.6.1 自定义提示模板 233

12.6.2 定义销售智能体输出解析器 234

12.7 定义LangChain 销售智能体类 236

12.7.1 SalesGPT 类概述 236

12.7.2 动态工具使用 237

12.7.3 实现复杂对话管理 238

12.7.4 完整代码示例 238

12.8 配置和运行销售智能体 247

12.8.1 设置代理配置 248

12.8.2 初始化和运行智能体 248

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/933524.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MFC】vs2019中使用sqlite3完成学生管理系统

目录 效果图list Contral 控件的简单使用使用sqlite3 效果图 使用sqlite3完成简单的数据库操作。 list Contral 控件的简单使用 本章只介绍基本应用 添加表头:语法: int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat LVCFMT_LEFT…

杨振宁大学物理视频中黄色的字,c#写程序去掉

先看一下效果:(还有改进的余地) 我的方法是笨方法,也比较刻板。 1,首先想到,把屏幕打印下来。c#提供了这样一个函数: Bitmap bmp new Bitmap(640, 480, PixelFormat.Format32bppArgb); // 创…

Android 逆向/反编译/Hook修改应用行为 基础实现

前言:本文通过一个简单的情景案例实现安卓逆向的基本操作 一、情景描述 本文通过一个简单的情景案例来实现安卓逆向的基本操作。在这个案例中所使用的项目程序是我自己的Demo程序,不会造成任何的财产侵害,本文仅作为日常记录及案例分享。实…

OSCP - Proving Grounds - Zino

主要知识点 SMB知识python脚本提权 具体步骤 执行nmap Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-10 01:24 UTC Nmap scan report for 192.168.52.64 Host is up (0.00077s latency). Not shown: 65529 filtered tcp ports (no-response) PORT STATE SER…

VLA模型

目录 引言1. 机器人大模型面临的挑战2. 目前的数据集2.1 RT-12.2 Open X-Embedding2.3 DROID 3. 目前的VLA模型3.1 Goat3.2 RT-13.2.1 总体架构3.2.2 效果 3.3 RT-23.3.1 总体架构3.3.2 效果 3.4 RT-X3.4.1 模型效果1). RT-1-X2). RT-2-X 3.5 RT-H3.5.1 总体架构3.5.2 效果 3.6…

aws(学习笔记第十六课) 使用负载均衡器(ELB)解耦webserver以及输出ELB的日志到S3

aws(学习笔记第十六课) 使用负载均衡器(ELB)以及输出ELB的日志到S3 学习内容: 使用负载均衡器(ELB)解耦web server输出ELB的日志到S3 1. 使用负载均衡器(ELB) 全体架构 使用ELB(Elastic Load Balancer)能够解耦外部internet访问和web server之间的耦合&#xff0c…

如何使用Java编写Jmeter函数

Jmeter 自带有各种功能丰富的函数,可以帮助我们进行测试,但有时候提供的这些函数并不能满足我们的要求,这时候就需要我们自己来编写一个自定义的函数了。例如我们在测试时,有时候需要填入当前的时间,虽然我们可以使用p…

实战指南:如何通过WBS提高项目估算准确性?

通过WBS将复杂任务细分为更易管理的任务,这有助于明确每项工作范围、所需资源及时间,从而减少估算误差,制定更现实的预算和时间表,提升团队协作效率。如果没有通过WBS将任务细化,项目范围可能变得模糊不清,…

ECharts实战教程:如何生成动态水波纹效果

导语:在数据可视化领域,ECharts是一款非常强大的图表库。今天,我们将带领大家学习如何使用ECharts生成动态水波纹效果,让我们的图表更加生动有趣。 一、准备工作 首先,我们需要准备一些基础数据,如下所示&…

详解:HTTP/HTTPS协议

HTTP协议 一.HTTP是什么 HTTP,全称超文本传输协议,是一种用于分布式、协作式、超媒体信息系统的应用层协议。HTTP往往是基于传输层TCP协议实现的,采用的一问一答的模式,即发一个请求,返回一个响应。 Q:什…

(0基础保姆教程)-JavaEE开课啦!--13课程(Interception拦截器)-完结

一、Interception(拦截器)是什么? 拦截器(Interceptor)是一种用于在请求到达目标方法之前或之后执行特定逻辑的机制。它是基于Java反射机制,属于面向切面编程(AOP)的一种应用。拦截器可以用于多种应用场景&…

vue 封装全局过滤器

1.找到utils下创建fifilter.js 一些常用的过滤方法 export const filters {//url解码urlCode: value > {if (!value) return let v decodeURIComponent(value)let bigIndex v.lastIndexOf(/)let endIndex v.lastIndexOf(.)let url v.substring(bigIndex 1, endIndex)…

Flask返回中文Unicode编码(乱码)解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

VMware:安装centos网络信息不可用

我们今天要处理的就是在vmware中安装centos出现网络不可用,导致无法安装系统的问题直接上图,我们在主机直接 cmdipconfig 发现IPV4地址都不一样,导致我们无法ping通虚拟机 那我们如何解决呢~~~~ 打开自己VM【编辑】【虚拟网络编辑器】【更…

MperReduce学习笔记下

自定义InputFormat合并小文件 案例需求 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案。 案例分析 小文件的优化无非以下几种方式: …

【MySQL 探索者日志 】第二弹 —— 数据库基础

MySQL系列学习笔记: MySQL探索者日志__Zwy的博客-CSDN博客 各位于晏,亦菲们,请点赞关注! 我的个人主页: _Zwy-CSDN博客 目录 1、MySQL服务器,数据库,表关系 2、MySQL登录连接服务器 3、MyS…

flink终止提交给yarn的任务

接上文:一文说清flink从编码到部署上线 1.查看正在执行的flink 访问地址(参考):http://10.86.97.191:8099/cluster/apps 2.终止任务 yarn application -kill appID 本文为: yarn application -kill application_17…

CentOS虚拟机开机出现问题

CentOS虚拟机断电或强制关机,再开机出现问题 错误原因: failed to mount /sysroot.(无法挂载/ sysroot。) Dependency failed for Initrd root File System.(Initrd根文件系统的依赖关系失败。) Dependency…

可靠的人形探测,未完待续(I)

HI,there!从紧张的项目中出来冒个泡! 刚好想要验证一下mmWave在有人检测方面的应用,就看到了这个活动 - 瞌睡了有枕头属于是,活动策划好评! 朋友曾关注汽车相关的技术领域,跟我吐槽过&#xff0…

web斗地主游戏实现指北

前后端通信 作为一个即时多人游戏,不论是即时聊天还是更新玩家状态,都需要服务端有主动推送功能,或者客户端轮询。轮询的时间间隔可能导致游玩体验差,因为不即时更新,而且请求数量太多可能会打崩服务器。 建议在cs间…