🐢

知识库

9638 字
48 分钟
知识库

学习资料#

春招+实习+社招:docs.qq.com/sheet/DV2dKQ2pyWXRuR21s ai填写简历插件和网申表格:https://www.qiuzhifangzhou.com/campus

简历https://github.com/JOYCEQL/magic-resume/blob/main/README.zh-CN.md

掘金文章https://juejin.cn/post/7649955227478638655

你要学记忆系统的话可以看看github上my akashic这个项目

https://www.yuque.com/yuqueyonghu-ng3vtk/ml40pe?# 《AGI-Core开源版》

新技术https://juejin.cn/post/7625301482213130291

大厂实习秋招内推汇总🔥📢 https://my.feishu.cn/sheets/Ja0YsDMuKhy7Sxt0E9HcuRIinTf?sheet=2d5134

星球二哥编程用那个paicli和github上一个claude code项目改的

前端学习路线https://xcnw6kkm1ldc.feishu.cn/wiki/DyElwiysPiRODLkASykcj6A9nyd

项目推荐文档https://ai.feishu.cn/wiki/NccQw1Bpci7QhIkXq1rcv6o4nmg

优雅学习路线https://my.feishu.cn/wiki/Cm15wvl8JiC8pUknsfVc6TQNnDc

Agent项目https://pcnivlpg6pgy.feishu.cn/wiki/PmoLwlh2DiOE2ykbCOzcvKkjnFd?docs_banner_login=

鱼的笔记https://sealearn.yuque.com/org-wiki-sealearn-syaeae/oi5uvb/huw7hzm50ky91f3y

【VIP学员课程资料链接】 2501期AI大模型基础篇课件资料地址:

链接: https://pan.baidu.com/s/15rL7JgGK2mFrFdCgG1kOpg 提取码: zzr3
2501期AI大模型RAG应用开发篇课件资料地址: 链接: https://pan.baidu.com/s/1c-oe67oIy-1ERmjg9eiQNA 提取码: mhue 2501期AI大模型Agent智能体开发篇课件资料地址: 链接: https://pan.baidu.com/s/19N6mHZRnmhTjdOsWBOnXug 提取码: uh2j

2501期AI大模型私有化微调篇课件资料地址: 链接: https://pan.baidu.com/s/1VTcJeffU5ovx5L1PouXGtA 提取码: jk4c

2502期AI大模型基础篇课件资料地址:

链接: https://pan.baidu.com/s/1HB5z7nfLiIwDvzw74Fa9jQ 提取码: h1g3

2502期AI大模型rag应用开发篇第二期课件资料地址: 链接: https://pan.baidu.com/s/1ls99Ol3di685vq9xal5EOg 提取码: k5gx

RAG 手册

链接:

https://dqej47nflyz.feishu.cn/wiki/Xum4w0ksBiwgRTkFkeec2MYwnOp

密码:5@31U168

  1. Agent 手册

链接:

https://dqej47nflyz.feishu.cn/wiki/CkzZwmDPbiUvP5kVyilcVQepnEf

密码:22F61422

  1. Transformer 手册

链接:

https://dqej47nflyz.feishu.cn/wiki/UVG4wY8Jxilgnyka6dsc3xDanid

密码:970a7945

  1. LangChain 手册

链接:

https://dqej47nflyz.feishu.cn/wiki/R3eXw8aXeiQqXxkYSrOcPHeznK6?from=from_copylink

密码:544N22#3

  1. LangGraph 手册

链接:

https://dqej47nflyz.feishu.cn/wiki/CIPqwL3XkimM4Qk73ylc2RZMnrg

密码:75@1425Z

  1. AI/Agent 应用开发面试题

链接:

https://dqej47nflyz.feishu.cn/wiki/ZSBJw2ZqjiNOgVkAAPMc6ShRnYb

密码:bB728394C

二、百度网盘资料

  1. 图灵学院新-2025年全“薪”AI大模型全栈工程师【2.0】

链接:

https://pan.baidu.com/s/1NBjVKsLJcd2F2L_udYEfIg

提取码:7758

  1. 大模型应用开发

链接:

https://pan.baidu.com/s/1hJnFX7nNfy0-nOcWboGNyQ

提取码:7758

  1. 图灵学院新-2025年全“薪”AI大模型全栈工程师【2.0】

链接:

https://pan.baidu.com/s/5Abl6Hoez9G9POLJW2bBfmA

群聊补充信息:

  • 百度网盘提取码:7758
  • 另一个文件密码或文件名:szjm01

