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"])
相关推荐
神龙天舞20011 天前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql
丙氨酸長鏈1 天前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
独行侠影a1 天前
APScheduler+Redis 分布式定时任务:解决多实例任务重复执行
数据库·redis·分布式
传说故事1 天前
数据库中一些常用英文单词含义
数据库·oracle
夏贰四1 天前
中小企业搭建业务中台如何控成本?业务中台轻量化落地分几步实施?
数据库·业务中台
林焱RPA1 天前
影刀RPA200篇纪念版:最实用的20个自动化场景大盘点
数据库
名字还没想好☜1 天前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
眼泪划过的星空1 天前
基于 LangChain 框架构建本地化 RAG 系统:无需调用云端 API 的完整实践
人工智能·langchain
每天都要进步哦1 天前
SQL单行函数详解:字符、数字、日期、转换与通用函数全解析
数据库·mysql
不剪发的Tony老师1 天前
VeloxDB:一款免费开源的轻量级数据库管理工具
数据库·sql