|
|
@@ -0,0 +1,83 @@
|
|
|
+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)
|
|
|
+
|
|
|
+根据上下文,团队管理的相关内容如下:
|
|
|
+
|
|
|
+**提高团队绩效的措施:**
|
|
|
+- "改进方法提高效率"
|
|
|
+- "采用快速跟进"
|
|
|
+- "制定奖惩规则,提高团队绩效"
|
|
|
+
|
|
|
+**团队管理中存在的问题:**
|
|
|
+- "没有明确各团队成员的职责"
|
|
|
+- "没有制定团队基本规则"
|
|
|
+- "对于团队冲突没有及时、合理解决"
|