项目概述
这是一个基于LangGraph和LangChain构建的AI代理系统,专门用于处理公共资源交易数据。系统具有以下核心功能:
-
数据查询:根据关键词、领域、类型等条件查询交易数据
-
数据统计:获取数据集的统计信息和分组统计
-
专项分析:对招标人、投标人、代理机构、专家进行专项分析
-
报告生成:生成半年度数据分析报告
项目架构
public_resource_agent/
├── config/
│ └── agent_llm_config.json # LLM配置文件
├── scripts/
│ ├── local_run.sh # 本地运行脚本
│ ├── http_run.sh # HTTP服务启动脚本
│ └── ... # 其他脚本
├── src/
│ ├── agents/
│ │ └── agent.py # AI代理定义
│ ├── storage/
│ │ ├── database/
│ │ │ ├── shared/model.py # 数据模型
│ │ │ ├── db.py # 数据库连接
│ │ │ └── public_resource_manager.py # 数据管理器
│ │ └── s3/
│ │ └── s3_storage.py # S3存储
│ ├── tools/
│ │ ├── data_import_tool.py # 数据导入工具
│ │ ├── data_query_tool.py # 数据查询工具
│ │ ├── data_statistics_tool.py # 数据统计工具
│ │ ├── report_generation_tool.py # 报告生成工具
│ │ └── special_analysis_tool.py # 专项分析工具
│ ├── utils/
│ │ ├── file/file.py # 文件操作
│ │ ├── helper/
│ │ │ ├── agent_helper.py # 代理助手
│ │ │ └── graph_helper.py # 图助手
│ │ └── log/ # 日志相关
│ └── main.py # 主入口文件
核心技术栈
-
AI框架:LangGraph、LangChain
-
Web框架:FastAPI
-
数据库:SQLAlchemy(支持多种数据库)
-
模型:使用doubao-seed-1-6-251015模型
-
异步处理:asyncio
主要功能模块
-
AI代理:根据用户意图调用相应工具处理请求
-
数据存储:管理公共资源交易数据的增删改查
-
工具系统:提供数据导入、查询、统计、分析、报告生成等功能
-
Web服务:提供HTTP API接口,支持同步和流式响应
-
日志系统:完整的日志记录和追踪功能
这个系统通过AI代理的方式,让用户可以用自然语言查询和分析公共资源交易数据,大大降低了数据分析的门槛。
让我继续解释其他模块的具体实现。
核心模块 main.py 详解
main.py 是整个系统的核心入口文件,主要负责以下几个方面:
1. GraphService 类
这是系统的核心服务类,提供以下功能:
-
流式运行 :
stream()方法提供本地调用的流式响应 -
同步运行 :
run()方法提供同步执行 -
流式SSE :
stream_sse()方法提供HTTP服务的Server-Sent Events响应 -
节点运行 :
run_node()方法运行指定节点 -
任务取消 :
cancel_run()方法取消正在执行的任务
2. HTTP API 接口
系统提供了丰富的HTTP接口:
-
POST /run:同步执行请求 -
POST /stream_run:流式执行请求(SSE格式) -
POST /cancel/{run_id}:取消指定任务 -
POST /node_run/{node_id}:运行指定节点 -
GET /health:健康检查 -
GET /graph_parameter:获取图参数
3. 任务管理和取消机制
系统实现了完善的任务管理和取消机制:
-
使用
running_tasks字典跟踪正在运行的任务 -
通过
asyncio.Task.cancel()实现优雅的任务取消 -
在节点之间检查
CancelledError,实现优雅的取消
4. 超时处理
系统设置了900秒(15分钟)的超时限制,并在超时时自动取消任务。
5. 日志和上下文管理
-
集成了完整的日志系统
-
使用上下文变量管理请求上下文
-
支持分布式追踪
6. 启动模式
支持多种启动模式:
-
http:启动HTTP服务 -
flow:运行完整流程 -
node:运行指定节点 -
agent:运行代理模式
AI代理实现 (agent.py)
agent.py 是AI代理的核心实现,主要包含以下几个部分:
1. 模型配置
-
使用
doubao-seed-1-6-251015模型 -
配置温度参数(temperature=0.7)控制输出随机性
-
设置最大完成令牌数(10000)和超时时间(600秒)
-
启用流式响应(streaming=True)
2. 系统提示词(System Prompt)
系统提示词定义了AI代理的角色和能力:
-
角色定义:公共资源交易中心AI助手
-
任务目标:帮助用户查询和分析公共资源交易数据
-
核心能力:
-
数据导入:从Excel文件导入数据
-
数据查询:根据条件查询交易数据
-
数据统计:获取统计信息
-
专项分析:招标人、投标人、代理机构、专家分析
-
报告生成:生成半年度报告
-
3. 工具集成
AI代理集成了以下工具:
-
import_excel_data:数据导入工具 -
query_public_resource_data:数据查询工具 -
get_public_resource_statistics:数据统计工具 -
analyze_tender_owner:招标人分析 -
analyze_bidder:投标人分析 -
analyze_agency:代理机构分析 -
analyze_expert:专家分析 -
generate_semiannual_report:报告生成
4. 记忆机制
-
开发环境使用内存记忆(MemorySaver)
-
生产环境默认无记忆
-
支持检查点功能以保持对话状态
5. 构建流程
build_agent() 函数负责:
-
从配置文件加载模型参数
-
创建ChatOpenAI实例
-
集成所有工具
-
创建并返回AI代理实例
数据存储和管理模块
数据存储模块位于 src/storage/database/ 目录下,主要包含以下几个部分:
1. 数据模型 (model.py)
PublicResourceTransaction 是核心数据模型,包含以下字段:
-
项目基本信息:
-
project_id:项目编号(唯一) -
project_name:项目名称 -
publish_time:发布时间
-
-
交易双方信息:
-
tender_unit:招标单位 -
winning_unit:中标单位 -
bidder_total:投标企业总数
-
-
金额和类型信息:
-
winning_amount:中标金额(万元) -
project_type:项目类型 -
project_field:项目所属领域
-
-
企业相关信息:
-
qualification_level:资质等级 -
enterprise_nature:企业性质 -
enterprise_scale:企业规模 -
enterprise_register_location:企业注册地
-
-
项目实施信息:
-
project_implementation_location:项目实施地 -
project_budget_range:项目预算区间 -
project_cycle:项目周期
-
-
合作历史信息:
-
is_past_cooperative_supplier:是否为过往合作供应商 -
past_cooperation_count:过往合作次数
-
-
分析相关信息:
-
core_service_type:核心服务类型 -
anomaly_type:异常类型 -
anomaly_reason:异常原因
-
2. 数据管理器 (public_resource_manager.py)
PublicResourceManager 提供了丰富的数据操作方法:
-
基本CRUD操作:
-
create_transaction():创建交易记录 -
get_transactions():获取交易记录列表 -
get_transaction_by_id():根据ID获取记录 -
update_transaction():更新记录 -
delete_transaction():删除记录
-
-
高级功能:
-
bulk_create():批量创建记录 -
search_transactions():高级搜索功能,支持关键词、领域、类型、时间范围等多种条件 -
get_statistics():获取统计数据,包括总数、唯一招标单位数、唯一中标单位数等
-
3. 数据库连接 (db.py)
虽然我没有看到具体的 db.py 文件内容,但根据代码引用可以推断它提供了数据库会话管理功能,使用SQLAlchemy ORM进行数据库操作。
4. Pydantic模型
代码中定义了用于数据验证的Pydantic模型:
-
PublicResourceTransactionCreate:创建时的数据验证模型 -
PublicResourceTransactionUpdate:更新时的数据验证模型
这些模型确保了输入数据的格式正确性,并提供了日期时间格式的自动解析功能。
整个数据存储模块设计合理,支持复杂查询和统计分析,为AI代理提供了强大的数据支持。
工具功能详解
系统提供了多种工具来支持AI代理完成不同任务,所有工具都位于 src/tools/ 目录下:
1. 数据查询工具 (data_query_tool.py)
query_public_resource_data 工具提供灵活的数据查询功能:
-
参数:
-
keyword:关键词搜索(项目名称、招标单位、中标单位、项目编号) -
project_field:项目所属领域 -
project_type:项目类型 -
tender_unit:招标单位 -
winning_unit:中标单位 -
start_date/end_date:时间范围 -
limit:返回结果数量限制
-
-
功能:根据多个条件组合查询公共资源交易数据,返回结构化的JSON结果
2. 数据统计工具 (data_statistics_tool.py)
get_public_resource_statistics 工具提供数据集的统计信息:
-
总交易数量
-
唯一招标单位数量
-
唯一中标单位数量
-
按领域统计
-
按类型统计
3. 数据导入工具 (data_import_tool.py)
import_excel_data 工具支持从Excel文件导入数据:
-
从URL或本地路径读取Excel文件
-
解析Excel中的数据
-
将数据转换为系统支持的格式
-
批量导入到数据库中
4. 专项分析工具 (special_analysis_tool.py)
包含四个专门的分析工具:
-
analyze_tender_owner:分析招标人行为,包括同一领域不同类型招标需求、中标信息等
-
analyze_bidder:分析投标人行为,包括参与投标、中标及执行情况
-
analyze_agency:分析代理机构运营情况
-
analyze_expert:分析专家评标情况
5. 报告生成工具 (report_generation_tool.py)
generate_semiannual_report 工具生成完整的半年度数据分析报告:
-
报告内容:
-
总体概况
-
领域分布分析
-
类型分布分析
-
排名分析
-
异常分析
-
趋势分析
-
-
输出格式:完整的Markdown格式报告
工具特点
-
统一接口 :所有工具都使用
@tool装饰器定义,便于AI代理调用 -
参数验证:使用Pydantic模型进行参数验证
-
错误处理:完善的异常处理机制
-
数据转换:自动将数据库记录转换为JSON格式
-
灵活性:支持多种查询条件和参数组合
这些工具共同构成了AI代理的"能力集",使其能够根据用户需求执行各种数据分析任务。
我已经详细解释了整个公共资源交易AI代理系统。这个系统是一个功能完整的AI数据分析平台,具有以下主要特点:
系统总结
-
整体架构:基于LangGraph和LangChain构建的AI代理系统,使用FastAPI提供HTTP服务
-
核心功能:
-
数据查询和统计
-
专项分析(招标人、投标人、代理机构、专家)
-
报告生成
-
Excel数据导入
-
-
技术特点:
-
支持同步和流式响应
-
完善的任务管理和取消机制
-
15分钟超时保护
-
分布式追踪和日志系统
-
-
数据模型:设计了完整的公共资源交易数据模型,包含项目、交易、企业等多维度信息
-
工具系统:提供了丰富的工具集,支持复杂的数据分析和报告生成任务
补充版本迭代
招投标
第一版 可以问数等
第二版 可以读飞书中数据,但是不好用,因为数据库没数据。只是一个思路
第三版 使用混合rag
公告爬虫
第一版 没有导入到feishu的版本
第二版 导出excel,导入到飞书
关于部署:
一开始通过coze平台部署,提供了服务端接口,可以用postman测试,但是是以sse流式返回,可读性差。后面写了前后端,后端访问接口,前端处理返回。最后写了个脚本,可以打包zip导出。