用 AI 构建交易助手:Jefferies 如何连接知识库、模型与前台工具

2026-07-24 26 预计阅读时间: 1 分钟
来源: aws.amazon.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:12 分钟

交易前台并不缺数据,真正稀缺的是把分散的数据、制度文档和操作工具快速组织成可执行判断的能力。Jefferies 构建的交易助手没有把大语言模型当作一个独立聊天窗口,而是基于 Strands Agents 编排基础模型与外部工具,并结合 Amazon Bedrock、Amazon Bedrock Knowledge Bases 和模型上下文协议(MCP),让智能体能够推理、规划并执行受控操作。

这套方案值得关注的地方,不只是“在交易场景中使用 LLM”,而是它呈现了一条更可落地的工程路径:模型负责理解意图和规划步骤,知识库提供可追溯的企业信息,工具接口执行查询或操作,权限与审计则守住生产边界。

交易助手不是更聪明的搜索框

前台交易操作通常跨越多个系统。用户提出的一个问题,可能同时涉及内部流程、历史资料、市场或交易数据,以及特定业务工具。如果只把全部上下文塞进提示词,系统很快会遇到上下文过长、数据陈旧、权限不清和结果难以核验等问题。

基于来源摘要,可以把 Jefferies 的方案理解为四个相互配合的层次:

  1. Strands Agents 负责智能体编排:接收用户目标,调用基础模型进行推理和规划,并决定何时使用外部工具。
  2. Amazon Bedrock 提供模型访问层:应用通过托管接口调用基础模型,避免自行维护模型推理基础设施。
  3. Bedrock Knowledge Bases 提供企业知识检索:将内部文档检索结果作为上下文交给模型,降低仅凭模型参数回答业务问题的风险。
  4. MCP 统一连接数据和工具:将不同系统包装成标准化能力,使智能体不必为每个数据源维护一套完全不同的集成逻辑。

关键的架构变化是把“回答问题”拆成一条受控流水线:

用户请求
  -> 智能体识别意图与约束
  -> 检索内部知识库
  -> 选择并调用 MCP 工具
  -> 汇总证据与工具结果
  -> 返回答案,或提交需要人工确认的操作

这种拆分也明确了责任边界。模型可以决定“下一步应该查询什么”,但它不应该凭空生成交易状态;知识库可以提供制度依据,但不能替代实时系统;工具能够执行操作,但必须独立完成鉴权、参数校验和审计记录。

为什么这个技术组合适合前台业务

选择智能体框架的实际价值,在于把推理循环、工具调用和模型接入从业务代码中分离出来。交易助手需要处理的不是固定问答流程,而是根据问题动态选择知识库和工具。例如,用户先询问某类交易的处理规则,智能体检索内部文档后,可能还要查询相关记录,最后才能形成带依据的答复。

MCP 在这里解决的是接口碎片化问题。不同数据源仍然拥有各自的认证方式和业务语义,但可以通过统一协议向智能体暴露工具描述、输入参数和返回结果。这样做并不会自动带来安全性;真正的安全仍取决于 MCP 服务端是否执行最小权限、身份透传、输入校验、超时控制和审计。

Bedrock Knowledge Bases 则承担知识落地工作。它适合保存操作手册、政策、产品资料和其他非结构化企业内容。检索增强生成可以让答案基于检索片段,而不是只依赖模型记忆。不过,知识库内容必须有版本、有效期和访问控制。过期制度被准确检索出来,仍然会产生错误答案。

可以这样实践:把知识库检索封装成智能体工具

下面是一个可改造的最小示例。它不是 Jefferies 生产实现的复刻,而是根据摘要中的技术组合演示如何把 Bedrock Knowledge Bases 检索能力交给 Strands Agent。

运行前需要准备 Python 3.10 或更高版本、可用的 AWS 凭证、Bedrock 模型访问权限,以及一个已经完成数据同步的 Bedrock Knowledge Base。安装依赖:

python -m venv .venv
source .venv/bin/activate
pip install strands-agents boto3

export AWS_REGION=us-east-1
export BEDROCK_KB_ID=YOUR_KNOWLEDGE_BASE_ID
export BEDROCK_MODEL_ID=YOUR_BEDROCK_MODEL_ID

将下面内容保存为 trade_assistant.py。需要替换的值通过环境变量传入:

import os
from typing import Any

import boto3
from strands import Agent, tool
from strands.models import BedrockModel

