跳转至

3.2 整体流程与配置模块

学习目标

  • 理解项目的整体流程
  • 掌握项目的配置模块

一、整体流程

  1. 配置基础环境(config.py 和 create_logger.py)
  2. 初始化数据库(SQL 脚本)
  3. 采集数据(spider_weather.py)
  4. 完成 MCP 服务器(mcp_weather_server.py 、mcp_ticket_server.py 和 mcp_order_server.py)
  5. 完成A2A代理服务器(weather_server.py 、ticket_server.py 和 order_server.py)
  6. 完成客户端(main.py)
  7. 启动服务进行联调
  8. 启动MCP 服务器(mcp_weather_server.py 、mcp_ticket_server.py 和 mcp_order_server.py)
  9. 启动代理服务器(weather_server.py 、ticket_server.py 和 order_server.py)
  10. 启动客户端(main.py)

二、配置模块

1 config.py

config.py配置文件,主要是LLM 和数据库信息。统一管理配置,避免硬编码,便于修改。

项目中的定位:基础模块,提供全局参数(如 API 密钥、模型名称),所有脚本依赖它。

核心功能:定义 Config 类

位置:SmartVoyage/config.py

import os

# 项目根目录
project_root = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')


#定义配置文件
class Config:
    def __init__(self):
        # 大模型配置
        self.base_url = 'https://dashscope.aliyuncs.com/compatible-mode/v1'
        self.api_key = 'sk-67320312aa3e4fsdfsss3411aa0d7'
        self.model_name = 'qwen-plus'

        # 数据库配置
        self.host = 'localhost'
        self.user = 'root'
        self.password = 'root'
        self.database = 'travel_rag'

        # 日志配置
        self.log_file = os.path.join(project_root, 'SmartVoyage', 'logs/app.log')


if __name__ == '__main__':
    print(Config().log_file)

2 create_logger.py

create_logger.py主要是配置日志,设置整个项目的logger对象。

项目中的定位:管理logger,全局统一使用这一个。

核心功能:通过setup_logger方法设置,然后调用setup_logger方法返回logger对象。

位置:SmartVoyage/create_logger.py

import logging
import os

from SmartVoyage.config import Config


def setup_logger(name, log_file='logs/app.log'):
    # 创建日志文件夹
    os.makedirs(os.path.dirname(log_file), exist_ok=True)

    # 获取日志记录器
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    # 防止重复输出的关键!
    logger.propagate = False

    # 定义日志格式
    formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelname)s - %(message)s')

    # 创建控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)
    console_handler.setLevel(logging.INFO)  # 每个日志处理器可以单独设置日志级别,但是这个日志级别必须高于或等于处理器级别

    # 创建文件处理器
    file_handler = logging.FileHandler(filename=log_file, encoding="utf-8", mode="a")
    file_handler.setFormatter(formatter)
    file_handler.setLevel(logging.DEBUG)

    # 将处理器添加到日志记录器中
    if not logger.handlers:  # 先进行判断,再进行添加。避免重复添加处理器
        logger.addHandler(console_handler)
        logger.addHandler(file_handler)

    return logger

logger = setup_logger('SmartVoage', Config().log_file)

注意:需要设置 logger.propagate = False 防止日志重复输出。因为某些包中,如create_fastapi_app也有日志对象,可能会重复。为了避免日志重复输出,需要设置 logger.propagate = False。

本节小结

本节主要描述了smartVoyage的整体流程和配置模块。