生成式AI - Knowledge Graph Prompting:一种基于大模型的多文档问答方法
大型语言模型(LLM)已经彻底改变了自然语言处理(NLP)任务。它们改变了我们与文本数据交互和处理的方式。这些强大的AI模型,如OpenAI的GPT-4,改变了理解、生成人类类似文本的方式,导致各种行业出现了众多突破性应用。
LangChain是一个用于构建基于大型语言模型(如GPT)的应用程序的开源框架。它使应用程序能够将语言模型连接到其他数据源,并允许语言模型与其环境进行交互。
在这篇博客中,我们将讨论LangChain在基于LLM的应用开发中的应用。通过提示LLM,现在比以前任何时候都可以更快地开发AI应用程序。基于LLM的应用需要多次提示和输出解析,因此我们需要为此编写大量代码。LangChain通过利用NLP应用开发中发现的基本抽象,使得这一开发过程变得更加容易。本博客的内容主要基于短课程LangChain用于LLM应用开发。
LangChain框架概述LangChain是一个用于开发应用程序的开源框架。它将大型语言模型(如GPT-4)与外部数据相结合。LangChain有Python或JavaScript(TypeScript)包可用。LangChain注重组合和模块化。它具有模块化组件,其中单个组件可以相互结合使用,也可以单独使用。LangChain可以应用于多个用例,并可以组合其模块化组件以实现更完整的端到端应用程序。
LangChain的关键组件LangChain强调灵活性和模块化。它将自然语言处理流程划分为独立的模块化组件,使开发人员能够根据需要定制工作流程。LangChain框架可以分为六个模块,每个模块允许与LLM进行不同方面的交互。
模型:
-
LLMs — 20+集成
-
Chat Models
-
Text Embedding Models — 10+集成 提示:
-
提示模板
-
输出解析器 — 5+集成
-
示例选择器 — 10+集成 索引:
-
文档加载器: 50+集成
-
文本拆分器: 10+集成
-
向量空间: 10+集成
-
检索器: 5+集成/实现 链:
-
Prompt + LLM + Output parsing
-
可用作更长链的构建块
-
更多特定于应用的链:20+类型
-
检索器: 5+集成/实现 代理:
-
代理是一种端到端用例类型,将模型用作推理引擎
-
代理类型: 5+类型
-
代理工具包: 10+实现
模型模型是任何语言模型应用的核心元素。模型指的是支持LLM的语言模型。LangChain提供了与任何语言模型接口和集成的构建块。LangChain为两种类型的模型提供接口和集成:
LLMs — 以文本字符串作为输入并返回文本字符串的模型Chat Models — 由语言模型支持但以聊天消息列表作为输入并返回聊天消息的模型。
# This is langchain's abstraction for chatGPT API Endpointfrom langchain.chat_models import ChatOpenAI
# To control the randomness and creativity of the generated text by an LLM,# use temperature = 0.0chat = ChatOpenAI(temperature=0.0)
Prompts是编程模型的新方式。提示是指创建输入以传递到模型的风格。提示通常由多个组件构成。提示模板和示例选择器提供了主要类和函数,以便轻松构建和使用提示。
我们将定义一个模板字符串,并使用该模板字符串和ChatPromptTemplate从LangChain创建提示模板。
提示模板
# Define a template string
template_string = """Translate the text that is delimited by triple backticks \
into a style that is {style}. text: ```{text}```
"""
# Create a prompt template using above template stringfrom langchain.prompts import ChatPromptTemplateprompt_template = ChatPromptTemplate.from_template(template_string
上述的prompt_template有两个字段,即style和text。我们也可以从此提示模板中提取原始模板字符串。现在,如果我们想要将文本翻译为某种其他样式,我们需要定义我们的翻译样式和文本。
customer_style = """American English in a calm and respectful tone
"""customer_email = """
Arrr, I be fuming that me blender lid flew off and splattered me kitchen walls \
with smoothie! And to make matters worse, the warranty don't cover the cost of \
cleaning up me kitchen. I need yer help right now, matey!
"""
在这里,我们将风格设置为美国英语,语气平静且尊重。我们使用带有将被三个反引号括起来的文本翻译为特定风格的f-string指令来指定提示,然后将上述样式(客户风格)和文本(客户电子邮件)传递给LLM进行文本翻译。
# customer_message will generate the prompt and it will be passed into
# the llm to get a response.
customer_messages = prompt_template.format_messages(style=customer_style,text=customer_email)# Call the LLM to translate to the style of the customer message.
customer_response = chat(customer_messages)
当我们构建复杂的应用程序时,提示可以变得相当长和详细。我们不使用f字符串,而是使用提示模板,因为提示模板是有用的抽象,可以帮助我们重用好的提示。我们可以创建提示模板并重用这些提示模板,并为模型指定输出样式和文本以供工作。
LangChain提供了一些常见操作的提示,例如摘要或回答问题,或者连接到SQL数据库或连接到不同的API。因此,通过使用LangChain的一些内置提示,我们可以快速获得一个正在运行的应用程序,而无需自行设计提示。
输出解析器LangChain的提示库的另一个方面是它还支持输出解析。输出解析器有助于从语言模型的输出中获取结构化信息。输出解析器涉及将模型的输出解析为更结构化的格式,以便我们可以使用输出执行下游任务。
当我们使用LLMs构建复杂应用程序时,我们经常指示LLM以特定格式生成其输出,例如使用特定的关键字。LangChain的库函数假设LLM将使用某些关键字来解析其输出。
我们可以有一个LLM输出JSON,我们将使用LangChain解析该输出,如下所示:
我们需要首先定义我们希望如何格式化LLM输出。在这种情况下,我们定义了一个具有提及产品是否为礼物、交付所需的天数以及价格是否可负担的字段的Python字典。
# Following is one example of the desired output.
{"gift": False,"delivery_days": 5,"price_value": "pretty affordable!"
}
我们可以在下面提到的三个反引号中包含客户评论。我们可以定义以下评论模板:
# This is an example of customer review and a template that try to get the desired output
customer_review = """\
Need to be actual review
"""review_template = """\
For the following text, extract the following information:gift: Was the item purchased as a gift for someone else? \
Answer True if yes, False if not or unknown.delivery_days: How many days did it take for the product \
to arrive? If this information is not found, output -1.price_value: Extract any sentences about the value or price,\
and output them as a comma separated Python list.Format the output as JSON with the following keys:
gift
delivery_days
price_valuetext: {text}
"""# This is an example of customer review and a template that try to get the desired output
customer_review = """\
Need to be actual review
"""review_template = """\
For the following text, extract the following information:gift: Was the item purchased as a gift for someone else? \
Answer True if yes, False if not or unknown.delivery_days: How many days did it take for the product \
to arrive? If this information is not found, output -1.price_value: Extract any sentences about the value or price,\
and output them as a comma separated Python list.Format the output as JSON with the following keys:
gift
delivery_days
price_valuetext: {text}
"""# We will wrap all review template, customer review in langchain to get output
# in desired format. We will have prompt template created from review template.from langchain.prompts import ChatPromptTemplateprompt_template = ChatPromptTemplate.from_template(review_template)
print(prompt_template)# Create messages using prompt templates created earlier and customer review.
# Finally, we pass messgaes to OpenAI endpoint to get response.messages = prompt_template.format_messages(text=customer_review)
chat = ChatOpenAI(temperature=0.0)
response = chat(messages)
print(response.content)
上述响应仍然不是字典,而是字符串。我们需要使用Python字典将LLM输出字符串解析为字典。我们需要为Python字典中的每个字段项定义ResponseSchema。为了简洁起见,我没有提供这些代码片段。它们可以在我的GitHub笔记本中找到。这是一种非常有效的方法,可以将LLM输出解析为Python字典,使其更易于在下游处理中使用。
ReAct框架

