当前位置: 首页 > article >正文

langchain-ollama的ragflow简单实现

通过langchain和ollama实现简单的ragflow.

前提要准备好ollama服务或者对应的openai服务也一样,包括chat模型和embedding模型。

然后大概是以下几个步骤:
1.加载文件夹中文件列表
2.转embeding.
3.索引后
4.chat or question


import os
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_ollama import OllamaLLM, OllamaEmbeddings
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 加载文档
root_dir = "D:/context_dir"

files = [os.path.join(root_dir, f) for f in os.listdir(root_dir) if f.endswith(".txt")]
files = [x.replace("\\", "/") for x in files]
loaders = [TextLoader(f, encoding="utf-8") for f in files]
docs = []
for loader in loaders:
    docs.extend(loader.load())

# 文本分割
text_splitter = RecursiveCharacterTextSplitter(chunk_size=150, chunk_overlap=20)
documents = text_splitter.split_documents(docs)

# 向量化与索引
embedding = OllamaEmbeddings(model="nomic-embed-text:latest")
vectorstore = Chroma.from_documents(documents, embedding, persist_directory="./vectorstore")

# 定义检索器和提示模板
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
template = """Answer the question based only on the following context:

{context}

Question: {question}"""
prompt = ChatPromptTemplate.from_template(template)
llm = OllamaLLM(model="deepseek-r1:32b")

docs_api = lambda docs: "\n\n".join([d.page_content for d in docs])

# 构建 RAG 链
chain = (
    {"context": retriever | docs_api, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 测试查询
query = "我想问天上有多少颗星星?"
response = chain.invoke(query)
print("RAG 输出结果:", response)



http://www.kler.cn/a/599523.html

相关文章:

  • [Windows] AI智能音频分离软件SpleeterGui v2.9.5.0【官方中文版】
  • 作业12 (2023-05-15 指针概念)
  • 卷积神经网络 - LeNet-5
  • Python+AI助力智能仓储:效率与科技的完美融合
  • Xamarin.Android实现本地化部署DeepSeek的对话功能
  • 【DFS】羌笛何须怨杨柳,春风不度玉门关 - 4. 二叉树中的深搜
  • STM32八股【3】------RAM和片上FLASH
  • System.arraycopy 在音视频处理中的应用
  • TDengine 用户权限管理
  • Elasticsearch:设置向量搜索
  • 【机器学习基础 4】 Pandas库
  • 大模型应用(Java)2025/3/24
  • [Lc18_BFS拓扑排序] 邻接表 | 课程表I II
  • AI Tokenization
  • windows与linux开发板之间设置nfs共享文件
  • 23种设计模式-外观(Facade)设计模式
  • C#中 String类API(函数)
  • 数据结构八股
  • Android11-12-13 替换系统默认壁纸
  • 图解AUTOSAR_CP_LargeDataCOM