news 2026/10/8 21:25:14

WorkBuddy与MCP实战:让量化回测一句指令全自动跑通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WorkBuddy与MCP实战:让量化回测一句指令全自动跑通

1. 写在前面:为什么是WorkBuddy + MCP

先说个背景。做量化的人,尤其是个人量化玩家,最烦的事情根本不是策略本身,而是“写代码—拉数据—跑回测—调参数”这条链路里的脏活累活。数据接口要一个个对接,字段要清洗,回测框架要配置,光是处理数据格式不一致的问题就能耗掉一整个晚上。更别说每次想验证一个新想法,都要重复写一遍数据加载、指标计算、回测循环的模板代码,真正花在思考策略上的时间反而被挤压得所剩无几。

年初开始接触WorkBuddy之后,我最大的感受是:这家伙能把“意图”直接翻译成“代码动作”。你告诉它“用支付宝的月度账单数据做一个动量策略回测”,它能自己去查数据格式、生成对应的数据处理逻辑、调用回测库跑完并输出结果。但这里面有个关键问题——WorkBuddy自己并不知道你的数据库在哪、你的数据长什么样、你的回测框架支持哪些接口。它需要一个“桥梁”把外部工具和数据源暴露给它,这就是MCP(Model Context Protocol)干的事。

所以这篇文章不是我跟你聊WorkBuddy怎么安装、界面多好看,而是分享一套我已经跑通的实战方案:怎么用MCP把量化数据源和回测引擎接进WorkBuddy,让“数据、回测一句话跑通”这件事从口号变成现实。整个过程会涉及架构选型、MCP Server配置、数据接口设计、回测参数传递,还有我在实际调试中踩过的坑。你可以照着一步步做,也可以根据自己的数据源和回测框架做替换,思路是通用的。

适合谁看?已经会用Python写简单策略、但不想被困在重复劳动里的量化爱好者;想用AI Agent加速投研流程但又不知道从哪下手的开发者;以及那些听说MCP很火、但还没搞明白它到底怎么落地的朋友。看完这篇文章,你会知道MCP在量化场景里到底扮演什么角色,以及怎么用最短路径把一套“数据到回测”的流程交给AI托管。

2. 技术底座:MCP协议和WorkBuddy的分工逻辑

2.1 MCP是模型和工具之间的“USB接口”

MCP全称Model Context Protocol,可以理解为AI模型与外部工具之间的标准化通信协议。它解决的问题非常具体:AI模型(比如WorkBuddy内置的LLM)只能“说话”,不能直接执行代码、读写数据库、调用API。以前为了让模型能操作外部工具,开发者得为每个工具写一套私有接口,模型每接入一个新工具就要重新适配一次,维护成本极高。

MCP把这套过程标准化了。它定义了一个类似USB的接口规范:工具方只要实现一个MCP Server,把功能暴露成“工具”(Tool),AI客户端(WorkBuddy)通过MCP Client连接这个Server,就能动态获取有哪些工具可用、工具的入参出参是什么,并在对话中直接调用。整个过程不需要预先把代码写死在系统里,模型在运行时发现工具、理解工具、调用工具,完全动态。

打个比方,以前AI和工具之间是“定制数据线”,换一个设备就要换一根线;MCP做了个标准Type-C口,谁的接口都通用。对于量化场景,这意味着你的数据服务、回测引擎、风控模块都可以独立封装成MCP Server,WorkBuddy需要时按需调用,不需要把所有功能塞到一个进程里。

2.2 WorkBuddy为什么适合干这件事

你可能好奇,为什么不直接用Python脚本或者Jupyter Notebook,非要绕一圈用WorkBuddy来调MCP?我的回答是:脚本确实能跑,但AI的价值在于“理解你的意图并转化为可执行动作”。

WorkBuddy本质上是一个AI编程Agent,它具备几个量化开发非常需要的特性。第一,它能理解自然语言描述的策略逻辑,比如“当短期均线上穿长期均线时买入,持仓不超过5天”,它能帮你编写对应回测代码,而不是让你自己手写几百行。第二,它支持多轮对话式的调试——回测跑出来的夏普比率不理想,你可以直接说“把持仓周期改成3天再跑一遍”,它就会自动调整参数重新执行,这个交互链路非常契合量化策略迭代的试错模式。第三,它通过MCP协议接入外部工具后,能做到“感知—决策—执行”闭环:它先通过MCP工具查数据状态,再基于数据内容决定如何写回测逻辑,最后调用回测工具获取结果。

