【LangChain】4 基于文檔的問答

對于給定的文檔, 比如從PDF、網頁、公司主頁中提取構建的內部文檔集合,我們可以使用大語言模型來回答關于這些文檔內容的問題,以幫助用戶更有效地獲取和使用他們所需要的信息。這種方式非常有效且靈活地適用于實際應用場景,因為它不僅僅利用大語言模型已有的訓練集數據信息,它還能使用外部信息。

這個過程會涉及LongChain中的其他組件,比如:表征模型(Embedding Models)和向量儲存(Vector Stores)

一、設置API Key

import os
from zhipuai import ZhipuAI
from dotenv import load_dotenv, find_dotenv# 讀取本地/項目的環境變量。# find_dotenv()尋找并定位.env文件的路徑
# load_dotenv()讀取該.env文件,并將其中的環境變量加載到當前的運行環境中  
# 如果你設置的是全局的環境變量,這行代碼則沒有任何作用。
_ = load_dotenv(find_dotenv())# 獲取環境變量 OPENAI_API_KEY
key = "f5cd91f2528fed334b9dfd75015791c3.GuLdvM9tXWrGQnAg"
client = ZhipuAI(api_key = key) 

二、 結合表征模型和向量存儲

解決長文檔問答的方法:利用向量表征(Embeddings)和向量存儲(Vector Store)技術處理長文檔,使語言模型能夠回答涉及全部內容的問題。

文本表征將文本轉換為語義向量,相似內容的向量在空間中也相近。這種特性便于在向量空間中進行文本相似性比較。

將文檔分割為較小的文本塊(chunks),獲取每個塊的文本表征并存入向量數據庫。這種處理方式稱為創建索引(index),目的是解決語言模型單次處理文本長度的限制。

為查詢生成向量表征后,與向量數據庫中的向量進行相似性比對,選出最相關的n個文本塊。將這些文本塊構建為提示輸入語言模型,最終生成答案。

2.1 導入數據

from langchain.chains.retrieval_qa.base import RetrievalQA #檢索QA鏈,在文檔上進行檢索
from langchain_community.chat_models.zhipuai import ChatZhipuAI #openai模型
from langchain.document_loaders import CSVLoader #文檔加載器,采用csv格式存儲
from langchain.vectorstores import DocArrayInMemorySearch #向量存儲
from IPython.display import display, Markdown #在jupyter顯示信息的工具
#創建一個文檔加載器,通過csv格式加載
file = 'data/OutdoorClothingCatalog_1000.csv'
loader = CSVLoader(file_path=file,encoding="utf-8")
docs = loader.load()
docs = docs[:20]

2.2 文本向量表征模型

#使用OpenAIEmbedding類
from langchain_community.embeddings.zhipuai import ZhipuAIEmbeddings# 使用智譜 AI 嵌入模型
embeddings = ZhipuAIEmbeddings(model="embedding-2",  # 智譜 AI 的嵌入模型名稱api_key=key # 替換為你的智譜 AI API Key
)
#因為文檔比較短了,所以這里不需要進行任何分塊,可以直接進行向量表征
#使用初始化OpenAIEmbedding實例上的查詢方法embed_query為文本創建向量表征
embed = embeddings.embed_query("Hi my name is Harrison")#查看得到向量表征的長度
print(len(embed))

2.3 基于向量表征創建向量存儲

# 將剛才創建文本向量表征(embeddings)存儲在向量存儲(vector store)中
# 使用DocArrayInMemorySearch類的from_documents方法來實現
# 該方法接受文檔列表以及向量表征模型作為輸入
#docs過長會報調用參數有誤,現取前20條
db = DocArrayInMemorySearch.from_documents(docs, embeddings)
import langchain
langchain.__version__

2.4 查詢創建的向量存儲

query = "Please suggest a shirt with sunblocking"#使用上面的向量存儲來查找與傳入查詢類似的文本,得到一個相似文檔列表
docs = db.similarity_search(query)

2.5 使用向量儲存回答文檔的相關問題

#基于向量儲存,創建檢索器
retriever = db.as_retriever()
#導入大語言模型, 這里使用默認模型gpt-3.5-turbo會出現504服務器超時,因此使用gpt-3.5-turbo-0301
llm = ChatZhipuAI(model_name="glm-3-turbo",temperature = 0.0, zhipuai_api_key=key) 
#合并獲得的相似文檔內容
qdocs = "".join([docs[i].page_content for i in range(len(docs))])
#將合并的相似文檔內容后加上問題(question)輸入到 `llm.call_as_llm`中
#這里問題是:以Markdown表格的方式列出所有具有防曬功能的襯衫并總結
response = llm.call_as_llm(f"{qdocs} Question: Please list all your \
shirts with sun protection in a table in markdown and summarize each one.") 
display(Markdown(response))

