使用 Neo4j 和 LangChain 集成非结构化知识图增强 QA

2024-01-21

目前基于大模型的信息检索有两种方法,一种是基于微调的方法,一种是基于 RAG 的方法。

信息检索和知识提取是一个不断发展的领域,随着大型语言模型(LLM)和知识图的出现,这一领域发生了显着的变化,特别是在多跳问答的背景下。

接下来我们继续深入,跟着文章完成一个项目,该项目利用 Neo4j 矢量索引和 Neo4j 图数据库的强大功能来实现检索增强生成系统,旨在为用户查询提供精确且上下文丰富的答案。

该系统采用向量相似性搜索来检索非结构化信息,同时访问图数据库来提取结构化数据,以确保响应不仅全面,而且锚定在验证过的知识中。

这种方法对于解决多跳问题尤其重要,因为单个查询可能需要分解为多个子问题,并且可能需要来自大量文档的信息才能生成准确的答案。

图片

在数据既丰富又复杂的时代,上述系统成为一个至关重要的工具,它确保用户查询得到的答案既包含广泛的知识,又保持验证准确性,无缝地弥合了非结构化数据和结构化知识图之间的鸿沟。

最后一步,系统将所检索到的非结构化和结构化信息传递给新的大型语言模型 Mistral-7b,用于文本生成。这种集成确保生成的响应不仅依赖于模型中内置的广泛知识,还经过特定实时数据的微调和丰富,这些数据来自向量和图形数据库的检索,从而提供更加详尽、准确和与上下文相关的信息,以提升用户体验。

用通俗易懂方式讲解系列

  • 用通俗易懂的方式讲解:自然语言处理初学者指南(附1000页的PPT讲解)
  • 用通俗易懂的方式讲解:NLP 这样学习才是正确路线
  • 用通俗易懂的方式讲解:28张图全解深度学习知识!
  • 用通俗易懂的方式讲解:不用再找了,这就是 NLP 方向最全面试题库
  • 用通俗易懂的方式讲解:实体关系抽取入门教程
  • 用通俗易懂的方式讲解:灵魂 20 问帮你彻底搞定Transformer
  • 用通俗易懂的方式讲解:大模型算法面经指南(附答案)
  • 用通俗易懂的方式讲解:十分钟部署清华 ChatGLM-6B,实测效果超预期
  • 用通俗易懂的方式讲解:内容讲解+代码案例,轻松掌握大模型应用框架 LangChain
  • 用通俗易懂的方式讲解:如何用大语言模型构建一个知识问答系统
  • 用通俗易懂的方式讲解:最全的大模型 RAG 技术概览
  • 用通俗易懂的方式讲解:利用 LangChain 和 Neo4j 向量索引,构建一个RAG应用程序

技术交流群

前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

我们建了NLP面试与技术交流群, 想要进交流群、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

方式①、添加微信号:mlc2060,备注:技术交流
方式②、微信搜索公众号:机器学习社区,后台回复:技术交流

在这里插入图片描述

01 GraphCypherQAChain

GraphCypherQAChain 类在自然语言问题查询图数据库(特别是 Neo4j)领域发挥着重要作用。它利用 LLM 从用户输入的问题生成 Cypher 查询,然后执行这些查询在 Neo4j 图形数据库中,并根据查询结果提供答案。

这一工具使用户能够检索特定数据,而无需编写复杂的 Cypher 查询,从而使存储在图形数据库中的数据更容易访问和互动。

02 Mistral 7B

Mistral 7B 是最新的大型语言模型,因其在一系列基准测试中的卓越性能而受到认可,展示了处理各种语言任务和查询的熟练程度,如下图所示。

图片

在检索增强生成 (RAG) 架构中,Mistral 7B 发挥着关键作用,它根据向量和图形搜索检索到的信息合成和生成文本,确保输出不仅上下文丰富,而且能够根据用户的查询精确定制。它有效地弥合了非结构化数据和结构化知识图之间的差距,提供混合了预先训练的知识和实时、经过验证的数据的答案。

03 执行

让我们从安装依赖项开始。

pip install langchain openai wikipedia tiktoken neo4j python-dotenv transformers
pip install -U sagemaker

Neo4j 向量索引