这里要强调一个容易误解的点:WorkBuddy本身不是量化框架,它不帮你算指标,也不执行回测。它是“调度者”,负责把任务拆解成步骤,然后调用合适的MCP工具来完成。量化能力完全来自你接入的MCP Server——数据服务、回测引擎、绩效分析模块。所以这套方案的灵魂不在于WorkBuddy,而在于你MCP Server设计得好不好。

3. 量化场景下的架构设计:数据、回测、参数怎么拆

3.1 数据层:统一入口比“百花齐放”重要得多

量化数据源五花八门:行情数据可能来自tushare、akshare、Wind或者自己爬的交易所数据;基本面数据可能来自财报接口;另类数据就更多了。如果每个数据源都在WorkBuddy里直接连,对话一多,模型很容易混乱——它需要记住哪个接口返回什么格式、字段名称是什么,这些细节本身就是巨大的上下文负担。

更好的做法是做一个统一的数据访问层MCP Server,对外只暴露几个标准工具:get_kline_data(K线数据)、get_fundamentals(基本面数据)、get_trade_calendar(交易日历)等。每个工具的入参都是标准化的,比如证券代码、起始日期、结束日期、频率。内部再由这个Server去各数据源拉取数据并统一清洗格式。这样做有几个实际收益:第一,WorkBuddy只需要学习一套接口规则,调用成功率大幅提升;第二,数据格式一致后,回测引擎无需适配多种风格的数据,不容易出解析类bug;第三,后续数据源变更只影响Server内部,对上层策略对话完全透明。

我用的方案是:本地SQLite做分钟级和日线数据缓存,tushare pro做数据源,MCP Server作为中间层。首次请求某个标的和区间时从tushare拉取并写入SQLite,后续请求直接读本地缓存。这样做回测效率非常高,数据量大时也不会频繁打远程API导致限流。

3.2 回测引擎:backtrader还是自研

回测框架的选择会直接影响MCP工具的设计。我用的是backtrader,理由很实际:它是纯Python实现、社区活跃、支持多标的组合回测、内置多种订单类型和绩效指标,而且对“通过代码驱动配置”这种场景支持很好——这恰恰是AI Agent最容易生成和执行的方式。

为什么不用自研引擎?自研回测引擎最大的坑是撮合逻辑和交易成本处理很容易写错,回测结果虚高,实盘一跑就露馅。backtrader这种成熟框架在市场上验证了十几年,虽然性能上不如一些C++写的专业回测系统,但胜在可靠性和可解释性。个人量化、策略验证、教学实验,backtrader完全够用。

MCP回测工具的设计上,我没有把backtrader的每个功能都暴露出去,那样反而会让AI混乱。我只暴露了一个run_backtest工具,接收参数:策略名称、标的列表、时间区间、初始资金、手续费率等,内部再去加载对应的策略类并执行回测,返回结果包括总收益率、年化收益、最大回撤、夏普比率、交易记录摘要。这样WorkBuddy要跑一次回测就变成一句“调用run_backtest,策略叫dual_ma,标的000300.SH和000905.SH,时间2020到2024”的事。

3.3 整体架构的分工表

层次组件职责交互方式
交互层WorkBuddy理解自然语言、任务拆解、结果汇报用户对话
协议层MCP Client/Server标准化工具调用JSON-RPC
数据层数据MCP工具行情/基本面/日历获取与缓存工具调用
计算层回测MCP工具执行回测、绩效计算工具调用
存储层SQLite/本地文件数据缓存、回测结果持久化本地IO

这个架构最核心的设计原则是“分而治之”:数据、回测、参数解析各自独立成模块,互不干涉。WorkBuddy在其中扮演“指挥官”的角色,它不需要理解每个模块的实现细节,只要知道通过MCP的哪些工具能达到目标。这样即使未来要把数据源换成其他服务,或者升级回测引擎,都不会影响对话层的使用体验。

4. 实操记录:从环境搭建到一句话跑通回测

4.1 环境准备:WorkBuddy、MCP SDK和项目结构

先说安装。WorkBuddy本身是图形化安装的,这里不多说,需要注意的是一定要确保版本支持MCP Client功能——早期版本只能读代码库,不支持外部工具调用,版本太旧的话后面全白搭。

MCP Server开发我用的Python官方SDK,安装非常简单:

pip install mcp

