基于 LangChain 与 Ollama 构建本地 LLM 应用实战
前言
随着大语言模型(LLM)技术的快速发展,本地化部署模型已成为保护数据隐私和降低 API 成本的重要方案。LangChain 作为连接大模型与应用框架的桥梁,配合 Ollama 提供的轻量级本地推理服务,能够高效搭建私有化的 AI 应用。
本文将详细介绍如何使用 LangChain 结合 Ollama 的 Llama3 模型,通过 NestJS 后端和 React 前端,实现一个支持流式输出的本地聊天机器人。
环境准备
在开始之前,请确保您的开发环境满足以下要求:
- Node.js: 推荐版本 v18 或更高。
- NestJS CLI: 用于快速生成项目结构。
- Ollama: 已安装并运行本地服务。
- React: 前端构建工具(如 Vite 或 Create React App)。
安装 Ollama
Ollama 提供了便捷的模型管理方式。您有两种主要安装途径:
- 官网下载:访问 Ollama 官网下载对应操作系统的安装包。
- Docker 镜像:使用 Docker Hub 中的官方镜像包。
本文以直接安装为例。安装完成后,启动服务:
ollama serve
启动成功后,Ollama 默认监听 11434 端口。此时可以通过终端拉取并运行模型,例如 Llama3:
ollama run llama3
执行该命令后,终端将进入交互模式,验证模型是否正常工作。
后端实现 (NestJS)
后端负责处理业务逻辑、调用大模型接口以及通过 SSE (Server-Sent Events) 协议向客户端推送流式数据。
1. 初始化项目
使用 NestJS 创建新项目并安装 LangChain 社区版依赖:
npm install @langchain/community
# 注意:推荐使用 npm 或 yarn 安装,pnpm 可能存在兼容性问题
2. 核心代码逻辑
我们需要创建一个 Controller 来处理请求,并使用 RxJS 的 Subject 来管理 SSE 流。
import { Controller, Post, Body, Sse, Header } from '@nestjs/common';
import { Observable, Subject } from 'rxjs';
import { Ollama } from '@langchain/community/llms/ollama';
{
: ;
}
()
{
messageSubject = <>();
: ;
() {
. = ({
: ,
: ,
});
}
()
(, )
(): <> {
..();
}
()
(() : { : }): <> {
{
stream = ..(body.);
( str stream) {
..({
: .({ : str, : }),
} );
}
..({
: .({ : , : }),
} );
} (error) {
.(, error);
..({
: .({ : , : }),
} );
}
}
}