我们首先导入必要的库和模块,为数据集准备、Neo4j 向量索引的接口以及使用 Mistral 7B 的文本生成功能奠定基础。使用 dotenv,它可以安全地加载环境变量,保护 OpenAI API 和 Neo4j 数据库的敏感信息。

import os
import re
from langchain.vectorstores.neo4j_vector import Neo4jVector
from langchain.document_loaders import WikipediaLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter, RecursiveCharacterTextSplitter
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
from dotenv import load_dotenv

load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv('OPENAI_API_KEY')
os.environ["NEO4J_URI"] = os.getenv('NEO4J_URI')
os.environ["NEO4J_USERNAME"] = os.getenv('NEO4J_USERNAME')
os.environ["NEO4J_PASSWORD"] = os.getenv('NEO4J_PASSWORD')

在这里,我们使用 Leonhard Euler 的维基百科页面来进行我们的实验。我们使用该 bert-base-uncased 模型来标记文本。WikipediaLoader 加载指定页面的原始内容,然后使用 LangChain 的 RecursiveCharacterTextSplitter 将其分成更小的文本片段。

该拆分器确保每个块最大化为 200 个标记,其中重叠 20 个标记,遵守嵌入模型的上下文窗口限制,并确保不会丢失上下文的连续性。

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

def bert_len(text):
    tokens = tokenizer.encode(text)
    return len(tokens)

raw_documents = WikipediaLoader(query="Leonhard Euler").load()
text_splitter = RecursiveCharacterTextSplitter(
          chunk_size = 200,
          chunk_overlap  = 20,
          length_function = bert_len,
          separators=['\n\n', '\n', ' ', ''],
      )

documents = text_splitter.create_documents([raw_documents[0].page_content])

分块文档作为节点实例化到 Neo4j 向量索引中。它使用 Neo4j 图数据库和 OpenAI 嵌入的核心功能来构建该向量索引。

# Instantiate Neo4j vector from documents
neo4j_vector = Neo4jVector.from_documents(
    documents,
    OpenAIEmbeddings(),
    url=os.environ["NEO4J_URI"],
    username=os.environ["NEO4J_USERNAME"],
    password=os.environ["NEO4J_PASSWORD"]
)

在提取向量索引中的文档后,我们对示例用户查询执行向量相似度搜索,并检索前 2 个最相似的文档。

query = "Who were the siblings of Leonhard Euler?"
vector_results = neo4j_vector.similarity_search(query, k=2)
for i, res in enumerate(vector_results):
    print(res.page_content)
    if i != len(vector_results)-1:
        print()
vector_result = vector_results[0].page_content

图片

构建知识图谱

受到 NaLLM 项目的高度启发,我们使用他们的开源项目从非结构化数据构建知识图。

下面是使用 Leonhard Euler 的维基百科文章中的单个文档块构建的知识图。

图片

在深入研究该项目可以学到很多关于使用 LLM 构建知识图谱的知识。例如,以下是从非结构化文本中捕获实体和关系的提示:

"""
You are a data scientist working for a company that is building a graph database. Your task is to extract information from data and convert it into a graph database.
Provide a set of Nodes in the form [ENTITY_ID, TYPE, PROPERTIES] and a set of relationships in the form [ENTITY_ID_1, RELATIONSHIP, ENTITY_ID_2, PROPERTIES].
It is important that the ENTITY_ID_1 and ENTITY_ID_2 exists as nodes with a matching ENTITY_ID. If you can't pair a relationship with a pair of nodes don't add it.
When you find a node or relationship you want to add try to create a generic TYPE for it that  describes the entity you can also think of it as a label.

Example:
Data: Alice lawyer and is 25 years old and Bob is her roommate since 2001. Bob works as a journalist. Alice owns a the webpage www.alice.com and Bob owns the webpage www.bob.com.
Nodes: ["alice", "Person", {"age": 25, "occupation": "lawyer", "name":"Alice"}], ["bob", "Person", {"occupation": "journalist", "name": "Bob"}], ["alice.com", "Webpage", {"url": "www.alice.com"}], ["bob.com", "Webpage", {"url": "www.bob.com"}]
Relationships: ["alice", "roommate", "bob", {"start": 2021}], ["alice", "owns", "alice.com", {}], ["bob", "owns", "bob.com", {}]
"""