相关问题#

agi-saber项目为什么不直接用es做向量库还要用milvus

es的向量是外挂的性能比milvus差很多,es主要是倒排索引做关键词的

ES + 向量插件=es向量 es主要是搜索场景 ,milvus专门为向量场景

es底层基本上只有一种向量索引HNSW,mlivus底层还有很多IVF,HNSW,DiskANN,都是找最近邻问题的算法

如果金融的问答,要不要用知识图谱。我说要用。 我对这个业务场景还不熟悉。用了知识图谱的话多跳推理会让回答速度变慢,要做特异优化才可以。

本质就是库里面很多向量,你怎么快速找到最相似(也就是距离最短的) 就是关系性和文档关联比较强的得上graph

复杂推理或者多跳推理才用知识图谱有歧义,本质不是因为复杂推理上graph rag 复杂推理应该上agentic rag和传统rag不一样的就是会多次检索

复杂推理情况下,构造了一次query,检索发现召回的文本不足以解决问题然后agent自己构造第二个q,第三个q,直到能推理解决这个问题这就是agentic

优化速度得分段看rag系统一般每个步骤会分别埋点,看你哪个步骤耗时最长然后做权衡,砍速度肯定会影响效果的,加图就是在能容忍速度的情况下极大提升准确率

节省token

  1. 动态top k

  2. 小模型路由,根据问题复杂程度,或者召回得到的效果,在rerank之后,动态阶段来控制送给你最后模型的chunk数量

长期记忆有必要设计成这样吗?长期记忆不是相对来说比较少吗?会话记忆弄成这样会不会好点,就像mem0那样。

短期记忆就是会话窗口的固定长度,预先把每个会话窗口的第一个query做保留,一个会话窗口最重要的就是第一句话,然后改写附带着然后再加窗口长度

长期记忆和组装上下文机制也一定解决了不足,记忆存储机制和上下文组装相配合

  1. 避免上下文污染(最大的收益),2. 恢复 Agent 状态,而不是恢复聊天记录,3. Token 利用率更高,4. 长任务能力更强,5,让不同记忆有不同生命周期

长期记忆是为了跨回话存在,现在存储已经有mem0的味道,比如记忆巩固,冲突消除,去重合并,触发长期记忆是通过预先留好槽位然后填充的方式

会话窗口是不是没加压缩 先根据当前任务构建所需的记忆上下文结构,例如Long-term Profile,Planner State,Task Memory,Tool State。再让 Recall 出来的 Memory 去匹配并填充这些结构化映射

记忆系统的长期记忆和用户偏好,这两个感觉都是在提取用户的喜好信息诶,存的内容具体区别在哪啊? 长期记忆存的是chunk,用户偏好是具体的key-value映射;长期记忆是为了补全语义组装上下文召回用的,用户偏好可以每轮 prompt 都可直接注入,增加用户画像个性化用的

微服务就是伪命题,你真实开发过程是没什么感知的学学rpc,grpc这种

工业rag最复杂的部分就是chunk多路找回rrf

表格在入库的时候就结构化转成段落,模型没办法理解excel,得数据清洗的时候就处理

,让模型对每个图片生成摘要,最后向量化基于这个摘要的语意向量化 其次是现在都基本上用llm基于语意切片了,复杂的,文档格式转成可以友好切块的,并且保证语义不变

最终落库是需要向量化的,搜图这种可以上这个多模态embedding

给chunk打tag是怎么打的?,是要维护一个标签词典,让llm在这个词典范围内安排tag吗,还是说有什么其他办法

tag就是元数据标签,在入库的时候打上去的

我rag召回的时候,明明是原因类问题,但是由于bm25的top1是现象类(可能是关键词命中较多?),导致后面rrf之后带歪了,想打个tag如果是原因类问题就给原因加个权什么的,或者说对于这种问题应该怎么解决吗

所有向量存储都应该支持吧,你可以理解成入库的时候你可以自定义的一个字段给这个向量打标签,比如是广告竞价相关的chunk你可以打上“竞价”

在检索的时候,你发现用户的问题的和竞价相关的,你就可以先根据这个tag先筛选一轮

打上tag的动作是人工还是llm?

llm,让llm给打的标签一个置信度分数,如果小于0.5就人工rw

先加个前置给用户的query打tag,户问的是原因相关的才能召回原因相关的

先意图识别打标签,应该能解决这种问题,但是真实场景应该更复杂,一个问题可能涉及多个标签 所以需要你的意图识别模块更好,能同时打多个意图这种

