机器人租赁平台需求文档怎么写?模块拆解与技术选型复盘
2026/10/3 3:33:20
这次用本地中文 Embedding 模型,把资料转换成向量。即使问题和资料措辞不同,也能按含义查找。
先安装依赖:
.venv\Scripts\activate python -m pip install -U langchain-huggingface sentence-transformers保存为unit3_lesson2_vector_rag.py:
import os from langchain_openai import ChatOpenAI from langchain_huggingface import HuggingFaceEmbeddings from langchain_core.vectorstores import InMemoryVectorStore from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 1. 知识库 texts = [ "星河书店的注册用户购买图书可以享受九折优惠。", "星河书店周一至周五营业到晚上八点。", "星河书店支持七天内凭购物小票退货。", ] # 2. 本地中文 Embedding 模型 embeddings = HuggingFaceEmbeddings( model_name="BAAI/bge-small-zh-v1.5", model_kwargs={"device": "cpu"}, encode_kwargs={"normalize_embeddings": True}, ) # 3. 建立内存向量库 vector_store = InMemoryVectorStore.from_texts( texts=texts, embedding=embeddings, ) retriever = vector_store.as_retriever( search_kwargs={"k": 1} ) # 4. 进行语义检索 question = "会员买书有什么优惠?" found_documents = retriever.invoke(question) context = "\n".join( document.page_content for document in found_documents ) print("检索到的资料:") print(context) # 5. 把资料交给 DeepSeek 回答 model = ChatOpenAI( model="deepseek-v4-flash", base_url="https://api.deepseek.com", api_key=os.environ["DEEPSEEK_API_KEY"], ) prompt = ChatPromptTemplate.from_template(""" 请只根据资料回答问题。 资料中没有答案时,请明确回答不知道。 资料: {context} 问题: {question} """) chain = prompt | model | StrOutputParser() answer = chain.invoke({ "context": context, "question": question, }) print("\n最终回答:") print(answer)运行:
python unit3_lesson2_vector_rag.py第一次运行会从 Hugging Face 下载约 100 MB 的中文模型,时间可能稍长。模型说明
这段程序中:
小练习:把问题改成“商品不满意能退吗?”,观察它能否找到“七天内凭购物小票退货”。