LangChain教程:使用嵌入模型从向量数据库搜索相关内容,并根据内容、提示词模板类生成答案

介绍

本案例分成两个步骤:

  1. 使用嵌入模型从向量数据库搜索相关内容,相关技术:

    • DashScopeEmbeddings
    • Chroma向量数据库
  2. 根据搜索内容、提示词模板类生成答案

    • ChatPromptTemplate
    • ChatTongyi
from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from dotenv import load_dotenv

# 加载环境变量(需配置 OPENAI_API_KEY)
load_dotenv()

# ----根据问题搜索向量-----------------------
print("----根据问题搜索向量-----------------------")

# 初始化大模型
embeddings = DashScopeEmbeddings(model="text-embedding-v2")

# 创建数据库对象
db = Chroma(
    embedding_function=embeddings,
    persist_directory="./my_chroma_db",
    collection_name="test_collection"
)

# 用户提问的问题
# question = "ChromaDB"
question = "25年报告概述"

results = db.similarity_search(
    query=question,  # 搜索内容
    k=2)

# 搜索出来的内容
search_content = ""
for item in results:
    print(item.page_content)
    search_content += item.page_content


# -------根据搜索结果,生成答案--------------
print("\n\n-------根据搜索结果,生成答案--------------\n\n")

# 定义模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "根据我提供的资料,简洁回答用户问题,资料室:{content}"),
    ("human", "用户提问:{quest}")
])


def print_prompt(prompt):
    """
    打印提示词
    :param prompt:
    :return:
    """
    print("-------提示词:\n")
    print(prompt.to_string())
    print("-------提示词结束\n")
    return prompt


# 初始化模型
chat = ChatTongyi(model="qwen3-max")

chain = prompt | print_prompt | chat | StrOutputParser()

# 调用链
res = chain.invoke({
    "quest": question,
    "content": search_content
})

print("结果:", res)

原文出处:/show_1GW2tDHp3AXH.html