有很多有趣的功能,同时可以进行改进。

Neo4j DB QA 链

接下来,我们导入必要的库来设置 Neo4j DB QA 链。

from langchain.chat_models import ChatOpenAI
from langchain.chains import GraphCypherQAChain
from langchain.graphs import Neo4jGraph

构建图表后,我们需要连接到 Neo4jGraph 实例并可视化模式。

graph = Neo4jGraph(
    url=os.environ["NEO4J_URI"], username=os.environ["NEO4J_USERNAME"], password=os.environ["NEO4J_PASSWORD"]
)

print(graph.schema)
Node properties are the following:
[{'labels': 'Person', 'properties': [{'property': 'name', 'type': 'STRING'}, 
{'property': 'nationality', 'type': 'STRING'}, 
{'property': 'death_date', 'type': 'STRING'}, 
{'property': 'birth_date', 'type': 'STRING'}]}, 
{'labels': 'Location', 'properties': [{'property': 'name', 'type': 'STRING'}]}, 
{'labels': 'Organization', 'properties': [{'property': 'name', 'type': 'STRING'}]}, 
{'labels': 'Publication', 'properties': [{'property': 'name', 'type': 'STRING'}]}]

Relationship properties are the following:
[]
The relationships are the following:
['(:Person)-[:worked_at]->(:Organization)', 
'(:Person)-[:influenced_by]->(:Person)', 
'(:Person)-[:born_in]->(:Location)', 
'(:Person)-[:lived_in]->(:Location)', 
'(:Person)-[:child_of]->(:Person)', 
'(:Person)-[:sibling_of]->(:Person)', 
'(:Person)-[:published]->(:Publication)']

抽象 GraphCypherQAChain 所有细节并输出自然语言问题(NLQ)的自然语言响应。然而,在内部,它使用 LLM 生成该问题的 Cypher 查询,并从图形数据库中检索结果,最后使用该结果生成最终的自然语言响应,再次使用 LLM。

chain = GraphCypherQAChain.from_llm(
    ChatOpenAI(temperature=0), graph=graph, verbose=True
)

graph_result = chain.run("Who were the siblings of Leonhard Euler?")

图片

graph_result
'The siblings of Leonhard Euler were Maria Magdalena and Anna Maria.'

Mistral-7b-指令

我们在 AWS SageMaker 环境中从 Hugging Face 设置 Mistral-7B 终端节点。

import json
import sagemaker
import boto3
from sagemaker.huggingface import HuggingFaceModel, get_huggingface_llm_image_uri

try:
    role = sagemaker.get_execution_role()
except ValueError:
    iam = boto3.client('iam')
    role = iam.get_role(RoleName='sagemaker_execution_role')['Role']['Arn']
    
hub = {
    'HF_MODEL_ID':'mistralai/Mistral-7B-Instruct-v0.1',
    'SM_NUM_GPUS': json.dumps(1)
}

huggingface_model = HuggingFaceModel(
    image_uri=get_huggingface_llm_image_uri("huggingface",version="1.1.0"),
    env=hub,
    role=role, 
)

最终响应是通过构造提示来制作的,该提示包括指令、向量索引中的相关数据、图形数据库中的相关信息以及用户的查询。

然后将此提示传递给 Mistral-7b 模型,模型根据提供的信息生成有意义且准确的响应。

mistral7b_predictor = huggingface_model.deploy(
    initial_instance_count=1,
    instance_type="ml.g5.4xlarge",
    container_startup_health_check_timeout=300,
)

query = "Who were the siblings of Leonhard Euler?"
final_prompt = f"""You are a helpful question-answering agent. Your task is to analyze 
and synthesize information from two sources: the top result from a similarity search 
(unstructured information) and relevant data from a graph database (structured information). 
Given the user's query: {query}, provide a meaningful and efficient answer based 
on the insights derived from the following data:

Unstructured information: {vector_result}. 
Structured information: {graph_result}.
"""

response = mistral7b_predictor.predict({
    "inputs": final_prompt,
})

print(re.search(r"Answer: (.+)", response[0]['generated_text']).group(1))
The siblings of Leonhard Euler were Maria Magdalena and Anna Maria.

要点

