from langchain_community.document_loaders import PyMuPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatTongyi
from langchain_core.output_parsers import StrOutputParser

# ========== һĵ ==========
loader = PyMuPDFLoader("./2222.pdf")
pages = loader.load()

# ========== ڶϴݣѡĵ==========
# clean_pages = [clean_pdf_text(page) for page in pages]

# ========== ֿ ==========
splitter = RecursiveCharacterTextSplitter(
    # ָȼ      ո  Ӳ
    #separators=["\n\n", "\n", "", "", "", " ", ""],
    separators = ["\n\n", "\n", "", "", "", " "],
    # ÿ 50 ַ
    chunk_size=100,
    # ڿص 10 ַchunk_size  20%
    chunk_overlap=10,
    # ȼ㺯
    length_function=len
)
docs = splitter.split_documents(pages)

# ========== Ĳ +  ==========

vectorstore = Chroma.from_documents(
    documents=docs,
    embedding=embedding_model,
    persist_directory="./test1_db"
)

# ========== 岽 ==========
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

# ==========  ==========
query = "Ŷӹ"
relevant_docs = retriever.invoke(query)

# ========== ߲ɻش ==========
context = "\n\n---\n\n".join([d.page_content for d in relevant_docs])

prompt = ChatPromptTemplate.from_template("""
һרҵ֪ʶ֡Ļش⡣

****
- ֻṩĻش𣬲Ҫ
- ûϢֱ˵ϣҲĴ𰸡
- شҪֱӣԭʱ

**ģ**
{context}

**⣺**
{question}
""")

llm = ChatOpenAI(
    model_name="kimi-k2.6",
    api_key=ds_open_key,                    #  platform.deepseek.com ȡ
    base_url=ds_open_url     # DeepSeek API ַ
)
chain = prompt | llm | StrOutputParser()

answer = chain.invoke({"context": context, "question": query})
print(answer)

ģŶӹ£

**ŶӼЧĴʩ**
- "ĽЧ"
- "ÿٸ"
- "ƶ͹ŶӼЧ"

**Ŷӹдڵ⣺**
- "ûȷŶӳԱְ"
- "ûƶŶӻ"
- "Ŷӳͻûмʱ"