开源模型应用落地-LangChain高阶-知识图谱助力记忆增强

    一、前言

    通过langchain框架调用本地模型,使得用户可以直接提出问题或发送指令,而无需担心具体的步骤或流程。langchain会自动将任务分解为多个子任务,并将它们传递给适合的语言模型进行处理。

    本篇通过使用 ConversationKGMemory 组件,让Langchain 可以更好地处理对话,提供更智能、更准确的响应,从而提高对话系统的性能和用户体验。


二、术语

2.1.LangChain

    是一个全方位的、基于大语言模型这种预测能力的应用开发工具。LangChain的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。

    LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。

   LangChain的主要特性:
        1.可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等
        2.允许语言模型与其环境交互
        3.封装了Model I/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件
        4.可以使用链的方式组装这些组件,以便最好地完成特定用例。
        5.围绕以上设计原则,LangChain解决了现在开发人工智能应用的一些切实痛点。

2.2.ConversationKGMemory组件

     ConversationKGMemory组件是Langchain 框架中的一个组成部分,它的作用主要是用于处理和管理与对话相关的知识和记忆。

    具体来说,它可能具有以下功能:

  1. 知识存储:存储与对话相关的各种知识,例如常见问题、答案、领域知识等。
  2. 记忆管理:跟踪对话的历史和上下文,以便在后续的交互中提供相关的回应。
  3. 知识检索:根据当前的对话情境,快速检索和提取相关的知识。
  4. 个性化交互:根据用户的偏好和历史记录,提供个性化的回应。
  5. 提高响应准确性:通过利用存储的知识,提高对话系统的响应准确性和可靠性。
  6. 支持多轮对话:有助于处理多轮对话,保持对话的连续性和一致性。

2.3.知识图谱

    是一种结构化的知识表示方式,用于描述现实世界中的实体、概念、关系和属性,并以图形的形式进行组织和表示。它是一种语义网络,旨在捕捉和呈现知识之间的关联性。

知识图谱通常由三个主要组成部分构成:

  1. 实体(Entities):表示现实世界中的具体对象、事物或概念,如人、地点、组织、事件、产品等。

  2. 属性(Attributes):描述实体的特征或属性,如人的姓名、年龄、职业等。

  3. 关系(Relationships):表示实体之间的连接或关联,如人与人之间的亲属关系、公司与员工之间的雇佣关系等。

    通过将实体、属性和关系组织在一起,知识图谱形成了一个网络结构,其中节点表示实体,边表示实体之间的关系。这种表示方式使得知识图谱能够提供丰富的语义信息,并支持对知识进行查询、推理和分析。


三、前提条件

3.1.安装虚拟环境

conda create --name langchain python=3.10
conda activate langchain
# -c 参数用于指定要使用的通道
conda install pytorch pytorch-cuda=11.8 -c pytorch -c nvidia
pip install langchain accelerate numpy

四、技术实现

4.1.代码实现

# -*-  coding = utf-8 -*-
import os
import warnings

from langchain import PromptTemplate, ConversationChain, OpenAI
from langchain.memory import ConversationKGMemory

warnings.filterwarnings("ignore")

template = """下面是一段人与AI的友好对话。 人工智能很健谈,并根据其上下文提供了许多具体细节。
			如果 AI 不知道问题的答案,它会如实说它不知道。 AI仅使用“相关信息”部分中包含的信息,不会产生幻觉。

			相关信息:
			{history}

			对话内容:
			Human: {input}
			AI:"""

prompt = PromptTemplate(
    input_variables=["history", "input"], template=template
)

API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
os.environ["OPENAI_API_KEY"] = API_KEY

llm = OpenAI(model_name='gpt-3.5-turbo-1106',temperature=0.35, max_tokens=256)

memory = ConversationKGMemory(llm=llm)

conversation_with_kg = ConversationChain(
    llm=llm,
    verbose=True,
    prompt=prompt,
    memory=memory
)

print("-----------------------------------第一轮对话--------------------------------------------")
print(conversation_with_kg.predict(input="我告诉你一件事,在三十年前的一个风雨交加的夜晚,一个名叫张三的男人生了个儿子李四。"))


print("-----------------------------------第二轮对话--------------------------------------------")
print(conversation_with_kg.predict(input="李四的爸爸是谁?"))

调用结果:

处理流程说明:

conversation_with_kg.predict(input="我告诉你一件事,在三十年前的一个风雨交加的夜晚,一个名叫张三的男人生了个儿子李四。")

上面的这句代码一共会触发三次模型推理:

第一次提取input的实体:['张三','李四'],具体的prompt参见:5.1.实体抽取模板

