利用TiDB存储和检索聊天消息历史

使用 TiDB Serverless 进行向量搜索的 AI 应用开发 TiDB 是一个分布式 SQL 数据库,主要用于大规模数据处理高并发场景。作为一款兼容 MySQL 协议的数据库,TiDB 允许用户在不牺牲 MySQL 生态系统的情况下,享受分布式数据库的优势。 阅读详情

技术背景介绍

TiDB是一种灵活的数据库管理系统,近年来广受欢迎。TiDB Cloud作为其DBaaS(Database-as-a-Service)的解决方案,提供了专用和无服务器选项。现在,TiDB Serverless通过内置的向量搜索增强了MySQL环境,使得在不增加额外技术栈的情况下,可以无缝开发AI应用。

在这篇文章中,我们将探索如何使用TiDB来存储聊天消息历史,并利用其强大的功能进行数据检索和交互。

核心原理解析

TiDB Serverless集成了向量搜索功能,使得以低延迟进行海量数据操作成为可能。我们将利用该特性,结合LangChain库来管理和处理聊天消息历史。通过建立稳定高效的数据库连接,这些消息历史可以在后续的对话中动态检索和利用。

代码实现演示

环境准备

首先,安装必要的依赖库:

%pip install --upgrade --quiet langchain langchain_openai langchain-community

配置OpenAI API密钥

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("Input your OpenAI API key:")

配置TiDB连接

我们将使用TiDB Cloud提供的标准方法来配置数据库连接:

# 从TiDB Cloud控制台复制
tidb_connection_string_template = "mysql+pymysql://<USER>:<PASSWORD>@<HOST>:4000/<DB>?ssl_ca=/etc/ssl/cert.pem&ssl_verify_cert=true&ssl_verify_identity=true"
tidb_password = getpass.getpass("Input your TiDB password:")
tidb_connection_string = tidb_connection_string_template.replace(
    "<PASSWORD>", tidb_password
)

生成历史数据

from datetime import datetime
from langchain_community.chat_message_histories import TiDBChatMessageHistory

history = TiDBChatMessageHistory(
    connection_string=tidb_connection_string,
    session_id="code_gen",
    earliest_time=datetime.utcnow(),
)

history.add_user_message("How's our feature going?")
history.add_ai_message(
    "It's going well. We are working on testing now. It will be released in Feb."
)

# 查看历史消息
print(history.messages)

基于历史数据的对话

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You're an assistant who's good at coding. You're helping a startup build",
        ),
        MessagesPlaceholder(variable_name="history"),
        ("human", "{question}"),
    ]
)
chain = prompt | ChatOpenAI()

from langchain_core.runnables.history import RunnableWithMessageHistory

chain_with_history = RunnableWithMessageHistory(
    chain,
    lambda session_id: TiDBChatMessageHistory(
        session_id=session_id, connection_string=tidb_connection_string
    ),
    input_messages_key="question",
    history_messages_key="history",
)

response = chain_with_history.invoke(
    {"question": "Today is Jan 1st. How many days until our feature is released?"},
    config={"configurable": {"session_id": "code_gen"}},
)

print(response)

检查历史数据

history.reload_cache()
print(history.messages)

应用场景分析

通过TiDB的向量搜索和LangChain的结合,我们能够方便地在各种AI应用中记录和检索对话历史。这在客服聊天机器人、交互式助手等场景中尤为实用。

实践建议

在实践中,建议定期检查和优化数据库连接的配置,确保会话数据的安全和高效管理。在构建复杂应用时,灵活使用TiDB的向量搜索功能可以大大提高应用性能和用户体验。

如果遇到问题欢迎在评论区交流。
—END—

分享十万级TPS的IM即时通讯综合消息系统的架构 如何设计一款高性能、高并发、高可用的im综合消息平台是很多公司发展过程中会碰到且必须要解决的问题。比如一家公司内部的通讯系统、各个互联网平台的客服咨询系统,都是离不开一款好用且维护的方便im综合消息系统。那么,我们应该怎么样来设计一款三高特性的im系统,并能同时支持各个业务线的接入(比如:内部OA通讯、客服咨询、消息推送等等功能)有呢? im第一版设计的初衷是公司需要一款im消息中间件用于支撑客服咨询业务。但是,考虑到为了方便日后其他业务线也能接入消息沟通平台,所以一开始就将整个消息中心的能力需求给到中间件 阅读详情

相关推荐

IM即时通讯综合消息系统的架构