在上述示例中,LLM使用诸如“思想”、“行动”和“观察”等关键词,使用名为ReAct的框架执行思维推理链。“思想”是LLM所想的,通过给LLM思考的空间,LLM可以得到更准确的结论。“行动”是一个关键词来执行特定的行动,而“观察”是一个关键词来展示LLM从特定行动中所学到的内容。如果我们有一个指示LLM使用这些特定关键词(如思想、行动和观察)的提示,那么这些关键词可以与解析器结合使用,以提取标记有这些关键词的文本。
记忆大型语言模型无法记住之前的对话。
当你与这些模型互动时,它们自然不会记得你之前说的话或之前的所有对话,这在你构建一些应用程序(如聊天机器人)并希望与它们进行对话时是一个问题。
通过模型、提示和解析器,我们可以重用我们自己的提示模板,与他人共享提示模板,或使用LangChain内置的提示模板,这些模板可以与输出解析器结合使用,以便我们获得特定格式的输出,并让解析器解析该输出并将其存储在特定字典或其他数据结构中,从而使下游处理更容易。
我将在下一篇博客中讨论链和代理。我还将在我的另一篇博客中讨论如何在我们的数据中进行问题回答。最后,我们可以看到,通过提示LLM或大型语言模型,现在比以前任何时候都更有可能开发出更快的AI应用程序。但是一个应用程序可能需要多次提示LLM并解析其输出,因此需要编写大量的粘合代码。Langchain有助于简化这个过程。
相关文章:
生成式AI - Knowledge Graph Prompting:一种基于大模型的多文档问答方法
大型语言模型(LLM)已经彻底改变了自然语言处理(NLP)任务。它们改变了我们与文本数据交互和处理的方式。这些强大的AI模型,如OpenAI的GPT-4,改变了理解、生成人类类似文本的方式,导致各种行业出现…...
深度学习AIR-PolSAR-Seg图像数据预处理
文章目录 深度学习sar图像数据预处理一.图片预处理操作1.log(1x)处理2.sqrt平方化处理 二.原网络训练效果展示原始数据训练效果展示: 三.对比实验1.采用原始数据2.采用取log(1x)后的数据3.采用取平方后归一化处理: 四.总结:五.思考 深度学习s…...
求最大公约数math.gcd()
【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 求最大公约数 math.gcd() [太阳]选择题 下列代码执行输出的结果是? import math print("【执行】print(math.gcd(6, 8))") print(math.gcd(6, 8)) print(&quo…...
数据结构之队列
目录 引言 队列的概念与结构 队列的实现 定义 初始化 销毁 入队 判断队列是否为空 出队 获取队头元素 获取队尾元素 检测队列中有效元素个数 元素访问 源代码 queue.h queue.c test.c 引言 数据结构之路经过栈后,就来到了与栈联系紧密的兄弟—…...
MySQL数据库——存储过程-循环(while、repeat、loop)
目录 while 介绍 案例 repeat 介绍 案例 loop 介绍 案例一 案例二 while 介绍 while 循环是有条件的循环控制语句。满足条件后,再执行循环体中的SQL语句。具体语法为: -- 先判定条件,如果条件为true,则执行逻辑&#…...
Django路由
路由系统 1.Django1中的路由1.1 普通形式1.2 分组1.2.1 无名分组1.2.2 有名分组 2. Django2版本2.1 传统的路由2.2 正则表达式路由 3. 路由分发3.1 include(一般使用此方式做路由分发)3.2 手动分发 4. name别名及使用name的反向URL生成4.1 一般情况下的别名使用及反向生成4.2 分…...
头歌实践平台-数据结构-二叉树及其应用
第1关:实现二叉树的创建 #include "binary_tree.h"BiTreeNode* CreatBiTree(char* s, int &i, int len) // 利用先序遍历创建二叉树 // 参数:先序遍历字符串s,字符串初始下标i0,字符串长度len。 // 返回࿱…...
2023.11.11通过html内置“required-star“添加一个红色的星号来表示必填项
2023.11.11通过html内置"required-star"添加一个红色的星号来表示必填项 在HTML中,可以使用标签来为元素添加说明。同时可以通过添加一个红色的星号来表示必填项。 <!DOCTYPE html> <html lang"en"> <head><meta charse…...
pcie【C#】
根据提供的引用内容,使用C#编写PCIE的Demo需要遵循以下步骤:1.连接好硬件后,烧录bit文件,安装PCIe内核驱动,然后重启计算机。2.打开VS工程,创建一个新的C#控制台应用程序项目。3.在项目中添加对C DLL的引用…...
西门子精智屏数据记录U盘插拔问题总结
西门子精智屏数据记录U盘插拔问题总结 注意: 数据记录过程中不允许带电插拔 U 盘! 数据记录的相关功能可参考以下链接中的内容: TIA博途wincc V16 如何进行变量周期归档?...
(论文阅读27/100)Deep Filter Banks for Texture Recognition and Segmentation
27.文献阅读笔记 简介 题目 Deep Filter Banks for Texture Recognition and Segmentation 作者 Mircea Cimpoi, Subhransu Maji, Andrea Vedaldi, 原文链接 http://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Cimpoi_Deep_Filter_Banks_2015_CVPR_pap…...
ARMday06(串口)
代码: #include "gpio.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_uart.h" void init(); char getc(); void putc(const char data); int main() {init();//初始化putc(j);char …...
Rust字符串详解
文章目录 字符串切片String迭代方法基础字符串方法容量操作增删改查 字符串切片 我们所熟知的由双引号括起来的字符串,在Rust中只是个字符串切片,又叫字符串字面值。这种类型一旦创建,则不可更改。但支持索引,从切片中索引出来的…...
(四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
一、七种算法(DBO、LO、SWO、COA、LSO、KOA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖…...
Window安装MongoDB
三种NOSQL的一种,Redis MongoDB ES 应用场景: 1.社交场景:使用Mongodb存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能 2.游戏场景:使用Mongodb存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问…...
20.有效的括号(LeetCode)
思路:用栈的后进先出的特性,来完成题目的要求 因为C有库,可以直接用,而C语言没有,所以我们直接把写好的栈拷贝上来用。 首先,完成框架的搭建 其次,再实现循环内的部分。1.左括号入栈 2.右括…...
Vue3组件传参之Mitt插件方式
在vue3中$on,$off 和 $once 实例方法已被移除,组件实例不再实现事件触发接口,因此大家熟悉的EventBus便无法使用了。然而我们习惯了使用EventBus,对于这种情况我们可以使用Mitt库(其实就是我们视频中讲的发布订阅模式的…...
【数据仓库】数仓分层方法
文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层?1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…...
Linux网络——自定义协议
目录 一.什么是协议 二.协议与报文 三.自定义协议 1.封装套接字 2.构建请求与响应 3.序列化和反序列化 4.报头添加和去除 5.报文读取 四.服务器端程序 五.客户端程序 一.什么是协议 协议在生活中泛指:双方或多方为了完成某项任务或达成某种目的而制定的共…...
【OpenCV实现图像:用OpenCV图像处理技巧之巧用直方图】
文章目录 概要前置条件统计数据分析直方图均衡化原理小结 概要 图像处理是计算机视觉领域中的重要组成部分,而直方图在图像处理中扮演着关键的角色。如何巧妙地运用OpenCV库中的图像处理技巧,特别是直方图相关的方法,来提高图像质量、改善细…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