''' 
通過LangChain鏈封裝起來
創建一個檢索QA鏈,對檢索到的文檔進行問題回答,要創建這樣的鏈,我們將傳入幾個不同的東西
1、語言模型,在最后進行文本生成
2、傳入鏈類型,這里使用stuff,將所有文檔塞入上下文并對語言模型進行一次調用
3、傳入一個檢索器
'''qa_stuff = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever, verbose=True
)
query =  "Please list all your shirts with sun protection in a table \
in markdown and summarize each one."#創建一個查詢并在此查詢上運行鏈
response = qa_stuff.run(query)
display(Markdown(response))#使用 display 和 markdown 顯示它

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909371.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909371.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Netty的TCP Server端和Client端解決正向隔離網閘數據透傳問題

背景 因為安裝了正向隔離網閘&#xff0c;導致數據傳輸的時候僅支持TCP協議和UDP協議&#xff0c;因此需要開發TCP Client和Server服務來將數據透傳&#xff0c;當前環境是獲取的數據并將數據轉發到kafka 1.引入依賴 <dependency><groupId>io.netty</groupId>…

Cursor鏈接遠程服務器實現項目部署

想獲取更多高質量的Java技術文章&#xff1f;歡迎訪問Java技術小館官網&#xff0c;持續更新優質內容&#xff0c;助力技術成長 技術小館官網 在軟件開發過程中&#xff0c;遠程服務器開發是一種常見的工作模式。通過遠程連接服務器進行代碼編寫和環境配置&#xff0c;可以充分…

Redis集群模式之Redis Cluster(3)

上篇文章我們講解了Redis Cluster的狀態監測與恢復過程&#xff0c;這篇文章我們來進行Redis Cluster內容的收尾&#xff0c;將其擴容和縮容的過程進行講解&#xff0c;并分析RedisCluster的優缺點。 擴容和縮容 當集群中出現容量限制或者其他一些原因需要擴容時&#xff0c;R…

Cursor ReAct Agent技術架構

一、架構核心思想 “零熵操作交給AI”理念 Cursor通過ReAct模式實現編程中重復性工作的自動化&#xff1a; 零熵操作&#xff1a;機械性任務&#xff08;代碼補全/格式化/重構/語法修復/導入管理&#xff09; Tab-away機制&#xff1a;一鍵接受AI建議&#xff0c;保持思維連續…

國學IP行業實戰洞察:聚焦創客匠人,解鎖創始人IP與知識變現新路徑

國學行業正經歷“文化價值”與“商業變現”的深度融合&#xff0c;2023年市場規模突破千億大關&#xff0c;年增速超 10%。在“IP化數字化”浪潮中&#xff0c;創客匠人作為垂直領域技術服務商&#xff0c;以全鏈路工具矩陣為支點&#xff0c;撬動國學創始人IP從內容生產到商業…

R語言開發入門完整指南

R語言開發入門完整指南 目錄 R語言簡介環境配置包管理基本語法數據類型和結構數據操作統計分析數據可視化編程結構實用技巧學習資源 R語言簡介 R是一種專為統計計算和圖形設計的編程語言&#xff0c;廣泛應用于數據分析、統計建模、機器學習和數據可視化。R語言具有以下特點…

ObservedV2裝飾器和Trace裝飾器

為了對嵌套類對象屬性變化直接觀測&#xff0c;華為提供了ObservedV2和Trace裝飾器。這兩個裝飾器必須搭配使用&#xff0c;單獨使用任何一個都不會起任何作用&#xff1b;在繼承類中也可監測&#xff1b;ObservedV2的類實例目前不支持使用JSON.stringify進行序列化&#xff0c…

6月計算機新書:深度學習、大模型、DeepSeek

六月&#xff0c;這個充滿活力與希望的季節&#xff0c;三本重磅新書《深度學習&#xff1a;基礎與概念》、《MCP極簡開發&#xff1a;輕松打造高效智能體》與《大模型應用開發&#xff1a;RAG實戰課》翩然而至&#xff0c;為我們開啟了一場探索科技前沿的奇妙之旅。一起來看詳…

扁平風格職場商務通用PPT模版分享

扁平風格PPT模版&#xff0c;創意卡通扁平化通用PPT模版&#xff0c;創意扁平化勵志論文答辯PPT模版&#xff0c;卡通職場商務PPT模版&#xff0c;職場培訓&#xff0c;項目策劃&#xff0c;工作總結類PPT模版&#xff0c;互聯網電子商務PPT模版 扁平風格職場商務通用PPT模版分…

jupyter內核崩潰

