作用:
安装:
作用:
安装:
这里使用的是Chroma,需要通过pip安装langchain-chroma库
作用:
典型工具:
from langchain_community.document_loaders import TextLoader # 导入文本
from langchain_text_splitters import RecursiveCharacterTextSplitter # 文本切割
from langchain_ollama import OllamaEmbeddings # 绑定向量模型
from langchain_chroma import Chroma # 数据向量化入库
import os
def saveToVectorDB(filePath):
loader = TextLoader(filePath, encoding="utf-8")
txt = loader.load()
print(txt)
textSpliter = RecursiveCharacterTextSplitter(
separators=["nn", "rn", "n", "。", ".", "!", "!", ",", ",", "、", " ", ""],
chunk_size=150,
chunk_overlap=50,
)
allSpliter = textSpliter.split_documents(txt)
print(allSpliter)
# 绑定向量模型
Embeddings = OllamaEmbeddings(model="autumnzsd/nlp_gte_sentence-embedding_chinese-large:latest")
# 数据向量化入库
persist_dir = "./vector_db"
if os.path.exists(persist_dir):
db = Chroma(
embedding_function=Embeddings,
persist_directory=persist_dir,
collection_metadata={"hnsw:space": "cosine"}
)
db.add_documents(documents=allSpliter)
else:
db = Chroma.from_documents(
documents=allSpliter,
embedding=Embeddings,
persist_directory=persist_dir,
collection_metadata={"hnsw:space": "cosine"}
)
print("count=", db._collection.count())
saveToVectorDB(os.getcwd() + "\docs\断网离线部署方法.txt")
saveToVectorDB(os.getcwd() + "\docs\公司产品手册.md")
saveToVectorDB(os.getcwd() + "\docs\公司员工手册(AI生成).md")
from langchain_ollama import OllamaEmbeddings
from langchain_chroma import Chroma
def queryVectorDB(queryText):
# 绑定向量模型
Embeddings = OllamaEmbeddings(model="autumnzsd/nlp_gte_sentence-embedding_chinese-large:latest")
db = Chroma(persist_directory="./vector_db", embedding_function=Embeddings)
# 查询
# retriever = db.as_retriever(search_kwargs={"k": 3})
retriever = db.as_retriever(search_type="similarity_score_threshold",
search_kwargs={"k": 10, "score_threshold": 0.48})
results = retriever.invoke(queryText)
return "nn".join(doc.page_content for i, doc in enumerate(results, start=1))
from langchain_core.prompts import ChatPromptTemplate # 构建prompt
from langchain_ollama import ChatOllama # 使用ollama进行回答
from langchain_core.output_parsers import StrOutputParser # 输出格式化
import QueryVectorDB
def chat(question):
dbResult = QueryVectorDB.queryVectorDB(question)
# prompt模板
prompt = ChatPromptTemplate.from_template("""
请根据已知信息回答问题
## 已知信息:
{context}
## 问题:
{question}
## 限制:
- 回答时请注意问题和已知信息的相关性。
- 只回答与已知信息相关的问题,拒绝回答无关话题。
- 所输出的内容必须逻辑清晰、有条理。
- 回答内容需基于已知信息,若已知信息中无相关内容,需明确告知用户无对应答案。
""")
llm = ChatOllama(model="deepseek-r1:1.5b") # 绑定大模型
output_parser = StrOutputParser() # 过滤不需要的输出信息
rag_chain = prompt | llm | output_parser # 绑定之前的config
result = rag_chain.invoke({"question": question, "context": dbResult})
return result
result = chat("华为公司员工的工作时间是几点到几点?")
print("deepseek回答1:n", result)
result = chat("请说说华为公司发展历程?")
print("deepseek回答2:n", result)
result = chat("华为公司有哪些保密规定?")
print("deepseek回答3:n", result)
result = chat("华为Mate系统系列手机的特点是什么?")
print("deepseek回答4:n", result)
result = chat("如何使用ollama离线部署deepseek?")
print("deepseek回答5:n", result)
https://gitee.com/s0611163/llm-rag-demo
这是我首次学习大模型的实践,不足之处欢迎大家指正。
参与评论
手机查看
返回顶部