在大模型应用开发中,状态管理对话追踪 是不可忽视的重要能力,尤其在需要保存上下文、重放对话或进行异步处理时尤为关键。

今天我们来演示如何用 LangChain + OpenAI 的 GPT 模型 + PostgreSQL 搭建一个 具备消息存储能力 的聊天机器人。

技术栈

  • LangChain(LangGraph 模块)

  • OpenAI GPT-4o-mini(或任意兼容模型)

  • PostgreSQL(用于状态和消息持久化)

  • Python 3.10+

目标功能

我们将实现如下能力:
  • 构建一个简单但可扩展的对话工作流

  • 用 PostgreSQL 存储多轮对话状态

  • 支持根据 thread_id 恢复上下文

  • 模型自动裁剪历史消息,保证 Token 数不超限

  • 模拟一个“卡通语气”的 AI 角色进行回复

目录结构

.
├── llm_env.py # 初始化大模型
├── chatbot_base_on_postgres_demo.py # 主对话逻辑

初始化 LLM 环境(llm_env.py)

我们用 langchain.chat_models.init_chat_model 来加载 GPT-4o-mini:

from langchain.chat_models import init_chat_model

llm = init_chat_model("gpt-4o-mini", model_provider="openai")
你可以替换为任意你有权限使用的模型,比如 gpt-3.5-turbo, gpt-4, claude, mistral,甚至本地模型如 Ollama。

第二步:定义对话流程(chatbot_base_on_postgres_demo.py)

导入依赖
from langgraph.graph import START, MessagesState, StateGraph
from langgraph.graph.message import add_messages
from langgraph.checkpoint.postgres import PostgresSaver
from langchain_core.messages import HumanMessage, BaseMessage, trim_messages
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
状态定义与裁剪器(Token 管理)

我们定义对话状态,并用 LangChain 的 trim_messages 限制最大 token 数量,避免模型请求失败:

trimmer = trim_messages(
max_tokens=65,
strategy="last",
token_counter=model,
include_system=True,
allow_partial=False,
start_on="human",
)
Prompt 模板
prompt_template = ChatPromptTemplate.from_messages(
[
("system", "你说话像个卡通人物。尽你所能按照语言{language}回答所有问题。"),
MessagesPlaceholder(variable_name="messages"),
]
)
定义状态结构
class State(TypedDict):
messages: Annotated[list[BaseMessage], add_messages]
language: str

工作流定义

我们用 LangGraph 定义一个非常简单的图:

workflow = StateGraph(state_schema=State)

def call_model(state: State):
trimmed = trimmer.invoke(state["messages"])
prompt = prompt_template.invoke({
"messages": trimmed,
"language": state["language"]
})
response = model.invoke(prompt)
return {"messages": [response]} workflow.add_edge(START, "call_model")
workflow.add_node("call_model", call_model)

第三步:接入 PostgreSQL 存储状态

DB_URI = "postgresql://postgres:123456@localhost:5432/langchaindemo?sslmode=disable"
with PostgresSaver.from_conn_string(DB_URI) as checkpointer:
checkpointer.setup() app = workflow.compile(checkpointer=checkpointer)

LangGraph 的 PostgresSaver 会在数据库中为每个 thread_id 维护一份完整的状态记录(状态压缩 + 消息追踪),非常适合审计和调试。

启动聊天循环

input_thread_id = input("输入 thread_id: ")
config = {"configurable": {"thread_id": input_thread_id}} while True:
query = input("你: ")
if query.strip().lower() == "exit":
break
input_messages = [HumanMessage(query)]
output = app.invoke({"messages": input_messages, "language": "中文"}, config)
for message in output["messages"]:
print(f"{message.type}: {message.content}")

你可以使用同一个 thread_id 多次调用 app.invoke,来恢复之前的上下文继续对话。

效果展示

输入 thread_id: abc123
你: 今天天气怎么样?
ai: 哇哦,阳光明媚的天气最适合出去玩啦!️
你: 你是谁呀?
ai: 我是你的超级可爱聊天小助手,随时准备出发冒险!

总结

这只是 LangGraph 的一个入门示例,但它的潜力远不止如此。你可以:

  • 添加更多节点(如知识检索、函数调用、代码执行等)

  • 与前端(如 Gradio / Streamlit)结合打造完整应用

  • 利用数据库管理多用户会话历史

