ollama + langchain + FAISS 向量数据库,给定知识上下文的问答

ollama + langchain + FAISS 给定知识上下文的问答

基于 langchain 框架

1 把给定的文档向量化存储为数据库

2 生成向量查询

3 基于上面查询提供语言模型 promt

4 语言模型生成答案

python 复制代码
from langchain_core.output_parsers import StrOutputParser
from langchain_community.llms import Ollama
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain

# 从url导入知识作为聊天背景上下文
loader = WebBaseLoader("https://docs.smith.langchain.com/user_guide")
#加载
docs = loader.load()

# 文本分词器
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)
# ollama嵌入层
embeddings = OllamaEmbeddings()
# 文档向量化
vector = FAISS.from_documents(documents, embeddings)


# 创建ollama 模型 llama2
llm = Ollama(model="llama2")
output_parser = StrOutputParser()

# 创建提示词模版
prompt = ChatPromptTemplate.from_template(
        """Answer the following question based only on the provided context:
        <context>
        {context}
        </context>
        Question: {input}"""
    )
# 生成chain :   prompt | llm 
document_chain = create_stuff_documents_chain(llm, prompt)

# 向量数据库检索器
retriever = vector.as_retriever()
#向量数据库检索chain :  vector | prompt | llm  
retrieval_chain = create_retrieval_chain(retriever, document_chain)

# 调用上面的 (向量数据库检索chain)
response = retrieval_chain.invoke({"input": "how can langsmith help with testing?"})
# 打印结果
print(response["answer"])
相关推荐
知其然亦知其所以然1 小时前
三分钟接入!SpringAI 玩转 Perplexity 聊天模型实战
后端·spring·langchain
wearegogog1231 小时前
MySQL中实施排序(sorting)及分组(grouping)操作
数据库·mysql
2301_803554521 小时前
MySQL 主从读写分离架构
数据库·mysql·架构
用户9125188677671 小时前
LangChain集成Qwen大模型多种方式分享与最佳实践
langchain
正在走向自律1 小时前
Ubuntu系统下Python连接国产KingbaseES数据库实现增删改查
开发语言·数据库·python·ubuntu·kingbasees·ksycopg2
玲小珑2 小时前
LangChain.js 完全开发手册(六)Vector 向量化技术与语义搜索
前端·langchain·ai编程
没有bug.的程序员2 小时前
Redis 内存管理机制:深度解析与性能优化实践
java·数据库·redis·性能优化·内存管理机制
小蒜学长2 小时前
基于SpringBoot+Vue的健身房管理系统的设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
失散132 小时前
分布式专题——2 深入理解Redis线程模型
java·数据库·redis·分布式·架构
DemonAvenger2 小时前
数据库迁移实战:最小化停机时间的方法与经验分享
数据库·sql·性能优化