检索向量并构建提示词
# 提示词:用户的提问+向量库中检索到的参考资料
# 导入必要的库
from langchain_community.chat_models import ChatTongyi # 通义千问聊天模型
from langchain_core.vectorstores import InMemoryVectorStore # 内存向量存储
from langchain_community.embeddings import DashScopeEmbeddings # DashScope 嵌入模型
from langchain_core.prompts import ChatPromptTemplate # 聊天提示词模板
from langchain_core.output_parsers import StrOutputParser # 字符串输出解析器
# 初始化聊天模型
model = ChatTongyi(model="qwen3-max")
# 创建提示词模板,包含系统提示和用户提示
prompt = ChatPromptTemplate.from_messages([
("system", "以我提供的参考资料为主,简洁和专业的回答用户问题。参考资料:{context}。"),
("user", "用户提问:{input}"),
])
# 初始化内存向量存储,使用 DashScope 嵌入模型
vector_store = InMemoryVectorStore(embedding=DashScopeEmbeddings(model="text-embedding-v4"))
# 向向量库中添加文本数据
vector_store.add_texts(["减肥就是要少吃多练","在减脂期间吃东西很重要,清淡少油控制卡路里摄入并运动起来","跑步是很好的运动哦"])
# 用户输入的问题
input_text = "如何减肥?"
# 从向量库中检索与问题相关的内容,返回前2个最相似的结果
result = vector_store.similarity_search(input_text, 2)
# 构建参考资料字符串
reference_text = "["
for doc in result:
reference_text += doc.page_content
reference_text += "]"
# 定义一个函数,用于打印提示词内容
# 这样可以在链执行过程中看到完整的提示词
# 同时该函数会返回原始提示词,不影响链的执行
def print_prompt(prompt):
print(prompt.to_string())
print("="*20)
return prompt
# 构建处理链:提示词模板 -> 打印提示词 -> 模型 -> 输出解析器
chain = prompt | print_prompt | model | StrOutputParser()
# 执行链,传入用户输入和参考资料
answer = chain.invoke({"input": input_text, "context": reference_text})
# 打印模型的回答
print(answer)
System: 以我提供的参考资料为主,简洁和专业的回答用户问题。参考资料:[减肥就是要少吃多练在减脂期间吃东西很重要,清淡少油控制卡路里摄入并运动起来]。
Human: 用户提问:如何减肥?
====================
减肥的关键在于“少吃多练”:
1. **饮食控制**:选择清淡、少油的食物,严格控制每日卡路里摄入;
2. **坚持运动**:通过规律锻炼增加热量消耗,促进脂肪燃烧。
两者结合,才能有效减脂。
向量存储的实例,通过 add_texts(list[str])方法可以快速添加到向量存储中。
流程:
1.先通过向量存储检索匹配信息
2.将用户提问和匹配信息一同封装到提示词模板中提问模型