元数据这个东西很好用的各种隔离

做好几个部门的知识库,就是可以通过tag去过滤不同部门对应的知识

为什么项目里用的RAG是向量检索+BM25关键词+知识图谱,但是测评里却只测了向量,BM25和Hybrid,没有知识图谱?

知识图谱是测评后加的,基本测评只需要测的也只是向量检索,关键词对于向量化模型没有影响,我们测的是召回阶段,向量化模型对召回检索的影响程度

测评是为了向量化模型的选择,跟知识图谱和bm25都无关

三路召回,其实bm25和知识图谱都没有对照变量,只有向量召回这一阶段用的向量化模型是变量才可以对照

知识图谱的构建策略和检索策略不影响上下文召回率和精确率?

观察一下所有向量化模型测评中的bm25数据都是相同的,因为bm25测试就没有变量用的环境和配置都是相同的

测评召回检索阶段用python脚本算一下指标,麻烦点是造大量chunk和答案测试集;然后生成阶段直接接ragas框架 找一个变量,召回阶段的变量是不同的向量化模型,生成阶段是不同的对话模型,主要是看各模型是否适合这个场景

评测和沙箱挺重要的

产出#

澄o#

  • 理解机票业务知识 走通公司内部组件
  • 梳理全链路资金不一致情况的风险上报 梳理完资金diff后又去看风险上报方案实现
  • 用下单和订单详情页为例 下单时的增值服务因为没配置好 导致订单详情页金额diff
  • 目前想到的是这样 消费监控日志 上报给agent执行 agent产出报告 最终飞书发消息让你看报告 明天看看能代码实现不

内部平台的全链路风险扫描 我负责报警信息解析 平台派发任务交给远程agent执行 最终在平台落档风险记录 且给出巡查报告 定位具体代码库 上下游数据 属于是提效工具吧 但是越在这种自己diy 自己的决策能力越重要 还是继续要梳理下上下游关系 毕竟这个行业的稳定业务我感觉也轮不到我

  • 什么是agent runtime
  • agent上下文管理如何实现 compact的具体流程是什么harness如何设计 为什么要harness
  • agent的记忆管理是怎么做的
  • Re-act 在agent系统中如何体现

对上下文管理有基础概念了

执行层 系统层 外部知识层 出自ZmjJ.Colecole.ss 怎么出现压缩时

系统层 如 用户偏好(agent.md) 长期短期记忆 prompt schema格式 一般不动

执行层 出现大量工具回调结果对上下文占用 是压缩时最值得整理的部分

llm的历史推理部分会把之前的执行流程做概要总结

任务层 包括原始目标和 当前卡点 子步骤 用标准输出json 更换对应的节点状态

外部知识 如rag检索 上传的资料 等 用完不保留

明天做pi agent的梳理

https://blog.csdn.net/chengooooooo/article/details/145952125?sharetype=blog&shareId=145952125&sharerefer=APP&sharesource=chengooooooo&sharefrom=link

学委#

消息队列#

  • 画出新需求的大致流程图,但是PRD还没有出来
  • 看了下消息队列 Mafka ,扩充了些对于消息队列方面的了解,Rebalance、at least once,虚拟分区等等,
  • 当业务不能接受消息丢失时,设置副本与ack确认次数(-1为初始,1为完成,每消费一次就+1),代价是系统的速率会降低,并且需要消费者做好幂等;
  • 当业务需要延迟队列但要保证高速率(消息保持)时,可以添加一个KV(我的理解是外部的数据库或者日志记录等),通过定时任务将某时间段内的消息发送给消费者,代价是系统中多一套定时任务,能力会下降无法深入事务消息没看懂(太菜了)
  • 在git上找了几个redis的项目想再深入些,击穿,穿透的解决方法落地,关键数据一致性问题,本地缓存与Redis的取舍,redis的集群等等等都是我想关注的试着去落地一次,后面如果PRD不出就研究下再
  • 对于消息队列,缓存都只有最基础的概念与想法。争取后面自己动手在项目中真正的用一用,
  • 对于今天下午群里DDD的思想的理解有些了,但是吧感觉得再多想想

​

mq有没有自动判断消费成功的能力:RabbitMQ开启自动ack,消息到达消费者后mq会直接删消息不管成功没Kafka 在消费者拉取消息后,定时自动offset,如果offset后出现问题没有兜底所以,他两只能自动消除用过的消息,成不成功,不知道

对于消费者处理消息有了一点理解:将重试次数final写死,消费方法要做好异常抛出和抓取