Neo4j 向量检索与 GraphCypherQAChainMistral-7b 的集成提供了一个强大的系统来处理复杂数据,有效地弥合了大量非结构化数据和复杂的图形知识之间的差距,通过综合两个数据源的信息,为用户查询提供全面、准确的响应。

利用 Neo4j 进行向量相似性搜索和图形数据库检索,可确保生成的响应不仅通过 Mistral-7b 的大量预先训练的知识获得信息,而且还通过来自向量和图形数据库的实时数据进行上下文丰富和验证。

最后,作者的目标是在未来的实验中尝试多跳查询,因为最初建立模块化管道对于适应快速发展的人工智能领域是必要的。

04 总结

该项目强调了 Neo4j Vector Index 和 LangChain 的有效组合,GraphCypherQAChain 分别可以浏览非结构化数据和图形知识,然后使用 Mistral-7b 生成明智且准确的响应。

通过使用 Neo4j 从向量索引和图形数据库检索相关信息,系统确保生成的响应不仅上下文丰富,而且锚定在经过验证的实时知识中。

该实现展示了检索增强生成的实际应用,其中利用来自不同数据源的综合信息来生成响应,这些响应是预先训练的知识和特定的实时数据的和谐混合,从而提高了预测的准确性和相关性。对用户查询的响应。

参考资料

https://medium.com/neo4j/enhanced-qa-integrating-unstructured-and-graph-knowledge-using-neo4j-and-langchain-6abf6fc24c27

https://github.com/neo4j/NaLLM/tree/main

https://medium.com/neo4j/harnessing-large-language-models-with-neo4j-306ccbdd2867

https://medium.com/neo4j/knowledge-graphs-llms-fine-tuning-vs-retrieval-augmented-generation-30e875d63a35

https://medium.com/neo4j/knowledge-graphs-llms-multi-hop-question-answering-322113f53f51

https://medium.com/neo4j/langchain-library-adds-full-support-for-neo4j-vector-index-fa94b8eab334

https://mistral.ai/news/announcing-mistral-7b/