第二次发起input的对话:AI回复:抱歉,我不知道关于张三和李四的故事。

第三次提取知识三元组:['张三 生了 儿子李四'],具体的prompt参见:5.2.知识三元组提取模板

需要注意是:知识三元组的抽取是在对话完成后。

对应到代码的流程:

------------------------------------------------------第一轮对话------------------------------------------------------

1) 提取对话的实体:['张三','李四']

2) 取出缓存的知识三元组:[]

3) 发起对话,Prompt为:

4) 提取对话的三元组并缓存:['张三 生了 儿子李四']

------------------------------------------------------第二轮对话------------------------------------------------------

1) 提取对话的实体:['张三','李四']

2) 取出缓存的知识三元组:['张三 生了 儿子李四']

3) 发起对话,Prompt为:

4) 提取对话的三元组并缓存:['李四 的爸爸是 张三']


五、附带说明

5.1.实体提取模板

You are an AI assistant reading the transcript of a conversation between an AI and a human. Extract all of the proper nouns from the last line of conversation. As a guideline, a proper noun is generally capitalized. You should definitely extract all names and places.

The conversation history is provided just in case of a coreference (e.g. "What do you know about him" where "him" is defined in a previous line) -- ignore items mentioned there that are not in the last line.

Return the output as a single comma-separated list, or NONE if there is nothing of note to return (e.g. the user is just issuing a greeting or having a simple conversation).

EXAMPLE
Conversation history:
Person #1: how's it going today?
AI: "It's going great! How about you?"
Person #1: good! busy working on Langchain. lots to do.
AI: "That sounds like a lot of work! What kind of things are you doing to make Langchain better?"
Last line:
Person #1: i'm trying to improve Langchain's interfaces, the UX, its integrations with various products the user might want ... a lot of stuff.
Output: Langchain
END OF EXAMPLE

EXAMPLE
Conversation history:
Person #1: how's it going today?
AI: "It's going great! How about you?"
Person #1: good! busy working on Langchain. lots to do.
AI: "That sounds like a lot of work! What kind of things are you doing to make Langchain better?"
Last line:
Person #1: i'm trying to improve Langchain's interfaces, the UX, its integrations with various products the user might want ... a lot of stuff. I'm working with Person #2.
Output: Langchain, Person #2
END OF EXAMPLE

Conversation history (for reference only):
{history}
Last line of conversation (for extraction):
Human: {input}

