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"])
相关推荐
2401_832635581 分钟前
如何使用宝塔面板配置高性能网站防火墙_启用WAF防御规则
jvm·数据库·python
数厘2 分钟前
2.17 sql条件筛选(WHERE、比较运算符、逻辑运算符、BETWEEN、IN、LIKE模糊查询、IS NULL)
数据库·sql
DaqunChen2 分钟前
如何查看对象在数据文件中的分布_DBA_EXTENTS与FILE_ID映射关系
jvm·数据库·python
2301_803538952 分钟前
golang如何实现备忘录模式_golang备忘录模式实现方案
jvm·数据库·python
qq_206901394 分钟前
如何授予DBA权限_GRANT DBA TO赋予超级管理员角色
jvm·数据库·python
2402_854808376 分钟前
Golang怎么实现分布式追踪采样_Golang如何设置采样率控制Trace数据的采集比例【技巧】
jvm·数据库·python
粉嘟小飞妹儿9 分钟前
php怎么使用Ice RPC通信_php如何实现跨语言微服务远程调用
jvm·数据库·python
m0_3776182310 分钟前
C#怎么实现批量邮件发送 C#如何用MailKit批量发送个性化邮件和HTML格式邮件【网络】
jvm·数据库·python
biwenjun99910 分钟前
chatBI构建思路拆解(重点是元数据增强)
java·数据库·人工智能
m0_6403093011 分钟前
宝塔面板如何配置多版本PHP共存_针对不同站点指定环境
jvm·数据库·python