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

Langchain入门:构建一个本地RAG应用

本指南将展示如何通过一个大模型供应商 Ollama 在本地(例如,在您的笔记本电脑上)使用本地嵌入和本地大型语言模型运行

设置

首先,我们需要设置 Ollama。
https://github.com/ollama/ollama

  • 下载 并运行他们的桌面应用程序
  • 从命令行中,从 https://ollama.com/library 获取模型。对于本指南,您需要:
  • 一个通用模型,如 llama3.1:8b,您可以使用类似 ollama pull llama3.1:8b 的命令来获取
  • 一个 文本嵌入模型,如 nomic-embed-text,您可以使用类似 ollama pull nomic-embed-text 的命令来获取
  • 当应用程序运行时,所有模型都自动提供在 localhost:11434 上
  • 请注意,您的模型选择将取决于您的硬件能力

文档加载

现在让我们加载并分割一个示例文档。

我们将使用Lilian Weng关于代理的博客文章作为示例。

from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitterloader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/")
data = loader.load()text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)

接下来,以下步骤将初始化您的向量存储。我们使用nomic-embed-text

from langchain_chroma import Chroma
from langchain_ollama import OllamaEmbeddingslocal_embeddings = OllamaEmbeddings(model="nomic-embed-text")vectorstore = Chroma.from_documents(documents=all_splits, embedding=local_embeddings)

测试相似性搜索是否正常工作:

question = "What are the approaches to Task Decomposition?"
docs = vectorstore.similarity_search(question)
len(docs)  # Number of documents retrieved

在这里插入图片描述
接下来,设置一个模型。我们在这里使用smollm2

from langchain_ollama import ChatOllamamodel = ChatOllama(model="smollm2")
response_message = model.invoke("Simulate a rap battle between Stephen Colbert and John Oliver"
)
print(response_message.content)

在这里插入图片描述

在链中使用

我们可以通过传入检索到的文档和一个简单的提示来创建一个摘要链,使用任一模型。

它使用提供的输入键值格式化提示词模板,并将格式化后的字符串传递给指定模型:

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_template("Summarize the main themes in these retrieved docs: {docs}"
)def format_docs(docs):return "\n\n".join(doc.page_content for doc in docs)chain = {"docs": format_docs} | prompt | model | StrOutputParser()question = "What are the approaches to Task Decomposition?"
docs = vectorstore.similarity_search(question)chain.invoke(docs)

在这里插入图片描述

问答

您还可以使用本地模型和向量存储进行问答。以下是一个使用简单字符串提示的示例

from langchain_core.runnables import RunnablePassthroughRAG_TEMPLATE = """
You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.<context>
{context}
</context>Answer the following question:{question}"""rag_prompt = ChatPromptTemplate.from_template(RAG_TEMPLATE)chain = (RunnablePassthrough().assign(context=lambda input: format_docs(input["context"]))| rag_prompt| model| StrOutputParser()
)question = "What are the approaches to Task Decomposition?"
docs = vectorstore.similarity_search(question)chain.invoke({"context": docs, "question": question})

在这里插入图片描述

带检索的问答

retriever = vectorstore.as_retriever()qa_chain = ({"context": retriever | format_docs, "question": RunnablePassthrough()}| rag_prompt| model| StrOutputParser()
)
qa_chain.invoke(question)

在这里插入图片描述

http://www.dtcms.com/a/324652.html

相关文章:

  • 《Go小技巧易错点100例》第三十七篇
  • 深度解析Linux设备树(DTS):设计原理、实现框架与实例分析
  • 阿里云ECS云服务器临时升级带宽方法
  • JP3-4-MyClub后台前端(三)
  • 胖虎的菜品
  • 一劳永逸解决Mayplotlib绘图中中文字体显示乱码的问题
  • 嵌入式软件分层架构的设计原理与实践验证(有限状态机理解及结构体封装理解)
  • 进度、质量、安全的关系随笔
  • 力扣面试150(52/150)
  • NY155NY170美光固态闪存NY175NY184
  • Zabbix优化指南:提升监控效率与性能
  • Pytorch深度学习框架实战教程-番外篇07-Pytorch优化器详解和实战指南
  • 机器学习——DBSCAN
  • 【人工智能99问】LLaMA的训练过程和推理过程是怎么样的?(22/99)
  • 【GPT入门】第43课 使用LlamaFactory微调Llama3
  • AI大模型提示词工程完全指南:从入门到精通
  • 【自用】JavaSE--IO流(二)--缓冲流、转换流、打印流、数据流、序列化流、IO框架
  • 硬件开发_基于STM32单片机的智能电梯系统
  • 【RocketMQ 生产者和消费者】- ConsumeMessageConcurrentlyService 并发消费消息
  • 自然语言处理入门路线-实践篇
  • AutoCAD 2026 的主要功能
  • 如何选择适合自己电商业务的 API?​
  • 解决RuoYi-Cloud项目ruoyi-system模块启动失败问题以及Naco容器部署问题
  • 【21】OpenCV C++实战篇——OpenCV C++案例实战二十七《角度测量》
  • SpringAI智能航空助手实战<Demo>
  • 《算法导论》第 17 章 - 摊还分析
  • XGBoost 与 GBDT 的比较:改进与性能提升
  • MATLAB绘制水的蒸汽压曲线(Antoine方程)
  • GitHub上为什么采用Gradle编译要多于Maven
  • DBSACN算法的一些应用