这个SDK会自动处理协议层的通信、消息路由、会话管理等底层细节,你只需要专注写工具逻辑。我用的是FastMCP框架模式,声明式定义工具,可读性高,维护也方便。整个项目目录结构长这样:

quant_agent/ ├── mcp_servers/ │ ├── data_server.py # 数据MCP Server │ ├── backtest_server.py # 回测MCP Server │ └── common/ │ ├── db.py # SQLite读写封装 │ └── indicators.py # 技术指标计算 ├── strategies/ │ ├── dual_ma.py # 双均线策略 │ └── momentum.py # 动量策略 ├── config/ │ ├── data_config.py # 数据源配置 │ └── backtest_config.py # 回测参数 └── requirements.txt

为什么不把所有工具塞进一个Server?因为职责分离能避免“一个Server挂了全盘瘫痪”的情况,数据服务如果频繁出错也不会影响回测工具的稳定性。同时独立进程可以分别扩缩容,比如数据服务占内存大,回测服务CPU密集,互不干扰对调试也友好得多。

4.2 数据MCP Server的核心实现

数据Server是这套方案的第一个关键实现。我用FastMCP定义了一个get_kline_data工具,核心逻辑包括三个步骤:先查本地缓存,缓存命中直接返回;未命中则从tushare拉取并写入SQLite;无论哪种方式,最终返回统一格式的JSON数据。

from mcp.server.fastmcp import FastMCP import sqlite3 import json import pandas as pd mcp = FastMCP("QuantDataServer") def _get_from_cache(code, start, end, freq): conn = sqlite3.connect("data/cache.db") sql = """SELECT trade_date, open, high, low, close, volume FROM kline WHERE code=? AND trade_date BETWEEN ? AND ? ORDER BY trade_date""" df = pd.read_sql(sql, conn, params=(code, start, end)) conn.close() return df def _fetch_and_cache(code, start, end, freq): import tushare as ts pro = ts.pro_api("your_token") df = pro.daily(ts_code=code, start_date=start, end_date=end) conn = sqlite3.connect("data/cache.db") df.to_sql("kline", conn, if_exists="append", index=False) conn.close() return df @mcp.tool() def get_kline_data(code: str, start_date: str, end_date: str, freq: str = "D") -> str: """获取K线数据,支持日线、周线、月线。返回JSON格式的OHLCV数据。""" df = _get_from_cache(code, start_date, end_date, freq) if df.empty: df = _fetch_and_cache(code, start_date, end_date, freq) return df.to_json(orient="records", date_format="iso")

这里有几个实际心得。第一,缓存库的索引一定要建好,尤其是code和trade_date的联合索引,否则数据量大了之后查询会变得非常慢,MCP工具调用一次等十几秒,非常影响体验。第二,返回JSON时日期字段要用iso格式,时间戳格式在模型和前端解析时容易出歧义。第三,工具描述要写得尽量详细——MCP是通过描述文字让模型理解工具用途的,描述越清楚,模型选错工具的概率就越低。

4.3 回测MCP Server的核心实现

回测Server的职责是接收策略指令、加载数据、执行回测、返回绩效指标。我设计了一个相对通用的run_backtest工具,支持通过参数指定策略文件路径、标的、时间区间和资金配置。

from mcp.server.fastmcp import FastMCP import importlib.util import backtrader as bt mcp = FastMCP("BacktestServer") @mcp.tool() def run_backtest(strategy_name: str, symbols: list, start: str, end: str, cash: float = 1000000.0, commission: float = 0.0003) -> str: """运行回测。支持多标的组合回测,symbols传入列表;strategy_name是策略文件名(不含.py)。""" cerebro = bt.Cerebro() cerebro.broker.setcash(cash) cerebro.broker.setcommission(commission=commission) # 动态加载策略类 spec = importlib.util.spec_from_file_location( strategy_name, f"strategies/{strategy_name}.py") module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) strategy_cls = module.Strategy # 加载每个标的数据 data_server = ... # 这里调用数据Server的查询逻辑 for symbol in symbols: df = data_server.get_kline(symbol, start, end) data_feed = bt.feeds.PandasData(dataname=df) cerebro.adddata(data_feed) cerebro.addstrategy(strategy_cls) results = cerebro.run() strat = results[0] stats = { "final_value": cerebro.broker.getvalue(), "total_return": (cerebro.broker.getvalue() / cash - 1) * 100, "sharpe": strat.analyzers.sharpe.get_analysis()["sharperatio"], "max_drawdown": strat.analyzers.drawdown.get_analysis()["max"]["drawdown"], "trade_count": strat.analyzers.trades.get_analysis()["total"]["open"] } return json.dumps(stats, ensure_ascii=False)