https://www.youtube.com/watch?v=Hg4ahTQlBm0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Neo4j 和 LangChain 集成非结构化知识图增强 QA 的相关文章

  • 使用 Neo4j 的 Cypher 返回我的朋友和朋友的朋友

    我有具有双向关系的节点 如下 我正在尝试创建一个查询 我想返回特定节点的所有后续节点及其后续节点的后续节点 3 希望深度 例如假设这些关系 gt 符号跟随 A gt B B gt A B gt C C gt B C gt D D gt C
  • Neo4j cypher - 导入 CSV 并根据 csv 值添加节点之间的关系

    是否可以在 cypher 中使用导入功能根据 csv 的值在节点之间创建不同的关系 例如 对于给定的 csv 数据 product id user id action 1 1 VIEW 1 2 PURCHASE 我需要创建产品节点 prod
  • Neo4j 2 和 Java 8

    Java 8 将于本周发布 当将 Neo4j 1 9 与 Java 7 一起使用时 我们看到弹出警告 提示仅支持 6 但我们对 1 9 7 组合从未遇到任何问题 我知道 Neo4j 2 不能使用低于 Java 7 的任何东西 但是 Neo4
  • 有没有办法对 Neo4j 数据进行分片和复制?

    我正在考虑为我正在从事的一些新项目选择 Neo4j 对于给定的数据需求 本质上基于图形 neo4j 非常适合 并且快速原型为我提供了良好的响应时间 我想了解的是如何扩展 neo4j 部署 具体来说 如何跨 neo4j 部署对数据进行分片 由
  • 如何集成Neo4j数据库、NestJS框架和GraphQL?

    我正在尝试将我的 REST API NestJS 与带有 GraphQL 查询的新 Neo4j 数据库集成 有人成功吗 提前致谢 编辑1 我添加了我的代码 import Resolver from nestjs graphql import
  • neo4j 使用选项卡加载 CSV

    我正在尝试使用以下命令加载 csv 并在 neo4j 2 1 0 中创建节点 使用定期提交 从 file c temp listings TXT 加载 CSV AS 行 FIELDTERMINATOR t CREATE p person i
  • Cypher 查询 JSON 格式的结果

    在演员 电影演示图上 cypher 在单独的数组中返回列名称 MATCH n Person RETURN n name as Name n born as Born ORDER BY n born LIMIT 5 results colum
  • Neo4j 中的自动增量

    有没有办法像在 Neo4j 的 MySQL 中一样设置 auto increment 例如 当我使用 GraphDatabaseService 对象创建节点时 我希望节点以 1000000000 等数字开头 非常感谢 看看这个答案 我可以在
  • neo4j:单向/双向关系?

    所以我研究了 neo4j 我可能会在即将到来的项目中使用它 因为它的数据模型可能非常适合我的项目 我查看了文档 但我仍然需要这个问题的答案 我可以将关系设置为单向吗 看来 Neo4j 的人很喜欢电影 所以我们继续吧 如果我有这样的图表 Ac
  • Python networkx 和持久性(可能在 neo4j 中)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个每秒在内存中创建数千个图形的应用程序 我希望找到一种方法来保存这些以供后续查询 它们并不是特别
  • “找不到类型的属性”组合存储库 spring-data-neo4j

    我在用着spring data neo4j我正在尝试组合存储库以便能够使用自定义存储库 我认为我已经正确遵循了中指定的命名约定20 8 7 创建存储库 http docs spring io spring data neo4j docs 3
  • 使用 py2neo 在 neo4j 上查询写入性能

    目前 我正在努力寻找一种高性能的方法 使用 py2neo 运行多个查询 我的问题是 python 中有一大堆需要写入 neo4j 的写入查询 我现在尝试了多种方法来解决这个问题 对我来说最好的工作方法如下 from py2neo impor
  • Neo4j聚合函数

    我正在尝试使用SUM函数并将其结果存储为关系的新属性 但它不起作用 我使用的查询是 MATCH a Employee r CorporateMessage gt b WHERE a Eid 6001 AND b Eid IN 6002 60
  • 将 mongodb 与 neo4j 集成,是否有任何 API 可以链接它们?

    我正在研究推荐引擎 用户数据被收集 他们的友谊 位置 喜欢 教育 并已存储在 mongodb 中 我需要向这些用户推荐相关产品 我计划使用 Neo4j 作为推荐引擎 原因很明显 易于节点之间的遍历 路径信息 问题是我必须首先将 mongod
  • Neo4j - 计算带有标签的节点

    我想要一个查询来计算数据集中有多少个节点具有每个标签 例如 标签A 100 标签B 200 我可以为每个单独的标签执行此操作 例如 MATCH n LabelA return count n 但是 我想在一个命令中为每个标签执行此操作 尝试
  • 使用 scala 检索与给定节点相关的 neo4j 节点

    我有 2 个名为 User node 和 Article node 的节点 它们通过关系相关联 文章节点 gt Written By gt 用户节点 如何获取给定用户节点写入的所有文章节点 我假设您正在使用嵌入式 neo4j 因此有一个类型
  • 通过 awselb 使用 ssl 时的 neo4j java 驱动程序问题

    I am using neo4j community version 3 1 1 and enterprise edition version 3 0 1 with ssl configured through awselb To conn
  • 如何返回每个另一个节点属性的最大计数

    我需要计算一位作曲家的音乐作品每十年被演奏了多少次 然后只返回每十年演奏次数最多的一首作品 除了过滤除每十年最高计数之外的所有内容之外 该密码可以执行所有操作 match c Composer CREATED BY w Work lt 2
  • 使用java将数据从Neo4j导出到csv

    将数据从 Neo4j 导出到 CSV 的最佳方法是什么 我已使用链接中的 CSV 导入器将数据从 csv 导入到 neo4jhttps github com sroycode neo4j import https github com sr
  • 如何使用 spring-data-neo4j 配置 neo4j EmbeddedGraphDatabase (现已弃用)?

    我正在使用 spring data neo4j 3 1 1 Release 和 neo4j 2 1 2 我设法制作了一个运行良好的 spring 配置 但它使用了 org neo4j kernel EmbeddedGraphDatabase

