41.RAG开发-28-基于向量检索构建提示词

检索向量并构建提示词

# 提示词:用户的提问+向量库中检索到的参考资料

# 导入必要的库
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.将用户提问和匹配信息一同封装到提示词模板中提问模型

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容