Redis#

​ ○ 复习了一下黑马点评中redis的击穿(逻辑过期)、穿透(缓存空值)的解决办法的实现,点赞排行榜Zset/Set,关注动态的信息流推送。并接入了MQ做秒杀优惠券的后续数据库操作。

​ ○ 用户鉴权与当前请求的用户数据“从哪里来”<用户在登录系统之后>,后端通过 拦截器 获取前端请求 中 的token,并反转成用户对象,再将它保存在ThreadLocal的 线程级本地存储 中, 目的是,在 一个请求调用的过程中,传递数据,避免层层传参.这个“缓存”的 生命周期 会随着 请求的结束而结束,但要注意的是 需要在请求响应结束后,主动清除“缓存”

​ ○ 水群看到了限流,熔断,兜底。梳理了下流程应该是: 用户请求 - 限流 - 【线程池隔离】放在哪个池 - 调用下游 - 如果失败 - 触发 【熔断】 还要不要继续重试 - 【补偿】 能不能通过某些操作抢救一下 - 【兜底】 用户最终看到的是什么 - 【补漏】 根据日志对账;然后重新翻了一下自己写的线程池的文档,对于 并行调外部接口 获取数据做汇总后再做业务这一块中,现在公司是 通过countDownLatch.await(5, TimeUnit.SECONDS);做的等待,如果超时就 熔断 后续其他线程返回的结果直接丢弃, 补偿为 打个日志标记一下 ,然后兜底方式 是 先展示当前结果,即使数据可能存在偏差也先展示,不影响用户的整体使用感受

​ ○ 继续看redis缓存框架的学习项目

​ ○ 看能不能研究一下用户鉴权的实现方法

○ https://zq99299.github.io/note-book/cache-pdp/redis缓存框架的相关文档,非常的详细,感觉挺全的。

https://github.com/zq99299/cache-pdp这是对应的git项目

看redis集群架构

看了AOF与RDB,主从模式中的同步流程,以及宕机或脑裂如果回复与预防

数据库#

○ 看了一下「活动专属贴纸」

​ ○ 数据库中锁粒度的层次与对于的性能与开销:库级锁-并发最低-开销小-场景:数据库备份,迁移,主从切换表级锁-并发到表-开销一般-场景<批量导入大量数据行级锁-并发到行-开销较大-场景>:商品秒杀,仓库出货入货列级锁-并发极差-开销极大-场景:长事务进行多表聚合查询 年终售卖数据分析

​ ○ OLAP与OLTP,MVCC的实现与作用

OLTP

​ ■ 要求事务处理速度要快,保证DB对请求的吞吐量

​ ■ 读锁不阻塞写锁,写锁不阻塞读锁

​ ■ 常见场景:电商秒杀下单、仓库货物扣减、银行支付转账等

OLAP

​ ■ 要求进行大量的数据检索,千万或者亿级数据查询或清洗、或者是大量的表进行join链接

​ ■ 列式,复杂聚合查询的读取速度快,但是修改时需要拆列,性能低

​ ■ 常见场景:年终售卖数据分析,大V粉丝标签统计,股票长线数据分析

对定时删除业务场景做了分析,数据库中添加时间字段并加索引,引索的目的是查询过期数据时防止全面遍历、表锁(但要注意内容sql的最左前缀问题,避免其他索引失效)。

业务#

业务场景设计,30分钟自动订单过期的写法,业务边界在过期最后时刻支付发生在 过期的前后,可以将两个update数据库的语句条件写为一个,让数据库行锁来决定谁成功

-- 关单任务执行
UPDATE `order` SET status = 'CLOSED', close_time = NOW()
WHERE order_no = ? AND status = 'PENDING_PAY';
-- 支付回调执行
UPDATE `order` SET status = 'PAID', paid_time = NOW()
WHERE order_no = ? AND status = 'PENDING_PAY';

这个方法要做一个退款的兜底

业务思考:如果一个订单,支持微信与支付宝进行支付,在高并发的情况下如何避免,同一笔订单被微信与支付宝同时完成支付?想法:前端做渠道互斥,后端上互斥锁保证支付动作只有一个进程能够拿到,极端网络情况兜底,定时对账与自动退款

联系人#

需求一#

○ 需求:调整用友客户数据的客户编号,牵涉了 middleware、customer 服务和 customer-api 契约,客户编号格式K0500。customer 负责实现分配和 upsert 接口,middleware服务 通过shb-customer-api包 调用shb-customer服务的接口。