1)写扩散对微信这样有移动端的富客户端版本的即时通讯产品十分友好,每个消息消息分发的时候给处于这个会话(单聊,群聊)下的所有用户所在客户端先推送消息,没找到连接就针对这个用户写一个离线缓存消息,那么下次该用户登录进来,可以从缓存中拉取到该消息,并且清掉缓存;初版架构设计中,link服务将消息下推给消息分发服务进行处理时,使用的是mq消息总线(通俗了说,IM集群内不同IM实例间的通信是依赖于MQ进行的消息传递),而mq消息总线必然做对有一定的时延(而且时延受制于MQ本身的系统实现技术策略)。

蔚可云的博客 939

使用TiDB Serverless构建智能聊天应用:历史数据存储与向量搜索

本教程展示了如何将TiDB Serverless用于AI应用的聊天消息存储交互中。未来,您可以探索更多TiDB Cloud功能,例如数据分析实时BI。

ahdfwcevnhrtds的博客 251

SQL与NoSQL选型实战:从业务场景匹配出发的决策框架

数据库选型本质是数据形态与业务需求的匹配问题。结构化数据、强事务一致性、复杂关联查询等特征天然适配SQL数据库,依托ACID保障B+树索引实现高可靠与高性能;而半结构化/动态演进数据、高频简单读写、海量写入等场景则更契合NoSQL的文档模型与分布式架构。技术价值不在于参数高低,而在于能否支撑业务SLA——如支付需毫秒级强一致,消息流可接受最终一致。典型应用场景包括电商订单(SQL基座)、用户行为日志(MongoDB)、IoT设备上报(Cassandra)及混合架构中的JSONB灵活扩展。本文聚焦真实项目中

cuizhu0832的博客 362

[如何使用TiDB Serverless整合向量检索实现智能AI应用]

TiDB Serverless的内置向量检索功能为AI应用的开发提供了高度集成的解决方案。通过本文,您了解了如何快速上手并利用TiDB的强大功能构建智能应用。TiDB 官方文档LangChain社区文档。

SGWGWQ的博客 459

[使用TiDB Serverless构建AI应用:无缝集成向量搜索的秘诀]

TiDB Serverless为开发者提供了一个强大的平台,结合向量搜索功能,让AI应用的开发变得更加高效简单。想要了解更多,可以访问TiDB Serverless官方文档或Langchain社区资源。

sjufgwgfhoia的博客 471

TiDB Serverless:集成向量搜索的全新 AI 应用开发利器

TiDB Serverless 的向量搜索功能为开发者提供了在传统关系型数据库中处理查询向量数据的能力。这一功能的集成意味着开发者可以在同一个数据库中存储结构化数据非结构化数据(如文本嵌入),从而简化了 AI 应用的架构设计数据管理流程。TiDB Serverless 的向量搜索功能为 AI 应用开发带来了新的可能性。通过将向量搜索集成到熟悉的 MySQL 环境中,开发者可以更容易地构建扩展 AI 应用,同时享受 serverless 架构带来的便利成本优势。

qq_29929123的博客 1003

[探索TiDB Serverless中的向量搜索:为AI开发者带来全新契机]

通过本文的示例,我们可以看到TiDB Serverless如何简化AI应用开发中的数据存储检索TiDB的向量搜索功能为开发者提供了更高效的工具集成。

afTFODguAKBF的博客 259

IM群聊系统架构解析:从500人上限看高并发消息推送与存储设计

即时通讯(IM)系统是现代互联网应用的基础设施,其核心在于实现消息的可靠、实时传递。在技术原理层面,IM系统需要解决高并发连接管理、消息有序投递、数据最终一致性等分布式系统经典问题。从技术价值看,一套健壮的IM架构能支撑亿级用户同时在线,保障社交、协作等场景的流畅体验。具体到群聊功能,它面临着比单聊更复杂的挑战:如何将一条消息高效同步给数百甚至数千成员?这引出了‘写扩散’与‘读扩散’两种核心架构模式的权衡。写扩散追求实时性但带来存储放大,读扩散节省存储却依赖拉取。主流实践采用混合模式——在线用户实时推送,离

weixin_30675247的博客 414

金融级Java审计体系构建:从监控到合规的十大致命点与实战方案

在分布式系统微服务架构中,日志记录与监控是保障系统可观测性的基础技术,用于追踪应用状态排查问题。其核心原理是通过收集、聚合分析应用运行时产生的日志、指标链路数据,实现故障发现与性能优化。在金融、电商等高合规性行业,仅满足运维监控远远不够,监管要求所有关键操作必须可追溯、不可篡改,形成完整的证据链。这催生了审计日志这一细分领域,它强调操作的完整性、关联性法律效力。本文聚焦Java技术栈,针对金融场景,深入剖析将普通监控体系升级为金融级审计体系必须跨越的十大认知鸿沟与实践陷阱,涵盖审计日志与业务日志的

