当前位置: 首页 > article >正文

Agent 记忆系统设计:短期、长期到知识图谱

一句话定义Agent 记忆系统 让 AI 像人一样把「刚刚发生的」「学过的」「长期积累的」分层管理。类比人类的记忆分三层——工作记忆当前对话的上下文几分钟内、情节记忆某件具体的事比如「上周我们讨论过 XX 方案」、语义记忆知识图谱比如「TypeScript 的类型系统是这样的」。AI 的记忆系统设计和这个完全对应人类记忆Agent 对应实现方式工作记忆短期记忆Context Window消息列表情节记忆长期记忆向量数据库语义检索语义记忆知识图谱结构化知识存储图数据库第一层短期记忆——Context Window 的正确用法短期记忆就是 Context Window 里的消息列表但原样塞满不是最优解。大多数开发者的实现是直接追加// ❌ 原始实现无脑追加必然 OOMconstmessages: Message[] [];asyncfunctionchat(userInput: string) { messages.push({ role: user, content: userInput });const response await llm.invoke(messages); // 越来越长最终爆 context messages.push({ role: assistant, content: response.content });return response.content;}问题很明显聊 20 轮之后Context Window 满了要么报错要么模型开始遗忘早期内容。正确做法滑动窗口 摘要压缩保留近期上下文的同时不丢失历史。import { ChatOpenAI } fromlangchain/openai;import { SystemMessage, HumanMessage, AIMessage } fromlangchain/core/messages;const llm newChatOpenAI({ model: gpt-4o-mini });// 核心动态管理消息列表asyncfunctionmanageHistory(history: Message[], maxTokens 4000): PromiseMessage[] {const currentTokens estimateTokens(history);if (currentTokens maxTokens) { return history; // 还没满原样返回 }// 保留最近 10 条5轮对话防止丢失即时上下文const recent history.slice(-10);const older history.slice(0, -10);// 用模型压缩历史比规则截断效果好 30%const summary await llm.invoke([ newSystemMessage( 将以下对话历史压缩成 200 字以内的摘要保留关键决策、用户偏好和重要结论 ), newHumanMessage( older.map((m) ${m.role}: ${m.content}).join(\n) ), ]);// 摘要作为系统消息放最前面return [ newSystemMessage(对话历史摘要${summary.content}), ...recent, ];}// 粗估 token 数4个字符约等于1个tokenfunctionestimateTokens(messages: Message[]): number {return messages.reduce((sum, m) sum m.content.length / 4, 0);}核心短期记忆不是越长越好滑动窗口 摘要压缩是平衡成本和质量的正确姿势。第二层长期记忆——向量数据库实现语义检索长期记忆解决的问题是「我一个月前告诉过你的事你现在能不能想起来」实现原理很直接——把历史对话或重要信息向量化存储需要时按语义相似度检索。关键点在于存什么、什么时候存、存多少。import { OpenAIEmbeddings } fromlangchain/openai;import { MemoryVectorStore } fromlangchain/vectorstores/memory;import { Document } fromlangchain/core/documents;// 初始化向量存储生产环境用 Pinecone / Weaviate / Chromaconst embeddings newOpenAIEmbeddings();const vectorStore newMemoryVectorStore(embeddings);// ✅ 选择性存储只存有价值的信息asyncfunctionsaveToLongTermMemory(content: string,metadata: { type: preference | fact | decision | task; importance: high | medium | low; userId: string; }) {// 低重要度的内容不存节省存储和检索噪音if (metadata.importance low) return;await vectorStore.addDocuments([ newDocument({ pageContent: content, metadata: { ...metadata, timestamp: Date.now(), // 重要存储时间戳旧的记忆权重要打折 }, }), ]);}// ✅ 检索时加时间衰减越近的记忆越相关asyncfunctionrecallMemory(query: string, userId: string) {const results await vectorStore.similaritySearchWithScore( query, 5, // 取最相似的 5 条 { userId } // 只检索当前用户的记忆 );// 时间衰减30天前的记忆相关性打 0.7 折const now Date.now();const decayedResults results.map(([doc, score]) { const ageInDays (now - doc.metadata.timestamp) / (1000 * 60 * 60 * 24); const decayFactor ageInDays 30 ? 0.7 : 1.0; return { doc, score: score * decayFactor }; });// 只返回相关性 0.7 的结果避免噪音return decayedResults .filter(({ score }) score 0.7) .map(({ doc }) doc.pageContent);}// 在 Agent 回答前先检索相关记忆注入 contextasyncfunctionagentWithMemory(userInput: string, userId: string) {const memories awaitrecallMemory(userInput, userId);const systemPrompt memories.length 0 ? 你记得关于这个用户的以下信息\n${memories.join(\n)}\n\n基于这些记忆回答问题。 : 你是一个助手。;return llm.invoke([ newSystemMessage(systemPrompt), newHumanMessage(userInput), ]);}核心长期记忆不是把所有对话都存进去选择性存储 时间衰减才能保持信噪比。第三层知识图谱——结构化知识的极致形态知识图谱解决的是「关系」问题——不只是记住事实还要记住事实之间的关联。举个例子「用户喜欢 React」「用户在做 AI 项目」「React 有 AI SDK」——如果这三条是孤立存储的Agent 无法推导出「可以向用户推荐 Vercel AI SDK」。但如果存在图里路径推理就能做到。实际开发中大多数项目用不到完整的图数据库Neo4j更常见的方案是用结构化 JSON 语义向量的混合存储// 混合记忆结构结构化属性 语义描述interfaceMemoryNode {id: string;type: person | project | preference | event;attributes: Recordstring, unknown;relations: Array{ type: string; // likes, works_on, knows_about targetId: string; }; embedding?: number[]; // 可选语义向量用于模糊检索}classStructuredMemoryStore {private nodes newMapstring, MemoryNode();// 存储或更新节点upsert(node: MemoryNode) { const existing this.nodes.get(node.id); if (existing) { // 合并属性不覆盖防止丢失旧信息 this.nodes.set(node.id, { ...existing, attributes: { ...existing.attributes, ...node.attributes }, relations: [...newSet([...existing.relations, ...node.relations])], }); } else { this.nodes.set(node.id, node); } }// 图遍历找到所有2跳以内的相关节点getRelated(nodeId: string, depth 2): MemoryNode[] { const visited newSetstring(); constresult: MemoryNode[] []; consttraverse (id: string, currentDepth: number) { if (currentDepth 0 || visited.has(id)) return; visited.add(id); const node this.nodes.get(id); if (!node) return; result.push(node); node.relations.forEach(({ targetId }) { traverse(targetId, currentDepth - 1); }); }; traverse(nodeId, depth); return result; }// 序列化为 LLM 可读的 contexttoContextString(nodeId: string): string { const related this.getRelated(nodeId); return related .map((n) [${n.type}] ${JSON.stringify(n.attributes)}) .join(\n); }}// 使用示例const memStore newStructuredMemoryStore();// 存入用户节点memStore.upsert({id: user_james,type: person,attributes: { name: James, role: frontend_developer },relations: [ { type: works_on, targetId: project_ai_assistant }, { type: prefers, targetId: tech_react }, ],});memStore.upsert({id: tech_react,type: preference,attributes: { name: React, category: frontend_framework },relations: [ { type: has_ecosystem, targetId: tech_vercel_ai_sdk }, ],});// Agent 回答时注入用户的知识图谱上下文const context memStore.toContextString(user_james);// 输出[person] {name:James,role:frontend_developer}// [preference] {name:React,category:frontend_framework}// ...核心知识图谱的价值在于「关系推理」混合结构化 JSON 向量是大多数项目的性价比最高方案。三层记忆的协作完整的记忆感知 Agent把三层记忆整合起来才是一个真正有记忆的 Agentimport { ChatOpenAI } fromlangchain/openai;import { SystemMessage, HumanMessage } fromlangchain/core/messages;classMemoryAwareAgent {private llm newChatOpenAI({ model: gpt-4o });privateshortTermHistory: Message[] [];privatelongTermStore: LongTermMemoryStore;privateknowledgeGraph: StructuredMemoryStore;constructor(privateuserId: string) { this.longTermStore newLongTermMemoryStore(); this.knowledgeGraph newStructuredMemoryStore(); }asyncchat(userInput: string): Promisestring { // Step 1: 检索长期记忆并行执行不阻塞 const [longTermMemories, graphContext] awaitPromise.all([ this.longTermStore.recall(userInput, this.userId), Promise.resolve(this.knowledgeGraph.toContextString(this.userId)), ]); // Step 2: 构建系统 prompt注入记忆层 const systemPrompt this.buildSystemPrompt(longTermMemories, graphContext); // Step 3: 管理短期记忆滑动窗口 const managedHistory awaitmanageHistory(this.shortTermHistory); // Step 4: 调用模型 const messages [ newSystemMessage(systemPrompt), ...managedHistory, newHumanMessage(userInput), ]; const response awaitthis.llm.invoke(messages); // Step 5: 更新短期记忆 this.shortTermHistory.push( { role: user, content: userInput }, { role: assistant, content: response.contentasstring } ); // Step 6: 异步决策是否存入长期记忆不影响响应速度 this.asyncSaveMemory(userInput, response.contentasstring); return response.contentasstring; }privatebuildSystemPrompt(memories: string[], graphCtx: string): string { const parts [你是一个有记忆的 AI 助手。]; if (graphCtx) { parts.push(\n关于用户你知道\n${graphCtx}); } if (memories.length 0) { parts.push(\n相关的历史记忆\n${memories.join(\n)}); } return parts.join(\n); }// 异步存储不阻塞当前响应privateasyncasyncSaveMemory(input: string, output: string) { // 让模型判断这轮对话是否值得记忆 const shouldSave awaitthis.llm.invoke([ newSystemMessage( 判断以下对话是否包含值得长期记忆的信息用户偏好/重要决策/事实只回答 yes 或 no ), newHumanMessage(用户${input}\n助手${output}), ]); if ((shouldSave.contentasstring).toLowerCase().includes(yes)) { awaitthis.longTermStore.save( 用户说${input}助手回答${output}, { type: conversation, importance: high, userId: this.userId } ); } }}核心三层记忆各司其职检索并行化存储异步化才能做到有记忆而不慢。常见坑坑1把所有对话都存进向量库// ❌ 每轮都存存了一堆没用的async function onMessage(msg: Message) { await vectorStore.addDocuments([new Document({ pageContent: msg.content })]);}向量库里全是「好的」「明白了」「那接下来呢」这类废话检索出来全是噪音。// ✅ 让模型判断是否值得存const worthSaving await llm.invoke([ new SystemMessage(这句话有没有值得记忆的关键信息yes/no), new HumanMessage(msg.content),]);if (worthSaving.content yes) { await vectorStore.addDocuments([...]);}坑2检索不区分用户// ❌ 全局检索用户A的记忆跑到用户B那里const results await vectorStore.similaritySearch(query, 5);生产环境里多用户共用一个向量库不加过滤条件会导致记忆错位。// ✅ 检索时带 userId 过滤const results await vectorStore.similaritySearch(query, 5, { filter: { userId: currentUserId },});坑3短期记忆直接截断丢失关键上下文// ❌ 超长就直接砍掉前面的if (messages.length 20) { messages messages.slice(-20); // 可能把任务背景砍掉了}用摘要压缩而不是硬截断// ✅ 超长时先摘要再拼接最近内容const summary await summarizeOlderMessages(messages.slice(0, -20));messages [new SystemMessage(历史摘要${summary}), ...messages.slice(-20)];坑4记忆注入太多反而稀释了 Prompt// ❌ 检索 Top 20 条全部塞进 promptconst memories await vectorStore.similaritySearch(query, 20);const systemPrompt 你知道${memories.join(\n)};// 20条记忆 用户问题 对话历史 Context 直接爆炸 plaintext // ✅ 控制注入数量只用相关性 0.8 的最多 5 条const results await vectorStore.similaritySearchWithScore(query, 5);const relevant results .filter(([_, score]) score 0.8) .map(([doc]) doc.pageContent);坑5忘记给记忆加过期机制记忆不应该永久有效。用户一年前说「我不喜欢 Vue」不代表现在还这样。// ✅ 存储时加 TTL检索时跳过过期记忆await vectorStore.addDocuments([newDocument({ pageContent: content, metadata: { timestamp: Date.now(), ttlDays: 90, // 90天后过期 }, }),]);// 检索时过滤只取 90 天内的记忆const cutoff Date.now() - 90 * 24 * 60 * 60 * 1000;const results await vectorStore.similaritySearch(query, 5, {filter: { timestamp: { $gt: cutoff } },});选型参考需求推荐方案备注单用户简单 chatbotMemoryVectorStoreLangChain 内存版开发测试用不持久化多用户生产环境Chroma / Pinecone / WeaviateChroma 本地部署友好Pinecone 托管省心需要关系推理Neo4j 向量混合复杂度高一般 Agent 不需要企业内网知识库pgvectorPostgreSQL 插件已有 PG 的团队最低迁移成本学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关文章:

Agent 记忆系统设计:短期、长期到知识图谱

一句话定义 Agent 记忆系统 让 AI 像人一样,把「刚刚发生的」「学过的」「长期积累的」分层管理。 类比:人类的记忆分三层——工作记忆(当前对话的上下文,几分钟内)、情节记忆(某件具体的事,…...

从源码编译到驱动部署:Windows Qt环境下QMYSQL驱动缺失的完整修复指南

1. 问题背景与诊断 当你第一次在Windows上用Qt连接MySQL数据库时,那个刺眼的"Driver not loaded"错误提示是不是让你瞬间头皮发麻?别担心,这几乎是每个Qt开发者都会遇到的经典问题。我清楚地记得自己第一次遇到这个报错时&#xff…...

8卡海光Z100L服务器实战:手把手教你用vLLM部署32B大模型(附完整镜像与配置)

8卡海光Z100L服务器实战:从零部署Qwen2.5-32B大模型全流程指南 国产化算力平台正在成为AI基础设施的新选择。海光Z100L作为国产高性能计算卡的代表,其8卡服务器的配置足以承载32B参数规模的大模型推理。本文将完整呈现从硬件验收到模型服务的全链路操作&…...

STM32F103用FSMC驱动ILI9341屏幕,我踩过的那些坑(附完整代码)

STM32F103用FSMC驱动ILI9341屏幕的五大实战陷阱与解决方案 当我在第一次尝试用STM32F103的FSMC接口驱动ILI9341液晶屏时,本以为按照手册连接好线就能轻松点亮,结果却遭遇了各种意想不到的问题。从硬件连接到软件配置,几乎每一步都藏着"坑…...

告别Servo库!手把手教你用Arduino UNO的PWM引脚直接驱动舵机(附串口控制代码)

Arduino舵机控制终极指南:从底层PWM到串口交互实战 在创客和机器人项目中,舵机控制是最基础却至关重要的技能之一。市面上大多数教程都依赖现成的Servo库,这虽然简化了开发流程,却也让我们错过了理解底层原理的机会。本文将带你深…...

别只盯着密码锁!用C51单片机+4x4键盘,我还能玩出这些花样(附代码思路)

突破密码锁边界:C51单片机4x4键盘的创意开发指南 当你已经用C51单片机和4x4矩阵键盘完成了一个基础密码锁项目后,是否想过这套硬件还能玩出什么新花样?实际上,这套组合的开发潜力远不止于此。本文将带你探索四种完全不同的应用方向…...

GT2440开发板RT3070L USB WiFi网卡DHCP客户端移植实战:从源码编译到网络配置

1. RT3070L USB WiFi网卡与GT2440开发板简介 GT2440是一款基于三星S3C2440处理器的经典嵌入式开发板,广泛应用于工业控制和物联网设备开发。这款开发板虽然性能不算顶尖,但胜在稳定可靠,社区支持完善,是学习嵌入式开发的绝佳平台。…...

# 发散创新:用Go语言打造绿色计算的高效任务调度器在当今算力飞速增长的

发散创新:用Go语言打造绿色计算的高效任务调度器 在当今算力飞速增长的时代,绿色计算已成为不可逆的趋势。它不仅关乎节能减排,更体现在资源利用率、能耗感知与动态优化上。本文将带你从底层出发,使用 Go 语言 实现一个轻量级但功…...

基于单片机的智能泡茶机设计(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T1172310M设计简介:吧电源: 5V 传感器:温度传感器(DS18B20)、水位传感器(Water Sens…...

STM32烧录程序全攻略:从ST-LINK到USB转TTL,手把手教你避坑

STM32烧录程序实战指南:工具选择与避坑手册 第一次拿到STM32开发板时,看着密密麻麻的引脚和一堆专业术语,很多初学者都会感到无从下手。烧录程序作为嵌入式开发的第一步,往往成为新手遇到的第一个技术门槛。本文将带你深入理解不…...

2026年本地1分钟喂奶级集成OpenClaw及大模型百炼APIKey教程

2026年本地1分钟喂奶级集成OpenClaw及大模型百炼APIKey教程。还在为部署OpenClaw到处找教程踩坑吗?别再瞎折腾了!OpenClaw一键部署攻略来了,无需代码、只需两步,新手小白也能轻松拥有专属AI助理! 一、先搞懂&#xff1…...

WELearn网课助手:3步实现学习效率提升300%的终极解决方案

WELearn网课助手:3步实现学习效率提升300%的终极解决方案 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案;支持班级测试;自动答题;刷时长;基于生成式AI(ChatGPT)的答案生成 项目地址: https://gitcode…...

毕业论文降AI免费检测全攻略:SpeedAI科研小助手实测指南

毕业论文AI查重核心检测逻辑是什么? 目前高校主流的AI查重系统会将论文按「句子-段落-章节」三级拆分提取特征指纹,与海量学术资源库、公开网络内容进行多层比对,重点标记四类问题内容: 连续13字及以上的完全重复片段仅替换同义词…...

被低估的前端核弹:CSTI客户端模板注入深度解析与攻防实战

在Web安全领域,XSS(跨站脚本攻击)早已是老生常谈的话题,SSTI(服务器端模板注入)也随着各类CTF比赛的普及被广大安全从业者熟知。然而,有一种介于两者之间、威力却远超传统XSS的漏洞——CSTI&…...

Jmeter+Fiddler组合拳:App接口安全测试的完整指南(含性能优化)

JmeterFiddler组合拳:App接口安全测试的完整指南(含性能优化) 在移动应用开发领域,接口安全测试已经从"可有可无"变成了"必不可少"的环节。随着金融、电商类App对数据安全要求的不断提高,仅靠功能…...

Java开发者面对大模型,到底在焦虑什么?

来,聊点儿真心话。 之前做AI项目的时候,身边搞Java的朋友普遍有个心态:觉得自己站在风口外面,干瞪眼。因为提到大模型,满世界都是Python的教程、框架、工具链,Java开发者好像天然跟这件事隔着一层。这种焦虑…...

LLM系列:1.python入门:8.集合型对象(SetFrozenset)

集合型对象(Set&Frozenset) 一. 集合基础 集合(set)是一种无序且可变类型的容器。 可以将集合看作是字典的一种特殊形式——由字典的 Keys 所组成的列表。因此集合具备两个核心特征:其一,集合内的元素必须是不可变对象类型&am…...

盟接之桥说制造:撕开实际成本核算的“遮羞布”,别让管理漏洞吞噬你的利润

在制造业的江湖里,流传着一个关于成本核算的“神话”:似乎只要搞一套ERP系统,设定好材料、人工、费用的分摊规则,按下计算按钮,精准的成本数据就会像自来水一样流出来。很多老板和财务负责人天真地以为,成本…...

神经渲染避坑指南:训练自己的NeRF模型时遇到的7个典型问题及解决方案

神经渲染避坑指南:训练自己的NeRF模型时遇到的7个典型问题及解决方案 当你第一次尝试用NeRF(神经辐射场)重建一个3D场景时,那种兴奋感很快会被现实问题冲淡——为什么我的渲染结果全是噪点?为什么训练了三天三夜还是模…...

PyTorch实战:5种模型剪枝方法对比与避坑指南(附代码)

PyTorch实战:5种模型剪枝方法对比与避坑指南(附代码) 在深度学习模型部署的实际场景中,我们常常面临一个矛盾:模型越大,精度通常越高,但对计算资源和推理速度的要求也越高。这就引出了模型剪枝技…...

从CGAN到BEGAN:5种主流GAN变体保姆级选型指南(附PyTorch核心代码对比)

从CGAN到BEGAN:5种主流GAN变体实战选型指南 当你面对一个具体的图像生成任务时,最头疼的问题往往是:这么多GAN变体,我到底该选哪个?DCGAN、WGAN-GP、CGAN、BEGAN各有特点,但纸上谈兵的理论对比远不如实际项…...

【学习笔记】深度拆解 Claude Code:12 个可复用的 Agentic Harness 设计模式

模型可以换,工具也会变,但这些设计很可能会一直存在。Kubernetes Patterns[1] 和 Prompt Patterns[2] 的作者 Bilgin lbryam 从源码里整理了 12 个可以复用的设计模式,分成四类:记忆与上下文、工作流与编排、工具与权限、自动化。…...

Windows驱动管理终极指南:Driver Store Explorer 5分钟上手教程

Windows驱动管理终极指南:Driver Store Explorer 5分钟上手教程 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾因C盘空间不足而烦恼?是否遇到过驱动程序…...

重大利好!跨境电商再获政策支持,行业迎来新机遇

刚刚得到消息,国家将进一步支持跨境电商发展。这对于我们从业者来说是好消息。一、机遇方面政策支持力度加大,海关流程更加便捷,物流渠道更加丰富。二、挑战方面行业竞争加剧,客户要求提高,合规成本上升。三、应对策略…...

全球轮胎帘子布市场深度剖析:2026-2032期间年复合增长率(CAGR)为5.2%

QYResearch调研显示,2025年全球轮胎帘子布市场规模大约为134.7亿美元,预计2032年将达到191.5亿美元,2026-2032期间年复合增长率(CAGR)为5.2%。轮胎帘子布,作为轮胎制造的关键纺织材料,又称轮胎帘…...

LLM核心参数配置指南:基础篇

gzh: AI-Frontiers和大语言模型聊天的时候,你是不是也觉得,光会写提示词还不够?有时候模型答得乱七八糟,真不是你的问题。其实不管是直接用对话框,还是调API,有个小细节特别容易被忽略——配置参数。你可以…...

当代码成为冒险:CodeCombat如何重新定义编程学习体验

当代码成为冒险:CodeCombat如何重新定义编程学习体验 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 还记得第一次面对黑屏终端时的那种迷茫吗?或者看着满屏的语法错误却不…...

广告联盟APP开发前端逻辑

广告联盟APP如何在性能和用户体验间找到平衡?这是一个让人感兴趣的议题。 近年来,随着移动互联网的迅速发展,广告联盟APP成为众多平台和开发者关注的重点。这些应用的核心功能在于实现高效的广告展示、精准的用户行为追踪、透明的收益分配以及…...

暗黑2存档编辑神器:3分钟掌握d2s-editor终极使用指南

暗黑2存档编辑神器:3分钟掌握d2s-editor终极使用指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2的装备掉落率太低而烦恼吗?😩 想不想轻松调整角色属性,打造…...

Claude code与IBM Engineering Lifecycle Management协同研发

IBM Engineering Lifecycle Management包含需求编写与管理、源代码管理、变更管理、测试管理和工程方法编写与规范等功能,我想将claude code和IBM Engineering Lifecycle Management协同工作,但是IBM Engineering Lifecycle Management的界面是web,而且它…...