随机推荐

  • J2EE常见面试题(一)

    StringBuilder和StringBuffer的区别 String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBuilder
  • 苹果要在iPhone上运行AI大模型?

    近两年 人工智能 AI 技术已经成为各大科技公司的重点研究领域 苹果公司自然也不甘落后 最新消息称 苹果甚至打算在iPhone上直接运行AI大模型 据苹果AI研究人员表示 他们 发明了一种创新的闪存利用技术 这是一项重要的技术突破 可以在i
  • input.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个input d
  • python基础语法看一篇就够了,全网最全python语法笔记汇总

    前言 Python 是一种代表简单思想的语言 其语法相对简单 很容易上手 不过 如果就此小视 Python 语法的精妙和深邃 那就大错特错了 如能在实战中融会贯通 灵活使用 必将使代码更为精炼 高效 同时也会极大提升代码B格 使之看上去更老
  • Python简介-Python入门到精通

    Python的创始人为荷兰人吉多 范罗苏姆 Guido van Rossum 1989年圣诞节期间 在阿姆斯特丹 Guido为了打发圣诞节的无趣 决心开发一个新的脚本解释程序 作为ABC语言的一种继承 之所以选中Python 大蟒蛇的意思
  • ir41_qcx.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个ir41 qc
  • iPhone是国内最畅销的智能手机

    据调研机构BCI发布最新数据显示 去年中国一共卖出2 7亿部智能手机 其中 苹果的iPhone系列是国内最畅销的机型 其中 苹果以17 1 的市场份额占据了第一 而vivo手机和OPPO则以16 7 和16 紧随其后 接着是荣耀 小米 华为
  • 【基于MPC飞行器最佳控制】针对固定翼飞行器的最短时间航迹的最佳控制策略,考虑航路点约束研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • ipsmsnap.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个ipsmsna
  • iologmsg.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个iologms
  • 每天10个前端小知识 <Day 8>

    1 Javascript中如何实现函数缓存 函数缓存有哪些应用场景 函数缓存 就是将函数运算过的结果进行缓存 本质上就是用空间 缓存存储 换时间 计算过程 常用于缓存数据计算结果和缓存对象 缓存只是一个临时的数据存储 它保存数据 以便将来对
  • 2种方法,教你使用Python实现接口自动化中的参数关联

    通常在接口自动化中 经常会参数关联的问题 那么什么是参数关联 参数关联就是上一个接口的返回值会被下一个接口当做参数运用 其中Python中可以实现参数关联的方法有很多种 今天小编给大家介绍下 如何通过Python来实现接口自动化中的参数关联
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • RF自动化环境安装+自动化实例解析

    RF定义 通用型的 自动测试框架 绝大部分的软件的的自动化系统都可以采用它 特点 测试数据文件 Test Data 对应一个个的测试用例 测试数据文件里面使用的功能小模块叫关键字 由测试库 Test Library Robot Framew
  • infocardapi.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个infocar
  • 欧盟反垄断主管即将会见库克,iPhone NFC功能要开放了?

    1月5日路透社报道 欧盟反垄断主管玛格丽特 维斯塔格 Margrethe Vestager 即将在下周举办会议 会见苹果 博通 英伟达等多个科技公司CEO 苹果首席执行官蒂姆 库克 Tim Cook 就在其中 欧盟反垄断想来大家应该已经不陌
  • ir32_32.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个ir32 32
  • 每天10个前端小知识 <Day 6>

    前端面试基础知识题 1 使用js实现二分查找 二分查找 也称为折半查找 是指在有序的数组里找出指定的值 返回该值在数组中的索引 查找步骤如下 从有序数组的最中间元素开始查找 如果该元素正好是指定查找的值 则查找过程结束 否则进行下一步 如果
  • 几个Python小案例,爱上Python编程!

    Python是一种面向对象的解释型编程语言 源代码与解释器CPython遵守GPL协议 Python语法简洁清晰 语法简洁清晰 那么我们用少量的Python代码能做哪些有趣的东西 温馨提示 文末必看 一 画爱心表白 1 图形都是由一系列的点
  • 使用 Neo4j 和 LangChain 集成非结构化知识图增强 QA

    目前基于大模型的信息检索有两种方法 一种是基于微调的方法 一种是基于 RAG 的方法 信息检索和知识提取是一个不断发展的领域 随着大型语言模型 LLM 和知识图的出现 这一领域发生了显着的变化 特别是在多跳问答的背景下 接下来我们继续深入