跳转至

Agent

Claude Code

禁用Claude Code的登录

# ~/.claude/config.json
{
  "primaryApiKey": "any-string-is-ok-here" 
  # 填写假的API Key,Claude Code会认为用户已经登录
}

配置使用DeepSeek api:deepseek anthropic api

# ~/.bashrc
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=${DEEPSEEK_API_KEY}
export API_TIMEOUT_MS=600000
export ANTHROPIC_MODEL=deepseek-chat
export ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-chat
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

RAI

flowchart TD
A["多模态输入(语音 / 视觉 / 传感器)"] --> B["数据聚合器(Aggregators)"]
B --> C["Agent(LLM + 工具调用 + 状态管理)"]
C --> D["工具层(ROS2 / 自定义工具 / 仿真)"]
D --> E["机器人动作 / TTS 输出 / 状态更新"]

MCP

MCP 是 Anthropic 推出的一套开放的标准化协议,核心逻辑是:将各工具程序的接口进行统一规范化,使得 Agent 可以通过标准化的接口调用不同的工具程序,而不需要关心工具程序的具体实现细节

使用Python实现MCP

编写MCP,本质上就是编写给AI Agent调用的函数,MCP Server 不像是服务器,更像是一个脚本

编写MCP Server

假设我们要编写一个获取主机信息的MCP Server,首先需要编写一个工具函数来获取主机信息,例如:

# tools.py
import platform
import psutil
import json

def get_host_info() -> str:
    """get host information
    Returns:
        str: the host information in JSON string
    """
    info: dict[str, str] = {
        "system": platform.system(),
        "release": platform.release(),
        "machine": platform.machine(),
        "processor": platform.processor(),
        "memory_gb": str(round(psutil.virtual_memory().total / (1024**3), 2)),
    }
    return json.dumps(info)

工具函数的编写需要注意以下几点:

  • 工具函数的输入参数最好为字符串类型
  • 工具函数需要返回字符串类型的数据
  • 工具函数需要处理好异常情况,避免抛出未捕获的异常,可以通过返回错误信息的字符串来告知Agent发生了错误
  • 工具函数名称需要具有描述性,必要时使用"""docstring"""来说明函数的功能和输入输出
# main.py
from mcp.server.fastmcp import FastMCP
import tools
mcp = FastMCP("host info mcp") # MCP名称,可以随意取,建议具有描述性
mcp.add_tool(tools.get_host_info)
@mcp.tool()
def foo():
    return ""
def main():
    mcp.run("stdio")
if __name__ == "__main__":
    main()

工具函数的注册有两种方法:

  • 使用装饰器@mcp.tool(),将函数注册为工具
  • 直接调用mcp.add_tool()方法,将函数注册为工具,这种方法更适用于工具函数跨文件使用的情况 MCP Server和Agent之间的通信有三种机制:
  • stdio:简单的标准输入输出通信机制,适用于server和agent在同一台机器上的情况
  • sse: 基于HTTP协议的单向通信机制,适用于server和agent不在同一台机器上的情况
  • streamable-http: 基于HTTP协议的双向通信机制,适用于server和agent不在同一台机器上的情况

通过mcp.run()方法启动MCP Server,传入通信方式,例如:

mcp.run("stdio") # 参数可以是"stdio"、"sse"、"streamable-http",分别对应三种通信机制

将 custom MCP 添加至 Agent

以Claude Code为例:

Claude Code中管理MCP的命令:

claude mcp list # 列出当前已注册的MCP
claude mcp get <mcp_name> # 查看已注册的MCP的详细信息
claude mcp remove <mcp_name> # 移除已注册的MCP
/mcp # 在对话框中查询已注册的MCP连接状态

添加MCP:

# 本地 stdio 服务器
claude mcp add --transport stdio [--env 环境变量] <服务器名称> -- <启动命令> # --env参数可选,启动命令可以是任何可执行的命令,例如python脚本、nodejs脚本等
# 远程 sse 服务器
claude mcp add --transport sse <服务器名称> <服务器URL>
# 远程 streamable-http 服务器
claude mcp add --transport http <服务器名称> <服务器URL>
# 示例:带身份验证的HTTP服务器
claude mcp add --transport http secure-api https://api.example.com/mcp --header "Authorization: Bearer 你的令牌"
# 添加后
claude mcp list # 可以看到新添加的MCP
/mcp # 查看连接状态

可以在.claude.json文件中查看已注册的MCP信息,例如:

"mcpServers": {
  "MecMoveMCP": {
    "type": "stdio",
    "command": "ros2",
    "args": [
      "run",
      "robot_agent",
      "mec_mcp_server"
    ],
    "env": {}
  }
},

STT&TTS

STT(Speech-to-Text)和TTS(Text-to-Speech)是语音交互系统中的两个核心组件,分别负责将语音转换为文本和将文本转换为语音。在Agent系统中,STT可以用于接收用户的语音输入,而TTS可以用于向用户提供语音反馈

以Faster Whisper和piper为例:

  • Faster Whisper是一个基于Whisper模型的高性能语音识别系统,支持多种语言和方言,适用于实时语音转文本的场景
  • Piper是一个开源的文本转语音系统,支持多种语言和声音,可以用于生成自然流畅的语音输出

VLM

VLM(Vision-Language Model)是指能够同时处理视觉和语言信息的模型,通常用于多模态任务,例如图像描述、视觉问答等。在Agent系统中,VLM可以用于理解和生成与视觉内容相关的语言信息,例如根据图像内容生成描述性文本,或者根据文本描述生成相应的图像内容

以Moondream2为例