Output:"""

 5.2.知识三元组提取模板

You are a networked intelligence helping a human track knowledge triples
 about all relevant people, things, concepts, etc. and integrating
 them with your knowledge stored within your weights
 as well as that stored in a knowledge graph.
 Extract all of the knowledge triples from the last line of conversation.
 A knowledge triple is a clause that contains a subject, a predicate,
 and an object. The subject is the entity being described,
 the predicate is the property of the subject that is being
 described, and the object is the value of the property.
 
EXAMPLE
Conversation history:
Person #1: Did you hear aliens landed in Area 51?
AI: No, I didn't hear that. What do you know about Area 51?
Person #1: It's a secret military base in Nevada.
AI: What do you know about Nevada?
Last line of conversation:
Person #1: It's a state in the US. It's also the number 1 producer of gold in the US.
Output: (Nevada, is a, state)<|>(Nevada, is in, US)<|>(Nevada, is the number 1 producer of, gold)
END OF EXAMPLE

EXAMPLE
Conversation history:
Person #1: Hello.
AI: Hi! How are you?
Person #1: I'm good. How are you?
AI: I'm good too.
Last line of conversation:
Person #1: I'm going to the store.
Output: NONE
END OF EXAMPLE

EXAMPLE
Conversation history:
Person #1: What do you know about Descartes?
AI: Descartes was a French philosopher, mathematician, and scientist who lived in the 17th century.
Person #1: The Descartes I'm referring to is a standup comedian and interior designer from Montreal.
AI: Oh yes, He is a comedian and an interior designer. He has been in the industry for 30 years. His favorite food is baked bean pie.
Last line of conversation:
Person #1: Oh huh. I know Descartes likes to drive antique scooters and play the mandolin.
Output: (Descartes, likes to drive, antique scooters)<|>(Descartes, plays, mandolin)
END OF EXAMPLE

Conversation history (for reference only):
{history}
Last line of conversation (for extraction):
Human: {input}
Output:

5.3. ConversationKGMemory组件的价值

    上述代码只是展示了ConversationKGMemory组件的用法,潜在的价值是,通过知识图谱为模型提供丰富的语义信息和外部记忆支持,从而帮助模型解决短期记忆问题,提升其语义理解和推理能力。

    知识图谱通过提供结构化的知识表示,可以作为模型的外部记忆库来扩展模型的记忆能力。模型可以从知识图谱中检索相关实体、属性和关系的信息,并将其整合到当前的计算任务中。

具体来说,知识图谱可以为模型提供以下优势:

  1. 上下文关联:知识图谱中的实体和关系可以提供丰富的上下文信息。模型可以通过理解实体之间的关系,获取更全面的语义理解,并在推理和决策时获得更准确的上下文。

  2. 语义关联:知识图谱中的实体和关系之间具有明确的语义关联。模型可以利用这些关联关系来推断缺失的信息、填补语义空缺,并且可以更好地理解复杂的语义关系。

  3. 外部记忆:知识图谱充当了模型的外部记忆存储。模型可以通过查询知识图谱来检索历史信息,并将其与当前输入进行关联,以更好地理解和处理当前任务。

  4. 知识推理:知识图谱中的关系可以用于知识推理。模型可以通过推理实体之间的关系来获取新的知识或进行逻辑推断,从而扩展其记忆和推理能力。

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

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

相关文章

MySQL简解

文章目录 1. MySQL框架2. 执行流程2.1. 连接池&#xff1a;2.2. SQL 前端(SEVER)2.2.0. 查询缓存2.2.1. SQL 接口2.2.2. SQL 解析器2.2.3. SQL 执行器2.2.4. INNODB 中读写操作 2.3. 数据的保存形式 3.其他重要概念3.1. 索引3.1.1. 简单概念3.1.2. 索引优化&#xff1a;1. Usin…

【复现代码——环境配置】

目录 一、复现代码举例二、创建环境——选择一个Python版本2.1 创建基本环境2.1.1 基于AutoDL2.1.2 基于PyCharm 2.2 终端激活环境2.3 退出环境2.4 删除环境 三、PyTorch安装3.1 查看cuda3.2 安装PyTorch 四、其他依赖安装4.1 tensorboardX4.2 matplotlib4.3 medpy4.4 visdom4.…

stable-diffusion-webui安装与使用过程中的遇到的error合集

stable-diffusion-webui1.9.2踩坑安装 1. 安装过程1.1 stable-diffusion-webui1.2 在win11或win10系统安装&#xff0c;需修改两个启动脚本1.2.1 修改webui-user.bat1.2.2 修改webui.bat 1.3 双击 webui-user.bat 启动脚本1.3.1 no module xformers. Processing without on fre…

实体书营销:“三三裂变”,实操细节分享……

实体书营销:“三三裂变”,实操细节分享 一、实验结果 “三三裂变”的实验,结果比较好。就是我们大概有300人报名,但实际行动的只有109人,大概有103人都完成了三个人的目标,也就是说我们通过109人裂变了475人,利润率是1:4.5左右,整个裂变的效率还是可以的,也就是说: …

阿赵UE学习笔记——30、HUD简单介绍

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎&#xff0c;这次来学习一下HUD的基础使用。 一、 什么是HUD HUD(Head-Up Display)&#xff0c;也就是俗称的抬头显示。很多其他领域里面有用到这个术语&#xff0c;比如开车的朋友可能会接触过&#xf…

后端工程师——Java工程师岗位要求

在国内,Java 程序员是后端开发工程师中最大的一部分群体,其市场需求量也是居高不下,C++ 程序员也是热门岗位之一,此二者的比较也常是热点话题,例如新学者常困惑的问题之一 —— 后端开发学 Java 好还是学 C++ 好。读完本文后,我们可以从自身情况、未来的发展,岗位需求量…

适用于手机蓝牙的热敏晶体FA1612AS

EPSON推出的一款1612小尺寸无源热敏晶体:FA1612AS。FA1612AS的额定频率为38.4Mhz的晶体单元&#xff0c;采用无铅材料&#xff0c;符合ROHS标准&#xff0c;内置热敏电阻&#xff0c;可用于移动电话&#xff0c;蓝牙等。热敏晶体FA1612AS的产品特性:额定频率:38.4MHZ外部尺寸规…

上海亚商投顾:沪指缩量调整 有色、煤炭等周期股集体大跌

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日缩量调整&#xff0c;午后一度跌近1%&#xff0c;黄白二线走势分化&#xff0c;微盘股指数涨超3%。军…

SpringBoot 启动控制台 --banner.txt实现打印炫酷控制台图案

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 分析源代码&#xff0c;banner.txt实现打印控制台 控制台图案生成网址&#xff1a;Ascii艺术字实现个性化Spring Boot启动banner图案&#xff0c;轻松修改更换banner.txt文件内容&#xff0c;收集了丰富…

ASP.NET Core 3 高级编程(第8版) 学习笔记 04

第 19 章主要介绍 Restful Service 的相关知识。Restful Service 的核心内容是&#xff1a;&#xff08;1&#xff09;HTTP 请求或 HTTP 动词&#xff0c;用 HTTP 请求表达不同的操作&#xff0c;最好遵守惯例。&#xff08;2&#xff09;资源&#xff0c;通过 PATH 结合 paylo…

C语言学习/复习31--简单通讯录功能的实现/结构体的运用/strcmp函数的运用/memset函数

0、分文件/结构体定义初始化/成员变量的访问/结构体地址传参/switch/for()/do while()/数组中元素的添加与删除/assert/const/宏/字符与内存函数 一、结构体运用---通讯录 1.基本功能 2.项目文件 二.具体操作方法 1.test.c文件 包含菜单与输入界面 2.contact.h头文件 …

中霖教育:二建考试哪些地区查社保?

想要报考二级建造师考试的同学都知道&#xff0c;在个别省份报名参加二建是需要核查社保信息的&#xff0c;也有一些省份对社保不做强制要求。 以下这几个省份查社保&#xff0c;如果不满足条件可以避开这几个省份&#xff0c;具体规定可参考当地发布的二建考试公告。 山东、…

阿里云官方综合优惠平台,官方云小站平台最新优惠政策汇总

阿里云官方云小站平台是阿里云为用户提供的优惠聚集地&#xff0c;这里不仅有丰富的优惠活动&#xff0c;还有不定期发布的云产品通用代金券。本文为您详细介绍阿里云官方综合优惠平台——官方云小站2024年的最新优惠政策&#xff0c;帮助您以更优惠的价格享受到高品质的云服务…

影响肉类口感的关键指标:肉嫩度的深度解析与检测方法

影响肉类口感的关键指标&#xff1a;肉嫩度的深度解析与检测方法 一、引言&#xff1a;肉类嫩度与食用体验 在饮食文化中&#xff0c;肉类的嫩度一直被视为影响口感的重要因素。对于消费者而言&#xff0c;嫩滑多汁的肉质往往能带来更好的食用体验。因此&#xff0c;准确评估…

如何在官网查看Qt5的所有模块?

2024年4月23日&#xff0c;周二上午 如果你不想一步步来的话&#xff0c;可以直接去这个Qt官方链接 https://doc.qt.io/qt-5/qtmodules.html 第一步&#xff1a;去到Qt官网 https://www.qt.io/ 第二步&#xff1a;点击文档链接 第三步&#xff1a;选择文档中的“Qt5” 第四步…

探索ChatGPT在提高人脸识别与软性生物识准确性的表现与可解释性

概述 从GPT-1到GPT-3&#xff0c;OpenAI的模型不断进步&#xff0c;推动了自然语言处理技术的发展。这些模型在处理语言任务方面展现出了强大的能力&#xff0c;包括文本生成、翻译、问答等。 然而&#xff0c;当涉及到面部识别和生物特征估计等任务时&#xff0c;这些基于文…

(007)Blender 根据顶点组分离模型

1.选中模型&#xff0c;并且进入【3D视图】【编辑模式】&#xff1a; 2.选择顶点组&#xff1a; 3.分离选中项&#xff1a;

齐护K210系列教程(四)_串口输出

串口输出打印数据 文章目录 串口输出打印数据1&#xff0c;什么是串口通信2&#xff0c;串口通常的应用3&#xff0c;AIstart的串口编程3-1 打印数据输出3-2 打印数据输出与输入 4&#xff0c;课程资源 1&#xff0c;什么是串口通信 在设计程序的过程中&#xff0c;经常要查看…

【中邦兴业】如何进行气流流型测试?一篇文章告诉你

气流流型&#xff0c;作为反应无菌操作的关键测试&#xff0c;其测试方法和结果是否合理直接关系到无菌保障水平是否达到要求。一个科学的气流流型设计&#xff0c;能够正确反应关键区域和关键操作下的气流流动是否符合要求&#xff0c;能否有效减少产品微生物的污染风险。如今…

Redis系列:内存淘汰策略

1 前言 通过前面的一些文章我们知道&#xff0c;Redis的各项能力是基于内存实现的&#xff0c;相对其他的持久化存储&#xff08;如MySQL、File等&#xff0c;数据持久化在磁盘上&#xff09;&#xff0c;性能会高很多&#xff0c;这也是高速缓存的一个优势。 但是问题来了&am…
最新文章