test.txt 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from langchain_community.document_loaders import PyMuPDFLoader
  2. from langchain_text_splitters import RecursiveCharacterTextSplitter
  3. from langchain_community.embeddings import DashScopeEmbeddings
  4. from langchain_community.vectorstores import Chroma
  5. from langchain_core.prompts import ChatPromptTemplate
  6. from langchain_community.chat_models import ChatTongyi
  7. from langchain_core.output_parsers import StrOutputParser
  8. # ========== 第一步:加载文档 ==========
  9. loader = PyMuPDFLoader("./2222.pdf")
  10. pages = loader.load()
  11. # ========== 第二步:清洗数据(可选,根据文档质量决定)==========
  12. # clean_pages = [clean_pdf_text(page) for page in pages]
  13. # ========== 第三步:分块 ==========
  14. splitter = RecursiveCharacterTextSplitter(
  15. # 分隔符优先级:段落 → 换行 → 句号 → 空格 → 硬切
  16. #separators=["\n\n", "\n", "。", "!", "?", " ", ""],
  17. separators = ["\n\n", "\n", "。", "!", "?", " "],
  18. # 每个块最大 50 字符
  19. chunk_size=100,
  20. # 相邻块重叠 10 字符(chunk_size 的 20%)
  21. chunk_overlap=10,
  22. # 长度计算函数
  23. length_function=len
  24. )
  25. docs = splitter.split_documents(pages)
  26. # ========== 第四步:向量化 + 存入向量库 ==========
  27. vectorstore = Chroma.from_documents(
  28. documents=docs,
  29. embedding=embedding_model,
  30. persist_directory="./test1_db"
  31. )
  32. # ========== 第五步:创建检索器 ==========
  33. retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
  34. # ========== 第六步:提问 ==========
  35. query = "团队管理"
  36. relevant_docs = retriever.invoke(query)
  37. # ========== 第七步:生成回答 ==========
  38. context = "\n\n---\n\n".join([d.page_content for d in relevant_docs])
  39. prompt = ChatPromptTemplate.from_template("""
  40. 你是一个专业的知识库助手。请根据以下上下文回答问题。
  41. **规则:**
  42. - 只基于提供的上下文回答,不要编造
  43. - 如果上下文中没有相关信息,直接说「根据现有资料,我找不到这个问题的答案」
  44. - 回答要简洁直接,引用原文时用引号
  45. **上下文:**
  46. {context}
  47. **问题:**
  48. {question}
  49. """)
  50. llm = ChatOpenAI(
  51. model_name="kimi-k2.6",
  52. api_key=ds_open_key, # 在 platform.deepseek.com 获取
  53. base_url=ds_open_url # DeepSeek API 地址
  54. )
  55. chain = prompt | llm | StrOutputParser()
  56. answer = chain.invoke({"context": context, "question": query})
  57. print(answer)
  58. 根据上下文,团队管理的相关内容如下:
  59. **提高团队绩效的措施:**
  60. - "改进方法提高效率"
  61. - "采用快速跟进"
  62. - "制定奖惩规则,提高团队绩效"
  63. **团队管理中存在的问题:**
  64. - "没有明确各团队成员的职责"
  65. - "没有制定团队基本规则"
  66. - "对于团队冲突没有及时、合理解决"