Skip to main content
Glama
RudrenduPaul

Electronics RFQ Agent

Electronics RFQ Agent

您的销售工程师需要花费 2-4 小时将 RFQ 文档转化为报价。这个工具只需几秒钟。

Electronics RFQ Agent 是一个 Python 库和 CLI 工具,可读取 RFQ 文档(PDF、Excel、Word),将每个行项目与您的 ERP 目录进行匹配,并输出报价草稿。它通过 MCP 服务器连接 SAP、Epicor、Oracle 和 Microsoft Dynamics,因此可以与 Claude、GPT-4 或任何支持 MCP 的代理框架配合使用。

CI PyPI version Python 3.10+ License: MIT OpenSSF Scorecard


终端录制,显示 erfa --help 列出 quote 和 audit 子命令,然后 erfa audit 针对 mock ERP 后端打印一份五行 RFQ 的完整填充率报告

目录

Related MCP server: databid

安装

pip install electronics-rfq-agent-cli
# or
uv add electronics-rfq-agent-cli

如需从源码安装,请执行:

git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent
pip install -e .
# or, with uv:
uv sync

解析 RFQ 文档(PDF、Excel、Word)会调用 Anthropic API,因此在运行任何涉及真实文档的操作之前,请先设置 ANTHROPIC_API_KEY:

export ANTHROPIC_API_KEY="sk-ant-..."

运行 erfa audit 检查现有报价文件,或使用 --help 浏览 CLI 时,不需要此密钥。只有文档解析才会调用 Claude。

此工具解决的问题

我们曾与电子元器件分销商合作,他们有 3-5 名销售工程师,大部分时间都花在报价录入上。我们找到的每个工具要么绑定特定 ERP,要么需要 6 个月的集成项目。我们想要一个能与分销商现有系统配合、可自托管(报价数据很敏感)且真正可扩展的工具。

MCP 架构意味着新增一个 ERP 只需编写一个文件。解析器能处理分销商实际发送的文档格式:手填 PDF、多工作表 Excel 文件,以及偶尔出现的扫描表格。

快速上手

试用无需任何 ERP 系统;mock 后端自带 200 个真实电子元器件。您确实需要设置 ANTHROPIC_API_KEY,因为解析 RFQ 文档仍然是一次真实的 Claude 调用:

from electronics_rfq_agent import QuoteAgent
from electronics_rfq_agent.mcp.mock import MockERP

agent = QuoteAgent(erp=MockERP())
quote = agent.run_sync("path/to/rfq.xlsx")

for line in quote.lines:
    print(f"{line.rfq_line.part_number}: {line.status} @ {line.unit_price}")

print(quote.summary())

MockERP 自动应用基于数量的定价层级:数量 >= 1000 享 20% 折扣,数量 >= 100 享 10% 折扣,数量 >= 10 享 5% 折扣。数量低于 10 时按目录价计算。这模拟了真实的批量定价,使基准测试和集成测试反映真实的成本曲线。

连接真实 ERP:

from electronics_rfq_agent import QuoteAgent
from electronics_rfq_agent.mcp import EpicorMCP

agent = QuoteAgent(
    erp=EpicorMCP(base_url="https://your-epicor.company.com", api_key="..."),
    max_concurrent=10,  # parallel ERP lookups (default: 10)
)
quote = agent.run_sync("rfq_2026_0619.xlsx")
print(quote.summary())

命令

erfa 提供两个子命令。以下每个标志均直接取自 erfa --help。

命令

参数

标志

功能

erfa quote

rfq(路径,必填)

--mock、--margin <float>(默认 0.15)、--output/-o <path>

解析 RFQ 文件并打印报价草稿。需要 ANTHROPIC_API_KEY;解析始终通过 Claude 进行,--mock 仅替换 ERP 后端。

erfa audit

quote_file(路径,必填)

无

针对使用 erfa quote --output 保存的报价 JSON 文件,打印完整的审计报告(已找到 / 已替换 / 未找到、填充率)。仅读取本地文件,无需 API 密钥。

erfa mcp

无

无

启动一个 MCP stdio 服务器,将 quote_rfq、lookup_part 和 audit_quote 作为类型化工具暴露,使任何兼容 MCP 的代理(Claude、GPT-4、Gemini)无需调用 CLI 即可直接调用它们。将您的 MCP 客户端配置指向 erfa mcp 作为命令。