最近在做用k-mer評估基因組規模的任務&#xff0c;其中一個局部程序&#xff0c;想偷懶&#xff0c;直接在jupyter中跑了下結果&#xff0c;想看看這一小步處理如何&#xff0c;結果沒想到內核崩潰了&#xff01; 這一步我的草稿代碼如下&#xff1a; import pandas as pd imp…

Java企業技術趨勢分析:AI應用的落地實踐與未來展望

Java企業技術趨勢分析&#xff1a;AI應用的落地實踐與未來展望 開篇&#xff1a;技術趨勢與市場需求 在當前快速發展的數字化時代&#xff0c;人工智能&#xff08;AI&#xff09;已經成為推動企業創新和效率提升的關鍵力量。Java作為企業級應用開發的主流語言&#xff0c;正…

每日Prompt:Steve Winter風格插畫

提示詞 世界攝影大師杰作&#xff0c;極簡主義&#xff0c;Steve Winter風格&#xff0c;6只不同顏色的布偶貓圍成一圈&#xff0c;看向鏡頭中心&#xff0c;仰天視角&#xff0c;天空背景&#xff0c;高品質細節&#xff0c;超精細CG&#xff0c;高分辨率&#xff0c;最佳品質…

Vue3 + Element Plus 獲取表格列信息

在 Vue 3 和 Element Plus 中&#xff0c;可以通過以下步驟獲取表格的列信息&#xff1a; 實現步驟&#xff1a; 使用 ref 綁定表格實例 通過表格實例的 store.states.columns 獲取列數據 處理列信息&#xff08;過濾隱藏列、處理嵌套表頭等&#xff09; 示例代碼&#xf…

logger2js - JavaScript日志與調試工具庫

logger2js - JavaScript日志與調試工具庫 logger2js是一個功能強大的前端JavaScript日志與調試工具庫&#xff0c;提供了豐富的日志輸出、性能測試和代碼調試功能。該庫支持配置化引入&#xff0c;包含5種皮膚風格和豐富的API接口&#xff0c;如 a l e r t 增強方法、 alert增…

Stone 3D使用RemoteMesh組件極大的縮小工程文件尺寸

Stone 3D的工程文件tsp默認包含了場景中所有的對象和數據&#xff0c;這樣的好處是tsp可以單獨離線保存&#xff0c;但壞處是tsp文件通常偏大。 解決這個問題的方法是把外部glb模型文件通過RemoteMesh組件來加載。 首先創建一個空實體&#xff0c;然后給該空實體添加RemoteMe…

【深入剖析】攻克 Java 并發的基石:Java 內存模型 (JMM) 原理與實踐指南

0.引言 理解 JMM (Java Memory Model - JMM) 是掌握 Java 并發編程的關鍵&#xff0c;它定義了多線程環境下&#xff0c;線程如何與主內存以及彼此之間交互內存數據。 核心目標&#xff1a; JMM 旨在解決多線程編程中的三個核心問題&#xff1a; 原子性 (Atomicity)&#xf…

【Three.js】初識 Three.js

Threejs介紹 我們開發 webgl 主要是使用 threejs 這個庫&#xff0c;因為 webGL太難用&#xff0c;太復雜&#xff01;但是現代瀏覽器都支持WebGL&#xff0c;這樣我們就不必使用Flash、Java等插件就能在瀏覽器中創建三維圖形。 threejs 它提供-一個很簡單的關于WebGL特性的J…

【經驗總結】ECU休眠后連續發送NM報文3S后ECU網絡才被喚醒問題分析

目錄 前言 正文 1.問題描述 2.問題分析 3.驗證猜想 4.總結 前言 ECU的上下電/休眠喚醒在ECU開發設計過程中最容易出問題且都為嚴重問題,最近在項目開發過程中遇到ECU休眠狀態下連續發送NM報文3S后才能喚醒CAN網絡的問題,解決問題比較順利,但分析過程中涉及到的網絡休…

企業架構框架深入解析:TOGAF、Zachman Framework、FEAF與Gartner EA Framework

執行摘要 企業架構&#xff08;EA&#xff09;是一項至關重要的實踐&#xff0c;它使組織能夠協調其業務戰略、運營流程和技術基礎設施&#xff0c;以實現整體戰略目標。企業架構框架作為結構化的方法論和綜合性工具&#xff0c;旨在管理企業級系統的固有復雜性&#xff0c;提…

數字化動態ID隨機水印和ID跑馬燈實現教育視頻防錄屏

摘要&#xff1a;數字化動態ID隨機水印和ID跑馬燈技術可以有效保護數字教育資源。動態水印將用戶信息隨機顯示在視頻上且不可去除&#xff0c;能追蹤錄屏者并震懾盜版行為。ID跑馬燈則自定義顯示觀看者信息&#xff0c;便于追蹤盜版源頭并提供法律證據。這些技術大幅增加盜版成…