这里要注意,多标的回测时backtrader会自动按日期对齐数据,但前提是不同标的数据的日期索引要正确。我在数据接入时特意用bt.feeds.PandasData并指定了datetime列,否则backtrader默认用DataFrame的索引作为日期。另外,回测前一定要确认数据覆盖的时间区间是完整的,否则出现过长的空档期,策略可能因为无数据而直接退出。

我的回测Server还注册了一个analyze_strategy工具,用来在回测后计算额外的指标或者做资金曲线分析。这样WorkBuddy可以在拿到初版回测结果后,继续追问“画出资金曲线”或“按月度统计收益”,而不需要从头再跑一遍回测。

4.4 WorkBuddy的MCP Server配置

MCP Server写好后,需要在WorkBuddy里注册。WorkBuddy的MCP配置入口在设置面板里,选择“MCP Servers”添加。配置方式是填写Server的启动命令,比如:

{ "mcpServers": { "quant-data": { "command": "python", "args": ["mcp_servers/data_server.py"] }, "quant-backtest": { "command": "python", "args": ["mcp_servers/backtest_server.py"] } } }

配置好之后,WorkBuddy启动时会自动拉起这两个子进程。这里有个比较容易踩坑的地方:MCP Server进程的启动路径很重要,最好用绝对路径,或者先在命令行手动跑一遍确认能正常启动,否则WorkBuddy的GUI里看不到任何报错信息,排查起来很痛苦。

配置完成后在WorkBuddy的会话框里输入“列出当前可用的工具”,如果能看到get_kline_data和run_backtest,就说明MCP通道已经打通了。

4.5 实战:一句话跑通双均线策略回测

环境全部就绪后,我实际测试了这轮流程。在WorkBuddy的对话窗口里,我输入了这样一句指令:

“用双均线策略(5日金叉20日死叉)回测沪深300(000300.SH)从2022年到2024年的日线数据,初始资金100万,手续费万3,不要做空,输出绩效摘要。”

WorkBuddy的处理过程大致分几步。它先解析出关键实体:策略类型是双均线、标的是000300.SH、时间区间2022到2024、资金和手续费参数。然后,它通过MCP调用get_kline_data获取数据——这里它会先看一眼数据Server返回的JSON结构,确认字段名。接着,它检查strategies目录下有没有dual_ma.py策略,发现已经有现成的就复用,没有的话它会根据对话需求自动生成一个策略文件。最后,它调用run_backtest执行回测,并把返回的绩效指标整理成人话汇报。

实际执行后,WorkBuddy给我输出的摘要像这样:

回测完成。沪深300在2022-01-01至2024-12-31期间,执行双均线策略(MA5上穿MA20买入,MA5下穿MA20卖出),累计交易32笔。期末资金109.23万,总收益率9.23%,年化约4.46%,最大回撤11.8%,夏普比率0.71。整体表现跑赢同期沪深300指数(约-12.5%的区间收益),但回撤仍偏大,建议考虑加入波动止损或降低仓位。

这里有一个很关键的细节:WorkBuddy不是只把回测结果丢给你,它会结合数据做一点基础分析。这个分析能力来自它对数据的理解和大模型的推理,不是MCP Server提供的。这也正是Agent模式的魅力——工具负责“计算”,模型负责“解读”。

之后我进一步追问:“把持仓周期改成3天,重新跑一遍对比”。WorkBuddy会修改策略文件里的持仓参数,再次调用run_backtest,并输出对比表。整个迭代过程不涉及任何手写代码,交互体验和调参速度都远好于我之前的脚本方式。

5. 实操过程中的关键避坑点

5.1 MCP Server返回格式必须是模型“好消化”的

这是我踩过最深的一个坑。最开始我的数据Server返回的不是JSON,而是以DataFrame的repr字符串返回的表格文本。模型虽然能读,但经常在字段名上产生幻觉——比如它会把close记成closing,导致后续回测代码生成失败。改成JSON返回后,模型解析字段的成功率明显提升。

还有一点,JSON里不要塞大量无关的嵌套数据。你可能会觉得把所有指标一次性返回很高效,但模型处理超长JSON时的注意力会分散,反而不容易抓住关键信息。保持工具的返回结果精简、结构化,是提高Agent稳定性的有效手段。