weixin_34184561的博客 438

Java大厂面试实录:从Spring Boot到AI微服务架构的深度技术挑战

(注:实际面试中,大厂更关注候选人对技术选型的权衡能力,如Kafka vs RabbitMQ的场景差异,或Spring Cloud vs Dubbo的演进路径):我会用Spring Boot做后端,JPA持久层,MySQL数据库,用Redis做分布式锁解决超卖。:假设你要为某电商平台设计订单服务,需要支持高并发、数据一致性,你会选择哪些技术栈?:Ehcache,它支持分布式缓存……:用Flink做实时计算,Redis存实时路况,然后……:考虑一个UGC场景,用户上传视频需要转码审核,你会用哪些技术架构?

m0_75125940的博客 457

Java工程师进阶:从CRUD到数据架构,掌握MySQL与Redis深度应用

最近几位做后端的朋友聊天,发现一个挺有意思的现象:大家聚在一起,话题从技术栈聊到职业发展,最后总会绕回一个共同的焦虑——“Java是不是不行了?” 这种声音,在技术社区、社交媒体上似乎也越来越多。有人觉得是市场饱,有人归咎于新技术冲击,还有不少人开始怀疑自己是不是技术不行了。 但如果你仔细观察,会发现一个更值得玩味的细节:那些喊着“Java已死”的人,那些拿着高薪Offer、在核心业务线里稳扎稳打的Java工程师,他们之间的差距,往往不是体现在对某个框架的熟练度,或者能背出多少道八股文。真正的分水岭,

weixin_30562507的博客 296

[AI提效-54]-有哪些App的类型以及他们对应的系统架构

表格App 类型核心挑战关键架构组件数据库选型通信协议资讯内容高并发读CDN, 缓存集群, 推荐引擎HTTP/HTTPS电商交易数据一致性分布式事务, 消息队列, 分库分表HTTP + MQ即时通讯低延迟, 长连接WebSocket 网关, 消息路由O2O/LBS实时位置, 匹配GeoHash, 实时计算 (Flink)音视频带宽, 转码CDN, 转码集群, 边缘节点企业 SaaS权限, 多租户IAM, 工作流引擎, 租户隔离PostgreSQLHTTP/gRPC。

文火冰糖(王文兵)的博客 703

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 153

Golang基础面试题汇总

channel、goroutine、slice、map、反射、内存、GC、Musql、Redis、ELK、K8s、Http、Https

weixin_41760738的博客 5563

【信息科学与工程学】计算机科学与自动化-——第十五篇云计算 12 公有云里的“多Region + 多AZ“ 02 运营算法01

算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)云厂商提高闲置资源利用率。算法复杂度为O(N),N为实例数量。

weixin_49199313的博客 199

会话管理三要素:上下文、模型与持久化的分层设计

会话管理是AI应用工程化的核心能力,本质是对用户交互状态的建模与管控。其技术原理根植于上下文(实时输入窗口)、模型(无状态推理引擎)持久化(跨请求状态存储)三层解耦架构。忽视分层会导致token浪费、语义稀释、状态丢失等典型问题。在真实场景中,需结合Token经济约束优化上下文长度,依据模型架构(如Transformer的KV缓存机制)设计状态注入策略,并通过元数据、业务状态、临时缓存的工程化分层实现高可靠持久化。学生成绩管理系统等轻量级实践,正是理解这一范式的最佳起点。

weixin_30673611的博客 395

智能体经济架构解析:从分布式协调到价值交换的实践指南

分布式系统通过去中心化的节点协作,实现了资源的高效利用与任务的并行处理,其核心原理在于共识机制、智能合约与异步通信等技术的结合。这种架构在提升系统鲁棒性与可扩展性的同时,为自动化经济协作奠定了基础。在工程实践中,LangChain等框架被广泛应用于构建具备感知、规划与执行能力的智能体(Agent),通过任务分解与工具调用完成复杂工作流。结合区块链技术实现的可验证性,使得智能体间的贡献度量与价值交换成为可能,从而在内容生成、供应链管理等场景中形成自主协作的经济闭环。本文以多智能体协作为例,深入探讨了其架构设计

weixin_30363509的博客 401

练习:用 playbook 部署 zabbix tidb

尝试用 playbook 部署 zabbix tidb

2302_80853486的博客 193
上一篇: 使用Cassandra存储聊天消息历史记录
下一篇: 使用Xata实现聊天记录持久化和问答代理
shuoac
博客等级 码龄2年 772粉丝 · 222原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值