# Generate a quote from an RFQ file against the mock ERP
export ANTHROPIC_API_KEY="sk-ant-..."
erfa quote rfq.xlsx --mock

# Save the quote as JSON for later inspection
erfa quote rfq.xlsx --mock --output quote.json

# Audit what happened: what was found, substituted, or missing and why
erfa audit quote.json

审计输出示例(erfa audit docs/example-quote.json 的真实输出,通过对 tests/fixtures/sample_rfq.txt 中的示例 RFQ 运行 mock ERP 的定价逻辑生成):

Audit Report - Quote df9fd083
RFQ Source : tests/fixtures/sample_rfq.txt
Lines      : 5
Total      : USD 64.04

FOUND (4)
------------------------------------------------------------
  L  1  RES-0402-10K-1PCT               qty=1000  unit=0.0064  ext=6.40
  L  2  CAP-100NF-50V-X7R-0402          qty=500  unit=0.0104  ext=5.20
  L  3  IC-LM358-SOIC8                  qty=50  unit=0.7101  ext=35.50
  L  4  XTAL-16MHZ-SMD                  qty=25  unit=0.6774  ext=16.94

NOT FOUND (1)
------------------------------------------------------------
  L  5  MOSFET-NMOS-20V-3A-SOT23        Part 'MOSFET-NMOS-20V-3A-SOT23' not found in ERP catalog

Fill rate: 80%  (4 found / 0 substituted / 1 not found)

零价格零件: 如果某个零件存在于 ERP 目录中但单价为 $0.00,代理会按 $0 报价而不是跳过该行,并在 line.notes 中设置一条消息标记零价格,以便您在向客户报价前发现。在发送报价前,请检查任何已找到或已替换行的 line.notes。

API 参考

完整参考文档位于 docs/api.md:包括每个 QuoteAgent 参数、共享的 ERP 连接器接口、Quote/QuoteLineItem 逐字段说明以及异常层次结构。以下导出项是 from electronics_rfq_agent import ... 实际提供的内容,直接从 src/electronics_rfq_agent/__init__.py 中提取,而非猜测:

导出项

说明

QuoteAgent

协调解析 + ERP 查找 + 报价组装。run()(异步)和 run_sync()。

EpicorMCP、SAPMCP、OracleMCP、DynamicsMCP

ERP 连接器,每个受支持系统一个。全部实现相同的 search_parts / get_part / get_price / check_inventory 接口。

MockERP(来自 electronics_rfq_agent.mcp.mock)

内存后端,包含 200 个真实零件。无需凭据,无需网络。

Quote、QuoteLineItem、RFQLineItem、ERPPartResult、ERPConfig

用于报价、每个行项目、解析后的 RFQ 行、原始 ERP 数据和连接器配置的 Pydantic v2 模型。

ERPConnectionError、RFQParseError

QuoteAgent 可能抛出的两个异常:连接/认证失败和无法解析的文档。单行 ERP 失败不会抛出异常;它们会记录在 line.notes 中。

TelemetryCollector、TelemetryEvent

可选的本机遥测(在 QuoteAgent 上设置 telemetry=True),仅包含计数和计时,不包含 RFQ 内容。

与替代方案的区别

Electronics RFQ Agent

人工流程

SAP Joule

通用 AI(ChatGPT)

多 ERP 支持

SAP + Epicor + Oracle + Dynamics

不适用

以 SAP 为中心(Joule Studio 可通过 SAP Integration Suite 访问非 SAP 源)

无 ERP 访问

报价时间(50 行)

~15 秒

2-4 小时

未公开文档化

不适用

可自托管

是

不适用

否(SAP BTP 云服务)

否

数据保留在本地

是

是

否

否

开源

MIT

不适用

否

否

开发用 mock 后端

是

不适用

未公开文档化

不适用

兼容 MCP

是

不适用

未公开文档化

否

ERP 支持

ERP

状态

连接方式

文档

Epicor Kinetic

受支持

REST API

设置

SAP ECC / S/4HANA

测试版(手动安装)

PyRFC (BAPI)

设置

