当前位置: 首页 > news >正文

[Document]VectoreStoreToDocument开发

该document是用来检索文档的。

第一步:定义组件对象,该组件返回有两种类型:document和text。
第二步:获取需要的信息,向量存储库,这里我使用的是内存向量存储(用该组件拿到文档,并检索)
第三步:在做返回结果处理时,分开处理组件返回类型

from langchain.vectorstores.base import VectorStoreclass VectorStoreToDocument:def __init__(self,param_dict:Optional[dict[str,Any]] = None) -> None:vectorStore:VectorStore = param_dict.get("vectorStore")if param_dict.get("minScore") is None or len(str(param_dict.get("minScore")))<=0:minimumScore = 75else: minimumScore : float = param_dict.get("minScore")query : str = param_dict.get("question","")outputs:dict = param_dict.get("outputs")self.__output = outputs['output'] if outputs is not None and len(outputs)>0 else "text"self.__vectorStore = vectorStoreself.__miniumScore = minimumScoreself.__query = querydef source(self):docs = self.__vectorStore.similarity_search_with_score(self.__query)if self.__output.lower() == "document":finalDocs = []for doc in docs:if self.__miniumScore is not None and float(self.__miniumScore)/100 < doc[1]:finalDocs.append(doc[0])return finalDocselse:finalText = ""for doc in docs:if self.__miniumScore is not None and self.__miniumScore/100 < doc[1]:finalText += doc[0].page_content+'\n'return finalText

调用:

from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
import chromadb
from chromadb import Settings
# Load the document, split it into chunks, embed each chunk and load it into the vector store.
raw_documents = TextLoader('D:/Workspace/pythonProjectSpacework/state_of_the_union.txt').load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
vectorstore = Chroma.from_documents(client=chromadb_client,documents=documents, embedding=embeddings)
retriever = vectorstore.as_retriever()
minimumScore=30
param_dict = {"vectorStore":vectorstore,"minimumScore":minimumScore,"output":"text","query":"president said"
}
from mth.main.flow_modules.document.MthVectorStoreToDocument import MthVectorStoreToDocumenttext = VectorStoreToDocument(param_dict=param_dict).source()
print(text)

由于这里的组件会在后续使用promptTemplate时,将查询到的文件信息传递给prompt,再由prompt将文档值和问题一起丢给大语言模型处理。因此,需要在进入promptTemplate之前对传入进来的值做处理。
处理逻辑的代码:
promptTemplate的值:
“promptValues”:“{
“context”:“vectoreStoreToDocument_0.data.instance”
}”

valueJson = json.loads(value) //输入进来的prompt组件信息
for valKey in valueJson:val = valueJson[valKey]if val.startswith("{{") and val.endswith("}}"):valReplace = val.replace("{{","").replace("}}","").split(".") // 去除插入表达式的符号,然后通过.分割分数组形式node = [x for x in allNodes if x["id"]==valReplace[0]] // 在该流中查找vectoreStoreToDocument的节点信息if len(node) == 0:continuekk = node[0]for i in range(1, len(valReplace)): // 获取节点信息,并取得该节点的值。即获取vectoreStoreToDocument实例化以后的值,通过输出传过来的值kk = kk[valReplace[i]]param_dict[valKey] = kk
http://www.lryc.cn/news/171183.html

相关文章:

  • 【LeetCode-简单题】225. 用队列实现栈
  • 数据预处理方式合集
  • 【前端】jquery获取data-*的属性值
  • GB28181学习(五)——实时视音频点播(信令传输部分)
  • 单例模式(饿汉模式 懒汉模式)与一些特殊类设计
  • 133. 克隆图
  • 交流耐压试验目的
  • 使用 YCSB 和 PE 进行 HBase 性能压力测试
  • 正则表达式相关概念及不可见高度页面的获取
  • 深入学习 Redis - 分布式锁底层实现原理,以及实际应用
  • Hive行转列[一行拆分成多行/一列拆分成多列]
  • TypeScript系列之类型 string
  • 【C++】动态内存管理 ③ ( C++ 对象的动态创建和释放 | new 运算符 为类对象 分配内存 | delete 运算符 释放对象内存 )
  • AMS爆炸来袭,上线即巅峰
  • 是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...
  • 怒刷LeetCode的第2天(Java版)
  • AUTOSAR汽车电子嵌入式编程精讲300篇-车载CAN总线网络的异常检测(续)
  • mojo安装
  • 【探索Linux】—— 强大的命令行工具 P.8(进程地址空间)
  • vue3 - Element Plus 切换主题色及el-button hover颜色不生效的解决方法
  • 【C++面向对象侯捷】1.C++编程简介
  • 年龄大了转嵌入式有机会吗?
  • Mysql高级——索引优化和查询优化(2)
  • SpringMVC的拦截器和JSR303的使用
  • servlet中doGet方法无法读取body中的数据
  • Ubuntu MongoDB账户密码设置
  • 指针进阶(3)
  • 信息检索与数据挖掘 | (二)布尔检索与倒排索引
  • 【学习笔记】EC-Final 2022 K. Magic
  • MySQL数据库笔记