新闻研究代理
这个MCP服务器(新闻研究代理)会从配置的来源中抓取热门新闻文章,并将它们存储在生产环境中 justnews PostgreSQL 18 集群。它完全符合 MCP SDK 标准,并通过 FastMCP 暴露其工具。
特点/特性
- 使用crawl4ai来获取当前的热门新闻文章。
- 使用规范URL和来源元数据对输出进行规范化,并持久化存储
public.articles并且public.article_source_map。 - 可选地生成由GPU支持的嵌入(pgvector),并采用受保护的内存分配。
- 为摄取吞吐量、故障和延迟发出Prometheus指标。
- 设计用于集成到多代理工作流中,并通过FastMCP暴露接口。
设置(Conda/MCP SDK)
- 创建并激活conda环境:
conda env update -f environment.yml --prune
conda activate news-research-agent-env- 提供数据库凭据:
export JUSTNEWS_DB_PASSWORD="
"或者,运行 ./setup_env.sh 生成一个可重用的环境文件,并且 在启动前对其进行初始化。
- 运行代理:
python main.py- 在您的MCP客户端(例如VS Code)中将此代理注册为stdio MCP服务器。
______________________________________________________________________
MCP SDK 最佳实践
- 用途
FastMCP和app.tool()用于工具注册。 - 工具模式通过函数签名和文档字符串来定义(不使用ToolInput/ToolOutput)。
- 为了确保可靠性和可重复性,所有依赖项(MCP 除外)均通过提供的 Conda 环境进行安装。
配置
代理从以下来源加载配置值(按优先级从高到低排列):
- 环境变量。
config.json(可选,同一目录)。- 数据类的默认值。
关键环境变量:
| 变量 | 描述 | 默认值 |
|---|---|---|
JUSTNEWS_DB_PASSWORD | 需要密码以进行 justnews_user 角色。使用 ./setup_env.sh 安全地生成/存储。 | _无(必填)_ |
JUSTNEWS_DB_HOST 数据库主机。 | localhost | |
JUSTNEWS_DB_PORT | 数据库端口。 | 5432 |
JUSTNEWS_DB_NAME 数据库名称。 | justnews | |
JUSTNEWS_DB_USER 数据库用户。 | justnews_user | |
NEWS_SOURCE_BATCH_SIZE 每批获取的数据源数量。 | 5 | |
NEWS_CRAWL_PARALLELISM | 并发爬取任务。 | 1 |
NEWS_CRAWL_TIMEOUT_SECONDS | 每次抓取的超时时间(秒)。 | 120 |
NEWS_MAX_SOURCE_FAILURES 在中止前可容忍的最大故障数。 | 5 | |
NEWS_EMBEDDING_ENABLED | 切换嵌入更新。 | true |
NEWS_EMBEDDING_MODEL | 句子变换器模型ID。 | sentence-transformers/all-mpnet-base-v2 |
NEWS_EMBEDDING_BATCH | 嵌入批次大小。 | 8 |
NEWS_EMBEDDING_GPU_FRACTION | GPU内存使用上限。 | 0.65 |
NEWS_LOG_LEVEL | 日志详细程度 (DEBUG, INFO等)。 | INFO |
看 agent_config.py 用于全面的默认值设置和类型验证。
管道概述
- 从(某处)获取一批候选源
public.sources. - 通过(遵循配置的并行度和超时设置)异步抓取每个来源
crawl4ai。 - 规范化文章内容,确保规范URL、来源元数据以及进行重复检测
public.articles. - 持久化新文章和来源行(
public.article_source_map) 具有瞬时故障自动恢复功能。 - 可选地在GPU上生成向量嵌入,同时遵守配置的内存上限,并将文章标记为已分析。
- 在整个数据摄入过程中发射Prometheus指标,以实现可观测性。
操作手册(或运行手册)
- 强制凭证设置
JUSTNEWS_DB_PASSWORD在启动之前。其他连接覆盖设置可以通过环境变量或其他方式提供config.json。 - GPU嵌入(或GPU嵌入表示)安装
torch并且sentence-transformers(见requirements.txt) 以启用嵌入功能。如果没有它们,智能体将优雅地退化。 - 健康终点指标:
/health回报;收益ok;/shutdown触发优雅退出。 - 指标Prometheus 导出的
:9601(可配置于main.py)。 关键计数器:research_articles_stored_total,research_sources_failed_total,research_embedding_failures_total。 - 故障处理一旦摄入即中止
NEWS_MAX_SOURCE_FAILURES已超出;请检查日志以查找违规的源URL。 - 参考文档本地参考材料应存放在下方
./reference/(被 Git 忽略)。
延长;扩展
- 调整 PostgreSQL 连接字符串
main.py按需。 - 为高级研究工作流添加更多工具或逻辑。
- 扩展
agent_config.py使用新的配置值类型并对其进行引用main.py。 - 对于自定义GPU模型,请覆盖(或重写)
NEWS_EMBEDDING_MODEL并相应地调整批量大小/内存比例。
许可证
麻省理工学院(MIT)
