人工智能-LangGraph+ChatUI+DeepSeek API搭建本地智能助手
人工智能-LangGraph+ChatUI+DeepSeek API搭建本地智能助手
- 0 环境说明
- 1 LangGraph
- 2 Agent Chat UI
0 环境说明
| 环境项 | 环境说明 |
|---|---|
| 操作系统 | Windows11 专业版 |
| 硬件信息 | 联想拯救者Y9000P |
| conda | Ananconda |
| Python版本 | 3.12 |
| NodeJs | 18.20.0 |
# 使用conda创建python环境
conda create -n langgraph python=3.12# 激活环境
conda activate langgraph# 下载依赖
pip install langchain-core langgraph -i https://pypi.tuna.tsinghua.edu.cn/simplepip install "langgraph-cli[inmem]" --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
1 LangGraph
下载一个LangGraph Template项目
git clone https://github.com/langchain-ai/new-langgraph-project.git
修改配置文件
cd new-langgraph-project
cp .env.example .env
因为我使用的是DeepSeek API,所以需要配置 DEEPSEEK_API_KEY(上一步创建的DeepSeek API Key)
# To separate your traces from other application
LANGSMITH_PROJECT=new-agent# The following depend on your selected configuration## LLM choice:
# ANTHROPIC_API_KEY=....
# FIREWORKS_API_KEY=...
# OPENAI_API_KEY=...DEEPSEEK_API_KEY=your-deepseek-api-key
修改代码
src/agent/state.py
from __future__ import annotationsfrom typing_extensions import TypedDictfrom dataclasses import dataclass
from langchain_core.messages import AnyMessage
from langgraph.graph.message import add_messages
from typing import Annotated@dataclass
class State(TypedDict):messages: Annotated[list[AnyMessage], add_messages]
src/agent/configuration.py
"""Define the configurable parameters for the agent."""from __future__ import annotationsfrom dataclasses import dataclass, fields
from typing import Optionalfrom langchain_core.runnables import RunnableConfig@dataclass(kw_only=True)
class Configuration:model_name: str = "deepseek-chat"@classmethoddef from_runnable_config(cls, config: Optional[RunnableConfig] = None) -> Configuration:"""Create a Configuration instance from a RunnableConfig object."""configurable = (config.get("configurable") or {}) if config else {}_fields = {f.name for f in fields(cls) if f.init}return cls(**{k: v for k, v in configurable.items() if k in _fields})
src/agent/graph.py
from typing import Any, Dictfrom langchain_core.runnables import RunnableConfig
from langgraph.graph import StateGraph
from langchain_deepseek import ChatDeepSeek
from agent.configuration import Configuration
from agent.state import Statemodel = ChatDeepSeek(model="deepseek-chat",temperature=0,max_tokens=None,timeout=None,max_retries=2,
)def call_model(state, config):response = model.invoke(state["messages"])# We return a list, because this will get added to the existing listreturn {"messages": [response]}# Define a new graph
workflow = StateGraph(State, config_schema=Configuration)# Add the node to the graph
workflow.add_node("call_model", call_model)# Set the entrypoint as `call_model`
workflow.add_edge("__start__", "call_model")# Compile the workflow into an executable graph
graph = workflow.compile()
graph.name = "New Graph" # This defines the custom name in LangSmith
接下来就可以启动项目了:
# 安装依赖
pip install -qU langchain-deepseek -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple# 启动项目
langgraph dev
启动的运行日志如下图:

启动完毕后,会自动弹出浏览器打开langsmith跟踪页面,如下图:

API文档地址(http://127.0.0.1:2024/docs)访问如下图:

2 Agent Chat UI
前端项目基于NodeJS。
- NodeJs版本 ≥ 18.12 我用的版本是 18.20.0
下载agent-chat-ui项目
git clone https://github.com/langchain-ai/agent-chat-ui.gitcd agent-chat-ui# 先安装pnpm
npm install -g pnpm# 安装项目依赖
pnpm install# 启动项目
pnpm dev
安装项目依赖过程如下图:


项目启动日志如下:

启动后可以通过浏览器输入: http://localhost:5173访问,如下图:

点击 Continue 进入对话界面,如下图:


相关文章:
人工智能-LangGraph+ChatUI+DeepSeek API搭建本地智能助手
人工智能-LangGraphChatUIDeepSeek API搭建本地智能助手 0 环境说明1 LangGraph2 Agent Chat UI 0 环境说明 环境项环境说明操作系统Windows11 专业版硬件信息联想拯救者Y9000PcondaAnancondaPython版本3.12NodeJs18.20.0 # 使用conda创建python环境 conda create -n langgra…...
3dmax批量转glb/gltf/fbx/osgb/stl/3ds/dae/obj/skp格式导出转换插件,无需一个个打开max,材质贴图在
3dmax批量转glb/gltf/fbx/osgb/stl/3ds/dae/obj/skp格式导出转换插件,无需一个个打开max,材质贴图在 3dmax批量转glb/gltf/fbx/osgb/stl/3ds/dae/obj/skp格式导出转换插件,无需一个个打开max,材质贴图在...
虚幻5入门
常用操作 运行时,调试相机,按~键,输入ToggleDebugCamera 。进入自由视角 常用节点 gate节点:用于控制该流程通不通,执不执行。Flip Flop节点:反转执行,一次A,一次B。Set Timer by…...
【解决】Edge浏览器硬件加速问题:无法滚动与卡顿的应对方法
Edge浏览器开启硬件加速后无法滚动屏幕,关闭后虽然可以滚动但出现卡顿,可能是由多种原因导致的。以下是一些可能的解决方法: 1. 检查显卡驱动 更新显卡驱动:确保显卡驱动是最新版本。过时的驱动可能会导致硬件加速功能不稳定。回…...
慧通测控:汽车RGB氛围灯功能测试介绍
在汽车内饰不断进化的当下,汽车 RGB 氛围灯已从曾经的小众配置,逐渐成为众多车主提升驾乘体验的热门选择。它宛如车内的 “魔法精灵”,凭借丰富的功能,为单调的车厢披上一层梦幻而温馨的色彩。今天,让我们深入探究汽车…...
QML Book 学习基础6(定位/布局元素)
目录 定位元素 Column Row Grid Flow 布局元素 1.元素填充它的⽗元素。 2.对齐 定位元素 Column Column (列)元素将它的⼦对象通过顶部对⻬的列⽅式进⾏排列。 spacing 属性⽤来设置每个元素之间的间隔⼤⼩ Row Row (⾏)元…...
【SpringCloud】LoadBalance-负载均衡
4. 负载均衡-LoadBalance 4.1 为什么需要负载均衡? 不知道各位心中有没有女神,通常来说一个女神就会有多个舔狗,那这些舔狗呢,就会心甘情愿的帮女神干活,假设女神小美现在有三个舔狗,小美喜欢让这三个舔狗…...
自然语言处理(26:(终章Attention 2.)带Attention的seq2seq的实现)
系列文章目录 终章 1:Attention的结构 终章 2:带Attention的seq2seq的实现 终章 3:Attention的评价 终章 4:关于Attention的其他话题 终章 5:Attention的应用 目录 系列文章目录 前言 一、编码器的实现 二、解…...
Sentinel实战(二)、流控规则之流控阈值类型、流控模式
spring cloud Alibaba-sentinel-流控 流控规则前置环境一、基于阈值类型(QPS/线程数)维度,设置流控规则demo1、流控规则:设置QPS流控规则设置含义测试,观察流控规则设定后的效果demo2、流控规则-设置线程数流控规则设置含义测试,观察流控规则设定后的效果二、基于流控模…...
AI与.NET技术实操系列(四):使用 Semantic Kernel 和 DeepSeek 构建AI应用
1. 引言 在人工智能技术飞速发展的今天,大型语言模型(Large Language Models, LLMs)已成为智能应用开发的核心驱动力。从智能客服到自动化内容生成,LLMs的应用正在深刻改变我们的工作和生活方式。 对于.NET开发者而言,…...
go 使用os复制文件
在 Go 语言中,你可以使用 os 包中的 Open、Create、Copy 函数来复制文件。以下是一个简单的示例: package mainimport ("fmt""io""os" )func copyFile(src, dst string) error {// 打开源文件srcFile, err : os.Open(src…...
嵌入式软件安全设计指南(V2.0)
嵌入式软件安全设计指南(V2.0) 一、安全设计基础原则 1.1 最小特权原则 /* FreeRTOS任务权限控制示例 */ void vTaskSafe(void *pvParameters) {// 限制IO访问权限vTaskRestrictPermissions(portPRIVILEGED_BIT);// 仅允许访问指定内存区域vTaskSetMP…...
HarmonyOS:ComposeTitleBar 组件自学指南
在日常的鸿蒙应用开发工作中,我们常常会面临构建美观且功能实用的用户界面的挑战。而标题栏作为应用界面的重要组成部分,它不仅承载着展示页面关键信息的重任,还能为用户提供便捷的操作入口。最近在参与的一个项目里,我就深深体会…...
25-智慧旅游系统(协同算法)三端
介绍 技术: 基于 B/S 架构 SpringBootMySQLLayuivue 环境: Idea mysql maven jdk1.8 node 管理端功能 首页展示图表:以数据可视化方式展示关键业务数据。 用户管理:管理系统用户,包括查看、编辑等操作。 供应商管…...
数据结构实验1.2: 顺序表的基本运算
文章目录 一,问题描述二,基本要求三,算法分析(1)插入算法(2)删除算法 四,参考程序五,运行效果 一,问题描述 创建一个顺序表,编程实现顺序表的下列…...
Swoole 的 Hyperf 框架和 Go 的 Gin 框架高并发原理以及技术实现对比分析
Swoole 的 Hyperf 框架和 Go 的 Gin 框架虽然都支持高并发,但它们的实现原理、底层机制和适用场景有显著差异。以下从 高并发原理、技术实现区别、优缺点 三个方面详细分析: 一、高并发实现原理 1. Hyperf (PHP Swoole) Hyperf 的高并发能力基于 Swoo…...
【QT】QT中的信号与槽
QT中的信号与槽 一、信号与槽函数的作用二、如何关联信号与槽函数1、借助集成开发环境,右键转到槽函数示例代码: 2、调用connect函数手动关联信号与槽函数 三、扩展四、总结信号与槽的特点1、一个类如果要使用信号以及槽函数,那么该类的定义中…...
使用Python爬虫获取1688商品(按图搜索)接口
一、引言 随着电商行业的不断发展,消费者对商品搜索的效率和准确性要求越来越高。1688作为国内领先的B2B电商平台,提供了丰富的商品搜索功能,其中按图搜索功能(类似于淘宝的拍立淘)极大地提升了用户的购物体验。本文将…...
C/C++ JSON 库综合对比及应用案例(六)
第六部分:C/C JSON 库综合对比及应用案例 📢 快速掌握 JSON!文章 视频双管齐下 🚀 如果你觉得阅读文章太慢,或者更喜欢 边看边学 的方式,不妨直接观看我录制的 JSON 课程视频!🎬 …...
AI Agent拐点已至,2B+2C星辰大海——行业深度报告
大家好,我是吾鳴。 今天吾鳴要给大家分享一份由开源证券出品的关于AI Agent的报告,报告从AI Agent商业化应用、C端B端应用与布局,投资建议等方向介绍2025AI Agent新元年。报告一共28页PDF,文末有完整版下载地址。 内容摘要 2025年…...
【CSS】- 表单控件的 placeholder 如何控制换行显示?
表单控件的 placeholder 如何换行展示? HTML 中,<textarea> 元素的 placeholder 属性默认情况下不支持换行。不过,可以通过以下几种方法来实现换行效果: 模版字符串 模板字符串可以轻松地创建多行字符串,而不…...
Mac 终端命令大全
—目录操作— ꔷ mkdir 创建一个目录 mkdir dirname ꔷ rmdir 删除一个目录 rmdir dirname ꔷ mvdir 移动或重命名一个目录 mvdir dir1 dir2 ꔷ cd 改变当前目录 cd dirname ꔷ pwd 显示当前目录的路径名 pwd ꔷ ls 显示当前目录的内容 ls -la ꔷ dircmp 比较两个目录的内容 d…...
常用天然地震链接
一些常用的天然地震链接汇总: 天然地震数据 - IRIS Wilber 3 DATA: NSF SAGE: Wilber 3: Select Event地震学入门知识 - 地震“学”网站:地震“学”地震数据处理Matlab code - github :The GISMO Toolbox - seismic data analysis in MATLAB…...
node.js、npm相关知识
Node.js 是一个基于 Chrome V8 JavaScript 引擎 构建的开源、跨平台的 JavaScript 运行时环境,主要用于服务器端编程。它允许开发者使用 JavaScript 编写高性能的后端服务,突破了 JavaScript 仅在浏览器中运行的限制。 npm(Node Package Man…...
基于HTML5和CSS3实现3D旋转相册效果
基于HTML5和CSS3实现3D旋转相册效果 这里写目录标题 基于HTML5和CSS3实现3D旋转相册效果项目介绍技术栈核心功能实现原理1. HTML结构2. CSS样式设计2.1 基础样式设置2.2 容器样式2.3 图片样式 3. JavaScript实现4. 交互功能实现4.1 触摸和鼠标拖拽4.2 播放控制 项目亮点技术难点…...
在 Fedora 系统下备份远程 Windows SQL Server 数据库的完整方案
一、环境准备与工具安装 1. 安装 Microsoft SQL Server 命令行工具 Fedora 需安装 mssql-tools 和 ODBC 驱动: # 添加 Microsoft 仓库 sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo# 安装工具包 …...
上市电子制造企业如何实现合规的质量文件管理?
浙江洁美电子科技股份有限公司成立于2001年,是一家专业为片式电子元器件(被动元件、分立器件、集成电路及LED)配套生产电子薄型载带、上下胶带、离型膜、流延膜等产品的国家高新技术企业,主要产品有分切纸带、打孔经带、压孔纸带、上下胶带、塑料载带及其…...
什么是SSE和websocket
以下是 SSE(Server-Sent Events) 和 WebSocket 在大模型(如 ChatGPT)流式输出中的实际例子对比,包含代码实现和场景分析: —### 1. SSE(Server-Sent Events)#### 场景 大模型生成文本…...
QT操作Word文档
虽然 Qt 没有原生支持 Word 文档操作的模块,但可以通过以下几种方式实现 Word 文档的读写和操作: 1、使用 ActiveX/COM (仅限 Windows) 2、使用第三方库 (跨平台),比如: libopendocument等。 3、直接操作 DOCX 文件 (DOCX 是 ZIP+XML) 4、使用 HTML 作为中介格式 一、使…...
Redis 源码硬核解析系列专题 - 第一篇:Redis源码入门与整体架构
1. 引言 Redis作为一个高性能的内存键值数据库,其源码以简洁高效著称。通过解析Redis源码,我们可以深入理解其单线程模型、事件驱动机制以及模块化设计的精髓。本篇将从Redis的源码目录结构入手,剖析其整体架构,并聚焦启动流程和事件循环的核心实现。 2. Redis源码目录结构…...
