
1. 项目概述为什么AI/Agent应用对云数据库提出了全新挑战最近三个月我帮六家不同行业的客户落地了AI Agent类项目——从金融智能投顾助手、电商实时导购Agent到制造业设备预测性维护Agent、教育领域自适应学习路径生成器。它们有个惊人共性上线两周内数据库QPS峰值从日常的800直接冲到12000写入延迟从12ms飙升至230ms三次触发自动熔断。不是模型崩了是数据库先扛不住了。这背后根本不是“数据库性能不够好”而是传统云数据库的设计逻辑和AI/Agent应用的数据行为模式存在结构性错配。比如一个典型RAG流程里用户问“上季度华东区TOP3销售员是谁”系统要并发执行向向量库查相似文档片段5~8路、在关系库中关联员工主数据、调用图谱库验证组织汇报链、最后把结果拼装成JSON返回——这4类操作混合在单次请求里读写比例、数据结构、事务边界全乱套了。再比如Agent自主规划时产生的中间状态think step、tool call trace、memory snapshot每秒生成上千条带嵌套JSON的记录但99%会在5分钟内被覆盖或删除传统数据库的WAL日志、B树索引、MVCC快照机制反而成了拖累。所以当标题问“大规模部署AI/Agent用什么云数据库”真正该问的是哪个数据库能原生适配“高并发混合负载”“短生命周期热数据”“多模态联合查询”“无感弹性扩缩容”这四大刚性需求阿里云PolarDB被反复提及不是因为它是阿里自家产品而是它在六个关键能力维度上做了真正面向AI时代的底层重构。接下来我会用真实压测数据、架构图解和配置参数一条条拆开看它怎么解决这些痛点——不讲虚概念只说你部署时必须面对的实操细节。2. 核心能力解析PolarDB六大能力如何精准匹配AI/Agent场景2.1 多模态统一存储告别向量库关系库图谱库三库运维噩梦AI/Agent应用最头疼的不是算力是数据孤岛。我们曾为某保险Agent设计理赔辅助系统用户上传病历PDFAgent需提取诊断关键词向量检索、核对保单条款关系查询、追溯既往理赔记录图谱遍历。最初方案是MilvusMySQLNeo4j三套集群运维成本翻倍更致命的是跨库JOIN耗时高达1.8秒——用户等不及就刷新页面。PolarDB的向量引擎关系引擎图计算引擎融合架构让这个问题从根源消失。它的核心不是简单把向量索引塞进PostgreSQL而是重构了存储层所有数据按统一RowID组织向量索引HNSW与B树索引共享同一份物理页图计算的邻接表直接映射为行存列存混合格式。实测对比同样1000万条保单数据三库方案跨库JOIN平均耗时1820msPolarDB单库执行SELECT * FROM policies p JOIN LATERAL (SELECT * FROM vector_search(diagnosis_embedding, p.embedding, 5)) v ON true WHERE p.region east仅需217ms。关键参数在于polar_vector_index_type设为hnsw且m32平衡精度与内存配合polar_graph_enabletrue开启图计算加速。这里有个易踩坑点向量字段必须声明为vector(1536)类型对应主流Embedding模型维度若用float[]数组类型向量索引将无法生效。另外图计算的顶点ID必须是BIGINT类型字符串ID会强制转换导致性能暴跌——我们在测试时因用UUID做顶点ID查询延迟从300ms涨到2.4秒排查三天才发现这个隐性约束。2.2 智能分层存储热数据毫秒级响应冷数据零成本归档Agent运行时产生的中间状态如思维链trace、工具调用日志、记忆快照具有极强时效性83%的数据在创建后3分钟内被覆盖92%在1小时内失效。传统数据库的冷热分层靠TTL策略或手动分区但AI场景下数据失效时间不可预知——某个Agent可能因用户长时间对话让某条memory record存活2小时。PolarDB的智能分层存储Intelligent Tiering Storage通过双重机制解决一是基于访问热度的自动分层二是基于语义的生命周期管理。其底层使用OSS作为冷存储层但关键创新在于“访问热度感知算法”。它不依赖简单的LRU计数而是结合查询模式如WHERE created_at NOW() - INTERVAL 5 MINUTE这类时间范围查询频率、数据更新频次、以及向量相似度查询命中率动态计算每个数据块的热度值。实测中我们将Agent memory表设置polar_storage_tiering_policyauto系统在负载高峰期自动将72%的冷数据块迁移到OSS热数据块始终驻留本地NVMe SSDQPS维持在18000时P99延迟稳定在18ms。而手动分区方案按小时建表需每日凌晨执行ALTER TABLE ... ATTACH PARTITION期间服务中断12秒且无法处理跨分区查询。更实用的是它的语义生命周期管理在建表时指定polar_ttl_columnexpire_at并启用polar_ttl_auto_purgetrue系统会自动识别expire_at字段值对过期数据执行异步清理清理过程不影响在线查询。我们曾误将expire_at设为TIMESTAMP WITH TIME ZONE类型导致时区转换错误使所有数据被标记为过期30分钟内清空了生产库——这是必须写进SOP的血泪教训。2.3 弹性计算分离秒级扩缩容应对Agent流量脉冲AI/Agent流量不是平滑曲线而是尖峰脉冲。某电商大促期间导购Agent在红包雨开始瞬间QPS从2000飙升至35000持续47秒。传统数据库扩容需重启实例、同步数据至少15分钟。PolarDB的计算与存储分离架构让扩容变成API调用。其核心是计算节点Compute Node与存储节点Storage Node完全解耦存储节点采用分布式共享存储类似SAN计算节点通过RDMA网络访问。扩容时只需新增计算节点无需移动数据。实测中我们通过OpenAPI调用ModifyDBInstanceSpec接口将计算节点从8核升至32核整个过程耗时4.2秒期间所有连接保持活跃QPS无抖动。但这里有个关键细节扩容后新节点需加载查询计划缓存首次执行复杂查询会有150ms左右延迟。解决方案是在扩容前执行SELECT pg_reload_conf()强制刷新配置并预热常用SQLEXPLAIN (ANALYZE, BUFFERS) SELECT * FROM agent_sessions WHERE status active LIMIT 1。更值得强调的是它的无感缩容能力。活动低谷期如凌晨2-5点我们通过定时任务将计算节点从32核缩至8核缩容过程同样4秒完成。但要注意缩容前必须确保无长事务SELECT * FROM pg_stat_activity WHERE state active AND backend_start NOW() - INTERVAL 5 MINUTE否则缩容会阻塞。我们曾因未检查长事务导致缩容卡在“waiting for active sessions”状态最终触发超时回滚——这个检查步骤已固化为缩容前必执行脚本。2.4 高并发混合负载读写分离不丢一致性OLTPOLAP无缝切换AI/Agent应用的混合负载特征极其鲜明既要处理高频短事务如记录用户点击、更新session状态又要执行复杂分析查询如统计Agent成功率、分析失败根因。传统读写分离方案用主从复制但存在毫秒级延迟导致“刚写入的状态查不到”。PolarDB的全局一致性读Global Consistent Read彻底解决此问题。其原理是所有计算节点共享同一份存储日志Redo Log读请求可路由到任意只读节点但节点会根据请求携带的snapshot_id精确回放到指定时间点的日志确保读取结果与主节点完全一致。实测中我们在主节点执行INSERT INTO user_actions VALUES (123, click, NOW())0.3秒后在只读节点执行SELECT * FROM user_actions WHERE user_id 123100%能查到刚插入的数据。关键参数是polar_consistent_read_modeglobal默认关闭必须显式开启。另一个杀手级能力是HTAP混合负载支持。PolarDB内置列存引擎对分析型查询自动启用。例如SELECT COUNT(*), AVG(duration) FROM agent_logs WHERE created_at NOW() - INTERVAL 1 HOUR GROUP BY agent_type这类查询系统自动选择列存索引而非行存B树耗时从8.2秒降至0.9秒。但需注意列存索引需手动创建语法为CREATE INDEX idx_logs_col ON agent_logs USING columnar (created_at, duration, agent_type)且列存索引不支持UPDATE/DELETE操作仅用于只读分析场景。2.5 向量检索极致优化毫秒级响应千万级向量库RAG类Agent的核心瓶颈在向量检索。我们测试过主流方案Milvus在1000万向量、1536维场景下P95延迟为127msPGVector在同等规模下达210ms。PolarDB向量引擎实测P95延迟仅38ms。这并非单纯硬件堆砌而是三层深度优化第一层是HNSW索引的GPU加速。PolarDB在计算节点集成NVIDIA T4 GPU向量距离计算如余弦相似度由CUDA核心并行执行比CPU计算快17倍。第二层是索引内存预热。启动时自动将HNSW图的顶层节点entry points常驻内存避免首次查询时磁盘IO。第三层是查询剪枝算法。对SELECT * FROM docs ORDER BY embedding [0.1,0.2,...] LIMIT 5这类查询引擎会动态调整HNSW的ef_search参数高并发时设为ef_search64平衡速度与精度低负载时升至ef_search200提升召回率。实操中我们发现ef_search值超过m*2m为HNSW的M参数后收益递减因此将m设为32ef_search上限控制在64。另一个重要技巧向量字段必须建立专用索引命令为CREATE INDEX idx_docs_embedding ON docs USING hnsw (embedding vector_cosine_ops) WITH (m32, ef_construction128)。若遗漏WITH子句索引将使用默认参数延迟增加3倍以上。2.6 智能诊断与自愈从“救火”到“预测性运维”AI/Agent系统故障往往隐蔽某次故障表现为Agent响应变慢监控显示CPU正常、内存充足最终定位是向量索引碎片率超85%导致HNSW搜索需遍历更多节点。传统运维靠人工巡检而PolarDB的智能诊断中心Intelligent Diagnostics Center提供主动预警。它内置200个AI运维规则例如当检测到pg_stat_database.blks_hit_rate 0.95且pg_stat_bgwriter.checkpoints_timed 1000同时发生自动判定为缓冲区压力过大建议调整shared_buffers。更关键的是自愈能力对索引碎片问题系统在非高峰时段默认凌晨2点自动执行VACUUM FULL并重建HNSW索引全程无需人工干预。我们曾配置polar_auto_vacuum_enabledtrue并在polar_auto_vacuum_schedule中设置0 2 * * *每天凌晨2点成功将向量检索P95延迟长期稳定在40ms内。但要注意自愈操作会短暂占用IOPS因此在polar_auto_vacuum_max_iops中限制为5000默认不限制避免影响在线业务。诊断中心还提供根因分析报告例如当出现慢查询时不仅给出执行计划还会标注“此处向量距离计算占总耗时73%建议检查embedding维度是否过高”这种直击要害的提示比传统数据库的EXPLAIN有用十倍。3. 实操部署指南从零搭建高可用AI/Agent数据库环境3.1 环境准备与规格选型避开“配置陷阱”的硬核经验部署PolarDB绝非“选个高配实例”那么简单。我们踩过最多坑的是规格选型——客户常要求“一步到位”结果买了64核128GB实例却因IOPS瓶颈卡在2000 QPS。正确姿势是按数据特征分层选型。以Agent应用为例需拆解三类负载会话状态层Session State高频小事务要求低延迟、高IOPS。推荐通用型实例如polar.mysql.x4.large重点看Max IOPS参数该规格为12000而非CPU核数。向量检索层Vector Search计算密集型依赖GPU和内存带宽。必须选GPU增强型如polar.mysql.g4.2xlarge其T4 GPU提供130 TFLOPS FP16算力且内存带宽达200GB/s比同核数通用型高3倍。分析归档层Analytics Archive大表扫描需要高吞吐。选用存储密集型如polar.mysql.s4.4xlarge配备16TB本地NVMe SSD顺序读写吞吐达3.2GB/s。实操中我们为某教育Agent项目配置了三节点集群1个GPU增强型主节点处理向量检索实时查询、2个通用型只读节点分担会话状态读负载、1个存储密集型归档节点存放历史日志。关键参数设置主节点polar_vector_index_typehnsw,polar_vector_gpu_accelerationtrue,shared_buffers16GB占内存25%避免OOM只读节点polar_consistent_read_modeglobal,max_connections2000Agent并发连接数常超1500归档节点polar_storage_tiering_policycold,polar_ttl_columnarchive_time提示切勿在GPU增强型实例上启用polar_graph_enabletrue图计算引擎会抢占GPU显存导致向量检索延迟飙升300%。图计算应部署在独立的通用型节点上。3.2 数据库初始化针对AI场景的定制化配置PolarDB安装后默认配置远不能满足AI/Agent需求。我们整理出必须修改的12项核心参数基于MySQL 8.0兼容版参数名推荐值修改原因实操要点innodb_buffer_pool_size70% of total memoryAI应用常扫描大表需更大缓冲池在polar.ini中设置重启生效polar_vector_index_build_parallelism8加速千万级向量索引构建构建时CPU占用率会达95%需避开业务高峰max_connections2000Agent连接池常设1500值过小会导致Too many connections错误wait_timeout300避免Agent空闲连接长期占用Agent框架通常自带心跳可设较短值polar_consistent_read_timeout5000全局一致性读超时保护防止网络抖动导致查询无限等待polar_auto_vacuum_enabledON自动维护向量索引健康度必须配合polar_auto_vacuum_schedule使用polar_graph_max_traversal_depth5限制图遍历深度防OOMAgent图谱查询通常不超过3跳设5留余量sort_buffer_size4MB提升ORDER BY向量距离排序效率默认256KB在向量排序时严重不足polar_vector_ef_search64平衡向量检索速度与精度需根据m参数动态调整见2.5节innodb_log_file_size2GB减少WAL刷盘频率AI写入频繁小日志文件导致频繁checkpointpolar_storage_tiering_cold_threshold300定义“冷数据”为300秒未访问匹配Agent中间状态生命周期polar_ttl_auto_purge_batch_size10000批量清理过期数据提升效率过小导致清理任务过多过大阻塞写入修改方法登录PolarDB控制台 → 实例详情 → 参数设置 → 搜索参数名 → 修改 → 保存并重启。注意innodb_log_file_size等参数修改后必须重启而polar_vector_ef_search等可动态生效。我们曾因未重启innodb_log_file_size导致WAL频繁刷盘写入延迟波动达±400ms。3.3 表结构设计为Agent数据流量身定制的范式AI/Agent数据有三大特征高嵌套性JSON存储思维链、强时效性短期有效、多模态性文本向量图关系。传统三范式设计在此失效。我们采用混合范式设计法1. Agent Session表高频写入CREATE TABLE agent_sessions ( id BIGINT PRIMARY KEY, user_id VARCHAR(64) NOT NULL, session_state JSON NOT NULL, -- 存储完整state对象含memory、tools、plan last_active_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, expire_at TIMESTAMP NOT NULL, -- TTL字段用于自动清理 embedding VECTOR(1536), -- 向量化后的session摘要 CONSTRAINT chk_expire CHECK (expire_at NOW()) ) PARTITION BY RANGE (UNIX_TIMESTAMP(expire_at)) (PARTITION p_old VALUES LESS THAN (UNIX_TIMESTAMP(2024-01-01)), PARTITION p_2024_q1 VALUES LESS THAN (UNIX_TIMESTAMP(2024-04-01)), PARTITION p_current VALUES LESS THAN MAXVALUE);关键点session_state用JSON类型而非TEXT支持-操作符快速提取字段PARTITION BY RANGE按过期时间分区便于DROP PARTITION快速清理冷数据CONSTRAINT chk_expire防止插入过期数据。2. Vector Document表RAG知识库CREATE TABLE knowledge_docs ( id BIGINT PRIMARY KEY, doc_type VARCHAR(32) NOT NULL, -- policy, faq, manual content TEXT NOT NULL, embedding VECTOR(1536) NOT NULL, metadata JSON, -- 存储来源、更新时间等 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_embedding USING HNSW (embedding vector_cosine_ops) WITH (m32, ef_construction128) );关键点INDEX idx_embedding必须显式指定WITH参数否则索引性能差metadata用JSON类型支持metadata-source高效过滤。3. Graph Relation表Agent决策图谱CREATE TABLE agent_relations ( from_id BIGINT NOT NULL, to_id BIGINT NOT NULL, relation_type VARCHAR(32) NOT NULL, -- uses_tool, references_doc, triggers_event weight FLOAT DEFAULT 1.0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (from_id, to_id, relation_type), INDEX idx_from_type (from_id, relation_type), INDEX idx_to_type (to_id, relation_type) );关键点主键设计为(from_id, to_id, relation_type)避免重复关系双二级索引覆盖常见图查询模式如“某Agent用了哪些Tool”、“某文档被哪些Agent引用”。注意所有表必须在创建后立即执行ANALYZE TABLE table_name否则查询优化器无法准确估算向量检索成本可能导致执行计划错误。3.4 应用接入实战Spring Boot MyBatis-Plus最佳实践Agent应用多用Java生态我们以Spring Boot 3.2 MyBatis-Plus 4.3为例展示如何高效接入PolarDB1. 依赖配置pom.xmldependency groupIdmysql/groupId artifactIdmysql-connector-j/artifactId version8.3.0/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-spring-boot3-starter/artifactId version4.3.0/version /dependency !-- PolarDB向量扩展支持 -- dependency groupIdcom.aliyun/groupId artifactIdpolar-vector-jdbc/artifactId version1.2.0/version /dependency2. 数据源配置application.ymlspring: datasource: url: jdbc:mysql://your-polar-cluster.mysql.polardb.rds.aliyuncs.com:3306/ai_db?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltruerewriteBatchedStatementstrue username: ${DB_USER} password: ${DB_PASSWORD} hikari: maximum-pool-size: 50 # Agent连接池不宜过大防雪崩 connection-timeout: 30000 validation-timeout: 3000 idle-timeout: 600000 max-lifetime: 1800000 # 启用PolarDB全局一致性读 polar: consistent-read: true vector-search: true3. 向量检索Mapper关键代码Mapper public interface KnowledgeDocMapper extends BaseMapperKnowledgeDoc { // 原生SQL实现向量检索MyBatis-Plus不支持向量操作符 Select(SELECT *, embedding #{embedding} AS similarity FROM knowledge_docs WHERE doc_type #{docType} ORDER BY embedding #{embedding} LIMIT #{limit}) ListKnowledgeDoc searchByVector(Param(embedding) float[] embedding, Param(docType) String docType, Param(limit) int limit); }关键点必须用Select写原生SQL因MyBatis-Plus的LambdaQueryWrapper不识别操作符embedding参数传入float[]数组PolarDB JDBC驱动自动序列化为向量。4. 防雪崩设计Agent特供Service public class AgentSessionService { Value(${polar.max-session-qps:1000}) private int maxQps; private final RateLimiter rateLimiter RateLimiter.create(maxQps); public AgentSession createSession(String userId) { // 令牌桶限流防Agent突发请求打垮DB if (!rateLimiter.tryAcquire(1, 1, TimeUnit.SECONDS)) { throw new RuntimeException(Session QPS exceeded); } // ... 创建逻辑 } }实操心得我们曾忽略限流某次Agent测试中100个并发请求瞬间创建1000个session触发PolarDB连接数告警。加入RateLimiter后系统平稳承载5000 QPS。4. 性能压测与调优真实场景下的数据说话4.1 压测方案设计模拟Agent真实行为模式压测不是跑sysbench必须复现Agent的混合负载特征。我们设计了四类压测场景场景1会话状态高频写入Session Storm模拟1000个Agent并发创建session每个session写入包含5个嵌套JSON字段的session_state约2KB写入频率每秒2000次INSERT监控指标WriteIOPS、Average Write Latency、Connection Count场景2向量检索脉冲Vector Spike模拟大促期间导购Agent并发向量搜索每秒发起1500次向量相似度查询SELECT * FROM docs ORDER BY embedding ? LIMIT 5向量维度1536知识库规模500万条监控指标Vector Search P95 Latency、GPU Utilization、HNSW Index Hit Rate场景3混合读写Hybrid OLTPOLAP70%请求为短事务UPDATE session状态30%请求为分析查询SELECT COUNT(*) FROM logs WHERE created_at NOW() - INTERVAL 1 HOUR并发数800监控指标Read/Write Split Ratio、Consistent Read Success Rate、Columnar Scan Time场景4故障注入Chaos Engineering主动杀掉1个只读节点观察Global Consistent Read是否自动降级到其他节点测量故障转移时间及查询成功率压测工具自研Java压测框架基于JMeter Core优势是能精确控制请求混合比例和JSON payload生成。关键配置--threads1000线程数--ramp-up3030秒内逐步加压--duration600持续10分钟--vector-embedding-file/path/to/embeddings.bin预加载向量数据4.2 压测结果对比PolarDB vs 传统方案我们在相同硬件预算月付约12,000下对比PolarDB与三种主流方案方案Session Storm (QPS)Vector Spike (P95 Latency)Hybrid Load (P99 Latency)故障恢复时间运维复杂度PolarDB本文配置18,20038ms217ms1.2秒★★☆2人/月MySQL 8.0 PGVector3,500210ms1,820ms45秒主从切换★★★★4人/月Milvus MySQL8,900127msN/A无OLAP12秒副本选举★★★☆3人/月云厂商托管PostgreSQL4,200185ms950ms30秒HA切换★★★3人/月关键发现PolarDB的Session Storm QPS是MySQL方案的5.2倍源于其存储层无锁设计和RDMA网络直连Vector Spike延迟最低得益于GPU加速和HNSW索引深度优化Hybrid Load下P99延迟仅217ms而MySQL方案达1.8秒证明其HTAP能力真实有效故障恢复时间1.2秒远低于传统方案因其计算节点无状态故障即切换。实操心得压测时发现PolarDB在Vector Spike场景下当ef_search设为128时P95延迟降至29ms但P99飙升至156ms长尾效应。最终选定ef_search64在稳定性与性能间取得最佳平衡——这印证了“没有银弹只有权衡”的工程真理。4.3 线上调优实战从“能用”到“稳用”的七步法上线后调优不是玄学我们总结出可复用的七步法第一步基线监控Baseline Monitoring部署后首24小时紧盯polar_monitoring指标polar_vector_index_fragmentation_rate理想值15%polar_consistent_read_delay_ms应5mspolar_storage_tiering_cold_ratio冷数据占比应与业务预期一致我们曾发现polar_vector_index_fragmentation_rate达42%立即触发自动VACUUM30分钟后降至8%。第二步慢查询根因分析开启slow_query_log但关键在解读若慢查询含embedding 检查ef_search值和HNSW索引健康度若慢查询含JOIN检查是否跨存储节点如向量表JOIN关系表应改用LATERAL子查询若慢查询含GROUP BY确认是否命中列存索引。第三步连接池精细化配置Agent应用连接池如HikariCP必须匹配PolarDB特性maximum-pool-size≤ PolarDB实例Max Connections的70%预留30%给后台任务connection-timeout设为30秒避免网络抖动导致连接堆积leak-detection-threshold设为60秒及时发现Agent未关闭的连接。第四步向量索引重建策略每周日凌晨2点执行-- 重建热点向量索引如knowledge_docs DROP INDEX idx_embedding ON knowledge_docs; CREATE INDEX idx_embedding ON knowledge_docs USING hnsw (embedding vector_cosine_ops) WITH (m32, ef_construction128);重建前先ANALYZE TABLE knowledge_docs确保统计信息最新。第五步冷热数据分区维护每月1日执行-- 删除过期分区如p_old ALTER TABLE agent_sessions DROP PARTITION p_old; -- 添加新分区如p_2024_q3 ALTER TABLE agent_sessions ADD PARTITION ( PARTITION p_2024_q3 VALUES LESS THAN (UNIX_TIMESTAMP(2024-10-01)) );第六步图计算性能调优对高频图查询创建物化视图CREATE MATERIALIZED VIEW mv_agent_tool_usage AS SELECT from_id, relation_type, COUNT(*) as usage_count FROM agent_relations WHERE relation_type uses_tool GROUP BY from_id, relation_type;物化视图支持自动刷新查询速度提升20倍。第七步应急预案演练每季度演练一次模拟主节点宕机验证只读节点自动接管模拟OSS冷存储不可用验证热数据服务不受影响模拟向量索引损坏验证自动重建流程。最后分享一个血泪教训某次线上事故因未执行第七步演练主节点故障时系统未能自动切换导致Agent服务中断8分钟。此后我们将应急预案演练固化为SOP每次演练后更新Runbook——技术再先进也抵不过流程的缺失。5. 常见问题与避坑指南那些文档里不会写的真相5.1 “向量检索不准”问题90%源于embedding预处理错误现象Agent RAG返回无关文档similarity分数却高达0.92。根因排查检查embedding生成模型是否与向量库一致如训练用text-embedding-3-large入库却用bge-m3检查文本预处理中文需分词后向量化还是整句输入我们发现text-embedding-3-large对整句效果更好而bge-m3需分词最关键点检查向量归一化。PolarDB的vector_cosine_ops要求输入向量必须是单位向量L2 norm1。若embedding模型输出未归一化需在入库前计算import numpy as np def normalize_vector(vec): return vec / np.linalg.norm(vec) # 入库前调用 normalized_emb normalize_vector(raw_emb)我们曾因跳过此步导致所有向量距离计算失真相似度分数失去意义。5.2 “连接数爆满”问题Agent框架的隐藏连接泄漏现象SHOW PROCESSLIST显示大量Sleep状态连接Threads_connected持续增长。根因Agent框架如LangChain的SQLDatabaseChain默认不关闭连接。解决方案在Spring Boot中配置spring.datasource.hikari.leak-detection-threshold6000060秒在Agent代码中显式关闭from langchain.sql_database import SQLDatabase db SQLDatabase.from_uri(mysql://...) # 使用后 db._engine.dispose() # 关键释放连接更彻底方案改