# coding=gbk
from langchain.vectorstores import Chroma
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
import os

# 定义 Embeddings
embeddings = HuggingFaceEmbeddings(model_name="/mnt/sdb/zhaoyuan/rongrunxiang/acge_text_embedding")


# 向量数据库持久化路径
persist_directory = 'data_base/vector_db/chroma'

# 加载数据库
vectordb = Chroma(
    persist_directory=persist_directory,
    embedding_function=embeddings
)

from LLM import ChatGLM_LLM
modelPath = "/mnt/sdb/zhaoyuan/rongrunxiang/glm-4-9b-chat"
llm = ChatGLM_LLM(model_path = modelPath)
llm.predict("你是谁")

from langchain.prompts import PromptTemplate

# 我们所构造的 Prompt 模板
template = """根据用户的问题，从提供的上下文中找到相应的知识，并据此创作一个适合于3-6岁小孩的绘本文本。尽量生动有趣。
{context}
问题: {question}
文本:"""

# 调用 LangChain 的方法来实例化一个 Template 对象，该对象包含了 context 和 question 两个变量，在实际调用时，这两个变量会被检索到的文档片段和用户提问填充
QA_CHAIN_PROMPT = PromptTemplate(input_variables=["context","question"],template=template)

from langchain.chains import RetrievalQA

qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectordb.as_retriever(),return_source_documents=True,chain_type_kwargs={"prompt":QA_CHAIN_PROMPT})

# 检索问答链回答效果
question = "什么是哺乳动物"
result = qa_chain({"query": question})
print("检索问答链回答 question 的结果：")
print(result["result"])

if "source_documents" in result:
    print("\n找到的文档片段：")
    for doc in result["source_documents"]:
        print(doc)  # 这里假设文档片段是直接可打印的，可能需要根据实际情况调整格式


# 仅 LLM 回答效果
result_2 = llm(question)
print("大模型回答 question 的结果：")
print(result_2)
