
最近 Hacker News 上有一个 Show HN 项目叫Delphi标题很直白Build your own AI trading agent in seconds。先说清楚这个 Delphi 不是 Borland 时代那个 Delphi IDE而是一个面向 AI 交易 Agent 的快速构建框架。它的核心卖点是降低写一个交易 Agent 的启动成本让开发者把行情数据、策略定义、LLM 决策、模拟执行这些环节串成一条尽量短的流水线。这类项目真正值得关注的不是“AI 能不能预测涨跌”而是它把交易 Agent 的工程复杂度压缩到了什么程度能不能用一条命令跑起来、策略能不能写成纯配置文件、LLM 决策有没有留出自定义接口、能不能接模拟盘、批量回测和 API 调用是否顺手。这篇文章会从项目定位、架构拆解、部署启动、功能验证、API 与批量任务、资源占用和常见问题几个维度完整过一遍这类 AI 交易 Agent 项目应该怎么评估、怎么落地、怎么避开坑。如果你正在看 AI Agent 方向的开源项目或者已经在做量化策略研究这篇文章可以直接收藏。1. 核心能力速览由于目前公开材料只有项目标题没有完整 README 和版本信息下面这张表把“基于项目定位通常应该具备的能力”和“必须按实际版本确认的信息”分开放避免误导。能力项说明项目类型AI 交易 Agent 快速构建框架Show HN 项目核心目标缩短从行情接入到 Agent 策略执行之间的搭建链路典型功能行情数据接入、策略模板、LLM 决策、模拟交易、信号输出、批量回测硬件要求取决于是否本地运行 LLM纯 API 调用场景下普通开发机即可部署方式需按项目 README 确认常见为 Python 环境 配置文件启动是否支持 API交易 Agent 框架通常会暴露 REST / WebSocket 接口具体以项目文档为准是否支持批量任务可预期支持多标的、多策略并行回测或批量信号生成适合场景个人量化研究、策略验证、模拟盘测试、Agent 教学 Demo不适合场景未充分回测和风控评估就直接连接实盘交易所有具体参数、模型名、启动脚本、接口路径都要以项目仓库的实际 README 和版本为准。下面展开的是通用评估思路和可复用流程。2. 适用场景与使用边界2.1 适合谁用量化策略研究者想把 LLM 的语义理解能力加入策略决策层但不想从零写数据管道和回测框架。AI Agent 开发者想找一个交易场景的落地 Demo验证 Agent 工具调用、状态管理、任务编排能力。个人投资者需要把市场新闻、技术指标、风险提示整合成可执行的交易信号先在模拟盘上跑通。教学和实验场景用现成的 Agent 框架演示“LLM 决策 数据接入 模拟执行”的完整链路。2.2 能解决什么问题这类项目真正解决的是交易 Agent 的“重复工程”问题数据格式解析、K 线切片、技术指标计算、回测循环、结果记录这些代码每个项目都大同小异。框架把这一层抽出来之后开发者只需要关注策略逻辑和 LLM 提示词设计。2.3 不适合什么场景直接用真金白银实盘不做回测、不做风控。把 LLM 输出当作确定性交易指令不检查异常值。在缺少数据授权的情况下抓取第三方行情和新闻数据。在不了解当地金融合规要求的情况下对外提供交易建议或托管服务。2.4 合规与风险边界这里必须强调AI 交易 Agent 涉及金融投资风险极高。项目本身只是工具不构成投资建议。使用前至少要确认三点回测通过不等于实盘有效历史数据不能代表未来。模拟盘和实盘在滑点、成交速度、流动性上有明显差异。涉及行情数据、新闻数据、第三方 API 时必须确认数据来源是否符合版权和平台使用条款。如果你的项目涉及真实交易账户、用户资金或公开推荐务必先咨询专业法律和合规意见。3. AI 交易 Agent 的典型架构拆解无论 Delphi 这个框架内部怎么实现一个可用的 AI 交易 Agent 通常都包含下面几个模块。这些模块也是你评估项目时应该重点看的地方。3.1 数据接入层数据层决定 Agent 能看到什么。常见的输入包括行情 K 线数据如日线、分钟线。技术指标如 RSI、MACD、布林带。市场新闻、公告、社交媒体情绪数据。账户资产、持仓、可用资金。在本地部署测试时最省事的方案是先接入免费历史数据源或者 CSV 文件而不是直接连真实行情。这样能先把框架跑通再考虑实时数据的延迟和成本。3.2 策略层策略层负责把原始数据转换为可执行的信号。传统量化策略是规则式比如“RSI 低于 30 买入”AI 交易 Agent 则通常是“规则 LLM 决策”的混合结构规则层检查基础条件和风险边界。LLM 层读取当前市场摘要、技术指标、新闻事件输出仓位建议和买入/卖出/持有判断。LLM 输出必须是结构化格式比如 JSON方便后续解析和校验。3.3 风控层这是最容易忽略但最重要的一层。一个健壮的 AI 交易 Agent 必须包含单笔交易最大亏损限制。最大仓位限制。异常输出校验例如 LLM 返回的金额不能是负数不能超过账户余额。熔断机制例如连续亏损达到阈值后自动暂停交易。所有决策日志落盘方便事后复盘。3.4 执行层执行层可以是模拟盘、券商 API 或者纸面交易。无论哪种都需要有明确的接口抽象。这样回测、模拟盘、实盘之间切换时不需要重写策略逻辑。3.5 监控与日志层Agent 不是跑一次就结束的。你需要能回答这些问题上一次 LLM 调用是什么时候当时的市场上下文是什么模型输出了什么最终执行了没有如果没执行原因是什么所以日志结构化非常重要建议 JSON Lines 格式方便用 jq 或 Python 分析。4. 环境准备与前置条件在下载和运行 Delphi 项目之前先确认基础环境。以下是通用检查清单具体版本要以项目 README 为准。4.1 操作系统优先使用 Linux 或 macOS。Windows 也可以但如果项目依赖某个特定版本的 TA-Lib、PyTorch 或数据库驱动Windows 上的编译坑会多一些。建议先查 README 是否提供 Windows 支持说明。4.2 Python 环境绝大多数 AI Agent 框架使用 Python。建议使用 Python 3.10 或 3.11 的 64 位版本并配套虚拟环境工具。python3 -m venv .venv source .venv/bin/activate pip install --upgrade pip不建议直接装到系统全局 Python 环境因为依赖冲突后面很难收拾。4.3 GPU 与 CUDA是否需要 GPU取决于项目是本地跑 LLM 还是只调用云端 API。如果只是调用 OpenAI、Claude、本地代理等 API普通 CPU 电脑就够。如果要在本地跑 LLM例如通过 Ollama 或 vLLM通常需要 8GB 以上显存具体取决于模型大小。如果不确定可以先跑 CPU 模式做功能验证再用 GPU 优化推理速度。4.4 数据与行情源准备测试数据时优先使用 CSV 静态数据或免费公开的历史数据接口。这样不涉及实时行情费用和授权问题也能保证测试可复现。一份最小 CSV 数据示例timestamp,open,high,low,close,volume 2025-01-01 09:30:00,100.0,102.5,99.8,101.2,1500 2025-01-01 09:31:00,101.2,101.8,100.5,101.0,1200 2025-01-01 09:32:00,101.0,103.0,100.9,102.7,1800实际字段名以项目要求为准但基本结构类似。4.5 LLM 模型配置AI 交易 Agent 需要一个 LLM 做决策。你需要提前准备好API Key或者本地模型服务地址。模型名称例如某个通用对话模型或具名模型。超时时间、最大 token 数、温度参数。如果是本地模型建议提前用独立的命令行工具测试模型是否正常响应再接入 Agent 框架。这样能减少联调时的干扰因素。curl http://127.0.0.1:11434/api/generate \ -H Content-Type: application/json \ -d { model: your-model-name, prompt: Say OK, stream: false }这里以本地 Ollama 风格接口为例实际地址和模型名需要按你的环境调整。5. 安装部署与启动方式5.1 拉取项目先克隆仓库然后切换到项目目录。git clone https://github.com/your-name/delphi.git cd delphi注意这只是通用步骤实际仓库地址以项目页面的说明为准。5.2 安装依赖大多数 Python 项目会把依赖写进 requirements.txt 或 pyproject.toml。pip install -r requirements.txt如果项目使用 Poetry则执行poetry install如果使用 uv则执行uv sync依赖安装失败时不要急着重复安装。先看错误日志是网络问题、编译问题还是版本冲突。常见做法是固定关键依赖版本或者换用 Python 3.10 环境重试。5.3 配置文件准备交易 Agent 的配置一般包括数据源、策略参数、LLM 参数、执行模式和日志路径。下面是一个通用配置模板字段名需要按实际项目调整。data_source: type: csv path: ./data/sample.csv strategy: name: llm_news_plus_rsi params: rsi_period: 14 rsi_buy_threshold: 30 rsi_sell_threshold: 70 llm: base_url: http://127.0.0.1:11434 api_key: none model: your-model-name temperature: 0.2 max_tokens: 512 timeout_seconds: 30 execution: mode: paper # paper / backtest / live initial_cash: 100000 max_position_pct: 0.1 max_loss_pct: 0.02 stop_loss_pct: 0.05 logging: level: INFO output_dir: ./logs如果你发现项目使用.env文件则把 API Key 等敏感项放到.env不要写进配置文件。5.4 启动服务不同项目启动方式差异很大。有些是命令行工具有些会启动 WebUI有些会启动 REST API 服务。常见形式是python main.py --config config.yaml或者python delphi run --strategy demo --mode paper如果项目自带 Dockerfile也可以使用 Docker 启动docker build -t delphi-agent . docker run --rm -v $(pwd)/config.yaml:/app/config.yaml -v $(pwd)/logs:/app/logs delphi-agent无论哪种方式第一次启动时的判断标准是日志能正常输出程序不会立即崩溃并且数据文件能被正确读取。5.5 常见启动检查项启动后重点检查以下几项配置文件路径是否正确。数据文件编码是否为 UTF-8。LLM 服务是否可达。输出目录是否存在。端口是否被占用。是否有 .env 文件加载失败。6. 功能测试与效果验证6.1 基础连通性测试先用一条最简单的策略跑通整个流程不要一上来就上复杂模型。比如一个“全仓买入然后不再操作”的基线策略如果这个策略都无法跑完说明数据链路或执行链路有问题。测试步骤准备一份小规模的 CSV 数据比如 100 根 K 线。配置一个固定信号的策略不调用 LLM。执行回测或纸面交易。查看输出日志和结果文件。预期结果程序正常结束。日志包含每笔交易的时间、价格、数量。结果文件包含最终资产、收益率、最大回撤等指标。如果这步失败优先排查数据格式和执行模式配置。6.2 LLM 决策连通性测试基础链路跑通后再把 LLM 加入决策层。这一步的目的是验证模型输出能否被正确解析而不是验证策略收益。操作步骤在配置中启用 LLM 策略。使用固定的市场摘要文本。调用 Agent 生成决策。检查输出是否存在非法值。你可以在本地写一个最小脚本模拟 Agent 调用 LLM 并解析返回结果的过程import json import requests url http://127.0.0.1:11434/api/generate payload { model: your-model-name, prompt: ( You are a trading assistant. Based on the following market data, return a JSON decision with fields: action (buy/sell/hold), position_size (0.0 to 1.0), reason. Market data: RSI28, price_trenddown, news_sentimentnegative. ), stream: False, format: json } response requests.post(url, jsonpayload, timeout60) data response.json() print(data[response])如果返回结果不是合法 JSON说明提示词中需要增加格式约束或者所选模型对 JSON 输出的稳定性不够。部分本地模型对format: json支持有限需要改提示词示例。判断标准返回结果能被json.loads解析。action字段是 buy / sell / hold 之一。position_size在 0 到 1 之间。reason非空。6.3 风控逻辑测试这是整个测试里最重要的一步。你需要故意构造一些边界场景确认风控层能拦截异常输出。测试用例场景期望行为LLM 返回 position_size 15风控拒绝置为最大仓位LLM 返回 action buy all 这种非标准字段解析失败跳过本次决策连续亏损 5 次达到最大亏损阈值Agent 暂停交易LLM 请求超时Agent 记录日志并保持原仓位数据为空或为 NaN跳过当前时间点不产生交易如果项目没有内置这些风控能力说明它更适合作为研究和教育项目使用直接接实盘前需要自己补上风控层。6.4 回测对比测试在验证 Agent 能跑通之后建议拿一个传统规则策略和 LLM 策略做对比回测。这样能更客观地判断 LLM 决策是否真的有增量价值。操作流程使用相同的历史数据。分别运行规则策略和 LLM 策略。记录各自的最终资产、最大回撤、交易次数。检查 LLM 策略是否存在过度交易、单次亏损过大等问题。需要注意回测结果受数据范围影响很大。建议至少覆盖一个上涨阶段和一个下跌阶段避免选择偏差。7. 接口 API 与批量任务7.1 为什么需要 API 层交易 Agent 如果只能通过命令行跑一次使用价值会打折扣。实际工作中你可能需要把 Agent 接入自己的定时任务、消息通知、交易前端或者用脚本来批量生成多个标的的信号。这时候框架是否提供清晰 API 就很关键。常见接口设计有两种同步接口提交请求后等待 Agent 完成分析和交易信号返回。异步任务接口提交请求后返回 task_id通过查询接口获取执行结果。如果项目没有内置 API也可以通过简单封装实现但会增加开发和维护成本。7.2 通用 API 调用示例如果项目提供 REST API通常结构类似下面这种实际地址和字段请以项目文档为准。curl -X POST http://127.0.0.1:8000/api/agent/run \ -H Content-Type: application/json \ -d { symbol: AAPL, timeframe: 1d, strategy: llm_news_plus_rsi, live_mode: false }响应示例{ task_id: task_001, status: completed, decision: { action: hold, position_size: 0.0, reason: RSI neutral and no strong news signal }, timestamp: 2025-01-01T10:00:00Z }如果项目是异步任务模式则需要先提交任务再轮询任务状态import requests import time submit_url http://127.0.0.1:8000/api/agent/run query_url http://127.0.0.1:8000/api/task/{task_id} payload { symbol: BTC-USD, timeframe: 1h, strategy: llm_news_plus_rsi, live_mode: False } resp requests.post(submit_url, jsonpayload, timeout10) task_id resp.json()[task_id] # 轮询任务状态 for _ in range(20): result requests.get(query_url.format(task_idtask_id), timeout10).json() if result[status] completed: print(result[decision]) break time.sleep(3)注意这里只是通用异步任务轮询模板。实际项目的接口地址、字段名、状态枚举可能会有差异必须按项目 README 调整。7.3 批量任务设计批量任务是交易 Agent 的刚需场景。比如你需要每天对 30 只股票生成一次信号或者需要对 10 组策略参数做对比回测。批量任务建议使用配置文件驱动而不是把参数硬编码在脚本里。{ tasks: [ {symbol: AAPL, timeframe: 1d, strategy: llm_news_plus_rsi}, {symbol: MSFT, timeframe: 1d, strategy: llm_news_plus_rsi}, {symbol: GOOGL, timeframe: 1d, strategy: llm_news_plus_rsi} ], mode: paper, output_dir: ./results }批量任务执行时必须做好三件事每条任务单独记录日志避免一条任务失败导致整个批次挂起。对 LLM 调用设置超时和重试加上退避策略。输出结果按标的和时间分目录保存方便后续查看。一个简单的批量执行思路import json with open(batch_tasks.json, r, encodingutf-8) as f: config json.load(f) for task in config[tasks]: print(fRunning task: {task[symbol]}) # 调用 Agent 执行这里只是示例 # result agent.run(task) # save_to_file(result, task[symbol])7.4 失败重试建议批量任务失败原因通常集中在 LLM 超时、行情源限流、数据缺失和风控拦截。建议处理方式LLM 超时指数退避重试最多 3 次。行情源限流降低并发或按官方限流要求增加间隔。数据缺失跳过该标的记录原因不中断整个批次。风控拦截这不算失败属于正常拦截但需要单独标记方便后续统计。8. 资源占用与性能观察8.1 显存占用观察如果 Agent 使用本地 LLM显存占用是主要关注点。启动模型服务后可以通过 nvidia-smi 实时观察。watch -n 1 nvidia-smi需要观察的指标GPU 显存使用量。GPU 利用率。显存是否在推理结束后释放。是否存在多进程抢占显存的问题。最小模型和量化版本优先用于验证流程。先跑通再根据效果和性能升级模型。8.2 CPU 推理与 GPU 推理差异如果 LLM 在 CPU 上运行通常延迟会高很多但不代表不可用。对于低频交易信号例如日线级别每天只调用几次 LLMCPU 推理完全够用。如果是分钟级高频决策CPU 推理通常跟不上需要 GPU 或云端 API。建议选择模型时考虑输出质量与延迟的平衡。对交易 Agent 来说延迟过高会错过交易窗口但盲目追求低延迟而使用能力不足的小模型又可能导致决策质量下降。8.3 交易 Agent 的其他资源开销除了 LLM 推理还需要关注行情数据的内存占用K 线数量越大内存占用越高。日志文件增长长时间运行后日志可能膨胀到几个 GB。API 调用次数LLM 和行情源都会产生费用或配额消耗。定时任务调度开销如果 Agent 常驻运行需要检查是否有内存泄漏。建议给 Agent 加一个简单的进程监控记录 CPU、内存、显存和日志大小跑一段时间后就能看到资源增长趋势。# 可以用 psutil 编写小型监控脚本或者直接用系统工具观察 top -p $(pgrep -f main.py | head -1)8.4 如何降低资源占用如果你发现 Agent 运行开销偏高可以按顺序做这些优化缩短上下文长度只把最近 N 根 K 线和关键指标发给 LLM。降低采样频率日线转周线后数据量和调用次数都会下降。使用容量更小的量化模型。缓存重复结果相同市场状态的 LLM 输出可以缓存一段时间。关闭不需要的日志和指标输出。9. 常见问题与排查方法问题现象可能原因排查方式解决方案安装依赖时报错Python 版本不匹配或某个依赖需要编译查看完整错误日志切换到建议的 Python 版本或安装编译工具启动后立即退出配置文件字段名不对或数据路径不存在查看启动日志核对 README 的配置模板数据加载失败CSV 字段名或日期格式不匹配用 Python 打印前几行数据调整字段映射或日期解析格式LLM 返回非 JSON提示词约束不够或模型能力不足单独测试模型输出在提示词中加入 few-shot 示例或更换模型OpenAI 等云端 LLM 超时网络不稳定检查日志中的请求耗时增加超时时间加入重试机制本地模型显存不足模型过大或并发请求过多查看 nvidia-smi换更小的量化模型或限制并发数回测结果异常高存在未来函数或数据存在幸存者偏差检查特征计算是否使用了未来数据重构特征计算逻辑增加数据质量检查API 调用 404接口路径或方法不对查看项目路由文档按文档调整请求路径批量任务卡住单条任务没有超时机制查看线程是否有阻塞为每条任务增加超时和失败重试日志文件过大输出级别过低或记录内容过多查看日志大小设置日志轮转降低输出级别10. 最佳实践与使用建议10.1 先小后大第一次运行务必使用最小配置少量数据、单标的、简单策略。跑通后再增加数据量和策略复杂度。这样做的好处是出问题时能快速定位是数据问题、模型问题还是执行问题。10.2 保留一套最小可运行配置把一套验证过的最小配置文件单独保存命名为config.minimal.yaml。以后改了配置或升级依赖后先用这套配置回归测试能省很多排查时间。10.3 目录规范建议按下面结构组织文件delphi/ ├── configs/ │ └── config.minimal.yaml ├── data/ │ ├── raw/ │ └── processed/ ├── logs/ ├── results/ │ └── 2025-01-01/ └── scripts/ └── run_batch.py模型文件、输入素材、输出结果分开管理既方便备份也方便批量任务清理。10.4 批量任务要加日志和失败重试批量任务不要只打印print要写结构化日志。每条任务记录开始时间、结束时间、结果状态和错误信息。失败任务要单独汇总方便重跑。10.5 接口服务要限制访问范围如果 Agent 以 API 服务方式常驻建议默认绑定127.0.0.1不要暴露到公网。如果需要远程访问一定要加身份认证、IP 白名单和 HTTPS。10.6 涉及人脸、声音、版权素材时必须确认授权这里延伸到通用 AI 合规如果你的 Agent 会处理新闻图片、视频内容、语音数据或第三方素材必须确认素材来源和授权范围。不要使用未授权的数据做训练或商用。10.7 实盘前必须做风险控制把实盘连接放在最后一步。先跑通回测再跑几周模拟盘观察策略在真实行情下的表现。实盘初始资金建议设置为可接受全部损失的小额资金并设置硬性止损。10.8 发布或商用前做效果复核如果这个 Agent 要对外提供服务不仅要有收益回测还要有风险披露、偏差报告和人工复核机制。AI 交易越来越受监管关注对外提供信号服务时必须明确免责声明和合规边界。11. 总结与下一步Delphi 这个项目的价值不在于口号而在于它能不能真正降低 AI 交易 Agent 的搭建门槛。如果你准备试它第一步先想清楚自己的目标是想验证 LLM 策略效果还是想做一个自动化信号系统或者只是学习 Agent 的工程结构。目标不同验证方式也不同。拿到项目后优先验证三件事数据链路是否通、LLM 输出能否稳定解析为结构化决策、风控层能否拦截异常请求。这三条都通过了再考虑增加数据源、多策略对比和 API 接入。最容易踩的坑有两个一是忽略风控直接接实盘二是把回测结果当成未来收益。这两个坑一旦踩进去损失的不只是钱还有对量化策略的信任。后续可以继续扩展的方向包括接入更多数据源、引入多模型投票、增加自动特征工程、把 Agent 包成可配置的定时服务、加入更细粒度的风控指标。如果你在图表的可视化输出上进一步打磨这个项目也能很自然变成一套量化研究教学 Demo。建议先收藏仓库在一个干净的 Python 虚拟环境里按照 README 跑通最小示例再做深入改造。