5.2 工具描述文字直接决定调用成功率

很多人在设计MCP工具时忽略了一个细节:模型的“工具选择”很大程度上依赖工具描述。如果你的描述太短,比如“get_kline_data”,模型可能不清楚这个工具什么时候该用;描述太长又可能干扰判断。我建议每个工具描述用一到两句话,语法是“这个工具做什么,返回什么,适合在什么场景下使用”。

我实际测试过一个对比:描述模糊时(比如“获取数据”),WorkBuddy经常把获取基本面数据和获取行情数据搞混;改成“获取K线行情数据,包含OHLCV和成交量,用于技术指标计算和回测数据准备”之后,选错工具的概率几乎为零。

5.3 多标的回测的数据对齐问题

backtrader做多标的回测时,如果不同标的的交易日不重合(比如A股和港股),合并后的数据会有大量NaN。如果策略里使用了跨标的信号(比如A相对B的强弱),就可能因为NaN传播导致信号异常。

我的解决方案是在数据接入时统一按交易日历填充缺失值——前提是你清楚填充逻辑对策略的影响。比如前向填充法对于“昨收价”类信号是合理的,但对于“当天开盘跳空”类信号就会失真。所以这一步要结合策略特性来设计,不能一劳永逸。默认情况下我反而建议不要填充,让NaN自然传播,backtrader会用“无效数据不触发交易”的方式处理,更安全。

5.4 回测结果和实盘差异的预期管理

这句话我几乎在每次分享里都会强调:回测绩效是“后视镜”,实盘跑起来是“高速公路”。MCP把回测流程化了,让验证策略变得极其便捷,但这也意味着你可能会不小心变成一个“过拟合狂魔”——在一个数据集上反复调参,直到数字好看,然后实盘一塌糊涂。

我给自己定的规矩是:同一时间区间不许修改超过三个策略参数;修改策略后必须用一段“样本外数据”验证——哪怕只是把回测区间往后推迟一年的数据,也能筛掉不少过拟合风险。这套流程在WorkBuddy的对话模式下很好执行,你只要告诉它“用2023到2024做验证样本,重新跑一遍”就行。

6. 常见问题和排查技巧实录

6.1 MCP Server启动失败,WorkBuddy界面没反应

这是最频繁遇到的问题。排查路径:先在命令行手动执行Server启动命令,看有没有报错。常见原因是依赖缺失、Python路径不对、端口被占用。MCP默认走stdio通信,理论上不占用网络端口,但如果你的Server代码里监听了某个端口,还是可能冲突。另一个容易被忽略的点是:WorkBuddy启动MCP Server时的工作目录不一定是项目根目录,如果你的代码用了相对路径,很可能在WorkBuddy里启动失败,但在命令行里正常。解决办法是Server脚本开头自动切到项目绝对路径。

6.2 模型调用了错误的工具

WorkBuddy调错工具有时候不是模型的锅,而是你的工具设计边界模糊。比如我一开始有个“获取股票数据”工具,既能拿行情又能拿基本面,模型经常搞不清该传什么参数。后来我拆分成get_kline_data和get_fundamentals两个独立工具,问题自然消失。所以遇到工具调用混乱,先别急着骂模型,回头审视一下你的工具粒度是否清晰。

6.3 回测速度慢

如果回测数据量大,比如几千只股票跑因子回测,Python纯计算确实吃力。我的建议是:MCP Server内部可以对数据做预聚合,比如把分钟数据重采样成日线后再进回测引擎;当日的因子计算可以向量化,避免在backtrader内部逐bar跑Python循环。真正的瓶颈往往是策略里的自定义逻辑,这部分能改用NumPy矩阵运算就尽量优化。WorkBuddy在这种场景下帮不了太多——它负责的是流程调度不是计算加速。

6.4 策略文件被AI改坏了

WorkBuddy在自动生成或修改策略文件时,偶尔会产生语法错误或逻辑bug。我的应对措施是:把策略文件纳入git管理,每次修改之前WorkBuddy都会用MCP工具读取原文件内容,我可以在对话里要求它“先显示修改后的完整文件内容确认再写入”。另外我给AI的策略文件模板里加了严格的类型注解和参数默认值,大幅降低了生成不合理代码的概率。

7. 这组工具链还能往哪里扩展

