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

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)


相关文章:

  • 车载以太网网络测试 -23【TCPUDP通信示例】
  • 模糊规则激活方法详解(python实例对比)
  • 【Tauri2】001——安装及运行
  • shadcn如何给dialog增加关闭按钮和隐藏右上角关闭按钮
  • 重写ring3 API函数
  • 安宝特应用 | 军工级数据安全赋能保密产品数字化交付
  • 第五章 动态规划
  • Linux文件描述符及重定向
  • 26考研——图_图的存储(6)
  • Python学习笔记(6)
  • 在计算进程D状态持续时间及等IO的时间遇到的一处问题
  • Resource usage
  • Flink 流处理框架的核心特性
  • PostgreSQL 连接数超限问题
  • 流程控制语句
  • 每日总结3.24
  • C/C++蓝桥杯算法真题打卡(Day10)
  • 刷刷刷刷刷
  • iPhone 16如何翻译文档?文档翻译技巧、软件推荐
  • 领域驱动设计(DDD)实践入门
  • 复旦发文缅怀文科杰出教授裘锡圭:曾提出治学需具备三种精神
  • 中国驻美国大使馆发言人就中美经贸高层会谈答记者问
  • 2025江西跨境电子商务发展交流会召开,探索行业发展新趋势
  • 上海:5月8日起5年以上首套个人住房公积金贷款利率下调至2.6%
  • 央行:将支持资本市场两项货币政策工具的额度合并使用
  • 青年与城市共成长,第六届上海创新创业青年50人论坛将举办