30 行跑通 LangChain.js RAG(Node)

部署运行你感兴趣的模型镜像

把你自己的文档喂给大模型,回答就不再“瞎编”。下面这段 30 行代码,用 MemoryVectorStore + OpenAI Embeddings + Chat LLM,一键完成检索增强生成(RAG):

// rag-demo.mjs
import { ChatOpenAI, OpenAIEmbeddings } from "@langchain/openai";
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { RecursiveCharacterTextSplitter } from "langchain/text_splitter";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { RunnableSequence } from "@langchain/core/runnables";
import { Document } from "@langchain/core/documents";

const docs = [
  new Document({ pageContent: "LangChain.js 是用于构建 LLM 应用的 JS/TS 框架,支持 RAG、Agent、工具调用与多环境运行。" }),
  new Document({ pageContent: "它能在浏览器、Node.js 与 Cloudflare Workers 运行,生态成熟、文档完善、社区活跃。" }),
  new Document({ pageContent: "RAG 通过向量检索,把你的业务文档变成模型的外部知识,提高准确性与可控性。" }),
];

const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 200, chunkOverlap: 20 });
const splitDocs = await splitter.splitDocuments(docs);

const vectorStore = await MemoryVectorStore.fromDocuments(
  splitDocs,
  new OpenAIEmbeddings({ model: "text-embedding-3-small" })
);

const retriever = vectorStore.asRetriever({ k: 3 });
const llm = new ChatOpenAI({ model: "gpt-4o-mini", temperature: 0 });

const prompt = ChatPromptTemplate.fromTemplate(
  `你是技术助手,只依据<context>回答用户问题,无法从中获得答案就说“我不知道”。\n<context>\n{context}\n</context>\n问题:{question}`
);

const chain = RunnableSequence.from([
  {
    context: async (input) => (await retriever.getRelevantDocuments(input.question))
      .map(d => d.pageContent).join("\n---\n"),
    question: (input) => input.question
  },
  prompt,
  llm
]);

const res = await chain.invoke({ question: "为什么 LangChain.js 适合 JS 开发者做 RAG?" });
console.log(res.content);

本地运行

# 1) 初始化并安装
npm init -y
npm i langchain @langchain/openai

# 2) 设置环境变量(macOS/Linux)
export OPENAI_API_KEY=你的key

# 3) 运行
node rag-demo.mjs

你会得到: 一段仅依据你提供文档生成的回答,且能复用到更大的私域知识库中(只需把 docs 替换为你的 Markdown、FAQ 或导入的 PDF 文本即可)。


延伸阅读

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

LangChain 中,`langchain.chains` 模块涉及传统 Chain 的构建,是早期版本(如 0.1.x)中广泛使用的核心概念。Chain 是过组合多个组件(如提示模板、语言模型、解析器、检索器等)构建的工作流,用于处理输入并生成输出[^1]。 ### 功能介绍 `langchain.chains` 模块的主要功能是提供各种预定义的链类型,帮助开发者构建复杂的自然语言处理工作流。例如传统的 Chain 有 LLMChain、ConversationalRetrievalChain 等。不过随着 LangChain 0.2.x 和 0.3.x 的发展,传统的 Chain 逐渐被 LangChain Expression Language(LCEL)取代,但了解传统 Chain 仍然重要[^1]。 ### 使用方法 以 `RetrievalQA` 为例说明 `langchain.chains` 模块的使用方法,它可用于自定义如何将检索到的文档传递给语言模型,其应用场景包括知识库问答、文档检索与分析、智能客服等[^2]。 以下是示例代码: ```python # 导入相关模块 from langchain.chains import RetrievalQA from langchain.chains.combine_documents import create_stuff_documents_chain # 假设这里已经有了语言模型 llm、提示模板 PROMPT 和检索器 retriever # 创建文档组合链 combine_docs_chain = create_stuff_documents_chain(llm, PROMPT) # 创建检索链 rag_chain = create_retrieval_chain(retriever, combine_docs_chain) # 定义查询 query = "这里是具体的查询内容" # 使用检索链进问答 response = rag_chain.invoke({"input": query}) ``` ### 总结 `langchain.chains` 模块提供了丰富的工具来构建复杂的自然语言处理工作流,过组合不同的组件,开发者可以根据具体需求定制自己的链,实现如问答系统、文档分析等多种功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值