☰
第三单元 ——第二课:Embedding 语义检索
2026/10/3 2:36:33 网站建设 项目流程

这次用本地中文 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 的中文模型,时间可能稍长。模型说明

这段程序中:

  • 本地 BGE 模型负责“理解问题和资料的含义”。
  • 向量库负责找出最相近的资料。
  • DeepSeek 负责根据检索结果组织答案。

小练习:把问题改成“商品不满意能退吗?”,观察它能否找到“七天内凭购物小票退货”。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询