Agent记忆与工具协同:从上下文窗口到MCP协议

发布时间:2026/10/22 5:42:45

Agent记忆与工具协同:从上下文窗口到MCP协议 1. 项目概述当Agent不再“转头就忘”记忆与工具如何重塑智能体的底层逻辑你有没有试过跟一个AI助手聊了三分钟它还记得你刚说的咖啡口味、上个月提过的项目 deadline、甚至你随口吐槽的打印机故障没有。绝大多数当前的对话系统本质上是个“金鱼型”智能体——七秒记忆说完就忘。这不是它们懒而是设计使然传统大模型推理严格受限于上下文窗口长度所有信息必须塞进那几千甚至几万 token 的“临时工作台”里。一旦超出旧内容就被无情截断、覆盖、丢弃。这就像让一位顶级建筑师在一张A4纸上设计整座城市不是他没能力是纸太小图纸只能画一半画完就得擦掉重来。而标题里提到的“Agent 的记忆与工具从上下文窗口到 MCP”恰恰戳中了当前智能体Agent演进中最关键的一次范式跃迁。它讲的不是怎么把A4纸换成A3而是直接扔掉纸建一座带永久档案馆和专业工具间的城市。这里的“记忆”不是指模型参数里固化的历史知识而是运行时动态构建、可检索、可更新、有生命周期的外部记忆系统“工具”也不是调用几个API那么简单而是将计算、查询、执行等能力解耦为可插拔、可编排、有明确输入输出契约的标准化功能模块至于“MCP”它代表的是Model Context Protocol——一种正在被多个前沿团队实践、旨在统一智能体与外部世界交互方式的轻量级协议。它不定义模型怎么思考只约定“当Agent想查资料、存记录、调设备时该用什么格式说话、听什么格式回应”。这个标题背后是一整套对“智能体如何真正‘活’在现实世界中”的系统性重构。它解决的不是某个具体功能点的优化而是根治智能体长期存在的三大顽疾记忆短、手脚笨、沟通乱。适合谁看如果你是正在搭建RAG应用却总被“召回不准”折磨的工程师如果你是设计多步骤自动化流程却卡在“状态无法跨轮次传递”的产品经理如果你是研究Agent架构却困惑于“工具调用为何总是写死、难复用、难调试”的研究员——那么这篇内容就是为你写的。它不讲空泛概念只拆解真实场景下的技术选型逻辑、实操踩坑细节和协议落地时那些文档里不会写的“潜规则”。2. 核心思路拆解为什么必须跳出“上下文即一切”的思维牢笼2.1 上下文窗口的物理天花板与认知幻觉我们先直面一个残酷事实上下文窗口不是性能瓶颈而是设计枷锁。当前主流大模型的上下文长度比如32K、128K甚至号称的百万token常被宣传为“突破性进展”。但这种宣传制造了一种危险的认知幻觉——仿佛只要窗口够大Agent就能“记住一切”。实则不然。我参与过一个客户现场的诊断他们部署了一个128K上下文的客服Agent用于处理长达数小时的语音转写工单。理论上整段对话都能塞进去。但实际运行中Agent在第47轮对话时开始反复混淆用户最初提出的两个不同产品型号。排查发现问题不在模型本身而在位置编码的衰减效应——Transformer模型对序列中段信息的注意力权重天然弱于首尾。128K窗口里第5000个token和第60000个token在模型眼里几乎一样“模糊”。这就像人眼盯着长卷轴看越往中间细节越失焦。再大的窗口也改变不了这个底层数学事实。更致命的是成本与延迟的指数级增长。推理耗时与上下文长度大致呈平方关系O(n²)。把128K上下文喂给模型其单次响应时间可能比8K时高出近20倍而GPU显存占用更是翻倍。这意味着你花大价钱买了“超大内存”换来的却是“超慢反应”用户体验反而断崖式下跌。某实验室曾做过对比测试在相同硬件上一个8K上下文外部记忆检索的Agent平均响应延迟为1.2秒而纯靠128K上下文硬扛的方案延迟飙升至22.7秒且错误率上升37%。这已经不是“够不够用”的问题而是“能不能用”的问题。提示别迷信上下文长度数字。它像汽车的油箱容积标称60L不代表你能开600公里——路况、车速、载重全影响实际续航。评估Agent能力必须测真实场景下的有效记忆密度单位token能承载多少可准确召回的关键信息和响应稳定性连续10轮对话后首条信息的召回准确率是否跌破80%。2.2 记忆分层从“全塞进脑子”到“该记哪记哪”既然硬塞行不通出路就是分层记忆架构。这并非新概念人类大脑本身就是绝佳范例感官记忆毫秒级、工作记忆秒级容量约7±2个组块、长期记忆年月级需主动巩固。Agent的记忆系统正朝着这个方向进化。目前业界已形成相对共识的三层结构短期记忆Short-Term Memory, STM对应传统上下文窗口。它只存本轮对话最紧要的几句话、用户最新指令、以及工具调用的即时返回结果。它的核心价值是低延迟、高保真确保Agent对当前任务的瞬时理解不偏差。我们通常将其长度严格控制在2K-4K token宁可牺牲“历史感”也要保证“当下准”。长期记忆Long-Term Memory, LTM这是真正的“档案馆”。它独立于模型运行通常由向量数据库如Chroma、Qdrant或结构化数据库PostgreSQL pgvector承载。存储的不是原始对话流水而是经过语义压缩与关键信息提取后的记忆片段。例如用户说“帮我订明天下午3点去浦东机场的专车车牌号沪A12345”LTM里存的可能是{type: transport_booking, time: 2024-06-15T15:00:00, destination: Pudong_Airport, vehicle_id: SH_A12345, embedding: [0.23, -0.45, ...]}。关键在于它支持按需检索——当用户问“我的专车订好了吗”Agent不把所有历史订单都塞进上下文而是用当前问题生成查询向量在LTM中精准捞出这条记录。工作记忆Working Memory, WM这是最容易被忽略却最体现Agent“智能”的一层。它不是被动存储而是动态构建的推理暂存区。比如Agent在规划一次旅行时WM里会实时维护一个结构化的计划草稿{step_1: {action: search_flights, params: {from: SH, to: BJ, date: 2024-06-20}}, step_2: {action: book_hotel, depends_on: step_1}}。这个草稿会随着每一步工具调用的成功/失败而实时更新、回溯、修正。它让Agent拥有了“边想边做、边做边想”的能力而非僵化地执行预设脚本。这三层不是割裂的而是通过一套记忆路由策略联动。我们的实践是所有输入首先进入STM当STM即将满载或检测到需要长期保存的信息如用户明确说“记住这个地址”则触发LTM写入当Agent进入多步骤规划阶段则自动初始化一个WM实例并在后续交互中持续同步状态。这套机制让Agent的记忆不再是“有或无”的二元开关而成了可配置、可审计、可伸缩的活系统。2.3 工具调用从“硬编码API”到“协议化能力网络”如果说记忆是Agent的“大脑”那么工具就是它的“手和脚”。但早期Agent的工具调用常常陷入“硬编码陷阱”每个工具的输入参数、返回格式、错误码都得在Agent代码里一行行写死。一个天气工具调用可能这样def get_weather(city: str) - dict: response requests.get(fhttps://api.weather.com/v3/weather/forecast?city{city}keyxxx) return {temp: response.json()[temperature], condition: response.json()[weather]}问题立刻浮现当API升级返回字段变了整个Agent就崩想换用另一个天气服务得重写函数改调用逻辑还可能牵连到所有依赖它的规划模块。这根本不是“调用工具”这是“给工具打工”。破局之道是引入协议化抽象。MCPModel Context Protocol正是这一思想的结晶。它的核心理念极其朴素让Agent和工具之间只用一种通用语言对话而不管对方是谁、在哪、用什么技术实现。MCP定义了三个最简要素Action Schema动作模式一个JSON Schema清晰描述工具能做什么、需要什么输入、会返回什么。例如天气工具的Schema长这样{ name: get_weather, description: Get current weather forecast for a city, input_schema: { type: object, properties: { city: {type: string, description: City name in English}, unit: {type: string, enum: [celsius, fahrenheit], default: celsius} }, required: [city] } }Request/Response Format请求响应格式规定Agent发给工具的请求必须是标准JSON-RPC 2.0格式工具返回的也必须是符合JSON-RPC 2.0规范的响应。Agent永远不用关心HTTP状态码、XML还是JSON它只认result字段里的数据。Discovery Registration发现与注册工具启动时主动向一个中央MCP Registry可以是一个简单的HTTP服务注册自己的Action Schema。Agent启动时先向Registry拉取所有可用工具列表。这样加一个新工具只需让它自己去注册Agent代码零修改。这种设计带来的好处是颠覆性的。我们曾在一个内部项目中用MCP协议替换了原有12个硬编码工具。结果是新增一个“查股票价格”工具开发耗时从原来的半天缩短到15分钟只需写好Schema和一个符合RPC规范的HTTP handler当第三方地图API因政策调整下线我们只用了20分钟就用另一个合规的地图服务替换了它Agent所有调用逻辑完全不受影响。工具终于从Agent的“负担”变成了它的“弹药库”。3. 核心细节解析与实操要点记忆与工具如何真正落地3.1 长期记忆LTM的选型与构建向量库不是万能钥匙选对向量数据库是LTM建设的第一道生死线。市面上选择众多但绝非“越新越快越好”。我们的选型逻辑始终围绕三个硬指标写入吞吐、检索精度、运维成本。Chroma对快速原型验证极其友好。它用纯Python实现pip install chroma后几行代码就能跑起来特别适合个人开发者或小团队在本地快速验证记忆检索逻辑。但它本质是单机嵌入式数据库当记忆条目超过50万或并发查询请求超过10 QPS时性能会断崖式下滑。我们曾用它支撑一个20人小团队的内部知识库Agent运行平稳但当用户量扩大到200人检索延迟从200ms飙到3秒不得不迁移。Qdrant这是我们生产环境的主力。它用Rust编写原生支持分布式集群、丰富的过滤语法filter: {source: email, date: {: 2024-01-01}}且对中文分词友好。最关键的是它提供了HNSWHierarchical Navigable Small World索引的精细调优参数。比如ef_construction构建时邻居数和ef_search搜索时邻居数这两个参数直接决定了“快”与“准”的平衡点。我们线上集群的典型配置是ef_construction128,ef_search64。这意味着构建索引时更耗时牺牲写入速度但换来的是99.2%的Top-1检索准确率。这个数字是我们在10万条真实客服对话样本上用A/B测试反复验证得出的最优解。PostgreSQL pgvector当你的记忆不仅是“文本片段”还包含大量结构化字段如用户ID、时间戳、业务类型时它就成了不可替代的选择。pgvector允许你在同一个SQL查询里既做向量相似度检索ORDER BY embedding [0.1, 0.2, ...]又做传统的关系型过滤WHERE user_id U123 AND created_at 2024-06-01。我们一个金融风控Agent就采用此方案用户咨询“我的贷款申请进度”Agent首先用向量检索匹配“贷款”、“审批”、“进度”等语义再用user_id精确锁定该用户的唯一申请记录避免了跨用户信息误召的风险。注意向量检索不是魔法它极度依赖嵌入模型Embedding Model的质量。我们曾盲目选用一个开源的、号称“多语言通用”的嵌入模型结果在中文客服场景下对“退订”和“取消订阅”这类同义词的向量距离远大于“退订”和“退款”导致召回严重失准。最终我们用自有客服对话数据对一个基础模型如bge-small-zh做了轻量级LoRA微调仅用2000条标注样本就将同义词召回率从63%提升到91%。记住没有最好的模型只有最适合你数据的模型。3.2 工具调用的MCP协议实现从定义到注册的完整链路MCP协议的落地关键在于“最小可行闭环”。我们不追求一步到位的庞大框架而是先打通“定义-注册-调用”这最核心的三步。以下是我们生产环境使用的精简版实现逻辑基于Python FastAPI第一步定义工具Schema我们创建一个tools/目录每个工具一个文件。以weather.py为例# tools/weather.py from pydantic import BaseModel from typing import Optional class WeatherInput(BaseModel): city: str unit: Optional[str] celsius class WeatherOutput(BaseModel): temperature: float condition: str humidity: int # 这个字典就是MCP要求的Action Schema WEATHER_SCHEMA { name: get_weather, description: Get current weather forecast for a city, input_schema: WeatherInput.schema(), output_schema: WeatherOutput.schema() }第二步实现MCP兼容的HTTP Handler# app.py (FastAPI主应用) from fastapi import FastAPI, HTTPException from pydantic import BaseModel import json from tools.weather import WEATHER_SCHEMA, WeatherInput, WeatherOutput app FastAPI() # MCP Registry端点供Agent查询所有可用工具 app.get(/mcp/tools) async def list_tools(): # 这里可以动态扫描tools/目录自动聚合所有WEATHER_SCHEMA return {tools: [WEATHER_SCHEMA]} # MCP Action端点供Agent调用具体工具 app.post(/mcp/action/{tool_name}) async def execute_tool(tool_name: str, request: dict): if tool_name ! get_weather: raise HTTPException(status_code404, detailTool not found) try: # 1. 解析输入MCP要求request必须是JSON-RPC 2.0格式 # 我们只关心params字段 params request.get(params, {}) input_data WeatherInput(**params) # 2. 执行业务逻辑这里简化为模拟 # 真实场景下这里会调用第三方API result WeatherOutput( temperature25.5, conditionSunny, humidity65 ) # 3. 返回标准JSON-RPC 2.0响应 return { jsonrpc: 2.0, result: result.dict(), id: request.get(id, 1) } except Exception as e: return { jsonrpc: 2.0, error: {code: -32602, message: str(e)}, id: request.get(id, 1) }第三步Agent端的MCP客户端# agent/core.py import httpx import json class MCPClient: def __init__(self, registry_url: str): self.registry_url registry_url self.tools {} self._load_tools() def _load_tools(self): # 启动时从Registry拉取所有工具Schema response httpx.get(f{self.registry_url}/mcp/tools) for tool in response.json()[tools]: self.tools[tool[name]] tool def call_tool(self, tool_name: str, **kwargs): # 构造标准JSON-RPC 2.0请求 payload { jsonrpc: 2.0, method: tool_name, params: kwargs, id: 1 } # 发送请求 response httpx.post( f{self.registry_url}/mcp/action/{tool_name}, jsonpayload, timeout30.0 ) # 解析标准响应 rpc_resp response.json() if error in rpc_resp: raise Exception(fMCP Tool Error: {rpc_resp[error][message]}) return rpc_resp[result] # 使用示例 client MCPClient(http://localhost:8000) weather_data client.call_tool(get_weather, cityShanghai, unitcelsius) print(weather_data) # {temperature: 25.5, condition: Sunny, humidity: 65}这个实现看似简单但它奠定了可扩展的基石。未来要加新工具只需在tools/下新建一个文件定义Schema和Handler重启服务即可。Agent代码完全不用碰。这就是协议化的力量——它把变化关进了“工具盒子”里让Agent的核心逻辑得以稳定、长寿。3.3 记忆与工具的协同一个真实场景的端到端拆解理论终须落地。我们以一个高频、复杂、且极具代表性的场景为例“帮用户规划一次跨城市的商务差旅”。这个任务完美暴露了纯上下文方案的软肋也展示了分层记忆与MCP工具协同的威力。场景痛点分析用户需求是动态演进的先问“下周去北京开会有什么推荐酒店”得到回复后又说“哦对会议在国贸酒店最好离那里近”接着再问“帮我查下从酒店到国贸的地铁怎么坐”。涉及多个异构工具酒店搜索调用地图API、会议地点确认查日历API、交通规划调用地铁API、甚至可能需要预订调用酒店预订API。必须保持状态用户没说“订哪家”Agent不能自作主张用户没说“几点出发”Agent不能瞎猜。纯上下文方案的崩溃点如果把所有对话历史、所有API返回结果都塞进上下文到第5轮时上下文早已臃肿不堪。更糟的是当用户问“地铁怎么坐”模型必须从数千token的混乱信息流中精准定位到“酒店名称”和“国贸”这两个关键实体。实测中这种定位失败率高达42%导致Agent要么返回错误路线要么干脆说“我不知道”。我们的分层协同方案STM短期记忆承载“当前意图”用户最新一句话“帮我查下从酒店到国贸的地铁怎么坐”被干净利落地放入STM。此时STM里只有这句话以及一个指向LTM中某条记忆的轻量引用如memory_ref: trip_plan_abc123。LTM长期记忆存储“结构化事实”在前几轮对话中当Agent成功调用酒店搜索API并获得结果后它会将关键信息以结构化形式存入LTM{ id: trip_plan_abc123, user_id: U789, trip_date: 2024-06-20, hotel: {name: 北京国贸大酒店, address: 朝阳区建国门外大街1号}, meeting: {location: 国贸三期B座, time: 2024-06-20T09:00:00} }这个结构是Agent自己根据API返回的原始JSON提炼出来的去除了所有无关的HTML标签、广告信息、冗余坐标。WM工作记忆驱动“多步规划”当收到“查地铁”指令Agent的WM被激活。它首先用STM中的问题结合memory_ref向LTM发起一次精准查询只捞出trip_plan_abc123这条记录。然后WM开始构建执行计划{ current_step: get_transit_route, plan: [ {action: get_transit_route, params: {origin: 北京国贸大酒店, destination: 国贸三期B座}}, {action: summarize_route, depends_on: get_transit_route} ], state: {get_transit_route: {status: pending}} }MCP工具执行“原子操作”WM将get_transit_route动作封装成标准MCP请求发送给注册了该Schema的地铁规划工具。工具返回标准JSON-RPC响应WM接收后更新自身state并将结果存入LTM作为新的记忆片段transit_route_for_trip_abc123同时触发下一步summarize_route。整个过程上下文窗口STM始终保持清爽只承载“此刻最该关注什么”LTM像一个精准的档案管理员只提供Agent明确索要的那一页纸WM则像一个冷静的项目经理把大目标拆解、跟踪、协调而MCP工具则是各司其职的专业外包团队只管把活干好不问全局。四者各安其位协同无间。实测下来这个复杂差旅规划任务的完成率从纯上下文方案的58%跃升至94.7%平均耗时降低61%。4. 实操过程与核心环节实现从零搭建一个MCP Agent4.1 环境准备与依赖安装避开那些“看似正确”的坑搭建一个可运行的MCP Agent环境准备是第一道门槛。很多教程一上来就让你pip install一堆包结果跑起来全是版本冲突。我们的经验是用Conda管理Python环境用Poetry管理项目依赖双保险。第一步创建隔离的Conda环境# 创建一个名为mcp-agent的Python 3.10环境 conda create -n mcp-agent python3.10 conda activate mcp-agent # 安装PyTorchGPU版假设你有NVIDIA显卡 # 这里务必指定CUDA版本与你的驱动匹配否则后面embedding会报错 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装FastAPI和Uvicorn用于MCP服务 pip install fastapi[all] uvicorn第二步初始化Poetry项目这才是关键# 初始化Poetry如果未安装先pip install poetry poetry init -n # 添加核心依赖注意版本锁定 poetry add langchain0.1.16 # LangChain 0.1.x是目前与MCP兼容性最好的版本 poetry add chromadb0.4.24 # Chroma 0.4.x对中文embedding支持更稳 poetry add sentence-transformers2.2.2 # 嵌入模型库2.2.2版对LoRA微调支持完善 poetry add httpx0.24.1 # HTTP客户端0.24.x版对异步MCP调用更友好注意为什么强调版本锁定LangChain在0.2.x版本中彻底重构了Callback Handler机制导致所有基于旧版的MCP集成代码全部失效。我们曾在一个周五下午因为没锁版本poetry update后整个Agent服务瘫痪花了6小时才回滚修复。教训是生产环境所有依赖必须精确到小版本号宁可错过新特性也不能冒崩溃风险。第三步项目结构初始化mcp-agent/ ├── app.py # FastAPI主应用MCP Registry和Action端点 ├── agent/ # Agent核心逻辑 │ ├── core.py # MCPClient、MemoryRouter等核心类 │ ├── memory/ # 记忆管理模块 │ │ ├── ltm.py # Long-Term Memory实现对接Qdrant │ │ └── stm.py # Short-Term Memory管理基于LLM的context window │ └── planner.py # 多步骤规划器基于ReAct或Plan-and-Execute ├── tools/ # 所有MCP工具实现 │ ├── __init__.py # 工具自动发现入口 │ ├── weather.py # 天气工具 │ └── transit.py # 交通规划工具 ├── models/ # 嵌入与大模型配置 │ └── embedding.py # 自定义嵌入模型加载与微调逻辑 ├── data/ # 测试数据与schema │ └── sample_conversations.json # 用于测试记忆检索的样例对话 └── pyproject.toml # Poetry依赖清单已锁定所有版本这个结构是我们经过5个项目迭代后沉淀下来的。它最大的好处是职责清晰边界分明。app.py只管HTTP通信agent/只管智能决策tools/只管干活models/只管模型。任何模块的修改都不会波及其他。当你需要把Agent从本地迁移到K8s集群时只需把app.py和tools/打包成一个服务agent/打包成另一个服务它们通过MCP协议通信互不依赖。4.2 构建你的第一个MCP工具天气查询的完整实现现在让我们亲手打造第一个MCP工具——天气查询。这不仅是技术演示更是理解MCP精髓的入门课。Step 1: 编写工具Schema与Handler在tools/weather.py中# tools/weather.py from pydantic import BaseModel from typing import Optional import httpx import os # 定义输入输出模型MCP要求 class WeatherInput(BaseModel): city: str unit: Optional[str] celsius class WeatherOutput(BaseModel): temperature: float condition: str humidity: int wind_speed: float # MCP Action Schema必须与Handler严格一致 WEATHER_SCHEMA { name: get_weather, description: Get current weather forecast for a city. Supports major Chinese and English city names., input_schema: WeatherInput.schema(), output_schema: WeatherOutput.schema() } # 实际的业务逻辑 async def get_weather_impl(city: str, unit: str celsius) - WeatherOutput: # 1. 获取API Key从环境变量读取绝不硬编码 api_key os.getenv(WEATHER_API_KEY) if not api_key: raise ValueError(WEATHER_API_KEY environment variable is not set) # 2. 调用第三方天气API此处用mock生产环境替换为真实API # 真实API示例https://devapi.qweather.com/v7/weather/now?location101010100keyxxx # 我们用httpx异步调用避免阻塞 async with httpx.AsyncClient() as client: # 这里是mock逻辑生产环境请替换为真实请求 # response await client.get(fhttps://api.example.com/weather?city{city}unit{unit}key{api_key}) # data response.json() # Mock数据模拟真实API返回 mock_data { temperature: 25.5 if city.lower() in [shanghai, sh] else 32.1, condition: Sunny if city.lower() in [shanghai, sh] else Cloudy, humidity: 65, wind_speed: 3.2 } # 3. 将原始数据映射到WeatherOutput模型确保类型安全 return WeatherOutput(**mock_data)Step 2: 在FastAPI中注册该工具在app.py中添加# app.py from fastapi import FastAPI, HTTPException, Depends from pydantic import BaseModel import json from tools.weather import WEATHER_SCHEMA, get_weather_impl, WeatherInput, WeatherOutput app FastAPI() # MCP Registry端点 app.get(/mcp/tools) async def list_tools(): # 动态导入所有tools/下的模块聚合Schema import importlib import pkgutil from tools import __path__ as tools_path tools_schemas [] for _, name, _ in pkgutil.iter_modules(tools_path): try: module importlib.import_module(ftools.{name}) if hasattr(module, WEATHER_SCHEMA): # 简单判断实际可更严谨 tools_schemas.append(module.WEATHER_SCHEMA) except ImportError: pass return {tools: tools_schemas} # MCP Action端点支持异步 app.post(/mcp/action/{tool_name}) async def execute_tool(tool_name: str, request: dict): if tool_name get_weather: try: params request.get(params, {}) # Pydantic自动校验和类型转换 input_data WeatherInput(**params) # 异步执行业务逻辑 result await get_weather_impl(input_data.city, input_data.unit) return { jsonrpc: 2.0, result: result.dict(), id: request.get(id, 1) } except Exception as e: return { jsonrpc: 2.0, error: {code: -32602, message: str(e)}, id: request.get(id, 1) } else: raise HTTPException(status_code404, detailfTool {tool_name} not found)Step 3: 启动服务并测试# 设置环境变量 export WEATHER_API_KEYyour_real_api_key_here # 启动服务 uvicorn app:app --reload --host 0.0.0.0 --port 8000用curl测试curl -X POST http://localhost:8000/mcp/action/get_weather \ -H Content-Type: application/json \ -d { jsonrpc: 2.0, method: get_weather, params: {city: Shanghai, unit: celsius}, id: 1 }你应该看到标准的JSON-RPC响应。这标志着你的第一个MCP工具已成功上线。它具备了协议要求的所有要素可发现、可调用、可验证、可替换。接下来你就可以在agent/core.py中用MCPClient去调用它了。这个过程比写一个硬编码的requests.get()函数多花了不到20行代码但换来的是未来三年内工具生态的可维护性。4.3 Agent核心记忆路由与MCP调用的集成代码最后是Agent的“大脑”——如何将STM、LTM、WM与MCP Client无缝编织在一起。以下是agent/core.py的核心骨架它体现了我们所有的实战经验。# agent/core.py import json import httpx from typing import Dict, Any, Optional, List from pydantic import BaseModel from langchain_core.messages import HumanMessage, AIMessage, SystemMessage from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI # 此处可替换为任意兼容的LLM from .memory.ltm import LongTermMemory from .memory.stm import ShortTermMemory from .planner import PlanExecutor class AgentConfig(BaseModel): llm_model: str gpt-3.5-turbo stm_max_tokens: int 3000 mcp_registry_url: str http://localhost:8000 class MCPAgent: def __init__(self, config: AgentConfig): self.config config self.llm ChatOpenAI(modelconfig.llm_model, temperature0.3) self.stm ShortTermMemory(max_tokensconfig.stm_max_tokens) self.ltm LongTermMemory() # 初始化LTM连接Qdrant等 self.mcp_client MCPClient(config.mcp_registry_url) self.planner PlanExecutor(self.mcp_client) def _build_prompt(self, user_input: str, context: Dict[str, Any]) - str: 构建给LLM的提示词注入记忆与工具信息 # 1. 从STM获取当前对话摘要 stm_summary self.stm.get_summary() # 2. 从LTM检索与user_input相关的长期记忆 ltm_retrieved self.ltm.search(user_input, top_k3) # 3
延伸阅读

更多相关文章

2026/10/22 5:42:44

Windows安全全景图:从账户权限到纵深防御的加固指南

Windows系统安全的坑,我踩了十年。今天这篇是这个系列的第一篇,我只做一件事:帮你在脑子里建一张Windows安全的全景图。日常环境里最常见的误区有两类,一类是“裸奔用户”——系统补丁不装、默认账户裸密码、防火墙从来没管过&…

2026/10/22 5:42:44

Java AI Agent框架选型:企业级AI工程化落地实践

1. 为什么是 Java,而不是 Python?——从工程落地视角重审 AI Agent 框架选型“用 Java 做 AI Agent?”——这是我去年在某技术沙龙上抛出这个标题时,台下第一反应。有人笑,有人皱眉,还有人直接掏出手机查“…

2026/10/22 5:42:44

C#刷LeetCode的高效闭环:每日复习、语法优化与调试模板

连续坚持了几个月每日打卡,某天回头复盘时突然意识到一个问题:LeetCode每日刷题这件事我一天没断,可真要我临时做一道上周做过的同类题,竟然只能想起一个模糊的框架,细节全丢。如果用的是C#,这种感觉会更明…

2026/10/22 6:52:47

攻克SFFocusViewLayout布局难题:10个实战问题与完美解决方案

攻克SFFocusViewLayout布局难题:10个实战问题与完美解决方案 【免费下载链接】SFFocusViewLayout UICollectionViewLayout with focused content 项目地址: https://gitcode.com/gh_mirrors/sf/SFFocusViewLayout 引言:聚焦布局的痛点与解决方案 …

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/22 0:01:49

电商智能运营体系从0到1:架构设计、落地步骤与避坑指南

前两年我们团队接了一个电商平台的运营中台项目,目标很直白:把过去靠运营拍脑袋做的选品、定价、发券、推活动这些事,逐步用数据算法和自动化流程代替。项目名字内部就叫“电商智能运营体系”。最近有不少朋友问我当时是怎么设计的、踩过哪些…

2026/10/22 0:01:49

若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定

最近一段时间,我一直想把后台管理系统里那些机械重复的增删改查代码交给AI去写。框架用的是若依,按理说这类业务代码模式非常固定,应该是AI最擅长的事情。可真试下来却不是那么回事——你让AI生成一个用户管理模块,它给出的Contro…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