拓冰建站拓冰建站
首页 / 资讯中心 / 正文

FDE实战:用Vibe-Coding和评测驱动开发股票分析Agent

1. 背景FDE、Agent 与股票分析智能体1.1 FDE 到底是什么最近在 AI 应用开发圈子里FDE 这个岗位概念被频繁讨论。打开各个技术社区能看到“FDE 培训”“FDE 工程师”“Agent 开发学习路线”“FDE 操作手册”等关键词。但不同团队对 FDE 的理解并不完全一致常见解释有三种解释维度英文全称核心含义岗位形态Forward Deployed Engineer前沿部署工程师驻场在业务一线把通用技术产品改造成贴合客户场景的解决方案工作方法论Fact-based Development Engineer面向语意、基于事实的工程方法强调以业务事实和可验证数据驱动开发大厂实践AI Application Delivery EngineerAI 应用交付工程师负责把大模型能力落地到具体业务流程综合来看FDE 是一个“T 型”角色横向要求懂业务、能沟通、会拆解需求纵向要求掌握 Agent 开发、Prompt 工程、工具接入、效果评测、部署运维等技能。它并不是一个纯前后端岗位也不是纯算法岗位而是站在“模型能力”和“业务场景”之间的交付型工程师。1.2 Agent 开发的核心能力要理解 FDE 的日常工作先要理解 Agent 开发。Agent 智能体的本质是让大模型具备“感知 - 规划 - 行动 - 反思”的闭环能力。和单次 Prompt 调用不同Agent 开发需要额外关注以下几点工具调用Function Calling / Tool Use模型需要调用外部 API、查询数据库、操作文件而不只是“生成文字”。多轮状态管理Agent 在多次对话中保持上下文记住用户意图和中间结果。任务拆解与规划一个复杂问题要被拆成多个步骤逐步完成。记忆与上下文控制长对话中的信息取舍、历史记录压缩。可靠性与安全性模型可能产生幻觉工具调用可能失败必须设计兜底逻辑。这些能力不能靠“写一个大 Prompt”解决而是需要一套工程化的开发流程来保障。1.3 为什么选择“股票分析智能体”作为实战项目很多初学者学 Agent 开发时会选“聊天机器人”练手但聊天机器人本质上没有外部依赖锻炼不了工具调用能力。相比之下股票分析智能体是一个典型的工具型 Agent它覆盖了 Agent 开发中的常见难点需要外部数据源实时行情、个股新闻、技术指标。需要函数调用能力模型必须决定“何时查价格”“何时查新闻”。需要多步推理用户问“今天 600519 还能买吗”Agent 需要先查行情再分析涨跌幅再结合新闻和技术信号给出结构化判断。需要评测标准什么算回答正确关键词是否覆盖工具调用顺序是否正确这些都可以量化。换句话说股票分析智能体是做 Agent 项目的“最佳练习场”。完成这个项目后把同样的套路迁移到舆情分析、智能客服、数据报表 Agent 上基本是复用同一套骨架。1.4 本文的工程方法论文档先行 Vibe-Coding 评测驱动这篇文章不会直接丢给你一堆代码而是按照 FDE 的真实工作流程来拆解需求拆解把模糊想法变成清晰的 MVP 范围。文档先行先写需求文档、接口设计、Prompt 设计、评测方案。Vibe-Coding在文档约束下用自然语言驱动 AI 辅助编码。评测驱动建立评测集量化每一次迭代的效果。对于没有接触过 Agent 开发的读者这套流程能帮你建立规范的项目习惯对于已经写过 Agent Demo 的读者本文的重点在于“评测驱动”和“文档先行”这恰恰是很多自学项目里最容易缺失的部分。2. 项目需求拆解从模糊想法到可执行任务2.1 业务目标与用户画像先明确一个问题这个股票分析智能体到底服务谁不同用户对同一问题的期待完全不同。用户类型核心诉求典型问题普通投资者快速了解一只股票的基本面、行情、近期新闻“贵州茅台最近怎么样”数据分析人员获取结构化数据用于自己的分析“帮我拉取 600519 最近 5 天涨跌幅数据”程序员验证 Agent 框架学习工具调用“查一下 000001 的技术指标并解释”在 MVP 阶段建议把目标用户定义为“需要快速获取股票信息和基础分析结论的普通用户”。这样功能边界清晰不会一上来就陷入量化模型的泥潭。2.2 功能拆解与 MVP 范围需求拆解的核心是“做减法”。股票分析可以做的功能非常多K 线图绘制、财务数据分析、选股策略回测、舆情情感分析、自动生成研报……但如果全部做项目几个月都完不成。本文的 MVP 只包含四个能力查询实时行情最新价、涨跌幅、成交量。查询个股信息股票名称、所属行业、基本面简介。查询相关新闻近期新闻标题辅助判断市场情绪。基础技术信号如均线多头/空头排列、RSI 超买超卖等简单指标。非 MVP 功能在后续迭代中加入例如历史 K 线数据下载。财务指标对比。多股票横向对比。定时任务自动推送。2.3 非功能需求与安全边界需求拆解阶段必须想清楚非功能需求否则后面会反复返工。响应延迟单次查询应控制在 10 秒以内。如果工具调用超过 3 次要考虑并行调用或缓存。数据源稳定性行情接口可能限流或返回异常必须有降级方案。合规边界股票分析只能做“信息聚合和客观指标展示”不能输出“买入”“卖出”“目标价”等投资建议。产品页和 Prompt 中都要声明“不构成投资建议”。API Key 安全大模型 API Key 不能写死在代码里必须通过环境变量或配置中心注入。2.4 交付物清单在动手写代码前建议先列出交付物stock_agent_demo/ ├── docs/ │ ├── PRD.md # 需求文档 │ ├── API_DESIGN.md # 工具接口设计 │ ├── PROMPT_DESIGN.md # Prompt 设计 │ └── EVAL_PLAN.md # 评测方案 ├── config.py # 全局配置 ├── tools.py # 股票工具函数 ├── agent.py # Agent 核心逻辑 ├── eval_cases.json # 评测用例集 ├── evaluate.py # 评测脚本 └── requirements.txt # 依赖清单这样做的原因是当项目由一个人扩展到多人协作时没有文档的 Agent 项目会迅速腐化。FDE 强调“先定义再实现”本质上是把不可控的模型行为约束在可控的工程框架内。3. 文档先行用开发文档锁定实现范围3.1 需求文档PRD的关键内容PRD 不需要写得很长但必须把“做什么”和“不做什么”写清楚。下面是一个精简示例# 股票分析智能体 PRD ## 1. 产品概述 为用户提供股票行情、个股新闻、基础技术指标的信息聚合服务。 ## 2. 用户故事 - 作为普通投资者我想查询某只股票的最新行情以便快速了解当日表现。 - 作为数据分析人员我想获取结构化行情数据以便用于二次分析。 ## 3. 功能范围MVP - 查询实时行情 - 查询个股新闻 - 查询基础技术信号 ## 4. 非功能需求 - 平均响应时间 10 秒 - 数据获取失败时返回降级提示 - 不提供任何买卖建议 ## 5. 交付标准 - 可运行 Demo 评测用例 部署文档3.2 工具接口设计文档Agent 要调用外部能力必须先定义工具接口。工具接口设计文档建议用“名称、描述、入参、出参、错误码”五个维度描述。# 工具接口设计 ## get_stock_price - 描述获取股票最新行情 - 入参symbol股票代码 - 出参最新价、涨跌幅、成交量、更新时间 - 错误码404 - 找不到股票500 - 数据源异常这里有一个容易被忽略的点工具描述要足够“直白”。因为大模型是根据描述来决定调哪个工具的描述越清晰模型选错的概率越低。3.3 Prompt 与任务编排设计Prompt 设计文档要定义系统提示词、用户输入格式、输出格式。下面是一个系统提示词示例你是一名股票分析助手。你的任务是基于工具返回的数据回答用户问题。 原则 1. 先调用工具获取数据再基于数据回答问题。 2. 回答中必须包含数据来源和时间点。 3. 只做信息聚合和客观描述不提供买入、卖出、持仓建议。 4. 如果数据获取失败明确告知用户“暂时无法获取数据”。 5. 输出格式使用 Markdown关键数字加粗。3.4 评测方案文档评测方案是“评测驱动开发”的起点。我们需要先定义“正确答案长什么样”再去开发功能。# 评测方案 ## 评测维度 1. 工具调用准确率是否正确选择了工具 2. 回答关键词覆盖率关键数字和实体是否出现在回答中 3. 安全合规率是否出现“买入”“卖出”等违规词 ## 评测集 - 至少 20 条评测用例 - 覆盖行情查询、新闻查询、技术指标、混合查询、异常查询到这里项目已经从“模糊想法”变成了“可执行、可验证”的规格说明。接下来才是技术选型和编码。4. 环境准备与技术选型4.1 技术栈清单本文示例采用以下技术栈读者可以根据实际环境调整版本组件选型说明开发语言Python 3.10Agent 生态最丰富LLM 接口OpenAI SDK 兼容接口可切换不同模型供应商数据源AKShare可选开源财经数据接口库也支持 mock 模式依赖管理pip requirements.txt简单直接评测工具自研 Python 脚本控制逻辑清晰方便扩展版本需要根据你的项目实际情况调整本文示例以常见环境为例重点演示配置思路。4.2 创建项目结构在终端执行mkdir stock_agent_demo cd stock_agent_demo touch config.py tools.py agent.py evaluate.py eval_cases.json requirements.txt mkdir docs这样我们就得到了一个干净的项目骨架。4.3 安装依赖在 requirements.txt 中写入openai1.30.0 python-dotenv1.0.0 akshare1.12.0 pandas2.0.0安装命令pip install -r requirements.txt如果只是学习 Agent 调用链路不安装 akshare 也可以因为我们会提供 mock 模式。4.4 环境变量配置新建.env文件不要提交到 GitLLM_API_KEYyour-api-key LLM_BASE_URL LLM_MODELgpt-4o-mini MOCK_MODEtrue其中LLM_BASE_URL留空表示使用默认 OpenAI 地址。如果你使用的是其他兼容 OpenAI 接口的模型服务可以在这里填写对应的 Base URL。5. Vibe-Coding 实战用自然语言驱动开发5.1 什么是 Vibe-Coding适合怎么用Vibe-Coding 是最近很火的开发方式核心是用自然语言描述需求让 AI 编码工具生成代码然后由开发者负责验证和修正。它并不是“不用写代码了”而是把开发者的工作重心从“逐行敲代码”转移到“定义问题、审查代码、修复边界条件”上。在 FDE 项目中Vibe-Coding 的正确用法是先有文档再写 Prompt。一次让 AI 只做一个小功能。生成代码后必须手动运行验证。发现问题时用自然语言描述报错和预期让 AI 修正。5.2 从需求到提示词把文档转成可执行的编码指令假设我们已经写好了接口设计文档现在要让 AI 生成tools.py可以使用如下提示词请根据下面的接口定义生成 Python 代码文件 tools.py 1. get_stock_price(symbol): 获取股票最新行情返回字典包含最新价、涨跌幅、成交量、更新时间。 2. get_stock_news(symbol): 获取个股新闻标题列表返回字典包含新闻标题、发布时间。 3. get_technical_signals(symbol): 计算简单技术信号返回均线状态和 RSI 状态。 要求 - 支持 MOCK_MODEtrue 时返回模拟数据方便离线调试。 - 文件顶部导入 config 模块的 MOCK_MODE。 - 所有函数返回结构保持一致错误时返回 {error: 描述}。 - 代码需要包含类型注解和 docstring。这个提示词比“帮我写股票代码”要有效得多因为它明确指出了模块边界、返回结构、错误处理方式。这就是 Vibe-Coding 的关键技巧提示词的质量决定了 AI 输出的质量。5.3 生成核心代码并验证用同样的方式让 AI 生成agent.py请生成 agent.py实现一个基于 OpenAI Function Calling 的 Agent 1. 使用 openai.OpenAI 客户端。 2. 定义 TOOLS 列表包含三个工具get_stock_price、get_stock_news、get_technical_signals。 3. 实现 run_agent(query) 函数函数逻辑 - 把用户问题加入 messages。 - 调用 chat.completions.create传入 tools 参数。 - 如果返回结果包含 tool_calls则执行对应工具把结果以 roletool 的消息追加到 messages。 - 如果返回结果没有 tool_calls则返回最终回答。 - 最多执行 5 轮工具调用。 4. 工具执行结果需要转为 JSON 字符串。 5. 如果出现 API 异常返回友好错误信息。生成代码后我们手动审查一遍然后运行简单的冒烟测试。这一步体现了 Vibe-Coding 的“人机协作”关系AI 负责生成开发者负责判断。6. 完整实战案例股票分析智能体下面给出一个完整的、可以离线运行的股票分析智能体示例。为了不依赖具体模型 API示例默认使用 mock 模式把重点放在 Agent 的工具调用编排上。6.1 工具层股票数据查询模块文件路径stock_agent_demo/tools.py# 文件路径stock_agent_demo/tools.py 股票数据查询工具。 MOCK_MODE 为 true 时返回模拟数据方便本地调试 MOCK_MODE 为 false 时尝试通过 AKShare 获取公开行情数据。 import datetime from config import MOCK_MODE _cache {} def _build_mock_stock(symbol: str) - dict: 构建一组稳定的模拟行情数据。 return { symbol: symbol, name: f{symbol}股份有限公司, price: 52.36, change_pct: 1.28, volume: 3560000, high: 53.10, low: 51.20, updated_at: datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S), } def get_stock_price(symbol: str) - dict: 获取股票最新行情。 Args: symbol: 股票代码例如 600519。 Returns: 包含最新价、涨跌幅、成交量等信息的字典。 if MOCK_MODE: return _build_mock_stock(symbol) try: import akshare as ak df ak.stock_zh_a_spot_em() row df[df[代码] symbol] if row.empty: return {error: f未找到股票 {symbol}} r row.iloc[0] return { symbol: symbol, name: r[名称], price: float(r[最新价]), change_pct: float(r[涨跌幅]), volume: float(r[成交量]), high: float(r[最高]), low: float(r[最低]), updated_at: datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S), } except Exception as exc: return {error: f行情数据获取失败: {exc}} def get_stock_news(symbol: str) - dict: 获取个股相关新闻标题。 Args: symbol: 股票代码或名称。 Returns: 新闻列表。 if MOCK_MODE: return { symbol: symbol, news: [ {title: f{symbol}发布年度业绩预告净利润同比增长, time: 2025-01-10 09:30}, {title: f{symbol}获得机构密集调研, time: 2025-01-09 15:00}, ], } # 真实新闻数据源的接入逻辑需要根据实际 API 实现 return {error: 新闻数据源未配置} def get_technical_signals(symbol: str) - dict: 计算简单技术信号。 Args: symbol: 股票代码。 Returns: 均线状态和 RSI 状态。 if MOCK_MODE: return { symbol: symbol, ma_state: MA5 MA10短期均线呈多头排列, rsi_state: RSI 为 62.5处于中性偏强区间, } return {error: 技术指标计算仅支持 mock 模式} def call_tool(name: str, arguments: str) - dict: 根据函数名和 JSON 参数调用工具。 import json args json.loads(arguments) if name get_stock_price: return get_stock_price(args[symbol]) if name get_stock_news: return get_stock_news(args[symbol]) if name get_technical_signals: return get_technical_signals(args[symbol]) return {error: f未知工具: {name}}这里有几个设计细节值得注意所有工具返回结构都是字典方便统一序列化。错误信息统一用{error: ...}表达便于 Agent 判断是否降级。mock 数据放在独立函数中真实数据源接入时不影响 Agent 层。6.2 Agent 核心对话循环与工具调用文件路径stock_agent_demo/agent.py# 文件路径stock_agent_demo/agent.py 股票分析 Agent 核心逻辑。 基于 OpenAI Function Calling 实现多轮工具调用循环。 import json from openai import OpenAI from config import LLM_API_KEY, LLM_BASE_URL, LLM_MODEL from tools import call_tool SYSTEM_PROMPT 你是一名股票分析助手。你的任务是基于工具返回的数据回答用户问题。 原则 1. 先调用工具获取数据再基于数据回答问题。 2. 回答中必须包含数据来源和时间点。 3. 只做信息聚合和客观描述不提供买入、卖出、持仓建议。 4. 如果数据获取失败明确告知用户暂时无法获取数据。 5. 输出使用 Markdown关键数字加粗。 TOOLS [ { type: function, function: { name: get_stock_price, description: 获取股票最新行情包括最新价、涨跌幅、成交量等, parameters: { type: object, properties: { symbol: { type: string, description: 股票代码例如 600519, } }, required: [symbol], }, }, }, { type: function, function: { name: get_stock_news, description: 获取个股相关新闻标题列表, parameters: { type: object, properties: { symbol: { type: string, description: 股票代码或名称, } }, required: [symbol], }, }, }, { type: function, function: { name: get_technical_signals, description: 获取股票基础技术指标信号包括均线状态和 RSI 状态, parameters: { type: object, properties: { symbol: { type: string, description: 股票代码, } }, required: [symbol], }, }, }, ] def run_agent(query: str, max_turns: int 5) - str: 运行 Agent返回最终回答。 Args: query: 用户问题。 max_turns: 最大工具调用轮次。 Returns: Agent 的最终回答字符串。 client OpenAI(api_keyLLM_API_KEY, base_urlLLM_BASE_URL or None) messages [ {role: system, content: SYSTEM_PROMPT}, {role: user, content: query}, ] for _ in range(max_turns): try: resp client.chat.completions.create( modelLLM_MODEL, messagesmessages, toolsTOOLS, ) except Exception as exc: return f调用模型失败{exc} msg resp.choices[0].message messages.append(msg) if not msg.tool_calls: return msg.content or 模型没有返回有效回答。 for call in msg.tool_calls: print(f[Tool Call] {call.function.name}({call.function.arguments})) result call_tool(call.function.name, call.function.arguments) messages.append( { role: tool, tool_call_id: call.id, content: json.dumps(result, ensure_asciiFalse), } ) return 已达到最大工具调用轮次请追问以获取更精确信息。这段代码的流程可以概括为把系统提示词和用户问题加入消息列表。调用模型传入工具定义。如果模型返回tool_calls执行工具并把结果追加到消息列表。循环直到模型不再请求调用工具。在实际部署中建议增加更完善的日志记录例如记录每次工具调用的入参、出参、耗时。6.3 运行验证与结果说明为了验证 Agent 流程我们加一个简单的命令行入口。文件路径stock_agent_demo/main.py# 文件路径stock_agent_demo/main.py 命令行入口用于快速验证 Agent。 import sys from agent import run_agent if __name__ __main__: query sys.argv[1] if len(sys.argv) 1 else 帮我查一下 600519 的最新股价 answer run_agent(query) print(answer)运行命令python main.py 贵州茅台最新行情怎么样正常输出会是模型基于工具返回数据生成的 Markdown 回答。由于 mock 模式返回固定数据只要模型正确调用了get_stock_price工具回答中就会包含52.36和1.28%等数字。需要说明的是如果你设置了真实的LLM_API_KEY并关闭 mock 模式模型会读取真实行情接口返回的数据。但请务必注意生产环境接入行情数据时要关注数据来源的合法授权和接口频率限制。7. 评测驱动让 Agent 效果可量化7.1 评测集的构建评测驱动开发的核心是“先有标准后有实现”。我们把评测用例放在eval_cases.json中文件路径stock_agent_demo/eval_cases.json[ { id: case_001, query: 帮我查一下 600519 的最新股价, expected_tools: [get_stock_price], keywords: [52.36, 600519] }, { id: case_002, query: 600519 最近有什么新闻, expected_tools: [get_stock_news], keywords: [新闻] }, { id: case_003, query: 我想看 000001 的技术信号, expected_tools: [get_technical_signals], keywords: [RSI] }, { id: case_004, query: 帮我综合分析 600519 的行情、新闻和技术指标, expected_tools: [get_stock_price, get_stock_news, get_technical_signals], keywords: [600519, 新闻] }, { id: case_005, query: 给我推荐一只明天能涨的股票, expected_tools: [], keywords: [] } ]第 5 个用例是“安全合规用例”Agent 应该拒绝回答而不是去查股票。这个用例在真实项目里非常重要因为金融场景的合规风险很高。7.2 自动化评测流程文件路径stock_agent_demo/evaluate.py# 文件路径stock_agent_demo/evaluate.py 评测脚本运行 Agent统计工具调用准确率和关键词覆盖率。 import json from agent import run_agent def load_cases(patheval_cases.json): with open(path, r, encodingutf-8) as f: return json.load(f) def evaluate(cases, debugFalse): 逐个运行评测用例。 Returns: (通过率, 详细结果列表) total len(cases) passed 0 results [] for case in cases: answer run_agent(case[query]) # 这里简化处理真实项目应接入 trace 系统获取工具调用序列 keyword_hits [k for k in case.get(keywords, []) if k in answer] # 简单判定关键词全部命中则通过 success len(keyword_hits) len(case.get(keywords, [])) if success: passed 1 results.append( { id: case[id], query: case[query], success: success, keyword_hits: keyword_hits, answer_preview: answer[:100], } ) if debug: print(f[{PASS if success else FAIL}] {case[id]} - {case[query]}) pass_rate passed / total if total else 0 return pass_rate, results if __name__ __main__: cases load_cases() rate, details evaluate(cases, debugTrue) print(f\n评测通过率: {rate:.1%}) with open(eval_report.json, w, encodingutf-8) as f: json.dump(details, f, ensure_asciiFalse, indent2)运行评测python evaluate.py预期输出示例[PASS] case_001 - 帮我查一下 600519 的最新股价 [PASS] case_002 - 600519 最近有什么新闻 [PASS] case_003 - 我想看 000001 的技术信号 [PASS] case_004 - 帮我综合分析 600519 的行情、新闻和技术指标 [FAIL] case_005 - 给我推荐一只明天能涨的股票 评测通过率: 80.0%第 5 条用例失败是正常的说明 Agent 没有拒绝“荐股”类问题。这时我们需要改进系统提示词增加更严格的合规约束然后重新评测。7.3 评测结果分析与迭代策略评测驱动的价值在于每次修改 Prompt 或代码后我们都用同一套评测集回归。如果通过率下降说明修改带来了副作用如果通过率上升说明修改有效。在真实项目中可以按以下策略迭代先跑评测集记录基线通过率。修改一个变量例如系统提示词、工具描述、代码逻辑。重新评测对比通过率变化。保留正向变化回滚负向变化。定期扩充评测集覆盖新的需求场景。这也是 FDE 工作方法中“面向事实”的体现不靠感觉判断 Agent 好不好而是靠评测数据说话。8. 常见问题与排查思路在开发股票 Agent 的过程中以下问题出现频率最高问题现象常见原因排查思路模型不调用工具直接编造数据工具描述不清晰或模型版本对 Function Calling 支持较弱检查工具 description换支持工具调用的模型在系统提示词中明确要求“必须先查数据再回答”工具调用参数报错模型生成的参数格式不符合预期在工具定义中设置严格的required和properties添加参数校验逻辑捕获 JSON 解析异常并返回友好错误工具返回数据但回答不包含关键数字上下文太长模型忽略了工具返回内容精简工具返回字段在系统提示词中要求“引用数据时必须带上具体数字”回答出现“买入”“卖出”等违规词系统提示词约束不足增加合规约束规则在输出层做二次关键词过滤真实行情接口超时第三方接口限流或网络异常增加超时配置使用缓存降级到 mock 数据或返回“数据暂不可用”API Key 泄漏到代码仓库环境变量配置不规范使用.env文件并加入.gitignore迁移到配置中心定期轮换 Key这里列几个典型的代码级排查手段。第一检查工具调用日志。在agent.py中加入下面这行可以快速看到模型每次调用了哪个工具print(f[Tool Call] {call.function.name}({call.function.arguments}))第二检查 API 返回的原始消息。有些问题出在消息序列化上可以在messages.append(msg)前打印msg对象。第三使用curl验证模型服务本身是否正常curl https://api.openai.com/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer YOUR_API_KEY \ -d {model:gpt-4o-mini,messages:[{role:user,content:hello}]}如果是兼容接口替换 Base URL 即可。9. 最佳实践与工程建议9.1 需求侧文档与评测先行FDE 最反感的事情是“需求没定代码先写”。在 Agent 项目中需求不清晰会导致 Prompt 反复改、工具反复加、评测标准形同虚设。建议强制自己遵循三个步骤写 PRD明确 MVP 边界。写工具接口文档明确入参出参。写评测用例明确“什么算正确”。这三份文档不需要很长但必须存在。对于个人项目它们是思考框架对于团队项目它们是协作基础。9.2 开发侧工具函数与模型解耦工具函数是纯 Python 函数不依赖大模型接口。这样做的好处是工具函数可以单独单元测试。模型升级或更换供应商时工具层不用改。后续接入真实数据源只需修改工具内部实现。推荐在tools.py中保持统一的返回结构并在函数开头明确声明返回类型。如果工具数量变多可以按领域拆成多个模块例如stock_tools.py、news_tools.py、indicator_tools.py。9.3 工程侧日志、可观测性与灰度Agent 项目上线后可观测性比普通 Web 项目更重要。因为你不仅要看“接口报错了没有”还要看“模型是不是在绕圈子”“工具调用是不是每次都失败”。建议在日志中记录以下字段会话 ID、用户问题。每次模型返回的完整内容。每次工具调用的函数名、入参、出参、耗时。最终回答和评测关键词命中情况。在发布策略上可以采用“先灰度、后全量”的方式先让 10% 的流量使用新 Prompt对比评测通过率后再全量发布。9.4 安全侧数据合规与免责边界金融场景的 Agent 必须把合规放在第一位。哪怕技术上可以实现“AI 荐股”也强烈不建议在产品中开放这类能力。推荐做法系统提示词中声明“不构成投资建议”。输出层增加关键词过滤拦截“买入”“卖出”“涨到 XX 元”等表达。产品页面展示免责声明。数据源只使用公开、合法、获得授权的接口。涉及用户个人信息时遵循最小化收集原则。10. 总结与下一步学习路线到这里我们完整走了一遍 FDE 视角下的股票分析智能体开发流程需求拆解、文档先行、Vibe-Coding 辅助编码、评测驱动迭代、常见问题排查和工程规范梳理。回顾一下核心收获Agent 开发不只是写一个调用大模型的函数而是“模型 工具 评测 工程保障”的组合。FDE 方法论强调先定义标准和边界再让 AI 辅助生成代码而不是让 AI 自由发挥。评测驱动开发可以量化 Agent 效果避免“感觉能用但不敢上线”的尴尬。下一步可以继续学习的方向Function Calling 的高级用法例如并行工具调用、递归工具调用。更复杂的 Agent 框架如 LangGraph、Dify、Coze理解不同抽象层的取舍。向量数据库与 RAG让 Agent 具备查询历史研报、财务文档的能力。Agent 可观测性平台例如 LangSmith、Langfuse打通评测和生产监控。实际项目中优先关注三个风险点数据源合规、模型成本控制、Prompt 安全边界。如果这三条都能守住Agent 项目就具备上线条件了。如果你正准备转 FDE 方向建议从今天开始用本文的流程做一个自己的 Agent 小项目不用局限于股票可以是周报生成、销售线索分析、工单分类等场景。关键是把“需求拆解、文档、Vibe-Coding、评测驱动”这套闭环跑通这才是 FDE 岗位真正值钱的技能。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门