介绍
本案例分成两个步骤:
使用嵌入模型从向量数据库搜索相关内容,相关技术:
- DashScopeEmbeddings
- Chroma向量数据库
根据搜索内容、提示词模板类生成答案
- 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)