简单的MCP聊天
一个初学者友好的Python聊天机器人,连接到Workato的Enterprise MCP服务器。这是将MCP(模型上下文协议)与AI模型一起使用的最简单的例子。
多种AI选项可供选择:
- 开放人工智能 (GPT-4、GPT-4o、GPT-3.5)-基于云,功能强大,易于使用
- 克劳德 (人择)-高级推理、长篇背景、深思熟虑的回应
- 奥拉玛 -在本地运行开源LLM(llama3.2、mistral、qwen2.5等)
- LM 工作室 -运行本地LLM以保护隐私并节省成本
这有什么作用?
这个聊天机器人可以:
- 连接 同时连接到多个Workato MCP服务器
- 发现 每个服务器都有哪些可用的工具(如CRM数据、电子表格、项目管理等)
- 聊天 人工智能会自动使用这些工具来回答你的问题
例如,如果您连接到Salesforce MCP服务器,您可以问:
- “向我展示我超过5万美元的开放机会”
- “上周完成了哪些交易?”
- “查找Acme Corp的联系人”
或者,如果您配置了多个服务器(例如Salesforce+Google Sheets),您可以问:
- “提取我的管道数据并将其添加到我的预测电子表格中”
AI会自动从正确的服务器调用正确的工具,并给你一个自然语言的响应。
关键概念解释
什么是MCP?
MCP(模型上下文协议) 是AI模型使用外部工具和数据源的标准方式。把它想象成一个通用适配器,让任何人工智能与任何服务进行通信。
什么是Workato企业MCP?
Workato提供连接到各种企业服务(如CRM、数据库、生产力工具)的托管MCP服务器。你得到:
- 安全:OAuth 2.0和加密凭据
- 合规:企业条例的审计记录
- 可靠性:速率限制和自动重试
什么是函数调用?
当你问人工智能一个问题时,它会决定是否需要外部数据。如果是这样,它:
- 告诉我们调用哪种工具
- 我们调用MCP服务器上的工具
- 我们将结果发送回AI
- AI给你一个人类可读的答案
项目结构
simple-mcp-chat/
├── chat-openai.py # OpenAI implementation (heavily commented!)
├── chat-claude.py # Claude (Anthropic) implementation
├── chat-ollama.py # Ollama version for local open-source LLMs
├── chat-lmstudio.py # LM Studio version for local LLMs
├── oauth_handler.py # OAuth 2.0 authentication handler with PKCE
├── troubleshoot_openai.py # OpenAI connection troubleshooter
├── mcp_servers.json # Your MCP server configs (don't commit this!)
├── mcp_servers.example.json # Example server configuration
├── .mcp_tokens.json # OAuth tokens storage (auto-generated, don't commit!)
├── pyproject.toml # Python dependencies
├── uv.lock # Locked dependency versions
├── .env # Your API keys (don't commit this!)
├── env.example # Example environment configuration
├── .gitignore # Git ignore rules
└── README.md # You're reading it先决条件
在开始之前,您需要:
- Python 3.10+ 已安装在您的计算机上
- 紫外线 包管理器(安装说明)
- AI提供商 由您选择:
- OpenAI API密钥 从 platform.openai.com (聊天openai.py) - API密钥 从 console.anthropic.com (用于聊天claude.py) - 奥拉玛 安装自 奥拉玛 (用于聊天olama.py) - LM 工作室 安装自 lmstudio.ai (适用于聊天lmstudio.py)
- Workato MCP URL 从您的Workato工作区
安装说明
第一步:克隆或下载
git clone YOUR_REPO_URL
cd simple-mcp-chat步骤2:创建配置文件
复制示例文件:
cp env.example .env
cp mcp_servers.example.json mcp_servers.json编辑 .env 使用API密钥:
# OpenAI Configuration (for chat-openai.py)
OPENAI_API_KEY=sk-proj-...your-key-here...
MODEL=gpt-4o-mini
# Claude Configuration (for chat-claude.py)
CLAUDE_API_KEY=sk-ant-...your-key-here...
CLAUDE_MODEL=claude-sonnet-4-5-20250929
# Ollama Configuration (for chat-ollama.py)
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.2
# LM Studio Configuration (for chat-lmstudio.py)
LMSTUDIO_BASE_URL=http://localhost:1234/v1
LMSTUDIO_MODEL=local-model编辑 mcp_servers.json 配置您的MCP服务器。您可以使用基于令牌的身份验证或OAuth身份验证。
基于令牌的身份验证(简单):
{
"servers": [
{
"name": "salesforce",
"url": "https://apim.workato.com/your-workspace/salesforce-mcp?token=YOUR_TOKEN",
"enabled": true,
"auth_type": "token"
},
{
"name": "jira",
"url": "https://apim.workato.com/your-workspace/jira-mcp?token=YOUR_TOKEN",
"enabled": true,
"auth_type": "token"
}
]
}OAuth 2.0身份验证(基于浏览器) 对于需要OAuth的服务器:
{
"servers": [
{
"name": "sheets",
"url": "https://2107.apim.mcp.workato.com/",
"enabled": true,
"auth_type": "oauth"
}
]
}就是这样!刚刚设置 "auth_type": "oauth" 其他一切都是自动的。当你运行聊天机器人时,它将:
- 自动发现OAuth端点 通过
.well-known/oauth-authorization-server - 自动注册为OAuth客户端 使用动态客户端注册(RFC 7591)
- 检查您是否有已存储的有效OAuth令牌
- 如果不是, 打开浏览器 用于身份验证
- 在端口8080上启动本地服务器以接收OAuth回调
- 使用以下方式交换访问令牌的授权码 PKCE (代码交换的证明密钥,RFC 7636)用于安全
- 将令牌安全地存储在
.mcp_tokens.json(Git除外) - 使用 承载令牌身份验证 在授权标头中(标准OAuth实践)
- 令牌过期时自动刷新令牌
安全功能:
- PKCE(RFC 7636):防止授权码拦截攻击
- 动态客户端注册(RFC 7591):不需要手动设置OAuth客户端
- 自动OAuth发现:从以下位置发现终结点
.well-known/oauth-authorization-server - 令牌存储:安全地将令牌与客户端凭据分开存储
- 承载令牌身份验证:使用标准
Authorization: Bearer标头
可选OAuth配置
所有OAuth参数都是可选的,如果没有提供,将自动发现/自动配置。如果需要,您可以覆盖默认值:
{
"name": "sheets",
"url": "https://2107.apim.mcp.workato.com/",
"enabled": true,
"auth_type": "oauth",
"oauth": {
"client_id": "custom_client_id",
"client_secret": "custom_client_secret",
"scopes": ["mcp.read", "mcp.write"],
"redirect_port": 8080,
"auth_url": "https://id.workato.com/oauth/authorize",
"token_url": "https://id.workato.com/oauth/token"
}
}每个服务器的配置选项:
| 选项 | 描述 |
|---|---|
name | 短标识符(用于在工具名称前加前缀) |
url | 完整的Workato MCP端点URL |
enabled | 设置为 false 临时禁用服务器 |
auth_type | 要么 "token" (默认)或 "oauth" |
OAuth选项(全部可选):
| 选项 | 描述 |
|---|---|
client_id | OAuth客户端ID-如果没有提供,将通过RFC 7591自动注册 |
client_secret | OAuth客户端密钥-如果没有提供,将通过RFC 7591自动注册 |
scopes | 要请求的OAuth作用域数组-如果未提供,则使用服务器默认值 |
redirect_port | OAuth回调的本地端口-默认为8080 |
auth_url | 自定义授权终结点-如果未提供,则自动发现 |
token_url | 自定义令牌终结点-如果未提供,则自动发现 |
OAuth自动发现和自动注册流程:
- 端点发现:胎儿
.well-known/oauth-authorization-server从服务器URL发现授权端点、令牌端点、注册端点和支持的授权类型/范围。
- 动态客户端注册:如果没有
client_id提供,自动注册为OAuth客户端,生成客户端名称(simple-mcp-chat-{server_name}),设置重定向URI(http://localhost:{redirect_port}/callback),并将客户端凭据存储在.mcp_tokens.json.
- PKCE流程:通过生成随机代码验证器、创建SHA256代码挑战、发送带有授权请求的挑战以及发送带有令牌请求的验证器,使用验证密钥进行代码交换以确保安全。
- 许可证管理:将访问令牌和刷新令牌存储在
.mcp_tokens.json,跟踪令牌过期时间,在需要时自动刷新令牌,并将客户端凭据与访问令牌分离以确保安全。
步骤3:安装依赖项
uv sync这将安装:
openai-用于与GPT对话(聊天openai.py使用)anthropic-用于与克劳德交谈(由chat Claude.py使用)python-dotenv-用于加载.env文件requests-用于对MCP服务器进行HTTP调用和OAuth身份验证
步骤4:运行聊天
选择您的AI提供商:
选项A:OpenAI(云)
uv run python chat-openai.py系统提示:
# Using command line argument
uv run python chat-openai.py --system-prompt "You are a helpful medical assistant."
# Or use the short form
uv run python chat-openai.py -s "You are a concise assistant that answers in bullet points."
# View all options
uv run python chat-openai.py --help选项B:克劳德(云)
uv run python chat-claude.py系统提示:
# Using command line argument
uv run python chat-claude.py --system-prompt "You are a helpful medical assistant."
# Or use the short form
uv run python chat-claude.py -s "You are a concise assistant that answers in bullet points."
# View all options
uv run python chat-claude.py --help您应该看到:
MCP Chat - Discovering tools...
- salesforce: 5 tools
- jira: 3 tools
Connected to 2 server(s) with 8 total tools
Type 'quit' or 'exit' to end
----------------------------------------
You:如果你有启用了OAuth的服务器,第一次运行将包括OAuth身份验证:
MCP Chat - Discovering tools...
Discovered auth endpoint: https://id.workato.com/oauth/authorize
Discovered token endpoint: https://id.workato.com/oauth/token
Registering OAuth client for sheets...
[OK] Client registered successfully
Opening browser for OAuth authentication...
Waiting for authorization...
[SUCCESS] Authorization code received
[SUCCESS] Access token obtained
[SUCCESS] Token stored for future use
- salesforce: 5 tools
- sheets: 1 tools
Connected to 2 server(s) with 6 total tools
Type 'quit' or 'exit' to end
----------------------------------------
You:后续运行将使用存储的令牌:
MCP Chat - Discovering tools...
Using stored token for sheets
- salesforce: 5 tools
- sheets: 1 tools
Connected to 2 server(s) with 6 total tools克劳德的具体特点:
克劳德提供了一些独特的优势:
- 长上下文:处理更大的对话和更多的工具结果
- 高级推理:擅长复杂的多步骤查询
- 深思熟虑的回应:更详细的解释和分析
- 最新款式:访问克劳德十四行诗4.5、Opus 4.5和上一代型号
克劳德模型:
claude-sonnet-4-5-20250929-最新Claude Sonnet 4.5,性能和成本的最佳平衡(推荐)claude-opus-4-5-20251101-最强大的Claude模型,最适合复杂任务claude-3-5-sonnet-20241022-上一代Sonnet,仍然非常有能力claude-3-opus-20240229-上一代Opusclaude-3-haiku-20240307-最快、最经济
选项C:Ollama(当地)
通过Ollama使用本地开源LLM运行:
- 安装Ollama 从 奥拉玛
- 确认Ollama正在运行:
# Check if Ollama is running
curl http://localhost:11434/api/tags
# Should return JSON with list of installed models- 运行Ollama聊天:
如果模型尚未安装,聊天脚本将自动拉取模型,因此您可以跳过手册 ollama pull 一步!
uv run python chat-ollama.py系统提示:
# Using command line argument
uv run python chat-ollama.py --system-prompt "You are a helpful medical assistant."
# Or use the short form
uv run python chat-ollama.py -s "You are a concise assistant that answers in bullet points."
# View all options
uv run python chat-ollama.py --help您应该看到:
Ollama MCP Chat
----------------------------------------
Checking if model 'llama3.2' exists... ✓
Loading model 'llama3.2' into memory... ✓
Discovering tools...
- salesforce: 5 tools
- jira: 3 tools
Connected to 2 server(s) with 8 total tools
Using model: llama3.2
Type 'quit' or 'exit' to end
----------------------------------------
You:如果模型尚未安装,它将被自动拉取:
Ollama MCP Chat
----------------------------------------
Checking if model 'llama3.2' exists... not found
Pulling model 'llama3.2' from Ollama registry...
pulling manifest
pulling [layer details with progress]
verifying sha256 digest
writing manifest
removing any unused layers
Successfully pulled model 'llama3.2' ✓
Loading model 'llama3.2' into memory... ✓
Discovering tools...Olama的具体特点:
- 100%本地:所有处理都发生在您的机器上,没有云API调用
- 注重隐私:你的数据永远不会离开你的电脑
- 无API成本:免费使用,无使用限制
- 开源模型:访问llama3、mistral、qwen等
- 自动模型管理:如果未安装,模型将自动拉取
- 可定制的:为您的特定用例微调模型
Ollama配置 (可选,in .env):
# Change the Ollama server URL if needed (default: http://localhost:11434)
OLLAMA_BASE_URL=http://localhost:11434
# Change the model to use (must be pulled first)
OLLAMA_MODEL=llama3.2
# Other good options:
# OLLAMA_MODEL=mistral
# OLLAMA_MODEL=qwen2.5
# OLLAMA_MODEL=llama3.1MCP工具调用的推荐模型:
| 型号 | 尺寸 | 函数调用 | 最适合 |
|---|---|---|---|
| llama3.2 | 3B | 是 | 通用,快速响应 |
| mistral | 7B | 是 | 性能均衡 |
| qwen2.5 | 7B | 是 | 多语言,编码 |
| llama3.1 | 8B | 是 | 高级推理 |
注: 并非所有Ollama型号都支持函数调用。对于MCP工具集成,您必须使用支持函数调用的模型(如上所列)。检查型号卡 ollama.ai/图书馆 用于函数调用支持。
手动模型安装 (可选):
如果您希望在运行聊天脚本之前手动安装模型:
# Recommended models with function calling support
ollama pull llama3.2 # Meta's Llama 3.2 (recommended)
ollama pull mistral # Mistral AI's model
ollama pull qwen2.5 # Alibaba's Qwen 2.5
ollama pull llama3.1 # Meta's Llama 3.1
# List installed models
ollama list选项D:LM工作室(本地)
通过LM Studio使用本地LLM运行:
- 安装并启动LM Studio 从 lmstudio.ai
- 加载模型 支持函数调用(查找支持“函数调用”或“工具使用”的模型)
- 启动本地服务器 在LM Studio中(默认值:
http://localhost:1234) - 运行LM Studio聊天:
uv run python chat-lmstudio.py您应该看到:
LM Studio MCP Chat - Discovering tools...
- salesforce: 5 tools
- jira: 3 tools
Connected to LM Studio at http://localhost:1234/v1
Connected to 2 MCP server(s) with 8 total tools
Note: Make sure you have a model loaded in LM Studio!
For best results, use a model that supports function calling.
Type 'quit' or 'exit' to end
----------------------------------------
You:LM工作室配置 (可选,in .env):
# Change the LM Studio server URL if needed
LMSTUDIO_BASE_URL=http://localhost:1234/v1
# Model name (usually ignored by LM Studio)
LMSTUDIO_MODEL=local-model
# Optional: Set a default system prompt to guide LLM behavior
SYSTEM_PROMPT=You are a helpful assistant.使用系统提示:
您可以通过环境变量或命令行提供系统提示来自定义LLM的行为:
# Using environment variable (set in .env)
uv run python chat-lmstudio.py
# Using command line argument
uv run python chat-lmstudio.py --system-prompt "You are a helpful medical assistant."
# Or use the short form
uv run python chat-lmstudio.py -s "You are a concise assistant that answers in bullet points."
# View all options
uv run python chat-lmstudio.py --help系统提示可用于:
- 设定回应的基调和风格
- 专门为特定领域(医疗、法律、技术等)提供助理服务
- 强制执行响应格式(要点、简短回答、详细解释)
- 添加自定义指令或约束
工具名称会自动以服务器名称作为前缀(例如。, salesforce__Query_Records)以避免服务器之间的冲突。
当前注射日期/时间
聊天机器人会自动将当前日期和时间注入到每条用户消息中,以确保LLM始终知道基于时间的查询的当前日期。这对于CGM数据分析等应用程序尤为重要,因为“过去3天”或“本周”需要从今天的日期开始计算。
配置:
# Automatically inject current date/time (recommended)
INJECT_CURRENT_DATE=true它是如何工作的:
每条用户消息都会自动添加当前日期和时间:
[Current date and time: 2026-01-12 16:30:45 (formatted for API: 2026-01-12T16:30:45)]
What were my glucose levels in the last 3 days?这确保了LLM:
- 知道确切的当前日期(不依赖于其知识截止日期)
- 可以准确计算相对日期(“最近3天”、“本周”等)
- 为API调用使用正确的日期格式(YYYY-MM-DDTHH:MM:SS)
何时禁用:
集 INJECT_CURRENT_DATE=false 如果:
- 你正在用历史对话进行测试
- 当前日期与您的用例无关
- 您想在提示中手动指定日期
日志记录和调试
OpenAI和LM Studio版本都包含全面的日志记录,以帮助您调试问题并了解幕后发生的事情。
启用详细日志记录
聊天机器人支持对控制台和文件进行灵活的日志记录。将这些添加到您的 .env 文件:
# Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
LOG_LEVEL=DEBUG
# Log to file (optional)
LOG_FILE=logs/chat.log
# Show logs in terminal (true/false)
LOG_TO_CONSOLE=true配置选项:
| 变量 | 描述 | 示例 |
|---|---|---|
LOG_LEVEL | 日志详细级别 | DEBUG, INFO, WARNING |
LOG_FILE | 日志文件路径(留空禁用) | logs/chat.log |
LOG_TO_CONSOLE | 在终端中显示日志 | true 或 false |
常见配置:
- 仅调试到文件(干净终端):
LOG_LEVEL=DEBUG
LOG_FILE=logs/chat.log
LOG_TO_CONSOLE=false- 调试到文件和终端:
LOG_LEVEL=DEBUG
LOG_FILE=logs/chat.log
LOG_TO_CONSOLE=true- 仅控制台(无文件):
LOG_LEVEL=DEBUG
LOG_FILE=
LOG_TO_CONSOLE=true日志级别说明:
- 调试:显示所有通信详细信息,包括:
- 完成MCP JSON-RPC请求和响应 - 完整的OpenAI/Claude/LM Studio API请求和响应 - 工具发现过程 - 工具执行细节 - 令牌使用统计
- 信息:显示高级操作:
- 工具调用以及正在调用哪些工具 - 服务器连接状态 - OAuth身份验证流程
- 警告:仅显示警告和错误
- 错误/严重:仅显示错误
调试输出示例
当 LOG_LEVEL=DEBUG,您将看到详细的日志,如:
2026-01-12 10:30:45 - __main__ - DEBUG - ================================================================================
2026-01-12 10:30:45 - __main__ - DEBUG - MCP REQUEST
2026-01-12 10:30:45 - __main__ - DEBUG - URL: https://apim.workato.com/your-workspace/dexcom-mcp
2026-01-12 10:30:45 - __main__ - DEBUG - Method: tools/call
2026-01-12 10:30:45 - __main__ - DEBUG - Headers: {
"Authorization": "Bearer ***"
}
2026-01-12 10:30:45 - __main__ - DEBUG - Payload: {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "Get_Glucose_Values_v1",
"arguments": {
"start_date_time": "2026-01-01T00:00:00",
"end_date_time": "2026-01-07T23:59:59"
}
}
}
2026-01-12 10:30:46 - __main__ - DEBUG - MCP RESPONSE
2026-01-12 10:30:46 - __main__ - DEBUG - Status Code: 200
2026-01-12 10:30:46 - __main__ - DEBUG - Response: {
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "Found 1,234 glucose readings..."
}
]
}
}
2026-01-12 10:30:46 - __main__ - DEBUG - ================================================================================
2026-01-12 10:30:46 - __main__ - DEBUG - ================================================================================
2026-01-12 10:30:46 - __main__ - DEBUG - OPENAI REQUEST
2026-01-12 10:30:46 - __main__ - DEBUG - Model: gpt-4o-mini
2026-01-12 10:30:46 - __main__ - DEBUG - Messages: [
{
"role": "user",
"content": "What was my average glucose last week?"
},
{
"role": "tool",
"tool_call_id": "call_abc123",
"content": "Found 1,234 glucose readings..."
}
]
2026-01-12 10:30:47 - __main__ - DEBUG - OPENAI RESPONSE
2026-01-12 10:30:47 - __main__ - DEBUG - Finish Reason: stop
2026-01-12 10:30:47 - __main__ - DEBUG - Content: Your average glucose last week was 125 mg/dL...
2026-01-12 10:30:47 - __main__ - DEBUG - Usage: prompt_tokens=523, completion_tokens=87, total_tokens=610
2026-01-12 10:30:47 - __main__ - DEBUG - ================================================================================记录的内容
MCP服务器通信:
- 请求URL和方法
- 请求有效载荷(JSON-RPC 2.0格式)
- 授权标头(出于安全考虑而屏蔽)
- 响应状态代码
- 完整的响应数据
人工智能模型通信(OpenAI/Claude/LM Studio):
- 正在使用的模型
- 发送到LLM的完整消息历史记录
- 可用工具及其名称
- LLM的响应内容
- LLM请求的工具调用
- 令牌使用情况:
- OpenAI/LM Studio:提示标记、完成标记、总计标记 - 克劳德:输入标记,输出标记
工具操作:
- 从每台服务器发现工具
- 工具名称和说明
- 使用参数执行工具
- 工具结果(如果很长,则截断)
日志文件
当 LOG_FILE 设置后,日志将保存到指定文件:
- 这
logs/如果目录不存在,则会自动创建 - 日志会附加到文件中(不会被覆盖)
- 这
logs/目录已从Git中排除(已在.gitignore) - 您可以使用任何路径:
logs/chat.log,logs/debug-2026-01-12.log等等。
查看日志文件:
# View entire log file
cat logs/chat.log
# Follow log in real-time (like tail -f)
tail -f logs/chat.log
# View last 50 lines
tail -n 50 logs/chat.log
# Search logs for errors
grep "ERROR" logs/chat.log令牌使用跟踪
聊天机器人可以维护一个单独的日志文件,专门用于跟踪所有API调用的令牌使用情况。这对于以下方面来说是无价的:
- 监控API成本
- 优化提示和系统消息
- 识别昂贵的查询
- 随时间跟踪使用情况
配置:
# Enable token usage logging
TOKEN_LOG_FILE=logs/tokens.log令牌日志格式:
每个API调用都会记录以下信息:
2026-01-12 16:45:30 - MODEL=gpt-4o-mini | PROMPT=523 | COMPLETION=87 | TOTAL=610 | TYPE=initial_request | USER_PROMPT=What were my glucose levels in the last 3 days? | SERVERS=dexcom | TOOLS=dexcom__Get_Data_Range_VUA_, dexcom__Get_Glucose_Values_VUA_ | RESPONSE=[Tool calls only]
2026-01-12 16:45:35 - MODEL=gpt-4o-mini | PROMPT=1250 | COMPLETION=45 | TOTAL=1295 | TYPE=tool_followup | USER_PROMPT=What were my glucose levels in the last 3 days? | SERVERS=none | TOOLS=none | RESPONSE=Based on the data from the last 3 days, your average glucose was 145 mg/dL with 68% time in range (70-180 mg/dL). You had 12 low readings below 70 mg/dL and 45 high readings...日志字段:
- 模型:所使用的模型(例如。,
gpt-4o-mini,claude-3-5-sonnet-20241022,local-model) - 提示 或 输入:提示/输入令牌的数量(取决于提供者)
- 完成 或 输出:完成/输出令牌的数量(取决于提供商)
- 总计:使用的令牌总数
- 类型:请求类型(
initial_request或tool_followup) - USER_PROMPT:用户的问题/提示(截断为100个字符)
- 服务器:使用的MCP服务器的逗号分隔列表(例如。,
dexcom,salesforce)或“无” - 工具:以逗号分隔的已调用工具列表,或“无”
- 响应:助理的回复(截断为200个字符)
注: 令牌字段名称因提供商而异:
- OpenAI/LM工作室:
PROMPT,COMPLETION,TOTAL - 克劳德:
INPUT,OUTPUT,TOTAL
分析令牌使用情况:
# View all token usage
cat logs/tokens.log
# Calculate total tokens used
awk -F'TOTAL=' '{sum+=$2} END {print "Total tokens:", sum}' logs/tokens.log | awk '{print $1, $2, $3}'
# Find most expensive queries
sort -t'=' -k5 -nr logs/tokens.log | head -10
# Count API calls per day
grep "2026-01-12" logs/tokens.log | wc -l成本计算示例:
为了进行定价比较(示例费率):
- OpenAI:
- GPT-4o-mini:约0.15美元/百万输入代币,约0.60美元/百万输出代币 - GPT-4o:~2.50/100万输入代币,~10.00万输出代币
- 克劳德:
- 克劳德3.5十四行诗:约3.00/1M输入代币,约15.0/1M输出代币 - 克劳德3作品:约15.00/1M输入代币,约75.00/1M输出代币 - Claude 3 Haiku:约0.25美元/百万输入代币,约1.25美元/百万输出代币
- LM工作室: 免费(本地运行)
使用令牌日志估算成本并优化使用。
安全说明
日志中的授权令牌会自动屏蔽以显示 Bearer *** 而不是实际的令牌值。即使启用了DEBUG日志记录,API密钥也保持安全。
如何使用
只需输入自然语言问题!人工智能将找出要使用的工具。
对话示例
You: What open deals do I have over $100k?
[Calling salesforce__Query_Opportunities...]
A: You have 3 open opportunities over $100k:
1. Acme Corp - Enterprise License ($150,000) - Closing Jan 30
2. GlobalTech - Platform Deal ($125,000) - Closing Feb 15
3. Initech - Annual Contract ($110,000) - Closing Feb 28
You: Create a Jira ticket to follow up on the Acme deal
[Calling jira__Create_Issue...]
A: Created SALES-142: "Follow up on Acme Corp Enterprise License opportunity"示例提示
以下是您可以使用不同MCP工具尝试的一些提示:
客户关系管理(Salesforce、HubSpot)
- “显示本月关闭的所有机会”
- “查找医疗保健行业公司的联系人”
- “我的管道总价值是多少?”
- “列出我30天内未联系过的帐户”
- “在Acme Corp为John Smith创建新的潜在客户”
项目管理(Jira、Asana)
- “分配给我的票是什么?”
- “显示所有高优先级错误”
- “创建一个任务来审查Q1路线图”
- “项目123的状态如何?”
- “列出本周更新的所有问题”
生产力(谷歌表格、日历)
- “在我的销售跟踪电子表格中添加一行”
- “我明天有什么会议?”
- “查找名称中包含“预算”的所有电子表格”
- “更新单元格B5以显示新的预测”
沟通(Slack、电子邮件)
- “向#销售团队发送有关新定价的消息”
- “搜索我们法律团队的电子邮件”
- “我有哪些未读消息?”
多工具查询
AI可以自动链接多个工具调用:
- “找到我最大的交易,并创建Jira票来准备提案”
- “获取我明天的日历,并将Slack摘要发送给我的团队”
- “提取第四季度销售数据并更新预测电子表格”
故障排除
OpenAI连接故障排除程序
如果您在连接到OpenAI时遇到问题,请运行内置的故障排除程序:
uv run python troubleshoot_openai.py此脚本诊断常见问题,包括:
- 与OpenAI服务器的网络连接
- DNS解析
- 防火墙/代理阻止
- SSL/TLS问题
- API密钥验证
- 模型访问
要获得更详细的输出,请使用verbose标志:
uv run python troubleshoot_openai.py --verbose“未配置MCP服务器”
确保你有一个 mcp_servers.json 配置了至少一个服务器的文件。
“未发现任何工具”
检查您的服务器URL是否在 mcp_servers.json 正确,并包含身份验证令牌(用于基于令牌的身份验证)或OAuth身份验证成功(用于OAuth身份验证)。
“调用工具时出错”或“401未经授权”
- 对于 基于令牌的身份验证:您的令牌可能已过期。检查您的Workato工作区以获取新令牌。
- 对于 OAuth身份验证:您存储的令牌可能已过期。删除
.mcp_tokens.json并重新启动应用程序以重新进行身份验证。
“API密钥无效”
确保你的 OPENAI_API_KEY 在以下方面是正确的 .env 文件。
一台服务器发生故障,但其他服务器正常工作
聊天机器人将继续使用成功的服务器。检查故障服务器的错误消息,并验证其URL/令牌。
OAuth:“OAuth身份验证失败”
常见原因:
- 端口8080已在使用中:更改
redirect_port在OAuth配置中 - 浏览器未打开:手动将URL从终端复制到浏览器中
- OAuth服务器不支持动态注册:在Workato中手动创建OAuth客户端并提供
client_id和client_secret在配置中
OAuth:“需要代码挑战”
这不应该发生-PKCE是自动启用的。如果你看到这个,请将其报告为错误。
OAuth:令牌已存储,但仍出现401个错误
OAuth实现使用承载令牌身份验证。如果你仍然收到401错误:
- 删除
.mcp_tokens.json - 重新启动应用程序
- 在浏览器中重新进行身份验证
- 新令牌将使用承载身份验证
LM Studio:“无法连接到LM Studio”
确保LM Studio正在运行,并且本地服务器已启动。检查URL是否匹配(默认值: http://localhost:1234/v1).
LM Studio:未调用工具
并非所有型号都支持函数调用。尝试一个明确支持工具使用的模型,例如:
- Mistral指令模型
- 支持函数调用的Llama模型
- 带工具支持的Qwen模型
Ollama:“无法连接到Ollama”
确保Ollama已安装并正在运行。检查服务:
# Check if Ollama is running
curl http://localhost:11434/api/tags
# Or check the version
ollama --version如果Ollama没有跑步,就开始吧:
- macOS/Linux:Ollama安装后自动启动,或运行
ollama serve - 视窗:从“开始”菜单或系统托盘启动Olama
Ollama:“找不到模型”或拉取失败
聊天脚本会自动提取未安装的模型。如果自动拉动失败:
# Manually pull the model specified in your .env
ollama pull llama3.2
# Verify it's installed
ollama list拉拔失败的常见原因:
- 无网络连接
- 磁盘空间不足
- Ollama服务运行不正常
- 型号名称输入错误
.env文件
Ollama:工具未被调用或响应不正确
并非所有Ollama型号都支持函数调用。使用具有经过验证的工具支持的型号:
- 骆驼3.2 (建议一般使用)
- 密史脱拉风 (良好的性能平衡)
- qwen2.5 (多语言,编码)
- 骆驼3.1 (高级推理)
较小的型号,如 llama3.2:1b 速度很快,但在复杂的工具调用中可能不太准确。为了获得最佳效果,请使用默认的3B或更大的模型。
奥利玛:反应迟钝
尝试更小/更快的型号:
# Very fast, lightweight (good for testing)
ollama pull llama3.2:1b
# Or use GGUF quantized models for better performance
ollama pull llama3.2:3b-q4_0您还可以调整 OLLAMA_MODEL 设置在你的 .env 文件。
许可证
麻省理工学院