Oracle Cloud SCM

受支持

REST API

设置

Microsoft Dynamics 365

受支持

Graph API

设置

Mock 后端

内置

内存

无需配置

SAP 说明: pyrfc 需要 SAP NetWeaver RFC Library,该库不在 PyPI 上,必须从 SAP 支持门户手动下载(需要 S 用户)。分步说明请参阅 docs/erp-setup/sap.md。

基准测试

使用内存 mock 后端(200 个真实零件,无需 ERP 系统)测量。您可以自行运行:

git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent
uv run python benchmarks/run.py

ERP 查找延迟(100 次单独查找,mock 后端):

P50

P99

平均值

0.00025ms

0.0023ms

0.00032ms

按 RFQ 规模统计的报价组装时间(解析器已 mock,不调用 Anthropic API):

RFQ 规模

组装时间

10 行

0.004s

25 行

0.001s

50 行

0.001s

这些数字仅涵盖 ERP 查找和报价组装。RFQ 解析器已 mock,且未进行任何 Anthropic API 调用。在生产环境中,AI 文档解析每个文档增加 5-15 秒,真实 ERP 查找每行增加 100-500ms(以 max_concurrent=10 并行化),因此 50 行 RFQ 的实际总时间约为 ~15 秒。人工基线:2-4 小时。

集成矩阵

Electronics RFQ Agent 可与任何支持 MCP 的代理框架配合使用:

框架

安装

示例

Claude(内置)

pip install electronics-rfq-agent-cli

01-basic-quote

LangGraph

pip install 'electronics-rfq-agent-cli[langgraph]'

04-langgraph-agent

OpenAI Agents SDK

pip install electronics-rfq-agent-cli[agents]

05-openai-agents

CrewAI

pip install electronics-rfq-agent-cli[crewai]

n/a

在 Docker 中试用

git clone https://github.com/RudrenduPaul/electronics-rfq-agent
cd electronics-rfq-agent
cp .env.example .env   # add your ERP credentials and Anthropic API key
docker compose up -d

您的报价数据绝不会离开您的环境。

安全性

  • 漏洞扫描: Trivy 扫描每次 CI 运行(HIGH/CRITICAL 严重级别,未修复的发现会导致构建失败),结果上传到 GitHub Security 选项卡。

  • 发布签名: 发布工作流使用 Sigstore 对构建的 wheel 和 sdist 进行签名,并在版本打标签后为每个 GitHub Release 附加 CycloneDX SBOM。

  • 依赖固定: Dependabot 使 GitHub Actions 和 Python 依赖保持最新(每周补丁更新,每月 Actions 更新)。

  • 披露: SECURITY.md。请通过电子邮件或 GitHub Security Advisories 私下报告漏洞;48 小时内确认,90 天负责任披露。

常见问题

Electronics RFQ Agent 到底做什么? 它接收客户的 RFQ 文档(PDF、Excel 或 Word),使用 Claude 提取每个行项目,通过 MCP 连接器在您的 ERP 目录中查找每个零件,并返回一份应用了利润率的带价格报价草稿。销售工程师进行审核并发送,而不是从头开始构建。

它可以用于生产环境吗? 它处于 Beta 阶段(v0.2.x)。核心库、Epicor、Oracle 和 Dynamics 连接器在 Python 3.10-3.12 上均受 CI 覆盖(lint、mypy strict、pytest 附带 80% 覆盖率门槛、Trivy 扫描)。SAP 支持明确标记为 Beta,需要手动安装步骤(SAP NetWeaver RFC Library 不在 PyPI 上)。

试用它需要 ERP 系统吗? 不需要。MockERP 附带 200 个逼真的电子零件,并应用基于数量的定价层级,因此您可以在零 ERP 凭据的情况下运行完整的解析-查找-报价流程。您仍然需要 ANTHROPIC_API_KEY,因为文档解析是真实的 Claude 调用。只有 erfa audit(读取已保存的报价文件)可以在完全没有密钥的情况下工作。

这与让 ChatGPT 读取 RFQ 有何不同? 通用聊天模型可以读取文档,甚至猜测价格,但它与您实际的 ERP 目录、库存或合同定价没有连接,因此它是在编造数字。Electronics RFQ Agent 会根据您的真实目录数据查找每个行项目,并且只对实际有库存的零件按实际成本价加上您配置的利润率进行报价。