AI大模型应用开发入门-LangChain开发聊天机器人ChatBot的更多相关文章

  1. AI大模型学习了解

    # 百度文心 上线时间:2019年3月 官方介绍:https://wenxin.baidu.com/ 发布地点: 参考资料: 2600亿!全球最大中文单体模型鹏城-百度·文心发布 # 华为盘古 上线时 ...

  2. [嵌入式开发入门]4412开发板从零建立Linux最小系统

    本文转自iTOP-4412开发板实战教程书籍 http://www.topeetboard.com iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统. 最小L ...

  3. spring boot + vue + element-ui全栈开发入门——windows开发环境

     一.node.js开发环境 windows系统,去网站https://nodejs.org/en/download/,下载对应的安装程序,并安装Windows Installer (.msi) 接下 ...

  4. 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅

    摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...

  5. 【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  6. spring boot + vue + element-ui全栈开发入门——开篇

    最近经常看到很多java程序员朋友还在使用Spring 3.x,Spring MVC(struts),JSP.jQuery等这样传统技术.其实,我并不认为这些传统技术不好,而我想表达的是,技术的新旧程 ...

  7. spring boot + vue + element-ui全栈开发入门——基于Electron桌面应用开发

     前言 Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库. Electron通过将Chromium和Node.js合并到同一个运行时环 ...

  8. spring boot + vue + element-ui全栈开发入门

    今天想弄弄element-ui  然后就在网上找了个例子 感觉还是可以用的  第一步是完成了  果断 拿过来  放到我这里这  下面直接是连接  点进去 就可以用啊 本想着不用vue   直接导入连接 ...

  9. Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  10. 好饭不怕晚,Google基于人工智能AI大语言对话模型Bard测试和API调用(Python3.10)

    谷歌(Google)作为开源过著名深度学习框架Tensorflow的超级大厂,是人工智能领域一股不可忽视的中坚力量,旗下新产品Bard已经公布测试了一段时间,毁誉参半,很多人把Google的Bard和 ...

随机推荐

  1. go语言中iota和左移<< 右移<<

    iota 特殊常量 在go语言中iota比较特殊,是一个被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字就会自动加1 p ...

  2. AI与.NET技术实操系列(七):使用Emgu CV进行计算机视觉操作

    引言 计算机视觉(Computer Vision, CV)是人工智能领域中最为引人注目的分支之一.从自动驾驶汽车到医疗影像分析,从智能安防系统到虚拟现实体验,计算机视觉的应用无处不在,深刻地改变着我们 ...

  3. Joker 智能开发平台:低代码开发的革新力量

    在软件开发领域,开发效率与灵活性始终是开发者们追求的核心目标.随着技术的迅猛发展,低代码开发平台逐渐成为行业焦点,而 Joker 智能开发平台凭借其卓越的性能和创新的功能,脱颖而出,为开发者们带来了前 ...

  4. Git安装与Git GUI的使用

    一.下载安装包 官网:https://git-scm.com/downloads(下载慢) 或 https://pc.qq.com/search.html#!keyword=git,本人使用的是Git ...

  5. DevOps - DevOps基础概念梳理

    目录 DevOps DevOps的好处与价值 可能的几个关注点 DevOps能力环 DevOps与持续集成.持续交付 一个完整的过程 典型的CICD流水线过程 DevOps黄金思维圈 初见 一些图示 ...

  6. Chrome 133 版本开发者工具(DevTools)更新内容

    Chrome 133 版本开发者工具(DevTools)更新内容 一.持久化的 AI 聊天记录 AI 助手面板会在本地持久化聊天记录,即使重新加载 DevTools 或 Chrome,也可以查看之前与 ...

  7. BUUCTF---RSA4

    题目 点击查看代码 N = 33131032421200003002021431224423222240014241042341310444114020300324300210433321420203 ...

  8. ZKmall开源商城iOS 与安卓双端开发:如何平衡 B2B2C 商城的代码复用与性能

    在ZKmall开源商城的iOS与安卓双端开发中,平衡B2B2C商城的代码复用与性能是一个关键考量.以下是一些建议和实践方法,以实现这一目标: 一.架构分层设计:解耦与复用 1. 分层架构模型 merm ...

  9. 什么条件会触发 Java 的 Young GC?

    什么条件会触发 Java 的 Young GC? Young GC,即 新生代垃圾回收,是 Java 垃圾回收机制中的一种重要回收方式.它主要用于回收 新生代 中的对象,尤其是 Eden 区 和 Su ...

  10. kettle使用MD5加密增量获取接口数据

    kettle使用MD5加密增量获取接口数据 场景介绍: 使用JavaScript组件进行MD5加密得到Http header,调用API接口增量获取接口数据,使用json input组件解析数据入库 ...