从最初对人工智能的懵懂认知,到逐渐踏入Prompt工程的世界,我们一路探索,从私有化部署的实际场景,到对DeepSeek技术的全面解读,再逐步深入到NL2SQL、知识图谱构建、RAG知识库设计,以及ChatBI这些高阶应用。一路走来,我们在AI的领域里一步一个脚印,不断拓展视野和能力边界。如果你是第一次点开这篇文章,或许会觉得今天的内容稍有挑战。但别担心,之前我创作的的每一篇人工智能文章都是精心铺设学习前置的基石。如果希望更深入地理解接下来我们将讨论的「从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践」这一主题,不妨先回顾我以往分享过的基础与进阶文章,相信它们会让你的学习过程更加顺畅自然。
我是Fanstuck,致力于将复杂的技术知识以易懂的方式传递给读者,每一篇文章都凝聚着我对技术的深刻洞察。从人工智能的基础理论到前沿研究成果,从热门框架的深度解析到实战项目的详细拆解,内容丰富多样。无论是初学者想要入门,还是资深开发者追求进阶,都能在这里找到契合自身需求的知识养分。如果你对大模型的创新应用、AI技术发展以及实际落地实践感兴趣,那么请关注Fanstuck。
招投标过程中,相关信息高度分散且多为非结构化文本,人工整理既费时又易错。例如,一位投标经理需要手动查阅多个招标公告页面,提取项目名称、预算、投标人、评标结果等关键数据。这种手工操作不仅繁琐,而且容易出错,也难以保证信息的完整性和时效性。传统方法下,投标决策往往依赖人工经验和各部门零散文档,难以及时比对货物同质化程度及来源,有可能忽略同款货物的历史供应商记录或价格异常。
因此,如何打通数据孤岛,实现高效的数据联动、精准的货物溯源与比对分析,成为当前企业招投标管理亟待解决的关键问题。因此,需要一种智能化手段,将分布于公告、历史档案和采购文档中的信息整合起来,实现货物自动比对与溯源,从而支持更精准的决策。基于MCP协议的招投标货物比对溯源系统实践应运而生,以知识图谱技术和AI智能联动为核心,将为企业带来从数据采集到精准决策的全面升级与优化。
以医疗设备采购项目为例:某医院计划采购CT机、透析机等多种仪器设备。负责采购的工程师需对多个投标单位提交的设备规格、型号、价格及服务条款等进行比对。但供应商提供的信息格式各异,有的只给出文字说明,有的以表格形式呈现,且不同厂家的CT机型名称稍有差异(如X100与X-100),给匹配带来难度。同时,为保证公正采购,还需核查设备供应商的过往履约记录和设备历史价格。传统情况下,工作人员需要打开多个PDF文档、爬取政府平台公告、比对不同数据源,很难快速梳理出两套信息是否指向同一类设备,或是否存在重复采购风险。此时,如果有一个系统能自动识别“X型CT机”和“X-100 CT”是一致设备,并提示该设备曾由哪些供应商提供过、过去价格区间等信息,就能大大降低人工比对成本,提高决策效率和准确度。
本方案通过构建完整的数据采集到决策反馈链路,招投标全流程信息数据采集知识图谱系统具体架构流程如下:
首先,使用爬虫技术从多个公共平台抓取招投标信息。这些平台包含了大量公开的招标公告、投标公告、开标结果等信息。爬虫能够自动化地从这些平台获取最新的数据,并将其存储为原始文本格式。
抓取到的数据往往是非结构化的文本,需要经过数据处理才能提取出关键信息。在这一层,我们使用大语言模型(如GPT)对数据进行处理,自动识别并提取出项目ID、招标人、投标人、标的物、投标金额等重要字段。
提取出来的数据会被存入图数据库(如Neo4j)中。我们将不同的数据项(如项目、投标人、评标标准等)表示为节点,并通过关系连接起来,形成一张全景式的招投标知识图谱。
通过API开发,前端系统能够调用图数据库中的数据,并以可视化的方式展示给用户。用户可以通过图形化界面查询相关招投标信息,进行多维度分析与决策支持。
货物溯源、智能决策反馈整体架构如下:
本系统采用多Agent协作的架构,并通过MCP(Model Context Protocol)协议进行集成和调度。系统中主要包含:
re.search(r"项目编号:(\w+)", text)
提取项目编号,用大模型(如腾讯云通义)识别公告摘要内容。采集到的数据先结构化存入关系型数据库(腾讯云TDSQL-C,以MySQL兼容形式部署)。整个架构中采用的技术栈包括腾讯云MCP SDK(可选用Python/Node版)开发Agent间通信,中间结果存储使用Neo4j图数据库和TDSQL-C关系型数据库,日志与监控则依托腾讯云CLS日志服务记录系统运行轨迹。通过MCP协议,系统实现了AI应用与爬虫、数据库、OCR等外部资源的无缝对接,正如MCP被喻为AI领域的“通用接口”,能够安全地将LLM与各种资源相连。
MCP采用客户端-服务器架构,主要组件包括客户端、服务器和资源。:
MCP主机(Host):MCP主机是运行AI应用程序的环境,负责发起与外部资源的连接。例如,Claude Desktop等AI助手应用,需要通过MCP访问本地文件、数据库或远程API。在实际应用中,用户通过Claude Desktop与AI助手交互,当需要访问本地文件时,Claude Desktop作为MCP主机,协调AI助手与本地文件系统之间的通信。
MCP客户端(Client):MCP客户端是嵌入在主机应用中的连接器,负责与MCP服务器建立一对一的连接。它充当AI模型与外部资源之间的桥梁,管理数据请求和响应的传递。例如,在Claude Desktop中,MCP客户端会向服务器请求访问特定的本地文件或远程API,并将获取的数据传递给AI模型进行处理。
MCP服务器(Server):MCP服务器是一个轻量级程序,通过标准化的MCP协议开放特定功能。它负责处理来自客户端的请求,与本地或远程资源交互,并将结果返回给客户端。例如,MCP服务器可以连接到本地文件系统,提供文件读取和写入功能;或连接到远程API,获取实时数据。这种设计使得AI应用能够通过统一的接口访问多种资源,简化了开发和集成的复杂度。
当AI模型需要访问外部数据或功能时,MCP客户端向MCP服务器发送请求,服务器与相应的数据源或工具交互后,将结果返回给客户端,最终供AI模型使用。清晰地看出MCP 本身不处理复杂的逻辑;它只是协调 AI 模型和工具之间数据和指令的流动。
整体实现的逻辑为:
招投标公告采集Agent:
货物知识图谱构建Agent:
招标文件解析Agent:
MCP主机Agent:
为了实现多个Agent之间的高效协作,我们选择使用腾讯云代码助手 Craft 开发智能体进行本地 MCP Server 配置,扩展应用程序的功能。结合MCP(Model Context Protocol)协议来构建和配置MCP Server。
与 Cursor、Claude Desktop、Cherry Studio 等这些 MCP Host(支持了 MCP 的应用程序)一样,腾讯云代码助手也提供了配置 MCP Server 的入口。
首先需要确保开发环境满足具备安装MCP Server 的包管理工具,常见的有 NPX、UVX 和 PIP。
NPX
NPX 是 Node.js 的一个命令行工具,用于直接运行 npm 包中的命令,无需全局安装或显式指定路径,安装 nodejs 就默认自带这个工具。如果未安装,请进行安装 Node.js。安装好后,可以用以下命令查看是否安装成功:
node -v # 查看 Node.js 版本
npm -v # 查看 npm 版本
UV
uvx 是 uv 工具链的扩展命令,是一个用 Rust 编写的极快的 Python 包和项目管理器。
PIP
PIP 是 Python 的包管理工具。
在 Craft 模式下,单击 MCP 配置按钮:
单击配置 MCP Server 进行配置:
也可通过单击**+**
号进行配置。
在 Craft_mcp_settings.json 配置文件中添加 MCP Server
服务器的配置。
配置格式如下:
{
"mcpServers": {
"mcp-server-time": {
"command": "python",
"args": [
"-m",
"KnowledgeGraphAgent"
],
"disabled": false
}
}
}
配置文件填写完成并保存后,可在 MCP Server 配置列表查看是否配置生效。mcp-server服务器的状态为绿色,表示生效,红色表示未生效。调用成功示例:
Agent功能定义:
# MCP服务定义(腾讯云MCP SDK)
from mcp import MCPServer
server = MCPServer(name="AnnouncementCollector", port=8081)
@server.register_method("fetch_announcement_data")
def fetch_announcement_data(params):
url = params["url"]
announcement_text = crawl_webpage(url) # 爬取网页内容
extracted_data = extract_fields(announcement_text) # 结构化抽取数据
store_to_tdsqlc(extracted_data) # 存入腾讯云TDSQL-C数据库
# MCP消息通知知识图谱Agent更新
mcp_client = MCPClient(endpoint="KnowledgeGraphAgent:8082")
mcp_client.call("update_knowledge_graph", extracted_data)
return {"status": "success"}
server.run()
此Agent功能:
# MCP服务定义
from mcp import MCPServer
from neo4j import GraphDatabase
server = MCPServer(name="KnowledgeGraphAgent", port=8082)
driver = GraphDatabase.driver("neo4j://host:7687", auth=("user", "pwd"))
@server.register_method("update_knowledge_graph")
def update_knowledge_graph(params):
announcement_data = params
triples = extract_triples(announcement_data) # 调用LLM/NLP抽取三元组
with driver.session() as session:
for triple in triples:
session.run(
"MERGE (a:Goods {name: $name, model: $model}) "
"MERGE (b:Vendor {name: $vendor}) "
"MERGE (a)-[:SUPPLIED_BY]->(b)",
triple
)
# MCP通知招标文件解析Agent
mcp_client = MCPClient(endpoint="TenderFileParser:8083")
mcp_client.call("knowledge_graph_updated", {"status": "updated"})
return {"graph_update": "success"}
server.run()
核心逻辑为知识图谱更新后通过MCP通知解析Agent启动后续流程。
Neo4j 是一种图数据库,特别适合存储复杂关系数据。在本项目中,我们将招投标公告的数据存储为以下结构:
Project(项目):表示每个招投标项目。
Bidder(投标人):表示每个投标公司。
BID_ON:表示投标人对项目的投标行为,包含投标金额等属性。
我们通过 Neo4j 的 Python 驱动实现数据存储:
# 创建项目节点
def create_project_node(self, project_id, project_name, release_date):
query = (
"MERGE (p:Project {id: $project_id}) "
"SET p.name = $project_name, p.release_date = $release_date"
)
with self._get_session() as session:
session.run(query, project_id=project_id, project_name=project_name, release_date=release_date)
# 创建投标人节点
def create_bidder_node(self, bidder_id, bidder_name):
query = (
"MERGE (b:Bidder {id: $bidder_id}) "
"SET b.name = $bidder_name"
)
with self._get_session() as session:
session.run(query, bidder_id=bidder_id, bidder_name=bidder_name)
# 创建投标关系
def create_bid_relationship(self, project_id, bidder_id, bid_amount):
query = (
"MATCH (p:Project {id: $project_id}), (b:Bidder {id: $bidder_id}) "
"MERGE (b)-[:BID_ON {amount: $bid_amount}]->(p)"
)
with self._get_session() as session:
session.run(query, project_id=project_id, bidder_id=bidder_id, bid_amount=bid_amount)
此Agent功能:
# MCP服务定义
from mcp import MCPServer
server = MCPServer(name="TenderFileParser", port=8083)
@server.register_method("parse_tender_file")
def parse_tender_file(params):
file_url = params["file_url"]
file_text = ocr_extract(file_url)
goods_list = parse_goods(file_text)
# 向知识图谱查询匹配数据
mcp_client = MCPClient(endpoint="KnowledgeGraphAgent:8082")
matching_results = []
for item in goods_list:
result = mcp_client.call("query_goods", {"goods_name": item})
matching_results.append(result)
analysis_report = generate_report(matching_results)
return {"analysis_report": analysis_report}
server.run()
腾讯云MCP的典型用法即为构建一个主机Agent统一调度各子Agent:
# MCP主机(任务调度示意)
from mcp import MCPClient
announcement_collector = MCPClient(endpoint="AnnouncementCollector:8081")
knowledge_graph_agent = MCPClient(endpoint="KnowledgeGraphAgent:8082")
tender_file_parser = MCPClient(endpoint="TenderFileParser:8083")
# 主机任务示例流程:
def main_workflow(announcement_url, tender_file_url):
# 1. 公告采集
announcement_collector.call("fetch_announcement_data", {"url": announcement_url})
# 2. 等待知识图谱更新完毕
knowledge_graph_agent.call("await_graph_update", {})
# 3. 启动招标文件解析与比对
result = tender_file_parser.call("parse_tender_file", {"file_url": tender_file_url})
return result["analysis_report"]
# 执行完整工作流示例
report = main_workflow(
announcement_url="http://bidding.gov.cn/announcement/123",
tender_file_url="http://hospital.cn/files/tender123.pdf"
)
print(report)
在系统正式部署前,数据的获取和处理常常依赖于人工抓取和手动清洗,过程繁琐且效率低。为了实现“结构化提取 + 高效比对 + 智能溯源”的目标,我们构建了以下闭环流程。
在第一步,通过自主开发的爬虫系统,我们从多个公开资源平台批量采集招标公告、结果公告等文本数据。下图为爬虫抓取模块的流程示意:
原始数据多为HTML格式或非结构化文本,经过初步清洗后会被送入大语言模型进行智能抽取。
我们利用如DeepSeek、Qwen等大语言模型,在结合预设Prompt的情况下,对公告文本进行实体识别、属性提取和字段归类,最终输出统一格式的JSON结构,便于后续处理与入库。
这些数据随后被统一入库,形成结构化的数据集,为后续的图谱构建与解析比对提供原始素材。
以“心电图机”为例,当某新项目招标中出现该关键词时,系统自动联动知识图谱模块,根据品牌、型号、参数、采购数量等字段,在图谱中检索出过往中标记录,提供溯源路径。
MCP在其中扮演调度核心角色,负责在多个Agent之间传递解析内容、调用知识图谱Agent、返回结果,实现端到端自动化联动。
招标单位往往不会将所有评审重点直白列出,而是通过评分细则、技术条款、合同约束等方式隐含表达诉求。我们的系统通过招标文件解析Agent,对文档内容进行语义理解和结构化提取,结合知识图谱,自动判断招标需求是否与投标人资质、产品信息匹配。
最终结果以可视化方式呈现,供投标人员决策参考,大幅提升中标率并规避无效投标。
在本次“从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践”项目中,我们成功地将人工智能、大数据处理、知识图谱构建以及MCP协议集成等前沿技术,应用于招投标领域的实际业务场景中,构建了一个高效、智能的招投标货物比对溯源系统。
在人工智能技术不断发展的今天,如何将其有效地应用于实际业务场景,提升生产力,是每一个开发者需要思考的问题。本项目的实践,正是对这一问题的积极探索和回答。我们相信,随着技术的不断进步和应用的深入,未来的招投标领域将更加智能、高效、透明。
我们诚邀广大开发者加入到MCP广场的建设中,共同推动工具普惠,分享实践经验,助力更多企业实现数字化转型。
让我们携手前行,在AI技术重构生产力的时代,共同开创更加智能、高效的未来!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。