日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔檢索和LLM集成

更新時間:

本文介紹AnalyticDB PostgreSQL版如何通過Python代碼進行文本檢索及在LangChain中實現(xiàn)問答系統(tǒng)。

文檔檢索

本章節(jié)以使用純文本檢索為例,示例代碼如下:

def query_content(namespace, namespace_password, collection, top_k,
                  content,
                  filter_str: str = None,
                  metrics: str = None,
                  use_full_text_retrieval: bool = None):
      request = gpdb_20160503_models.QueryContentRequest(
          region_id=ADBPG_INSTANCE_REGION,
          dbinstance_id=ADBPG_INSTANCE_ID,
          namespace=namespace,
          namespace_password=namespace_password,
          collection=collection,
          content=content,
          filter=filter_str,
          top_k=top_k,
          metrics=metrics,
          use_full_text_retrieval=use_full_text_retrieval,
      )
      response = get_client().query_content(request)
      print(f"query_content response code: {response.status_code}, body:{response.body}")


if __name__ == '__main__':
    query_content('ns1', 'Ns1password', 'dc1', 10, 'ADBPG是什么?')


# output: body:
# {
#   "Matches": 
#      {
#        "MatchList": 
#          [{
#            "Content": "ADBPG...",
#            "FileName": "test.pdf", 
#            "Id": "9368a9aa-8a26-4200-b84b-cab4e06dbbd4_20"
#            "LoaderMetadata": "\"page\":1.0,\"total_pages\":15.0,\"format\":\"PDF 1.4\",\"title\":\"\",\"author\":\"\",\"subject\":\"\",\"keywords\":\"\",\"creator\":\"Chromium\",\"producer\":\"Skia/PDF m93\",\"creationDate\":\"D:20231213060903+00\\u002700\\u0027\",\"modDate\":\"D:20231213060903+00\\u002700\\u0027\",\"trapped":\"\"}", 
#            "Metadata": {}, 
#            "RetrievalSource": 1, 
#            "Score": 0.7038057130604151
#          },....]
#      }
# }

其中query_content參數(shù)說明如下:

  • namespace:文檔庫所在的Namespace名稱。

  • namespace_password:Namespace的密碼。

  • collection:文檔庫名稱。

  • top_k:返回相似度最高的檢索結(jié)果數(shù)量。

  • content:要檢索的文本內(nèi)容。

  • filter_str:檢索前的過濾語句。

  • metrics:向量距離算法,建議不設(shè)置,會按照創(chuàng)建索引時的算法計算。

  • use_full_text_retrieval:是否使用全文檢索,取值說明如下:

    • true:使用全文檢索。

    • false(默認(rèn)):不使用全文檢索。

返回的檢索結(jié)果列表包含以下信息:

  • Id:切分后的Chunk對應(yīng)的UUID。

  • FileName:文檔名稱。

  • Content:檢索的內(nèi)容,即切分后的一條Chunk。

  • LoaderMetadata:在文檔上傳時產(chǎn)生的Metadata數(shù)據(jù)。

  • Metadata:用戶自定義的Metadata數(shù)據(jù)。

  • RetrievalSource:檢索來源,取值說明如下:

    • 1:向量檢索命中。

    • 2:全文檢索命中。

    • 3:向量檢索和全文檢索雙路命中。

  • Score:按照指定的相似度算法得到的相似度分?jǐn)?shù)。

集成LangChain

LangChain是一套基于大語言模型(LLM)構(gòu)建應(yīng)用的開源框架,可實現(xiàn)通過一整套接口和工具將模型和外部數(shù)據(jù)連接。下文將展示如何將AnalyticDB PostgreSQL版的檢索能力集成到LangChain中實現(xiàn)一個問答系統(tǒng)。

安裝模塊

pip install --upgrade langchain openai tiktoken

構(gòu)建AdbpgRetriever

from langchain_core.retrievers import BaseRetriever
from langchain_core.callbacks import CallbackManagerForRetrieverRun
from langchain_core.documents import Document


class AdbpgRetriever(BaseRetriever):
    namespace: str = None
    namespace_password: str = None
    collection: str = None
    top_k: int = None
    use_full_text_retrieval: bool = None

    def query_content(self, content) -> List[gpdb_20160503_models.QueryContentResponseBodyMatchesMatchList]:
        request = gpdb_20160503_models.QueryContentRequest(
            region_id=ADBPG_INSTANCE_REGION,
            dbinstance_id=ADBPG_INSTANCE_ID,
            namespace=self.namespace,
            namespace_password=self.namespace_password,
            collection=self.collection,
            content=content,
            top_k=self.top_k,
            use_full_text_retrieval=self.use_full_text_retrieval,
        )
        response = get_client().query_content(request)
        return response.body.matches.match_list

    def _get_relevant_documents(
            self, query: str, *, run_manager: CallbackManagerForRetrieverRun
    ) -> List[Document]:
        match_list = self.query_content(query)
        return [Document(page_content=i.content) for i in match_list]

創(chuàng)建Chain

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

OPENAI_API_KEY = "YOUR_OPENAI_API_KEY"
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY

template = """Answer the question based only on the following context:

{context}

Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI()


def format_docs(docs):
    return "\n\n".join([d.page_content for d in docs])

retriever = AdbpgRetriever(namespace='ns1', namespace_password='Ns1password', collection='dc1', top_k=10, use_full_text_retrieval=True)
chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | model
    | StrOutputParser()
)

問答

chain.invoke("AnalyticDB PostgreSQL是什么?")

# 回答:
# AnalyticDB PostgreSQL是阿里云提供的一種云原生在線分析處理(OLAP)服務(wù),它基于開源的PostgreSQL數(shù)據(jù)庫擴展,提供了高性能、高容量的數(shù)據(jù)倉庫解決方案。
# 它結(jié)合了PostgreSQL的靈活性和兼容性以及用于數(shù)據(jù)分析和報告的高并發(fā)和高速查詢能力。
#
# AnalyticDB PostgreSQL特別適合處理大規(guī)模數(shù)據(jù)集,支持實時分析和決策支持,是企業(yè)進行數(shù)據(jù)挖掘、商業(yè)智能(BI)、報告和數(shù)據(jù)可視化的有力工具。
# 作為一種托管服務(wù),它簡化了數(shù)據(jù)倉庫的管理和運維,讓用戶能夠?qū)W⒂跀?shù)據(jù)分析而不是底層基礎(chǔ)設(shè)施。
# 主要特點包括:
# 
# 高性能分析 - 使用列式存儲和大規(guī)模并行處理(MPP)架構(gòu)來快速查詢和分析大量數(shù)據(jù)。
# 易于擴展 - 根據(jù)數(shù)據(jù)量和查詢性能要求,容易橫向和縱向擴展資源。
# 兼容 PostgreSQL - 支持PostgreSQL SQL語言和生態(tài)系統(tǒng)中的大部分工具,便于現(xiàn)有 PostgreSQL 用戶遷移和適應(yīng)。
# 安全和可靠 - 提供數(shù)據(jù)備份、恢復(fù)和加密等功能,確保數(shù)據(jù)的安全性和可靠性。
# 云原生集成 - 與阿里云的其他服務(wù)如數(shù)據(jù)集成、數(shù)據(jù)可視化工具等緊密集成。
# 總之,AnalyticDB PostgreSQL是一個高性能、可擴展的云數(shù)據(jù)倉庫服務(wù),允許企業(yè)在云環(huán)境中進行復(fù)雜的數(shù)據(jù)分析和報告。