2025.8.5学习日记

1.xiaozhi-server

1.1 xiaozhi-MCP

小智的MCP服务主要参考以下文档MCP接入点部署指南MCP接入点使用指南,MCP终端服务器

【MCP接入点部署指南】:

第一步:下载MCP接入点项目源码

根据本项目地址MCP终端服务器,下载ZIP至本地重命名为endpoint-server

第二步:启动程序

这里其实分为了docker启动和源码启动,为了学习方便,参照源码启动MCP服务教程,下载完毕后,安装依赖,启动MCP服务器即可。建议直接在Anaconda Poweshell Prompt中使用python main.py启动即可(记得先进入相关文件夹中)
image
【注】:禁用PyCharm自动更新image

第三步: 回到xiaozhi-server,配置MCP接入点

这里分为了单模块部署和全模块部署的区别,单模块部署请在data/.config.yaml文件下的mcp_endpoint中添加上一步骤中的token,如果是全模块部署请在智控台部分添加key,最后回到xiaozhi-server使用python app.py启动xiaozhi服务端即可,出现mcp接入点ws://192.168.1.25:8004/mcp_endpoint/mcp/?token=abc则配置成功

【MCP接入点使用指南】:

第一步:搭建具有MCP工具的服务器

这一步以计算器功能为例,下载这个项目,通过如下方法安装

# 进入项目目录
cd mcp-calculator

conda remove -n mcp-calculator --all -y
conda create -n mcp-calculator python=3.10 -y
conda activate mcp-calculator

pip install -r requirements.txt
第二步:启动MCP工具端服务器

首先拿到上述的MCP接入点地址,而后设置环境变量MCP_ENDPOINT,最后通过python mcp_pipe.py calculator.py启动工具端服务器
【注】由于WINDOWS无法直接使用export MCP_ENDPOINT = ...,所以通过进入到mcp_pipe.py源代码中,修改endpoint_url变量为你上述拿到的MCP接入地址

第三步:查看结果

mcp-endpoint-server,mcp-calculator,xiaozhi-server按顺序启动,而后使用../xiaozhi-server/test文件夹下的网页测试工具,之后会跳出以下消息,此时你的计算器calculator就可以正常使用了
image
【注】:如果在过程中出现了json文件缺失,可以按照命令行中的提示,将mcp_server_settings.json复制一份到./data目录下,并删除json文件中mcpServer键对应的所有值
image

1.2 自定义MCP工具

目前本地部署的mcp服务主要通过websocket接口,使用stdio传输方式;而使用远程部署的mcp服务需要修改provider这边的内容
这里需要补充如下的前置概念

  • Host:
    Hostxiaozhi-server
  • Server:
    Serverxiaozhi-esp32程序,其运行在ESP32硬件上,该程序源码中包含了一个用C++编写的MCPServer类,除了设备以外,在其他主机上编写MCPServer
  • Client:
    Clientxiaozhi-server上搭建,在xiaozhi-server的源码中编写了device_mcpserver_mcp,用于创建Host上的MCPClient
  1. 初始化阶段
    image
  2. 信息交互阶段
    image
    image

2.Model Scope上的MCP

魔搭社区上的MCP组件包括了创空间,MCP-Inspector

3.版本控制系统

3.1 简介

版本控制系统全程为Version Control System,简称VCS,常见的版本控制系统工具有集中式版本控制工具(SVN)分布式版本控制工具(Git)。Pycharm支持的版本控制系统工具就有上述两种

3.2 仓库的使用

4. 异步IO

asyncio 协程运行在同一个线程中,需要协程主动通过 await 释放控制权给事件循环,由事件循环来决定下一个运行哪个协程(一般让await关键字后的协程执行)。这两种模型各有优劣,在嵌入式和服务器端有不同的适用场景。

4.1 介绍

  • 核心概念:
    核心概念包括协程(Coroutine),事件循环(Event Loop),任务(Task),Future
  • 基本用法:
    1.要运行一个协程,可以使用 asyncio.run() 函数。它会创建一个事件循环,并运行指定的协程。
    2.可以使用 asyncio.gather() 函数并发执行多个协程,并等待它们全部完成。
    3.可以使用 asyncio.wait_for() 函数为协程设置超时时间。如果协程在指定时间内未完成,将引发 asyncio.TimeoutError 异常。
  • 应用场景
    1.网络请求:如 HTTP 请求、WebSocket 通信等。
    2.文件 I/O:如异步读写文件。
    3.数据库操作:如异步访问数据库。
    4.实时数据处理:如实时消息队列处理。

4.2 常用类,方法,函数

  • 核心函数
    核心函数包括runcreate_task,gather,sleep,wait。这里较为重要的有run运行异步主函数,create_task,创建任务并加入事件循环(Loop),gather并发运行多个协程
  • 协程与任务
    async def定义协程,cancel()取消任务,done()检查任务是否完成,result获取任务结果
  • 同步原语
    Lock()异步互斥锁,Event()事件通知,Queue()异步队列,Semaphore()信号量
  • 网络与子进程
    open_connection()建立TCP连接,start_server()创建TCP服务器,create_subprocess_exec()创建子进程
    【注】:
  1. Python版本:部分功能需Python 3.7+(如asyncio.run())。
  2. 阻塞操作:避免在协程中使用同步阻塞代码(如time.sleep())。
  3. 调试:设置PYTHONASYNCIODEBUG=1环境变量可启用调试模式。
  4. 取消任务:被取消的任务会引发CancelledError,需妥善处理。

4.3 重要的概念

事件循环,asyncio.run(main())会隐式创建一个Event Loop,并选择main()中创建的协程Coroutine或者Task运行
image

5. RAG

原生RAG(纯代码实现),无参构造函数,创建默认的对象,指定5个构造参数,创建对象

posted @ 2025-08-06 00:09  BingUw  阅读(53)  评论(0)    收藏  举报