LangGraph+vLLM:PostgreSQL内存职业顾问
使用LangGraph构建的智能职业过渡顾问,具有由PostgreSQL和vLLM推理支持的生产就绪持久内存。
概述
该项目演示了一个具有对话记忆的有状态AI代理:
- PostgreSQL持久性 -使用AsyncPostgresSaver进行生产就绪对话存储
- 多回合推理 -在会话切换和服务器重启过程中保持上下文
- 网络研究工具 -通过Firecrawl MCP搜索和抓取功能
- 实时API+聊天界面 -内置LangGraph Studio界面
- 生产准备就绪 -vLLM后端用于快速推理+PostgreSQL用于可扩展持久性
关键技术
- LangGraph -内置内存的状态机框架
- PostgreSQL -生产级持久对话存储
- AsyncPostgresSaver -带连接池的异步检查指针
- vLLM -GPU上的快速LLM推理(比HuggingFace快4-24x)
- Hermes-2-Pro-Mistral-7B -7B参数模型,具有出色的工具调用能力
- Firecrawl MCP -通过模型上下文协议进行生产网络抓取
- LangGraph 界面 -内置API服务器和Studio UI
建筑
User Query → LangGraph Agent → [Memory Check] → vLLM + Tools → Response
↓
PostgreSQL Checkpointer
(Persistent Memory)
↓
Docker Container
(postgres:16-alpine)主要特点:
- 有状态的对话 -每条消息都保存在PostgreSQL中
- 基于线程的内存 -具有单独内存的多个并发对话
- 跨重启持续 -会话历史记录在服务器重启后仍然有效
- 多回合推理 -Agent记住前几回合的上下文
- 工具集成 -通过Firecrawl MCP进行网络搜索和抓取
- 自动创建表格 -首次运行时自动创建的数据库架构
快速开始
1.克隆存储库
git clone
cd langchain-vllm2.启动PostgreSQL数据库
# Start PostgreSQL in Docker
docker-compose up -d
# Verify it's running
docker-compose ps这将创建一个PostgreSQL 16容器,其中包含:
- 数据库:
langchain_db - 用户:
langchain - 端口:
5432 - 持续体积:
postgres_data
3.安装依赖项
uv pip install -r requirements.txt或者使用pip:
pip install -r requirements.txt4.配置环境
cp .env.example .env
# Edit .env with your API keys, RunPod endpoint, and PostgreSQL credentials所需变量:
FIRECRAWL_API_KEY-从 firecrawl.devRUNPOD_ENDPOINT_URL-您的RunPod vLLM端点RUNPOD_API_KEY-您的RunPod API密钥POSTGRES_PASSWORD-设置为langchain_dev_password(匹配docker compose.yml)
5.在RunPod上部署vLLM
选项A:使用预构建的Docker镜像(最快):
- 转到RunPod控制台→ 部署Pod
- 选择GPU(建议使用A4000或更高版本)
- 在“容器图像”下,输入:
vrknetha/langchain-vllm-workshop:latest - 设置容器磁盘:50GB+
- 暴露端口:8000
- 部署并等待启动
- 将端点URL复制到
.env
选项B:构建自定义映像:
# Build vLLM Docker image
docker build -f Dockerfile.vllm -t your-dockerhub-username/vllm-hermes:latest .
# Push to Docker Hub
docker push your-dockerhub-username/vllm-hermes:latest
# Deploy on RunPod using your custom image看 部署.md 详细说明。
6.启动LangGraph服务器
用于开发(热重新加载,内存中):
langgraph dev --port 2024
# Uses in-memory storage, conversation history lost on restart对于生产环境(PostgreSQL持久性):
langgraph up --port 2024
# Reads POSTGRES_URI from .env automatically
# Conversation history persists across restarts替代方案(显式postgres-uri):
langgraph up --port 2024 --postgres-uri "postgresql://langchain:langchain_dev_password@localhost:5432/langchain_db"这两种模式现在都使用PostgreSQL进行持久化。服务器将在以下时间启动:
- API: http://localhost:2024
- 工作室UI: http://localhost:2024(内置聊天界面)
在第一次运行时,代理会自动创建PostgreSQL表:
checkpoints-对话状态快照checkpoint_blobs-大型二进制数据checkpoint_writes-检查点写入操作
🎯 演示:职业转型顾问
该项目展示了 职业转型顾问 -一个引人注目的演示,通过一个真实的用例演示了LangGraph v1的内存和状态管理功能。
它做什么
职业顾问通过以下方式帮助专业人士进行职业转型:
- 理解上下文:通过对话捕捉背景、技能和目标
- 实时研究:使用Firecrawl搜索就业市场、要求和学习资源
- 技能差距分析:将当前技能与目标角色要求进行比较
- 个性化指导:创建量身定制的学习路径和工作目标
- 持久存储器:在一个线程内的多个对话回合中保持完整的上下文
为什么它很有吸引力
- 普遍呼吁 -每个人都在考虑职业成长和技能发展
- 情感共鸣 -职业焦虑和不确定性有着广泛的相关性
- 多转弯智能 -展示持久对话记忆的力量
- 实用价值 -解决人们每天面临的实际问题
- 技术展示 -优雅地演示了LangGraph v1的所有关键功能
演示脚本
看 DEMO_CAREER.md 完整的10分钟演示脚本,包括:
- 演示前检查表
- 具有预期行为的逐段对话流
- 每一步要强调什么
- LangGraph Studio用户界面演练
- 线程隔离演示
- 常见问题排查
- 问答准备
快速演示示例
Turn 1: "I'm Sarah, a Python developer with 5 years experience, wanting to transition into AI/ML"
→ Agent: Acknowledges background, begins building relationship
Turn 2: "What skills am I missing?"
→ Agent: Searches job requirements, analyzes skills gap, leverages Python as foundation
Turn 3: "Find me courses for those skills"
→ Agent: Remembers specific skills from Turn 2, finds relevant learning resources
Turn 4: "What jobs can I target in 6 months?"
→ Agent: Synthesizes full conversation context, suggests realistic targets
Thread Isolation Test:
→ New thread: "What's my name?" → "I don't have that information"
→ Original thread: "What's my name?" → "You're Sarah, the Python developer..."演示的主要功能
- 消息状态 -LangGraph v1的预构建状态类(不需要自定义类)
- 工具_条件 -自动布线(替换18行自定义逻辑)
- 平台持久性 -由LangGraph CLI管理的基于线程的内存
- 异步模式 -使用ainvoke()提高I/O性能
- MCP集成 -Firecrawl的标准化工具协议
替代演示:短期记忆研究助理
有关更简单、通用的研究演示,请参阅下文。
对话流程示例
以下是如何演示内存功能:
第1回合:设置上下文
User: "My name is Alex and I'm interested in electric vehicles"
Agent: "Nice to meet you, Alex! I'd be happy to help you learn about electric vehicles..."第二回合:跟进(使用记忆)
User: "What are the top 3 options?"
Agent: [Searches for electric vehicles, remembers Alex is interested in EVs]第三回合:深入学习(使用完整上下文)
User: "Which one is best for long road trips?"
Agent: [Analyzes previous search results, considers Alex's needs, provides recommendation]第4回合:新螺纹测试
User: [In a new thread] "What's my name?"
Agent: "I don't have that information yet..."
[Demonstrates thread isolation - each conversation has separate memory]演示内存功能
- 对话连续性 -特工记得讨论的内容
- 线程隔离 -每个对话线程都有单独的内存
- 持久性 -内存在服务器重启后仍然存在(
langgraph up) - 状态检测 -在Studio UI中查看完整的对话历史记录
你将学到什么
- LangGraph状态机 -使用StateGraph构建代理
- 检查点 -基于SQLite的持久内存
- 多回合推理 -上下文感知对话
- MCP集成 -直接使用工具进行网络搜索/抓取
- 生产部署 -带有LangGraph CLI的API+用户界面
需求
- Python 3.10+
- Docker和Docker Compose(用于PostgreSQL数据库)
- Node.js(适用于npx/Firecrawl MCP)
- Firecrawl API密钥(免费获取: firecrawl.dev)
- 拥有GPU积分的RunPod帐户
了解记忆模式
开发模式: langgraph dev
- 记忆:内存存储(langgraph_runtime_inmem)
- 持久性:非持久性-重新启动时对话历史记录丢失
- 重新加载:代码更改时热重新加载
- 用例:快速开发迭代
生产模式: langgraph up --postgres-uri
- 记忆:PostgreSQL检查指针
- 持久性:服务器重启后仍能存活(存储在PostgreSQL中)
- 重新加载:需要重新生成以进行代码更改
- 用例:开发和测试
- 优点:快速迭代+持久内存
- 需要:PostgreSQL正在运行(
docker-compose up -d)
生产模式: langgraph up
- 记忆:PostgreSQL检查指针
- 持久性:PostgreSQL中的完全生产持久性
- 重新加载:需要手动重新启动
- 用例:生产部署和演示
- 优点:生产就绪,具有持久内存
- 需要:PostgreSQL正在运行(
docker-compose up -d)
独立模式: python src/agent.py
- 记忆:PostgreSQL检查指针
- 持久性:PostgreSQL数据库
- 用例:测试代理初始化和表创建
- 备注:此模式初始化代理并显示配置信息
- 需要:PostgreSQL正在运行(
docker-compose up -d)
数据库管理
查看对话历史记录:
docker exec -it langchain-postgres psql -U langchain -d langchain_db
# List tables
\dt
# View checkpoints
SELECT thread_id, checkpoint_id FROM checkpoints;
# Exit
\q重置所有对话:
docker-compose down -v # Removes volumes
docker-compose up -d # Fresh database停止PostgreSQL:
docker-compose down # Data persists in volume项目结构
langchain-vllm/
├── src/
│ └── career_advisor/ # LangGraph agent package
│ ├── __init__.py # Package exports
│ ├── config.py # Configuration management
│ ├── checkpointer.py # PostgreSQL persistence
│ ├── tools.py # MCP tools setup
│ ├── prompts.py # System prompts
│ ├── nodes.py # Graph nodes
│ └── agent.py # Graph construction
├── docker-compose.yml # PostgreSQL database configuration
├── langgraph.json # LangGraph CLI configuration
├── requirements.txt # Python dependencies (includes postgres libs)
├── .env # Environment variables (API keys + DB config)
├── start_vllm.sh # vLLM startup script
└── README.md # This file故障排除
PostgreSQL问题
“POSTGRES_PASSWORD环境变量是必需的”
- 复制
.env.example到.env - 集
POSTGRES_PASSWORD=langchain_dev_password
拒绝连接到本地主机:5432
- 启动PostgreSQL:
docker-compose up -d - 检查状态:
docker-compose ps - 查看日志:
docker-compose logs -f postgres
关系“检查点”不存在
- 表在第一次运行时通过自动创建
checkpointer.setup() - 验证代理初始化成功
- 检查PostgreSQL权限问题的日志
记忆不持久?
- PostgreSQL必须正在运行(
docker-compose up -d) - 验证相同
thread_id跨请求使用 - 检查PostgreSQL表是否存在:
docker exec -it langchain-postgres psql -U langchain -d langchain_db -c "\dt"
vLLM问题
模型加载缓慢?
- 第一个请求需要2-3分钟才能将模型加载到vLLM中
- 在演示之前,使用测试查询对端点进行预热
“模型不存在”404错误
- 检查中的型号名称是否匹配
src/agent.pyvLLM服务器 - 验证vLLM是否已完成加载(2-3分钟)
- 测试:
curl https://your-pod-8000.proxy.runpod.net/v1/models
MCP/工具问题
Firecrawl搜索错误?
- 如果您看到“源参数验证失败”,这是意料之中的——系统提示指示LLM避免使用
sources参数 - 验证
FIRECRAWL_API_KEY已设置.env - 检查是否安装了Node.js(需要
npx) - 确保
npx -y firecrawl-mcp可以手动运行
工具不工作?
- 验证是否在中设置了所有必需的环境变量
.env - 检查是否安装了Node.js(需要
npx) - 查看服务器日志,查看是否有任何MCP连接错误
服务器问题
服务器未启动?
- 验证已安装的所有依赖项:
uv pip install -r requirements.txt - 确保PostgreSQL正在运行:
docker-compose ps - 检查端口8123是否尚未使用
- 查找控制台输出中的错误
资源
许可证
MIT许可证-有关详细信息,请参阅许可证文件
贡献
欢迎投稿!请打开问题或PR。
致谢
- LangChain团队为优秀框架
- vLLM团队致力于快速推理
- Hermes-2-Pro-Mistral-7B的名词研究
- Firecrawl用于生产就绪的web抓取