首次只在jenkins打包构建了middleware,没有更新shb-customer-api的版本号以及deploy发布到nexus仓库,导致middleware在旧的shb-customer-api找不到新增的接口启动失败,随后排查并且解决这个问题。第二是middleware 调用 deleteAll 时先遇到抢锁失败(删除和新增共用一把redission锁,此时测试环境正在同步新数据),之后拿到锁又因同事将customer服务搞挂了测试发布被拖延。最后在nacos将同步数据改为false,同步数据的接口关闭,避免删除旧的测试数据时,新增和删除同时抢锁,好在赶在下班前调整好了。

总结:尽量改动在有一个服务内,不到万不得已时不要跨服务新增接口,调试起来真的很麻烦,为此我还去找了一个skill叫ponytail,下一次试试看好不好用。

​ ● 卡点:整个开发->发布->测试流程相对繁琐,涉及到多模块联调、jenkins选择环境再选分支构建,另外jenkins的启动成功并不一定真的成功,还要排查构建日志+nacos是否监听服务确定服务是否启动,最后是接口测试时看日志基本上使用kibana,但是极端情况(服务启动失败)需要去测试服务器下查看日志文件。说实话,放在自己本地开发的话,真用不到这么麻烦的测试流程 ,但谁叫这是合作开发,测试环境要一起用,谁搞炸了马上就钉钉diss…

​ ○ bug修改,客户在门户查看知识库时因内存超过设置的上限100MB,导致预览页面加载超时报错。这个涉及的前端模块有2.8G,打包构建时又要等很长时间。

​ ○ 接着投简历,希望这星期能有个面试拷打我下,没有失败挫折打击,还挺难坚持的。

需求二#

​ ○ 需求:安装小工具的隔离日期需求。点击“取消隔离”后清空隔离日期,并在详情页隐藏该字段;再次隔离时,日期仍会正常显示。

很简答的需求,但费工夫的是测试环境的发布链路。这个私有化环境从 2025 年 9 月起就没再使用,和当前测试分支差距较大,页面也和正式环境不太一样。因此需要以私有化 release 分支为基础开发,再合入测试分支,通过 Jenkins 打包,按构建日志更新服务器上的镜像版本,重启后再到页面验收。后端涉及的模块20多个,前端还要统一打成静态资源交给 Nginx 挂载,整个流程比需求本身长得多。

花了一早上把这套流程整理成了 elekta-test-release skill,后续可以照着走,少一些反复摸索。本次需求也已在测试环境完成验收:取消隔离后日期清空并隐藏,再次隔离后日期正常显示。

BUG修改:知识库上传了大文件(112MB),在门户预览时加载超时,浏览器OOM无法查看。

将上限改为150MB,然后把pdfh5从1.4.2升级到3.0.0,在知识库预览中启用分段加载,最后设置兜底,超过预览上限,要求下载到本地查看。

过程就是和codex 美美battle就行了,完成修改 -> 合并 -> 发布 -> 验证。

需求三#

​ ○ 修Bug:TCL云仓出库调用MQ,下游消费者因出库类型未命中导致未消费。

​ ○ **根因:**测试环境里的“tcl-收货仓故障品调拨出库”拥有一个独立的出库类型 ID,而 Middleware 当前没有把这个 ID 配到任何启用的 TCL 出库类型分支中。因此消息虽然到达并被监听器处理,却在出库类型分流处落空,导致未消费。

​ ○ **后续修复方向:**先确认测试租户这类故障品调拨出库的实际类型 ID,再明确把它映射到正确的 TCL 处理分支;同时检查创建时的库存统计消息是否应该进入 TCL 出库路由,避免缺少类型 ID 的消息造成误判。

四#

浏览器带Authorization请求Nginx反代到gateway网关,网关的AuthFilter解析jwt拿到userKey,做一次hasKey校验会话是否存在,同时将用户信息注入到Header中。网关再将请求转发给具体的服务。目标服务有HeaderInterceptor(base-security定义的公共组件),先拦截请求,把Header中轻量级的用户信息写入线程的上下文TTL,并去redis查token获得完整的LoginUser校验有效期,一并写入TTL,供业务逻辑调用。服务间的Feign调用也应从本次请求中复制用户信息和**Authorization****,重复同样的”读头 → 查 Redis → 写上下文”**流程,身份就沿着调用链一路传下去。

​ ○ project服务和 flowable服务关系:

审批是任务级的可选关卡,创建任务时只是配置(且只有”未开始”状态能改),发起靠人工点「更多 → 审批」