目前这套MCP化量化的架构已经稳定跑了几个月,日常的策略验证基本都迁移到了WorkBuddy上。后续我计划做三块扩展。

第一块是接入实盘模拟交易。方法类似,开发一个dispatch_order的MCP工具,对接券商的模拟交易接口。WorkBuddy在回测出信号后可以调用这个工具下单,实现从“验证”到“执行”的闭环。第二块是引入更丰富的数据源,比如把新闻舆情数据也做成MCP工具,让WorkBuddy在做策略决策时能参考非结构化信息。第三块是增加组合优化模块,在回测后加入风险平价或均值方差优化步骤,让策略组合的权重分配也能通过对话完成。

如果你也是单独做量化开发的,我的建议很简单:不要贪多,先把“数据获取”和“回测执行”这两个最重复、最耗时的环节MCP化,跑通了再逐步加模块。MCP最大的价值不是一次性搭建一个宏大的系统,而是让你能用自然语言指挥AI干活,把时间腾出来思考真正重要的策略本身。

另外再分享一个我自己的小习惯:每次新增MCP工具后,顺手在项目里写一个tools.md文件,记录工具的用途、入参格式、返回格式和典型调用示例。WorkBuddy虽然能通过MCP协议自动识别工具,但对话时如果它不确定,我也会直接把tools.md丢给它作为上下文参考。这个做法大大提升了工具调用的稳定性和对话效率,尤其是当你同时接入十几个工具的时候,效果非常明显。

这套方案走到现在,最大的感受是“工具本身不神秘,组合起来才是价值”。MCP协议解决的是AI与工具之间的连接问题,WorkBuddy解决的是任务调度问题,量化框架解决的是策略执行问题——当你把三者正确地组合在一起,那句“数据、回测一句话跑通”就不再是宣传文案,而是你桌上实实在在的工作方式了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 21:16:06

Claude API记忆管理:用claude-mem构建跨会话长期记忆层

1. 为什么需要 claude-mem:把 AI 的“短暂记忆”变成“长期记忆” 1.1 无状态 API 的失忆坑 只要是认真调过 Claude API 的人,应该都体会过同一个诡异瞬间:上一轮明明已经交代好的技术约束,下一轮它又给你按老思路写了。比如我负…

作者头像 李华
网站建设 2026/10/8 21:15:11

Agent-Reach:面向生产环境的智能体能力触达框架

1. 项目概述:Agent-Reach 是什么,它解决的到底是什么问题?Agent-Reach 不是一个凭空造出来的概念,而是我在过去两年里,和十多个不同行业的技术团队一起踩坑、重构、再验证后,沉淀下来的一套面向真实生产环境…

作者头像 李华
网站建设 2026/10/8 21:14:04

Superpowers:AI原生开发工作流的分层架构与工程落地

1. 项目概述:Superpowers 不是超能力,而是开发者工具链的“智能增强层”你搜“superpowers”时,第一眼看到的不是漫威电影,而是满屏的Claude Code、Antigravity、Codex CLI、Cursor—— 这些词像代码编辑器里的自动补全提示一样密…

作者头像 李华
网站建设 2026/10/8 21:09:40

RAG七层架构:生产级知识检索系统工程落地路线图

1. 这张图不是示意图,是RAG工程落地的路线图“02一张图看懂 RAG 七层架构”——这个标题里藏着一个被多数教程刻意忽略的事实:RAG从来就不是“加个向量库调个LLM API”就能跑通的玩具项目。它是一套有明确分层、强耦合依赖、每层都存在硬性技术约束的工程…

作者头像 李华
网站建设 2026/10/8 21:09:05

扩展特征用例设计:从核心功能到边界、状态与异常全覆盖

做测试这几年,我有个特别明显的感受:新人和老手之间真正的分水岭,往往不在核心用例上。核心用例谁都会写,照着需求文档把主流程走通,再补几个正常分支,二三十条就出来了。可线上真正出问题的,绝…

作者头像 李华
网站建设 2026/10/8 21:08:56

TraeWork实战:从聊天工具到AI工作台,构建个人生产力体系

TraeWork这个名字,我第一次听到的时候以为又是某个聊天机器人的换壳产品。直到我花了两个周末把日常的写作、信息整理、任务拆解全部搬进去之后,才意识到自己之前的判断错得离谱。这东西与其说是一个聊天窗口,不如说是一个围绕AI能力重新组织…

作者头像 李华