这与 SAP Joule 有何不同? Joule 是 SAP 的专有 AI 助手套件,内置于 SAP 的云平台(SAP BTP)中,并以 SAP 数据为中心。Electronics RFQ Agent 采用 MIT 许可证,可自托管,并通过相同的 MCP 接口与 SAP、Epicor、Oracle 和 Dynamics 配合使用。您的报价数据不必离开您的环境,也不会被绑定到单一 ERP 供应商。

如何从代理而不是 CLI 调用它? 运行 erfa mcp 启动一个 MCP stdio 服务器,将 quote_rfq、lookup_part 和 audit_quote 作为类型化工具公开。将任何兼容 MCP 的客户端(Claude、GPT-4、Gemini 或自定义代理框架)指向 erfa mcp 作为启动命令,它就可以直接调用这些工具,输入和输出均为结构化 JSON,无需解析 CLI 输出。

它解析哪些文档格式? PDF(包括通过 Claude 的视觉能力扫描的表格)、Excel(.xlsx/.xls,在每个工作表中搜索行项目标题行)和 Word(.docx,读取所有表格)。纯文本 RFQ 也可以。

如果行项目不在 ERP 目录中会怎样? 它会被标记为 not_found,并附上说明原因(而不是被静默丢弃或猜测),并且会被排除在报价总额之外。对保存的报价 JSON 运行 erfa audit,可以准确查看哪些行被找到、被替换或缺失,以及原因。

我可以将其用于商业用途吗? 可以。它采用 MIT 许可证,因此您可以将其用于商业用途、修改并发布,无需支付版税,也没有义务开源您的更改。只需通过许可证文件注明出处即可。

我的 RFQ 和定价数据除了发送给 Anthropic 之外,还会发送到其他地方吗? 只有 RFQ 文档内容会发送到 Anthropic API 进行解析。ERP 查找通过您配置的连接器直接从您的机器发送到您的 ERP 系统:没有中间服务,除非您选择自行持久化报价 JSON,否则不会在您自己的环境之外存储任何内容。

这个发布到 PyPI 了吗? 是的,作为 electronics-rfq-agent-cli(pip install electronics-rfq-agent-cli)。发布流水线(构建、Sigstore 签名、SBOM、可信发布者上传)位于 .github/workflows/release.yml 中,并在每次推送 v* 标签时运行。Python 导入路径(electronics_rfq_agent)和 erfa CLI 命令保持不变;只有面向注册表的包名带有 -cli 后缀,这与该维护者针对 CLI 工具的命名约定一致。

贡献

  • 在打开 PR 之前阅读 CONTRIBUTING.md

  • 适合新手的问题在 GitHub 中带有标签

  • ERP 适配器位于 electronics_rfq_agent/mcp/ 中;每个都是独立的文件,无需更改核心

  • 所有 PR 都需要 80% 的测试覆盖率

GitHub Discussions:提问、分享想法 Discord:即将推出

完整文档:入门 · API 参考 · ERP 设置:Epicor · SAP · Oracle · Dynamics 365 · 更新日志

MIT。欢迎贡献。

许可证

MIT。参见 LICENSE。

引用此作品

如果您在研究中使用了 Electronics RFQ Agent,请引用:

@software{paul2026electronicsrfq,
  author = {Paul, Rudrendu and Nandy, Sourav},
  title = {Electronics RFQ Agent: AI Quoting Agent for Electronics Distributors},
  year = {2026},
  url = {https://github.com/RudrenduPaul/electronics-rfq-agent},
  license = {MIT}
}

由 Rudrendu Paul 和 Sourav Nandy 构建

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Intelligently generates cost estimates and lead times for manufacturing RFPs by parsing requests, matching against historical quotes, and calculating activity-based costs with confidence scoring and human approval workflows.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Agent-native company intelligence. AI agents search and retrieve structured, verified company context (certifications, capabilities, capacity, lead times) for manufacturing & supply chain via 5 MCP tools.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A FastMCP runtime that lets AI tools search electronic components, prices, and availability across the Distrify distributor network through one connection, federating queries across accessible distributors.
    MIT