**审批驱动任务状态:**发起=进行中(1)、通过=已完成(2)+进度100%、驳回/撤销=未开始(0)+进度清零

审批只有 0/100 两个落点,但任务进度字段本身可以手填任意值,中间态来自人工

牛牛#

生命周期#

在spring的生命周期中初始化那一块的Postconstruct,InitializingBean,init-method三个概念不大清楚

  • 实际上都是第五点,都是初始化的方法,
  • 区别是
  • Postconstruct是注解方式,适合自己写的类。
  • InitializingBean是Spring 接口,方法名固定 afterPropertiesSet,代码耦合 Spring
  • init-method配置式,方法名自定义,无侵入,适合 XML 或第三方类

需求一#

先是把项目的心跳逻辑改了,原本是一个长事务要把所有数据都遍历一遍所以把整个库都锁了。我优化把其改成短事务,将每个目标数据锁起来。减少锁冲突发生的概率

​ ○ 然后是测了下一个新的域名接口能不能用,找不到是前端问题还是后端问题,后面发现是服务器问题

​ ○ 下午:+1要求新增一个自动删除存在满72小时的数据。我的操作实现是,每天北京时间凌晨 00<00> 扫描。仅选择满足闭环条件的且生产任务均成功满 72 小时的订单。采用批量处理,每批 100 条、逐订单短事务;锁被占用就跳过,次日重试。预演结果写入“日志中心 → 操作日志”。保留永久哈希墓碑,阻止旧数据重建订单。清理后的上报任务标记为“已清理(历史只读)”,前后端均禁止再次操作。资料重新补齐并重新上报后,72 小时重新计时。单条删除失败整单回滚。

我比较好奇这种自动删除的任务,我要咋测试这种任务。而且隐患这些我要怎么排查。有没有懂哥看到这条回复我一下

​ 学了一下xxl-job,感觉还不赖。也是一个中间件,对于需要定时删除的任务加一个注解,在xxl-job上注册这个注解,实现定时任务和单次任务的调度。

看了下cannl实现mysql和ES的同步,说实话关于ES感觉不懂的蛮多还

​ 目前在看微信支付的回调B端和C端的强一致性怎么搞

千千#

学习监控、限流、告警这一套东西

skill#

claude做的benchmark的skill,可以看看,简历上有写agent评测的可以参考他这个思路。工程思想

https://claude.dev/blog/automating-eval-design-and-hillclimbing/

  • 一个会员权益的接口。上游传用户id、店铺id、商品id,我们这边判断用户拥有哪些店铺、商品的权益。然后由于有3个上游,交易、购物车、商品,平时会有大促的行为,今天做了下压测看了看接口qps的上限,然后在一些地方加了缓存。以及针对这三个上游的应用标识加了下限流。
  • 做了下新需求评审、测试用例评审

ES#

Es本质上是因为传统mysq的Oltp,模糊复杂多参数查询,性能太慢

由于mysq|在模糊查询场景下性能不佳,引入ES,解决在用户数量多时SQL查询速度慢的问题。 MySQL多条件模糊检索性能不足,引入ES,依托倒排索引+IK分词器承接商品搜 索,解决慢查问题,然后你引入es还要解决数据一致性吧 MySQL多条件模糊检索性能不足,引入ES,依托倒排索引+IK分词器承接商品搜 索,通过双写+消息队列保障数据一致性,解决线上慢查询超时问题。

真正有价值的是工程思想兜底设计这些你可以看看 重点是什么场景什么问题如何解决

业务#

Lilin#

流程是消息进入到agentn,先抢分布式锁,确定主分支,主分支上直接跑,没抢到锁的作为副分支,拷贝一份主分支已经持久化了的上下文,最后副分支执行完毕,因为是同一个消息框,上下文需要合并,副分支只对增量的上下文,通过获取分布式锁(另一把锁)来合并,防止并发冲突。 最终上下文合并后是成一条线的,因为是同一个聊天框里进行的。

这个并发的背景,是因为我们会让agent做一些长任务,比如让agent做故障排查,或者是数据库的一些分析,如果接着需要处理其他事情,就会阻塞起来

理解了同一会话并行执行新的并行分支读历史快照然后自己做推理然后增量的上下文,做用分布式锁串行提交,就是有的任务很长,不能让他一直卡着做那一件事,尤其是在人多的群里,比如专属的工单处理群

你们这个agent部署在哪的上了多少服务,形式应该是。oa里的机器人,@一下调用这种

部署是怎么做的部了几台机器网关怎么做的