REGION = os.getenv("AWS_REGION", "us-east-1")
KNOWLEDGE_BASE_ID = os.environ["BEDROCK_KB_ID"]
MODEL_ID = os.environ["BEDROCK_MODEL_ID"]

bedrock_agent_runtime = boto3.client(
    "bedrock-agent-runtime",
    region_name=REGION,
)


@tool
def search_internal_policy(question: str) -> dict[str, Any]:
    """Search approved internal operating policies and return cited excerpts."""
    response = bedrock_agent_runtime.retrieve(
        knowledgeBaseId=KNOWLEDGE_BASE_ID,
        retrievalQuery={"text": question},
        retrievalConfiguration={
            "vectorSearchConfiguration": {"numberOfResults": 4}
        },
    )

    results = []
    for item in response.get("retrievalResults", []):
        results.append(
            {
                "text": item.get("content", {}).get("text", ""),
                "score": item.get("score"),
                "source": item.get("location", {}),
            }
        )
    return {"results": results}


model = BedrockModel(
    model_id=MODEL_ID,
    region_name=REGION,
)

agent = Agent(
    model=model,
    tools=[search_internal_policy],
    system_prompt=(
        "You are an internal trading operations assistant. "
        "Use the policy search tool before answering policy questions. "
        "Cite the returned source metadata. If evidence is missing, say so. "
        "Never claim that a trade was submitted, changed, or approved."
    ),
)

if __name__ == "__main__":
    question = input("Question: ").strip()
    if not question:
        raise SystemExit("A question is required")
    print(agent(question))

运行:

python trade_assistant.py

这个示例有意把工具限制为只读检索。接入真实交易或订单工具时,不应简单地把 submit_order() 暴露给模型。更稳妥的做法是将写操作拆成“生成草稿”和“确认执行”两个阶段,并在服务端验证用户身份、账户范围、产品权限、数量限制及幂等键。

MCP 工具也可以采用类似的风险分级。下面是一个示意性的工具目录,不代表特定 MCP SDK 的配置格式:

# Illustrative configuration; adapt it to the MCP client in your environment.
servers:
  policy-search:
    transport: stdio
    command: python
    args: ["servers/policy_search.py"]
    permissions: ["knowledge:read"]

  trade-operations:
    transport: http
    url: "https://internal.example/mcp"
    permissions: ["trade:read", "trade:draft"]
    require_human_confirmation:
      - "trade.submit"
      - "trade.cancel"
      - "trade.amend"

配置文件只是声明意图。权限判断必须发生在工具服务端,不能依赖提示词中的“禁止调用”或客户端传来的权限标签。

从原型走向前台生产系统

摘要提到该方案带来了业务影响,但没有提供具体指标,因此不能凭空推断节省了多少时间或提升了多少交易量。团队可以围绕可验证的运行指标评估价值:平均响应时间、一次解决率、被用户采纳的答案比例、引用覆盖率、工具调用失败率,以及转人工处理的比例。

生产化时还需要处理几类容易被演示环境掩盖的问题:

  • 答案可追溯:返回文档名称、版本和检索片段,让用户能核验依据。
  • 数据时效性:明确区分实时交易数据、延迟数据和静态知识库内容。
  • 工具最小权限:查询、生成草稿和执行操作使用不同权限,写操作默认需要人工确认。
  • 提示注入防护:把检索文档视为不可信输入,禁止文档内容覆盖系统策略或工具权限。
  • 完整审计:记录用户身份、模型版本、提示模板版本、检索来源、工具参数和最终结果,同时对敏感字段脱敏。
  • 失败可恢复:为外部工具设置超时、重试和幂等机制;模型无法确认状态时,应明确返回“未知”,而不是猜测成功。

采用建议:先做可信助手,再做自动执行

交易助手最合理的起点通常是高频、只读、证据明确的任务,例如检索内部流程、汇总相关资料、解释操作规则和生成处理草稿。这个阶段可以验证检索质量、权限模型和用户体验,同时控制错误的影响范围。

当团队能够稳定回答“模型为什么这样说、用了哪些数据、调用了什么工具、失败后如何恢复”之后,再逐步开放受约束的写操作。Strands Agents、Amazon Bedrock、Bedrock Knowledge Bases 与 MCP 提供了搭建这类系统所需的编排、模型、知识和连接层,但金融前台能否真正采用它,最终取决于证据、权限、审计和人工确认是否被设计成系统能力,而不是停留在提示词约定中。


相关推荐