18.MCP工程化接入实践:配置抽离、异常兜底与项目文档收口
·
今天干了什么
今天主要工作是对昨天接入系统的MCP服务做了工程化收口工作,抽离了项目配置、增加异常处理并完善了项目文档。目的当然是为了方便未来项目的迁移并增加项目的鲁棒性和完整性。
核心变化
1.抽离MCP配置
系统用到了智谱的MCP搜索服务,关注这个服务的一些配置,比如API、URL以及一些调用服务所要用到的基础参数,我是写死在项目中的,前面也讲过这种方式的问题,所以今天首先做的工作就是抽离项目配置。首先,在app/config.py中补几项新的配置信息:
ZHIPU_API_KEY = os.getenv("ZHIPU_API_KEY")
MCP_SEARCH_URL = os.getenv(
"MCP_SEARCH_URL",
"https://open.bigmodel.cn/api/mcp/web_search_prime/mcp"
)
MCP_SEARCH_RECENCY = os.getenv("MCP_SEARCH_RECENCY", "oneMonth")
MCP_SEARCH_CONTENT_SIZE = os.getenv("MCP_SEARCH_CONTENT_SIZE", "medium")
MCP_SEARCH_LOCATION = os.getenv("MCP_SEARCH_LOCATION", "us")
然后在用到这些配置信息的地方也就是app/mcp_tools.py文件中引入这些配置,并在相应的使用位置做出使得的修改:
from app.config import (
ZHIPU_API_KEY,
MCP_SEARCH_URL,
MCP_SEARCH_RECENCY,
MCP_SEARCH_CONTENT_SIZE,
MCP_SEARCH_LOCATION,
)
最后一小步,就是在.env文件中写入需要统一管理的信息:
MCP_SEARCH_URL=https://open.bigmodel.cn/api/mcp/web_search_prime/mcp
MCP_SEARCH_RECENCY=oneMonth
MCP_SEARCH_CONTENT_SIZE=medium
MCP_SEARCH_LOCATION=us
2.异常处理
今天所做的第二项工作是给项目增加异常处理,原因前面也讲到过,在写系统时,要默认自己写的功能回运行失败,所以需要给功能模块加上必要的异常处理,在web_search_tool()中给功能逻辑块增加异常处理:
def web_search_tool(query: str) -> str:
logger.info(f"[web_search_tool] query: {query}")
try:
raw_result = asyncio.run(
_call_zhipu_web_search(
query=query,
recency=MCP_SEARCH_RECENCY,
content_size=MCP_SEARCH_CONTENT_SIZE,
location=MCP_SEARCH_LOCATION,
)
)
items = _parse_mcp_search_result(raw_result)
if not items:
logger.warning("[web_search_tool] parsed result is empty, fallback to raw text")
return str(raw_result)
lines = []
for idx, item in enumerate(items[:5], start=1):
title = item.get("title", "No title")
link = item.get("link", "")
content = item.get("content", "")
lines.append(
f"[{idx}] {title}\n"
f"{content}\n"
f"{link}"
)
final_text = "\n\n".join(lines)
logger.info("[web_search_tool] search finished successfully")
return final_text
except Exception as e:
logger.exception("[web_search_tool] search failed")
return f"Web search failed: {str(e)}"
3.文档维护
以前关于这个项目的文档只是写了未来将要接入MCP服务,如今这个项目已经接入了这个服务,所以需要对项目的相关介绍做必要的修改,需要修改的有项目的总体介绍、项目的当前特性、技术栈、项目目录、工具介绍、配置说明、测试用例和未来工作做出适当调整。
如果这篇文章对你有帮助,可以点个赞~
完整代码地址:https://github.com/1186141415/Paper-RAG-Agent-with-LangGraph
更多推荐

所有评论(0)