服务有be端、agent端、ob端,be端职责就是接收im的消息,做解析处理和持久 化,拼接提示词,调用agent端,ob是观测端,一些埋点的数据记录在里面 你们这个agent部署在的上了多少服务 be和agent的生产环境分别都有4台机器 网关指的是各个服务直接怎么相互调用? 内部微服务平台自带,配好名字和网关就能路由过去

群聊id+用户id+agent的id,三个联立 SaI<聊id吗>

做了并发处理怎么考虑有些任务和消息需要顺序性 「解决同一用户连续请求时,前一个长任务阻塞后续请求的问题」 这条产出第一句可以这样写了先写背景和价值,再写具体实现

ttft#

这个ttft的测量点是,agent接收到消息,直到agent最终回答的首token的时间间隔,改造过就跑ab测试了 ab怎么跑的自己搭的还是公司已经有的轮子?我记得实际数据是ttft从8秒过降到6秒多。这块是自己搭的,因为组里没做评测,也没有轮子。让ai帮我埋点,写评测集来测试的 我们的一些指标数据都是偏业务性的

如果你这个ab自己搞得够闭环复杂的话.其实你这条产出应该描述ab

数据集是ai构建,然后由人工审核的。 优化的点其实有点拉胯。 本来我们每次agent调用工具,也就是每个turn都会同步采集全量的上下文,相当于是用了/context命令,这会增加完整的trace的总体耗时。 首先是把同步改成异步了,耗时降低(降了23%的ttft),但是每次调工具依旧会采集 全量上下文,评估来看消耗估计是比较大的,又改成例如在首次会话、压缩后等特殊节点才会采集。 这些都没有接触过,langchain也是 我们项目是用claudeagentsdk来开发的 其实我想包装一个,就是引入了agenticrag来检索文档,因为我们的agent检索部分很拉胯,有两种方式,一个是grep直接检索代码,还有一个是直接全量加载某篇文档,而且rag是比较通用的,我感觉好包装一些 langfuse你接触过吗 langfuselangragh 理解你基本都接触的sdk呗

Redis#

上了缓存跟数据库一致性怎么做的

  • 主要使用先更新数据库,成功后删除缓存,如果不先删缓存再更新数据库,这样会出现就数据重新写入缓存,产生脏数据,缓存设置ttl过期时间为300s,没有使用延时双删是因为不需要强一致性

  • 延迟双删的目的是为了强一致性吗?

  • 怎么理解最终一致性和强一致性的

为什么模糊查询要上es

  • mysql的b+树没有高校支持前后模糊查询,mysql更是集合结构化精准查询,像全文搜索,任意位置模糊,分词检测场景还是es更合适
  • mysql主要使用b+树,更适合结构化精准查询,es是基于倒排索引,专门为全文检索

为什么es模糊查询块,ES的架构

消息重复消费怎么办

  • mq本身不能保证消息不重复,只保证至少头第一次,解决方案.唯一业务id做幂等
  • 键,消费前先查redis,去判断这个id是否处理过,已处理过的话直接return

消息消费失败了怎么处理

  • 用rabbitmq的私信交换机+延迟队列。消费捕获异常后,不直接丢弃信息,把信息投递到延迟队列,等待一段时间后重新回到原消费队列重试,重试几次后仍然失败就转入

为什么要预扣库存怎么同步到mysql的

  • 顸扣库存主要是防止并发超卖,同步到MySQL

并发超卖的背景

  • 主要是异步落库,用rabbitmq,前端发起请求,后端执行lua脚本,返回成功后发送到rabbitmq,返回给前端抢号成功,mq消费者消费消息,再消费者里执行mys邙事务

mysql建索引不够吗 mq异步解耦消息丢了怎么办,

  • 为什么玩加大模型,敏感词过滤用分词加字典树不行吗
  • 怎么保证大模型出自己想要的效果,跑过数据集吗以及怎么观测

CHAM#

场景#

具体场景:

假设现在需要导出 10 万条数据。在向 Excel 写入的过程中,部分数据包含超长内容或 Excel 不支持的内容,导致写入异常。你考虑过这种情况吗?

面试被问到这个问题,还有包括查询数据库时出现的异常,怎么处理

Agent#

https://mp.weixin.qq.com/s/-7LmtflPn2xyTlwhqI2szw看了这篇OpenViking 整体是上下文管理系统,包括记忆、文件组织和检索。通篇体现渐进式披露思想。

记忆系统不太完全消化,将记忆抽取为事件和实体;通过会话提取记忆,清洗会话,记忆衰减;读取修改记忆,精排、最小替换(就是这里看不懂)。

除了渐进式披露,其他感觉和codex的文件,两阶段提取,根据使用次数、最近使用时间和索引更新的记忆系统不太一样。

​ ○ 看了一个benchmark

​ ○ 喜欢这个glossary ,agent如何判断向用户询问:可查证的事实**/无法从代码推导的偏好

● 明天打算做什么:

​ ○ https://x.com/huangtongxueh/status/2108577165306687938看看AI开发工作流

​ ○ 看看skill ops

​ ○ 记得复盘,继续看bm和

https://github.com/anthropics/skills/tree/main/skills/claude-api/shared/evals

消息队列#

Mafka和Kafka,说实话没看懂,我现在理解的概念关于Kafka有partition,消费者组,offset这些。mafka差不多,但有其他区别

十一#

消息队列#

​ ○ 比如原本有个交易场景,就是简单的扣除金额即可(这里直接同步正常做即可),后续发现这个扣除金额需要发送各种消息,消息很多写在一起同步的话,如果消息发送失败同理金额也要回滚(发现发消息没那么重要并且接受慢一点),于是这里可以异步并且解耦方法,首先确保金额交易正常,再异步调用发消息内容,后续如果有新内容比如消费新增积分,返现等等都可以异步解耦,但是异步存在一个问题,你怎么确保异步执行的方法能够不丢失,如果中途宕机重启怎么办,这里就可以使用消息队列作为一个中间件,金额交易正常之后发送消息并保存在Broker中随后消费(这里就是保证消息不丢失的八股),后续发现系统的并发大,如果一次性把全部消息推给消费者,消费者扛不住压力,于是这里推拉就可以使用,根据并发程度自己选择(说的比较简单可能有些问题没考虑

数据库#

​ 理简历产出之前功能用到mongoDB,去了解了一下业务场景,商家打印自定义模版的店铺配置通过类似json保存在🥭中,后续自主配置打印字段,直接覆盖,感觉比mysql灵活一点

自定义模版模块,针对mysql的数据结构不灵活和redis的检索慢问题,对比发现🥭的索引和较为自由的数据结构实现成本较低,ds带着我从业务到技术选型到场景拆分到边界,跳出自己的scope放在全局看业务,

dmw#

业务#

今天和前端对接出了点小矛盾,·一个更新子账号接口,原余额字段传的是当前分配的余额数,现需求是做增量,让用户直接在原余额上增加或减少,我的想法是保持原接口余额字段语义不变,让前端做一次计算,公式和上下界也给他文档了,他说看不懂文档,就是不做,说计算就是后端的事情,我们的+1看到我们在吵,也帮他辩解,说要把金额的计算放后端,我寻思传的字段还是原来的,只是值需要新增一次计算,后端早就对这个余额的值做好了校验,我觉得前端改就行了,不必再动后端逻辑,而且这个前端非常清闲,我做个破后端天天要忙,就是看不惯,我就是心里不平衡。我的+1是个十年老程序员,但是月薪不过万并且今年3月被前公司裁掉了,他原来写安卓的,但是我觉得他纯水货,他不是科班出身,最近还被我们合作的公司技术科普了get请求和post请求的区别,不知道git以及操作…就开个codex然后对AI许愿,最近不忙天天摸鱼,估计这么长的工作生涯都是这么过来的。我看到+1也劝,我不再争辩,没意义,很简单的需求,花点时间新加余额变化量字段解决。以后对接前端就保持最小变更与0信任防御编程,哈哈前端要做的事又会变少

博客https://www.2025521.xyz/2026/10/13/frontend-series-1/

代理模式#

设计模式的代理模式。不直接访问对象,而是通过代理访问,就像找明星谈事情不会直接找明星本人而是找ta的经纪人。Java中的aop就是代理模式的典型实现。把公共的逻辑(日志、鉴权、事务)抽取出来统一实现,调用放。我找了项目中的通用日志的实现,通过定义的一个OperateLogAspect接口实现给方法加注解-》@Around代理此方法-》通过反射+Threadlocal拿上下文信息-》填充日志表字段-》异步落库。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
知识库
https://blog.f3f3.top/posts/agent/知识库/
作者
Firefly
发布于
2026-07-18
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Firefly
Hello, I'm Firefly.
公告
此网站仅为个人学习笔记
分类
标签
最新动态
站点统计
文章
29
分类
11
标签
24
总字数
245,265
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.15.6
文章许可
CC BY-NC-SA 4.0