🔍 🤖 🌐 人物
一个强大的现代UI,将本地和托管的LLM与智能网络搜索和内容提取、SQL、YouTube转录分析、HubSpot操作、Python数据分析、Canva设计创建、Figma设计检查、Poe多模型AI(文本、图像、视频、音频生成)以及用于安全代码脚手架的Codex MCP服务器集成在一起,所有这些都是通过模型上下文协议(MCP)实现的。功能包括通过用户配置文件和对话上下文提供个性化的人工智能辅助,用于持久参考材料的文档知识库,提供商设置,多提供商模型选择,流式聊天,持久对话,强大的任务系统,以及具有时区感知时间的计划任务。
概述
Osoba展示了如何通过MCP工具扩展本地和托管模型。它通过Ollama将本地运行的LLM与智能网络搜索和内容提取、SQL查询、YouTube转录摄取、HubSpot业务操作、基于Python的CSV分析/可视化、Canva设计创建和导出、Figma文件/设计检查和导出、用于文本聊天和媒体生成(图像、视频、音频)的Poe多模型AI相结合,以及用于在隔离工作区内生成代码的Codex Workspace服务器。多提供商层增加了OpenAI、Anthropic、Google、OpenRouter、Groq和SambaNova。对话和任务在MongoDB中持续存在。
该项目由几个关键组成部分组成:
- 后端(FastAPI):管理聊天逻辑、模型提供者路由、MCP服务通信(包括启动和管理MCP服务,如网络搜索、SQL、YouTube、HubSpot、Python、Canva、Figma、Poe、Codex)、任务/调度器和持久性。
- 前端(React):一个现代、响应式的网络界面,供用户与聊天应用程序交互。
- MCP智能网络搜索服务器模块:通过Serper.dev API提供智能网络搜索,并从顶部结果中自动提取内容。使用多方法内容提取(trafilatura、BeautifulSoup),具有URL优先级、robots.txt合规性和礼貌的爬行实践。
- MCP SQL Server模块:对MySQL数据库进行只读查询(具有模式资源和查询安全性)。
- MCP YouTube转录服务器:使用多种策略(youtube转录api、Pytube、yt-dlp)以及可选的代理支持来可靠地获取转录,然后将转录上下文持久化到对话中以供后续跟进。
- MCP HubSpot业务工具:使用OAuth通过HubSpot API创建/更新营销电子邮件,并使用JSON优先提示流。
- MCP Python数据分析服务器:全面的数据分析工具包,包括CSV加载、数据分析、过滤、分组/聚合、异常检测、数据类型转换、统计假设测试和可视化(base64图像),用于完整的分析工作流程。
- MCP Canva设计服务器:直接从聊天或自主任务中创建、浏览、导出、导入、调整大小和自动填充Canva设计。支持标准尺寸预设(Instagram、YouTube、演示文稿等)、自定义尺寸、品牌模板自动填充(企业版)、资产上传、设计导入(PDF/PPTX/DOCX/PSD)以及导出为PNG、JPG、PDF、PPTX、SVG、MP4或GIF。需要Canva Connect API访问令牌(OAuth 2.0)。
- MCP Figma设计服务器:读取Figma文件,提取特定节点,将框架和组件导出为图像(PNG/JPG/SVG/PDF),管理评论,并提取完整的设计系统(颜色标记、排版、间距、组件)——所有这些都来自聊天或任务。需要Figma个人访问令牌。
- MCP Poe AI模型服务器:通过一个兼容OpenAI的API访问Poe平台上的数百个AI模型。使用前沿LLM(Claude、GPT、Gemini、Grok、Llama)生成文本,使用GPT-Image-1.5、Flux和Stable Diffusion(具有纵横比控制)等模型创建图像,生成视频和音频——所有这些都来自聊天或任务。需要Poe API密钥。
- MCP Codex工作区服务器:创建每次运行的工作区,并在隔离目录中启动Codex CLI,持久化工件(JSONL事件、清单),强制执行可配置的输出策略,并为流友好的用户体验公开异步运行API。在有效的OpenAI API密钥上选通。
- MongoDB:存储对话历史和用户数据。
该架构展示了MCP如何使本地模型能够访问外部工具和数据源,从而显著增强其功能。后端启动并监督所有MCP服务,以实现可扩展、功能丰富的设置。
演示
- 观看X上的演示:https://x.com/redbuilding/status/2010124029936427450
特性
- 🧠 智能网络搜索:智能网络搜索,可从顶部结果中自动提取内容。超越搜索片段,使用先进的提取技术获取和分析完整的网页内容。
- 🔎 URL优先级:基于相关性评分对搜索结果进行智能排名,包括标题/片段匹配、域名权威和搜索位置加权。
- 🤖 礼貌网络爬行:尊重robots.txt,实施速率限制,并使用适当的用户代理标识进行道德内容提取。
- 👤 用户配置文件和上下文:配置个人信息(角色、专业知识、项目)并锁定对话,以获得上下文AI帮助。人工智能了解你的背景,可以参考以前的工作来做出个性化的回应。
- 🎯 目标和优先事项在结构化文档(最多2000个字符)中定义您的短期、中期和长期目标,以帮助人工智能理解您的目标并提供相关帮助。
- 🔔 主动代理心跳:通过上下文收集(语义内存、git、项目文件、系统健康状况)、自动任务创建和基于文件的配置(HEARTBEAT.md)增强后台服务。可配置的间隔、上下文源以及文件和UI之间的双向同步。
- 📌 对话固定:选择特定的对话作为未来聊天的背景,使人工智能能够建立在之前的讨论基础上,并保持会话之间的连续性。
- 🧠 语义记忆:由ChromaDB和nomic嵌入文本嵌入技术支持的智能语义搜索,提供无限的对话存储空间。自动为包含5条以上消息的对话建立索引,按含义(而不是关键字)进行搜索,并将相关的过去对话注入新的聊天中。包括用于搜索和管理对话历史记录的内存浏览器(Ctrl+Shift+M)。
- 📚 文档知识库:上传PDF、Word文档、Markdown文件、纯文本或网址作为持久参考资料。文档被分块、嵌入并存储在专用的ChromaDB集合中。相关文档片段与语义记忆一起自动注入到每个聊天中。使用Ctrl+Shift+K或“KB”标题按钮打开。
- 🧾 AI聊天摘要(按需):为对话生成简洁、LLM撰写的摘要,并将其用作固定聊天的上下文有效载荷(没有启发式)。摘要由用户触发,在“设置”中可选择模型,固定限制为5次聊天。
- 🎯 个性化AI响应:AI根据您的个人资料信息和固定的对话历史记录调整其沟通风格和建议,以获得更相关的帮助。
- 💾 持续对话:聊天记录保存在MongoDB中,允许用户恢复对话。
- 🧠 多提供商LLM:Ollama(本地),加上OpenAI、Anthropic、Google、OpenRouter、Groq、SambaNova-带有API键的设置屏幕和统一的模型选择器。
- 🔌 MCP集成后端管理多个MCP工具(web、SQL、YouTube、HubSpot、Python)作为后台服务。
- 💻 现代Web界面:使用React构建,提供响应式和交互式用户体验。
- 📊 结构化搜索结果:对网络搜索数据进行干净的格式化,以获得最佳的上下文。
- 🌐 增强的内容提取:使用trafilatura和BeautifulSoup进行多方法内容提取,具有优雅的回退功能,可实现最大的可靠性。
- ⚙️ 后端API:FastAPI后端为聊天和会话管理提供强大的API端点。
- 🗃️ SQL查询工具:具有模式自检和重试逻辑的MySQL只读查询。
- 🔄 对话管理:列出、重命名和删除对话。
- 📺 YouTube转录工具:粘贴YouTube网址;转录本被提取并存储,以便进行多轮随访。
- 🧰 HubSpot工具:OAuth连接,然后通过引导的JSON提示创建/更新营销电子邮件。
- 🐍 Python分析工具:上传CSV并运行全面的分析,包括数据分析、过滤、分组、异常值检测、统计测试、类型转换和可视化——结果以图像和详细见解的形式返回。
- ⚡ 流媒体响应:前端逐一呈现模型输出令牌和工具使用指标。
- 🗓️ 长期运行的任务(计划和执行):创建自主任务,计划和执行多步工作流,包括预算、重试和验证。
- 📈 实时任务进度:任务通过SSE流式传输进度;每一步输出(表格/图像/文本)在UI中呈现。
- 🧩 仅LLM步骤(无MCP):任务可以包括直接在Ollama上运行的步骤(例如,总结/推理),而无需使用任何MCP工具。
- 🚦 优先级任务队列:具有优先级调度的内存安全任务执行-调度任务首先运行,用户任务排在后面,一次只执行一个任务,以防止系统过载,这对本地内存受限的系统尤为重要。
- 🎨 Canva设计工具(MCP):使用标准预设(Instagram、YouTube缩略图、演示文稿、A4等)或自定义尺寸从聊天或任务中创建Canva设计。浏览现有设计,上传资产,将文件(PDF/PPTX/DOCX/PSD)导入为可编辑设计,调整不同平台的设计大小,自动填充品牌模板,并导出为PNG、JPG、PDF、PPTX、SVG、MP4或GIF——所有这些都不需要离开Osoba。需要Canva Connect API访问令牌。
- 🖼️ Figma设计工具(MCP):读取Figma文件结构,按ID提取特定节点,将框架和组件导出为图像,列出并发布评论,提取完整的设计系统(颜色、排版、间距标记和组件目录)。可用于设计审查工作流程、设计到代码移交和自动化设计审计。需要Figma个人访问令牌。
- 🤖 Poe人工智能模型(MCP):通过Poe平台访问数百个AI模型——使用前沿LLM生成文本,使用GPT-Image-1.5、Flux或Stable Diffusion(具有9:16/16:9宽高比控制)创建图像,生成视频和音频。从聊天或自主任务中使用。需要Poe API密钥。
- ✨ Codex工作区(MCP):启动Codex,在隔离的工作区中生成/编辑文件;聊天中的内联运行状态;保留工件以供审查;通过OpenAI密钥进行门控。
- 🗓️ 计划任务(时区感知):在当地时区计算的具有夏令时安全性的重复cron或一次性时间表;首次运行后自动禁用一次性计划;使用模型覆盖“立即运行”。
任务执行和内存管理
任务系统MCP工具访问
任务系统具有 完全访问所有MCP工具 可在聊天界面中使用,实现复杂工作流的自主执行:
可用工具(共55个):
- 网页搜索 (5个工具):基本搜索、智能内容提取、图像搜索、新闻搜索、直接获取URL
- Python数据分析 (17个工具):数据加载、检查、清理、转换、统计分析、可视化
- Canva设计 (10个工具):创建设计、列出设计、获取设计细节、导出到文件、上传资产、自动填充品牌模板、获取模板字段、导入设计、调整设计大小、获取设计页面
- Figma设计 (6个工具):获取文件结构、获取节点、导出图像、列出评论、发布评论、提取设计系统
- Poe人工智能模型 (5个工具):按模态、文本聊天、图像生成(带纵横比)、视频生成、音频生成列出模型
- HubSpot业务 (2个工具):创建/更新营销电子邮件(需要OAuth)
- Codex工作区 (7个工具):代码生成和工作空间管理(需要OpenAI API密钥)
- 数据库 (1个工具):只读SQL查询
- 油管 (1个工具):转录提取
- 仅LLM (1个工具):用于推理步骤的直接LLM生成
高级任务能力:
- 使用智能内容提取进行研究(完整的网页内容,而不仅仅是片段)
- 具有异常检测和统计假设检验的高级数据分析
- Canva设计工作流程:研究一个主题,然后自动创建和导出设计
- Figma设计工作流程:提取设计令牌、导出资产,并审查设计到代码切换的文件结构
- Poe AI工作流程:生成具有宽高比控制的图像,然后上传到Canva或用于多步创意流程
- 与HubSpot集成的营销自动化
- 使用细粒度Codex工作空间管理生成代码
- 结合搜索、分析、设计和生成的多步工作流
- KB上下文附件:在任务创建时附上1-2个索引知识库文档,将参考材料注入计划和每个LLM步骤
优先排队系统
该应用程序使用 基于优先级的任务队列 以确保系统稳定性并防止多个LLM实例导致内存过载:
- 优先级1(最高):计划任务总是先运行
- 优先级2(标准):用户创建的任务排在计划任务之后
- 一次一个任务:只有一个任务同时执行,以防止内存崩溃
- 队列位置:用户会收到关于他们在队列中的位置的反馈
内存安全
- 防止过载:多个并发LLM实例(例如,3x Llama3.1 8B=24GB)可能会使RAM有限的系统崩溃
- 安全执行:单任务执行可确保内存使用量保持在系统限制范围内
- 自动排队:当另一个任务正在运行时,任务会自动排队
任务调度
- 基于Cron的调度:使用标准cron表达式进行灵活调度
- 系统要求:计划任务仅在系统唤醒且应用程序正在运行时运行
- 追赶执行:系统恢复时,过期任务会立即执行
计划任务可靠性
追赶逻辑(默认): 当后端在停止后启动或计算机从睡眠中唤醒时,过期的计划任务会立即执行。延迟超过5分钟的任务在UI中用警告指示器标记,显示它们运行得有多晚(例如,“⚠️ 上一次运行:延迟4500米”)。重复任务从当前时间计算下一次运行,以防止级联延迟。
延迟故障: 该系统区分了两种类型的延迟:
- 系统延迟 (睡眠):计算机睡眠或后端停止的时间
- 队列延迟 (排队):等待其他任务完成所花费的时间
UI显示细分:“⚠️ 上次运行:延迟15米(睡眠:10米,排队:5米)”。这有助于您了解延迟是由于系统睡眠还是任务队列拥塞造成的。由于一次只执行一个任务(出于内存安全考虑),任务可能会在系统唤醒后排在追赶任务之后。
作为服务运行(可选): 为了保证执行和自动启动,您可以将Osoba后端作为系统服务运行。这确保了后端始终在运行,并准备按时执行计划任务。为macOS(启动代理)、Linux(systemd)和Windows(NSSM)提供了安装脚本。看 scripts/README.md 有关详细的设置说明。
唤醒调度(高级): 在支持的系统上,您可以将计算机配置为从睡眠中唤醒,专门用于运行计划任务。这需要管理员/root访问权限,建议主要用于台式机或由于电池影响而插入电源时。平台特定说明:
- macOS:用途
pmset安排唤醒事件 - Linux:使用RTC唤醒(需要硬件支持)
- 视窗:使用带有唤醒计时器的任务计划程序
看 scripts/README.md 用于完成唤醒调度设置和故障排除。
需求
- Python 3.11+
- 前端使用Node.js(v18+)和npm/yarn
- 奥拉玛 在本地安装并运行
- A. Serper.dev API密钥(可用的免费层)
- MongoDB实例(本地或云)
- MySQL服务器(可选,用于SQL查询工具)
- 用于网络搜索和软件包下载的互联网连接
语义记忆和文档知识库:
- 奥拉玛与
nomic-embed-text型号:ollama pull nomic-embed-text - ChromaDB、tiktoken和pdfplumber(通过requirements.txt自动安装)
可选(启用其他工具):
- 智能网络搜索:
trafilatura,beautifulsoup4,lxml(自动安装) - Python数据分析:
pandas,numpy,matplotlib,seaborn - YouTube文字记录:
youtube-transcript-api,pytube,yt-dlp,requests - HubSpot OAuth:有效的OAuth应用程序(客户端ID/秘密)和重定向URL
- Canva设计:Canva Connect API访问令牌(请参阅 安装说明)
- Figma设计:Figma个人访问令牌(来自Figma帐户设置→ 安全→ 个人访问令牌)
- Poe AI模型:Poe API密钥(来自 poe.com/api/keys,需要Poe订阅)
- Codex工作区:PATH上提供Codex CLI(或设置
CODEX_BIN),配置了OpenAI API密钥
安装
- 克隆存储库:
git clone https://github.com/redbuilding/osoba.git
cd osoba- 设置后端:
- 导航到后端目录:
cd backend- 创建并激活虚拟环境:
python3 -m venv mcp
source mcp/bin/activate # On Windows: mcp\Scripts\activate- 安装Python依赖项:
pip install -r requirements.txt- 创建一个 .env 文件在 backend 目录。这是后端及其托管MCP服务查找环境变量的地方。若要安全存储提供商API密钥,必须生成稳定的加密密钥(Fernet)并设置 SETTINGS_ENCRYPTION_KEY:
- 安装: pip install cryptography - 生成(选择一个): - python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" - 在Python REPL中: from cryptography.fernet import Fernet; print(Fernet.generate_key().decode()) - 将密钥粘贴到 .env 作为 SETTINGS_ENCRYPTION_KEY=...
# For encrypting API keys entered into model provider Settings modal
SETTINGS_ENCRYPTION_KEY=
# For Smart Web Search (server_search.py)
SERPER_API_KEY=your_serper_api_key_here
# Smart extraction configuration (optional)
SMART_EXTRACT_MAX_URLS=3
SMART_EXTRACT_MAX_CHARS_PER_URL=2000
SMART_EXTRACT_MAX_TOTAL_CHARS=5000
SMART_EXTRACT_REQUEST_DELAY=1.0
# For MongoDB (main.py)
MONGODB_URI=mongodb://localhost:27017/
MONGODB_DATABASE_NAME=mcp_chat_db
# For MySQL Database Querying (server_mysql.py)
DB_HOST=localhost
DB_USER=your_db_user
DB_PASSWORD=your_db_password
DB_NAME=your_db_name
# Optional: Canva Design Tools (backend/server_canva.py)
# Get your token from: https://www.canva.com/developers/
CANVA_API_TOKEN=your_canva_personal_access_token_here
# Optional: Figma Design Tools (backend/server_figma.py)
# Get your token from Figma Account Settings → Security → Personal access tokens
FIGMA_ACCESS_TOKEN=your_figma_personal_access_token_here
# Optional: Poe AI Models (backend/server_poe.py)
# Get your key from https://poe.com/api/keys (requires Poe subscription)
POE_API_KEY=your_poe_api_key_here
# Optional: HubSpot OAuth (backend/auth_hubspot.py)
HUBSPOT_CLIENT_ID=your_hubspot_client_id
HUBSPOT_CLIENT_SECRET=your_hubspot_client_secret
HUBSPOT_REDIRECT_URI=http://localhost:8000/auth/hubspot/oauth-callback
FRONTEND_URL=http://localhost:5173
# Optional: YouTube transcript server (backend/server_youtube.py)
# YTA_PROXY=https://user:pass@host:port
# YTA_LOG_LEVEL=INFO
# Optional: Backend defaults
DEFAULT_OLLAMA_MODEL=llama3.1
OLLAMA_REPEAT_PENALTY=1.15
# Codex MCP debugging state
CODEX_DEBUG=false- 安装其他工具的可选依赖项(如果您计划使用它们):
# Smart web search content extraction (recommended)
pip install trafilatura beautifulsoup4 lxml
# YouTube transcript tool
pip install youtube-transcript-api pytube yt-dlp requests
# Python analysis tool
pip install pandas numpy matplotlib seaborn scipy- 设置前端:
- 导航到前端目录:
cd ../frontend(如果你在 backend/,否则从项目根目录导航: cd frontend) - 安装Node.js依赖项:
npm install
# or
# yarn install- 可选:创建 frontend/.env 使用自定义API URL(默认为 http://localhost:8000/api):
echo 'VITE_API_URL=http://localhost:8000/api' > .env- 确保Ollama已安装,并且有可用的型号:
应用程序可能默认为特定模型(例如。, llama3.1).拉你想要的模型:
ollama pull llama3.1
# or your preferred model like llama3, mistral, etc.您可以在UI中选择模型,或通过配置默认值 DEFAULT_OLLAMA_MODEL 在后端 .env 文件。
安全考虑
⚠️ Osoba专为本地单用户使用而设计。 API没有身份验证层。切勿将端口8000暴露给不受信任的网络(例如,通过ngrok、端口转发或绑定到 0.0.0.0).- 网络曝光:后端绑定到
127.0.0.1默认情况下。不要将其更改为0.0.0.0除非你了解风险。 - 加密密钥:设置
SETTINGS_ENCRYPTION_KEY在backend/.env使用稳定的Fernet密钥。如果没有它,提供程序API密钥将在每次重新启动时丢失。 - MongoDB:默认连接不使用身份验证。对于敏感数据,启用MongoDB身份验证并使用带有凭据的连接字符串。
- 提供程序API密钥:密钥使用Fernet在静止时加密,API从不返回。保持你的
.env文件安全且不受版本控制。 - MySQL查询:查询被验证为只读SELECT语句,并自动限制为1000行。连接和读取超时可防止查询失控。
- CSV上传:上传的解码大小上限为50 MB,内存中的DataFrame存储限制为10个数据集(最旧的数据集首先被删除)。
用法
- 确保先决条件正在运行:
- 奥拉玛:一定在跑。 - MongoDB:您的MongoDB实例必须可访问。 - MySQL服务器 (如果使用SQL工具):您的MySQL服务器必须正在运行,并且可以使用中提供的凭据访问 .env.
- 启动后端服务器:
导航到 backend 目录并运行FastAPI应用程序:
# From the backend directory
uvicorn main:app --reload --port 8000后端API通常在 http://localhost:8000. FastAPI应用程序使用其生命周期管理器自动启动和管理所有MCP服务(Web、SQL、YouTube、HubSpot、Python、Codex)作为后台进程。你做到了 不 需要单独运行MCP服务器。
- 启动前端开发服务器:
导航到 frontend 目录并运行:
npm run dev
# or
# yarn devweb界面通常可在以下位置访问 http://localhost:5173 (或Vite指定的其他端口)。
与应用程序交互
- 打开浏览器到前端URL(例如。,
http://localhost:5173). - 使用聊天界面发送消息;工具运行时,响应流与指示器一起实时传输。
- 点击✨ 工具选择器,用于启用以下选项之一:智能网络搜索、数据库、YouTube、HubSpot、Python、Canva、Figma、Poe、Codex(需要配置OpenAI)。
- 使用设置(标题)配置提供程序API密钥并解锁非Ollama模型和Codex。
- 配置用户配置文件:在设置中→ 用户资料,添加您的角色、专业领域、当前项目和通信偏好,以获得个性化的人工智能帮助。
- 设定目标:在设置中→ 目标和优先事项,定义你的短期、中期和长期目标(最多2000个字符)。人工智能将利用这些目标提供情境帮助和主动见解。
- 实现主动洞察:在设置中配置心跳服务→ 目标和优先事项→ 心跳设置,用于定期接收人工智能生成的关于你的进度、阻碍和建议的见解。点击铃声图标(🔔) 在标题中查看见解。
- Pin对话:将鼠标悬停在侧边栏中的对话上,然后单击pin按钮将其作为未来聊天的上下文。
- 如果对话缺少摘要,系统将提示您在固定之前生成一个摘要。创建摘要时,UI会阻止,然后完成引脚。 - 最多可以固定5个对话。超出上限的尝试被阻止,侧边栏显示“X/5被钉住”。 - 摘要由您选择的模型按需生成(请参阅设置→ 摘要)并存储以供再次使用;只有存储的摘要用于上下文。
- 对于YouTube:粘贴一个视频URL。记录会被提取并保存到对话中以供后续跟进。
- 对于HubSpot:点击“连接HubSpot”以完成OAuth,然后描述要创建/更新的电子邮件。
- Canva:设置
CANVA_API_TOKEN在.env,然后要求AI创建一个设计(例如,“创建一个名为‘2025年的AI’的YouTube缩略图”),列出您的设计,上传资产,导入文件,或将设计导出为PDF。 - Figma:设置
FIGMA_ACCESS_TOKEN在.env,然后要求AI读取Figma文件(例如,“获取Figma文件ABC123的结构”),将特定帧导出为图像,提取设计系统标记,或列出/发布评论。 - 对于Poe:设置
POE_API_KEY在.env,然后要求AI生成图像(例如,“生成16:9的山脉日落景观图像”),与前沿模型聊天,或生成视频/音频。 - 对于Python:在提示时上传CSV文件;后续问题重用加载的DataFrame进行高级分析,包括过滤、分组、异常检测、统计测试和可视化。
- 使用侧边栏管理对话(新建、选择、重命名、删除、固定上下文)。
长期运行的任务(计划和执行)
- 打开“任务”面板(标题中的“任务”按钮)以:
- 通过输入高级目标创建新任务。 - 监控进度(实时SSE流),查看步骤输出(表格、图像、文本)和暂停/恢复/取消。 - 从任何用户聊天消息中“升级到任务”,以预先填写目标并将任务链接到对话。 - 使用专用复制按钮复制整个任务结果或单个步骤输出。 - 删除已完成、失败或取消的任务以清理任务列表。 - 后端将每个任务计划为结构化JSON(步骤、工具、参数、成功标准),然后按顺序执行步骤: - 预算:最大挂墙时间和最大工具调用次数。 - 每一步超时和带回退的上限重试。 - 根据成功标准进行输出验证。
- 完成:当最后一步完成时,任务状态变为已完成。当故障/超时/超出预算时,状态为“失败”。一个简洁的摘要被发布回链接的对话中。
- 当配置OpenAI密钥时,规划器可以提出 codex.run 脚手架/创建目标步骤;否则,这些步骤会自动关闭。
API:
- 创建任务:
POST /api/tasks { goal, conversation_id?, dry_run? } - 列出任务:
GET /api/tasks - 任务详细信息:
GET /api/tasks/{id} - 任务流(SSE):
GET /api/tasks/{id}/stream - 暂停/恢复/取消:
POST /api/tasks/{id}/pause|resume|cancel - 删除任务:
DELETE /api/tasks/{id} - 状态:
GET /api/status包括tasks.active计数
仅LLM步骤(无MCP):
- 规划者支持
llm.generate直接通过Ollama运行的步骤,无需任何MCP服务器。如果aprompt省略该步骤instruction使用。这些步骤仍然尊重预算、超时和验证。
旧客户端(已删除)
原版 chat_client.py (终端)和 chat_frontend.py (Gradio)已从存储库中删除,因为它们不再与当前的FastAPI后端架构兼容。所有功能现在都通过现代React前端提供。
Python数据分析工具
Python MCP服务器通过以下工具提供全面的数据分析功能:
核心数据操作
load_csv-从base64编码字符串加载CSV数据get_head-显示DataFrame的前N行get_data_info-全面的DataFrame信息(数据类型、内存使用情况、非空计数)get_descriptive_statistics-数字列的统计摘要
数据质量和清理
check_missing_values-识别列中缺失的值handle_missing_values-处理缺失数据(删除、填充、插值)convert_data_types-安全的数据类型转换(日期时间、类别、数字)detect_outliers-使用IQR或Z评分方法进行异常检测
数据操作与分析
filter_dataframe-使用带有安全验证的pandas查询语法过滤数据group_and_aggregate-按列分组并应用聚合函数query_dataframe-创建新DataFrame的高级DataFrame查询rename_columns-重命名DataFrame列drop_columns-删除指定的列
统计分析
get_correlation_matrix-计算数值列的相关矩阵get_value_counts-分类列的频率分析perform_hypothesis_test-统计假设检验:
- 双样本t检验 - 皮尔逊相关检验 - 独立性的卡方检验
数据可视化
create_plot-生成各种绘图类型:
- 散点图 - 直方图 - 条形图 - 箱线图 - 返回用于web显示的base64编码图像
所有工具都通过内存中的DataFrame存储来维护会话状态,从而在单个对话中实现复杂的多步骤分析工作流。
用户资料和情境人工智能辅助
该应用程序通过用户配置文件和对话上下文管理提供个性化的人工智能帮助:
用户配置文件配置
- 个人信息:配置您的角色、专业领域、当前项目和沟通偏好
- 情境理解:AI了解您的背景并相应地调整响应
- 设置集成:通过设置访问→ 用户配置文件,便于配置
会话上下文系统
- 选择性钉扎:选择特定的对话作为未来聊天的背景
- 视觉控制:使用直观的控件直接从侧边栏固定/取消固定对话
- 自动摘要:系统在需要时自动为固定对话生成摘要
- 混合总结法:捕获用户问题和辅助解决方案,以获得完整的上下文
- 上下文连续性:人工智能可以参考以前的问题和解决方案,以获得连贯的帮助
- 智能限制:上下文预算总计约2700个字符(200个简介+最多2500个
跨固定摘要)
- 持久化存储:生成的摘要被存储和重用,以避免重新生成
个性化AI响应
AI将您的个人资料信息与固定的对话上下文相结合,以提供:
- 相关建议:基于您的角色和当前项目的建议
- 适当的复杂性:技术深度与您的专业水平相匹配
- 一致的上下文:能够参考以前的工作并保持对话的连续性
- 解决方案意识:知道已经尝试过哪些方法,并可以在此基础上进一步发展
- 自适应通信:根据您的喜好量身定制的响应风格
配置文件与AI配置
- 用户档案:关于你的信息(角色、项目、偏好)-帮助人工智能了解它在和谁说话
- AI配置文件:人工智能行为和个性的配置——定义人工智能应该如何行动
- 综合效应:创建个性化交互,人工智能知道你是谁以及它应该如何回应
技术实现
- 自动生成摘要:当对话被固定时,会根据最后5条消息按需生成摘要
- 混合摘要格式:包括用户问题和关键助手解决方案(例如,“用户问题|已解决:pandas,matplotlib”)
- 智能解决方案提取:从助手的响应中识别代码示例、工具建议和解决方案模式
- 用户隔离:对话按用户过滤,以防止跨用户上下文泄漏
- 性能优化:摘要只生成一次,并存储起来,以便在多个聊天中重复使用
记忆系统
Osoba采用先进的语义记忆系统,通过智能语义搜索提供无限的对话存储,超越了5个对话的限制。
运作原理
自动索引:
- 5条以上消息的对话在10分钟不活动后会自动编入索引
- 使用nomic嵌入文本(通过Ollama)进行本地隐私保护嵌入
- 将对话块存储在ChromaDB矢量数据库中以进行语义搜索
- 无阻塞后台进程确保对聊天性能没有影响
语义搜索:
- 按含义搜索,而不仅仅是关键字-查找概念上相似的对话
- 相关性评分显示结果与您的查询的匹配程度(例如,“87%匹配”)
- 自动将相关的过去对话注入新聊天中
- 仅包括超过60%相似性阈值的对话,以避免噪音
内存浏览器(Ctrl+Shift+M):
- 在所有索引对话中进行全文语义搜索
- 预览带有相关性得分的片段
- 从内存中删除单个对话
- 键盘快捷键,便于快速访问
主要特点
无限存储空间:
- 无人为限制-存储数千个对话
- 智能分块(512个令牌,50个令牌重叠)保留上下文
- 基于保留策略的自动清理(可配置)
智能上下文注入:
- 相关的过去对话已自动添加到聊天上下文中
- 仅包括最相关的对话(并非所有索引对话)
- 尊重上下文窗口限制,同时最大限度地提高相关性
隐私第一:
- 通过Ollama的本地嵌入(无外部API调用)
- 所有数据本地存储在ChromaDB中
- 没有对话数据离开您的机器
使用语义记忆
手动保存:
- 点击“💾 “保存到内存”按钮(出现在有5+条消息的对话中)
- 立即为对话建立索引,以备将来参考
自动索引:
- 对话在5条以上消息和10分钟空闲后自动索引
- 后台服务每5分钟检查一次符合条件的对话
- 无需用户操作
搜索内存:
- 按
Ctrl+Shift+M打开内存浏览器 - 输入您的搜索查询(例如,“Python pandas数据帧”)
- 查看带有相关性得分的结果并预览文本
- 单击以查看或删除对话
内存管理:
- 访问设置→ 统计和控制的语义记忆
- 查看总索引对话和存储使用情况
- 触发手动自动索引检查
- 清除所有内存(确认)
技术细节
嵌入模型:
- nomic嵌入文本(768维嵌入)
- 通过Ollama在当地运行
- 没有API成本或费率限制
矢量数据库:
- ChromaDB用于持久载体存储
- 高效的相似性搜索(典型查询\ 提示: 为涉及遵循既定流程的任务附上SOP或规范文件。规划者将把文档的约束纳入其步骤设计中,每个LLM生成步骤都将有完整的摘录。
API终点
| 方法 | 路径 | 描述 |
|---|---|---|
POST | /api/documents/upload | 上传一个文件(base64编码的JSON正文) |
POST | /api/documents/url | 从URL摄取 |
GET | /api/documents | 列出所有文件 |
GET | /api/documents/{id} | 获取文档详细信息(包括内容) |
DELETE | /api/documents/{id} | 从MongoDB+ChromaDB中删除 |
GET | /api/documents/search?q=... | 文档块的语义搜索 |
GET | /api/documents/stats | 计数、字符、块 |
上传有效载荷形状:
{
"filename": "spec.pdf",
"data_b64": "",
"title": "Product Spec",
"description": "Optional description",
"user_id": "default"
}后端文件
| 文件 | 目的 |
|---|---|
backend/db/document_store.py | DocumentVectorStore --ChromaDB "documents" 收藏 |
backend/db/documents_crud.py | 用于文档元数据的MongoDB CRUD |
backend/services/document_parser.py | 文件/URL→ 纯文本提取 |
backend/services/document_indexing.py | 填塞+嵌入+储存管道 |
backend/services/kb_context.py | 查询时间上下文生成器 |
backend/api/documents.py | FastAPI路由器(/api/documents) |
主动代理心跳系统
增强型心跳系统通过自动洞察和任务创建提供主动的人工智能协助。它分析您的目标、对话、项目状态和系统健康状况,以建议可采取的下一步行动。
主要特点
上下文收集:
- 语义记忆:对话历史、索引对话、存储使用情况
- Git仓库:当前分支、未提交的文件、未发布的提交、最近的提交
- 项目文件:TODO/FIXME注释,最近修改的文件
- 系统健康:磁盘使用情况、服务状态
自动任务创建:
- Insights可以自动创建跟踪任务
- 通过“创建任务”按钮手动转换
- 与跟踪见解相关的任务
基于文件的配置(高级用户):
- 在中定义心跳任务
HEARTBEAT.md - 基于类别的任务组织
- 自定义计划(定时或间隔格式)
- 文件和UI之间的双向同步
运作原理
心跳服务在后台以可配置的间隔运行(默认值:每2小时一次)。在每次心跳过程中:
- 上下文收集:收集目标、对话、任务和增强的上下文(内存、git、项目、系统)
- AI分析:将上下文发送到您选择的LLM(默认:Haiku,成本效益约为0.01美元/用户/天)
- 洞察力生成:人工智能生成可操作的见解、建议或识别阻断者
- 智能过滤:使用“HEARTBEAT_OK”模式在一切正常时抑制通知
- 任务创建:可选择根据见解创建跟踪任务
- 通知:在钟形图标面板(右上角标题)中显示见解
快速开始
1.启用心跳:
- 设置→ 主动心跳
- 切换“启用心跳”
- 选择检查间隔(30m、1h、2h、4h、6h)
2.配置上下文源:
- 启用语义记忆(推荐)
- 启用Git存储库(推荐)
- (可选)启用项目文件和系统运行状况
3.启用自动创建任务(可选):
- 切换“自动创建任务”
- Insights将自动创建跟踪任务
4.设定目标:
- 设置→ 目标和优先事项
- 输入您的目标文档(最多2000个字符)
使用HEARTBEAT.md(高级用户)
创建 HEARTBEAT.md 在项目根目录中:
# Heartbeat Tasks
## Memory Management
Schedule: 0 2 * * *
Enabled: true
Prompt: Review semantic memory usage and suggest cleanup if storage exceeds 100MB
Context: memory
## Testing Reminders
Schedule: 0 9 * * 1
Enabled: true
Prompt: Check test coverage and suggest missing tests
Create_Task: true
Context: git,project同步选项:
- 从文件加载:将任务从HEARTBEAT.md导入数据库
- 保存到文件:将配置的任务导出到HEARTBEAT.md
使用见解
1.检查通知:单击钟形图标(🔔) 在标题中
- 徽章显示未读洞察计数
- 下拉面板显示最近的见解
2.回顾见解:每个见解包括:
- 标题:见解的快速总结
- 描述:详细的建议或观察
- 时间戳:洞察力何时产生
- 创建任务按钮:将洞察转化为跟踪任务
3.解散见解:单击“Dismiss”以删除您提出的见解
4.手动触发器:强制立即进行心跳检查:
curl -X POST "http://localhost:8000/api/heartbeat/trigger?user_id=default"示例见解
进度检查:
标题:“身份验证功能进度”\ 描述:“您提到本周完成了身份验证功能。最后一次对话显示您正在进行密码重置。在标记完成之前,请考虑测试边缘情况。”
阻断器识别:
标题:“设计模型拦截器”\ 描述:“你的目标提到等待设计模型。你注意到这个障碍已经3天了。考虑联系设计团队或自己创建线框。”
任务建议:
标题:“API文档提醒”\ 描述:“您有5个与API终结点相关的已完成任务,但没有文档任务。请考虑创建一个任务来文档化新的终结点。”
HEARTBEAT_OK(无通知): 当一切正常时,AI会以“HEARTBEAT_OK”响应,并且不会创建任何通知,从而减少噪音。
成本考虑
- 默认模型:Claude Haiku 4.5(每100万输入代币约0.25美元)
- 典型成本:每位用户每天约0.01美元,间隔2小时
- 上下文大小:约1500个代币(目标+3个对话+5个任务)
- 每日心跳:12张支票/天(2小时间隔)=约18000个代币=0.0045美元
成本优化:
- 使用更长的间隔(3-4小时)来降低频率
- 在非工作时间禁用活动时间设置
- 使用本地Ollama模型(免费)而不是托管提供商
- 保持目标文件简洁
隐私和数据
- 本地处理:所有上下文都保留在您的系统中
- 无外部存储:见解仅存储在您的MongoDB中
- 用户隔离:每个用户的目标和见解完全不同
- 随时选择退出:在设置中禁用或删除目标文档
故障排除
未出现任何见解:
- 检查心跳是否在设置中启用
- 验证您是否在活动时间内
- 确保目标文档已保存
- 检查后端日志是否有错误
通知太多:
- 增加间隔(例如2小时→ 4h)
- 将活动时间调整为仅工作时间
- 审查目标文件-更具体
见解不相关:
- 用当前优先事项更新目标文件
- 添加更多关于拦截器和进度的上下文
- 固定相关对话以获得更好的上下文
API 参考
获取见解:
GET /api/heartbeat/insights?user_id=default&dismissed=false解散Insight:
POST /api/heartbeat/insights/{insight_id}/dismiss?user_id=default获取配置:
GET /api/heartbeat/config?user_id=default更新配置:
PUT /api/heartbeat/config?user_id=default
Content-Type: application/json
{
"enabled": true,
"interval": "2h",
"active_hours": {
"start": "09:00",
"end": "18:00",
"timezone": "America/New_York"
}
}手动触发:
POST /api/heartbeat/trigger?user_id=default智能网络搜索和内容提取
Smart Web Search MCP服务器提供高级Web搜索功能,远远超出了基本的搜索片段:
智能内容提取
- 多方法提取:使用trafilatura(主要)和BeautifulSoup回退,以获得最大的可靠性
- 完整网页内容:提取完整的文章,而不仅仅是搜索片段
- 内容物清理:删除HTML标记、规范化空白、处理实体
- 结构保护:维护标题、段落和内容层次结构
URL优先级算法
- 相关性评分:根据标题和片段中的查询词匹配对URL进行排名
- 位置权重:考虑搜索结果位置和域权限
- 智能过滤:优先考虑文档、教程和权威来源
礼貌与道德的爬行
- Robots.txt合规性:自动检查和尊重robots.txt文件
- 速率限制:请求之间的可配置延迟(默认值:1秒)
- 正确识别:使用描述性的User-Agent标头
- 超时处理:为无法访问的站点提供优雅的故障恢复
配置选项
通过环境变量配置提取行为:
SMART_EXTRACT_MAX_URLS=3 # Maximum URLs to extract (default: 3)
SMART_EXTRACT_MAX_CHARS_PER_URL=2000 # Character limit per webpage (default: 2000)
SMART_EXTRACT_MAX_TOTAL_CHARS=5000 # Total character limit (default: 5000)
SMART_EXTRACT_REQUEST_DELAY=1.0 # Delay between requests (default: 1.0s)性能和质量
- 上下文增加8倍:提供的内容比基本搜索片段多得多
- 成功率高:多方法提取确保可靠的内容检索
- 内存效率高:字符限制防止上下文溢出
- 快速处理:对于3个URL,通常需要3-5秒,并有礼貌的延迟
智能搜索功能是 自动启用 对于所有网络搜索,用户无需任何额外的配置或UI更改即可获得增强的内容提取。
模型提供程序和设置
- 支持的提供商:
ollama(本地),openai,anthropic,google(双子座),openrouter,groq,sambanova. - 打开设置模式(标题→ 设置)来添加/验证每个提供程序的API密钥。密钥通过轻量级请求进行验证(OpenAI使用小
max_tokens=16检查以避免假阴性)。 - 模型选择器按提供者显示模型。非Ollama型号仅在配置提供程序后出现。
- 提供程序模型命名/前缀(示例):
- 奥拉马: llama3.1 (无前缀)。 - OpenAI: openai/gpt-5.4. - 人类学: anthropic/claude-haiku-4-5. - 谷歌 gemini/gemini-flash-latest. - OpenRouter: openrouter/meta-llama/llama-3.3-70b-instruct. - Groq: groq/llama-3.1-8b-instant. - SambaNova: sambanova/Meta-Llama-3.1-8B-Instruct.
API端点:
- 列出提供者:
GET /api/providers - 提供商模型:
GET /api/providers/models - 提供商状态:
GET /api/providers/{provider_id}/status - 保存API密钥:
POST /api/providers/settings { provider, api_key } - 删除API密钥:
DELETE /api/providers/{provider_id}/settings - 验证(未返回密钥):
GET /api/providers/{provider_id}/validate - 所有型号(带供应商的平面列表):
GET /api/models
笔记:
- Codex MCP需要一个有效的OpenAI API密钥。如果未配置OpenAI,UI将打开Codex工具。
提供程序API密钥的加密(必需):
- 后端使用通过
SETTINGS_ENCRYPTION_KEY在backend/.env. - 生成一次,并在重启后保持稳定;更改它会使以前保存的密钥无效(您需要重新输入它们)。
- 生成并设置:
- pip install cryptography - python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" - 以...为背景 backend/.env: SETTINGS_ENCRYPTION_KEY=
Codex工作区(MCP)
代码生成在具有可审查清单和工件的隔离工作区中运行。
- UI:点击✨ 工具选择器,然后选择“Codex(工作区)”。输入指令(例如,“脚手架Vite+React应用程序”)。助手插入一个内联
codex_run显示实时状态和完成时的简短摘要的消息。 - 后端:FastMCP服务器(
backend/server_codex.py)公开了用于创建工作区、启动/轮询/取消运行、读取文件和获取清单的工具。运行是异步的,内存中有一个小的作业跟踪器。工件写入codex_artifacts/在工作空间下面。 - 安全态势:每次运行专用工作区,工作区下隔离的HOME,符号链接拒绝,实路径包含检查,可选的运行后输出策略(允许的扩展名、点文件分配列表、最大文件/字节数、二进制启发式)。为了获得最强的隔离,请在没有网络的容器/VM中运行服务。
- 要求:PATH上提供Codex CLI(或设置
CODEX_BIN)以及一个有效的OPENAI_API_KEY(通过Settings或env)-密钥仅注入Codex子进程。
终点:
- 创建工作区:
POST /api/codex/workspaces { name_hint, keep } - 开始运行(如果缺少,则自动创建工作区):
POST /api/codex/runs { workspace_id, instruction, model?, timeout_seconds? } - 获取运行状态:
GET /api/codex/runs/{run_id} - 取消运行:
POST /api/codex/runs/{run_id}/cancel - 获取清单:
GET /api/codex/workspaces/{workspace_id}/manifest - 读取文件:
GET /api/codex/workspaces/{workspace_id}/file?relative_path=…
环境(可选,显示默认值):
CODEX_BIN=codex,CODEX_WORKSPACES_DIR=./.codex_workspaces,CODEX_MAX_CONCURRENCY=1,CODEX_RUN_TTL_HOURS=48CODEX_MAX_PROMPT_CHARS=20000,CODEX_MAX_STDOUT_CHARS=200000,CODEX_MAX_STDERR_CHARS=50000CODEX_MAX_OUTPUT_FILES=500,CODEX_MAX_OUTPUT_TOTAL_BYTES=20971520,CODEX_DEBUG=false
前端用户体验说明:
- Codex现在以聊天消息的形式内联运行(
type='codex_run')这在记录中仍然存在。旧的浮动运行卡已被移除。 - 侧栏显示Codex MCP状态;仅当服务准备就绪且OpenAI已配置时,它才会显示为绿色。
- 存在一个文件查看器模式,供将来通过清单/文件API使用;它不是自动触发的,以避免死链接。
Canva设计工具(MCP)
在不离开Osoba的情况下创建、浏览、导入、调整大小和导出Canva设计。Canva MCP服务器连接到 Canva Connect API 使用OAuth 2.0访问令牌。
设置
- 首选 canva.com/developers 并登录(需要MFA)。
- 导航至 您的集成 → 创建集成.
- 在...之下 范围,启用:
design:content(读写),design:meta(阅读),asset(读写)。对于自动填充,还启用brandtemplate:meta(阅读)和brandtemplate:content(阅读)。 - 在...之下 认证,添加重定向URL(例如。
http://127.0.0.1:3000/redirect). - 生成测试令牌:转到任何 API参考页 → 滚动到“试试看”→ click “生成访问令牌” → 完成浏览器内OAuth流程→ 复制令牌。
- 将令牌添加到
backend/.env:
CANVA_API_TOKEN=your_access_token_here注: 测试令牌将在4小时后过期。为了持久使用,您需要使用刷新令牌实现完整的OAuth 2.0授权代码流。
后端自动启动Canva服务以及所有其他MCP服务,不需要单独的进程。要禁用它而不删除令牌,请设置 DISABLED_MCP_SERVICES=canva_service 在 .env.
工具
| 工具 | 参数 | 功能 |
|---|---|---|
create_design | title, preset?, width?, height?, unit?, template_id? | 按指定尺寸创建新的空白Canva设计 |
list_designs | limit?, page_token? | 按页码列出帐户中的设计 |
get_design | design_id | 检索设计的元数据和编辑器URL |
get_design_pages | design_id | 获取多页设计的页面元数据 |
export_design | design_id, format?, pages? | 导出设计并返回下载URL |
upload_asset | name, url | 将图像/视频从公共URL上传到用户的Canva库 |
autofill_design | brand_template_id, data, title? | 通过在品牌模板中填充文本/图像数据来创建设计(企业) |
get_brand_template_dataset | brand_template_id | 在品牌模板(企业版)中发现可自动填充的字段 |
import_design | title, url, mime_type? | 从URL导入文件(PDF、PPTX、DOCX、PSD、AI、Keynote等)作为可编辑的Canva设计 |
resize_design | design_id, width, height | 创建现有设计的调整大小的副本(Pro/Enterprise) |
支持的预设 (为 create_design):
| 预设 | 尺寸 | 用例 |
|---|---|---|
presentation | 原生Canva类型 | 幻灯片 |
instagram_post | 1080×1080 | 方柱 |
instagram_story | 1080×1920 | 故事/卷轴 |
facebook_post | 1200×630 | 馈电柱 |
facebook_cover | 820×312 | 封面 |
twitter_post | 1200×675 | 推特/X帖子 |
linkedin_banner | 1584×396 | 个人资料横幅 |
youtube_thumbnail | 1280×720 | 视频缩略图 |
a4 | 595×842 | 文件 |
us_letter | 612×792 | 美国信件文件 |
custom | 用户定义 | 需要 width 和 height 以像素为单位 |
导出格式: png (默认), jpg, pdf, pptx, svg, mp4, gif
在聊天室
从中选择Canva工具✨ 工具选择器,然后自然地问:
- *“列出我最近的Canva设计”*
- *“创建一个名为“人工智能的未来”的YouTube缩略图”*
- *“将设计DABcd1234导出为PDF”*
- *“将此图像上传到我的Canva库:https://example.com/photo.jpg"*
- *“获取DABcd1234设计页面”*
- *“将此演示文稿导入Canva:https://example.com/deck.pptx"*
AI选择合适的工具,执行它,并返回结果(编辑器URL、下载链接、资产ID等)。
在任务中
Canva工具可供任务规划器用于多步骤自主工作流。规划者识别这些工具别名: design, canva_create, export, canva_export, canva_list, canva_get, canva_upload, canva_autofill, canva_import, canva_resize, canva_pages.
任务目标示例:
- *“研究2025年的五大人工智能工具,并创建一个总结研究结果的领英横幅”*
- *为产品发布创建演示幻灯片结构,然后将其导出为PDF*
- *列出我所有的Canva设计,查找最新的演示文稿,并将其导出为PNG格式*
规划者将链 web_search → llm.generate → create_design → export_design 自动执行步骤,使用每个步骤的输出作为下一个步骤的输入。
文件
| 文件 | 目的 |
|---|---|
backend/server_canva.py | FastMCP服务器——10个MCP工具 |
backend/utils/canva_client.py | 异步httpx客户端、Pydantic模型、轮询逻辑 |
backend/tests/test_canva_mcp.py | 77个单元测试(不需要API令牌) |
Figma设计工具(MCP)
在不离开Osoba的情况下阅读、检查和导出Figma设计。Figma MCP服务器连接到 Figma REST API 使用您的个人访问令牌。
设置
将您的令牌添加到 backend/.env:
FIGMA_ACCESS_TOKEN=your_figma_personal_access_token_here从获取令牌 Figma→ 账户设置→ 安全→ 个人访问令牌后端自动启动Figma服务以及所有其他MCP服务,无需单独的进程。要禁用它而不删除令牌,请设置 DISABLED_MCP_SERVICES=figma_service 在 .env.
所有工具的文件密钥是Figma文件URL中的字母数字ID: figma.com/file/{file_key}/file-name
工具
| 工具 | 参数 | 功能 |
|---|---|---|
figma_get_file | file_key, depth? | 获取完整的文件结构和元数据(节点树、组件、样式) |
figma_get_nodes | file_key, node_ids, depth? | 通过逗号分隔的ID获取特定节点(例如。 "1:2,3:4") |
figma_export_images | file_key, node_ids, format?, scale? | 将节点导出为图像,返回临时下载URL |
figma_get_comments | file_key | 列出文件上的所有注释 |
figma_post_comment | file_key, message, node_id?, parent_id? | 发表评论,可选择锚定到节点或回复另一条评论 |
figma_get_design_system | file_key | 提取颜色标记、排版、间距标记和组件目录 |
导出格式 (为 figma_export_images): png (默认), jpg, svg, pdf
规模 (为 figma_export_images): 0.01–4.0,默认值 1.0
备注:导出由返回的URL figma_export_images 是临时的(由Figma的CDN托管)。立即下载它们——它们将在几个小时内过期。速率限制
Figma免费版允许 1000个请求/小时。客户端使用滑动窗口令牌桶自动保持在此限制内。如果您有更高限额的付费计划,请通过env vars进行覆盖:
FIGMA_RATE_LIMIT_REQUESTS=5000 # requests per window (default: 1000)
FIGMA_RATE_LIMIT_WINDOW=3600 # window in seconds (default: 3600)在聊天室
在Figma服务运行时,自然地问AI:
- *“获取Figma文件ABC123的结构”*
- *“将ABC123文件中的英雄帧(节点1:23)导出为PNG格式”*
- *“对Figma文件ABC123有什么意见?”*
- *“从我们的品牌文件XYZ789中提取设计系统令牌”*
- *“在文件ABC123中的节点5:10上发表评论:'请在此处增加对比度'”*
AI调用适当的工具,并直接在聊天中返回结果——节点树、导出URL、评论线程或令牌列表。
在任务中
Figma工具可供任务规划器用于多步骤自主工作流。规划者识别这些工具别名: figma_file, figma_nodes, figma_images, figma_comments, figma_comment, figma_design_system, figma_tokens.
任务目标示例:
- *获取Figma文件ABC123,提取所有颜色和排版标记,然后生成CSS变量文件*
- *“将Figma文件ABC123中的所有帧导出为PNG图像,并列出其下载URL”*
- *“查看Figma文件ABC123中的设计系统标记,并编写调色板摘要”*
规划者将链 figma_get_design_system → llm.generate 自动生成所请求的可交付成果的步骤。
文件
| 文件 | 目的 |
|---|---|
backend/server_figma.py | FastMCP服务器——6个MCP工具 |
backend/utils/figma_client.py | 异步httpx客户端、Pydantic模型、速率限制器 |
backend/tests/test_figma_mcp.py | 54个单元测试(不需要API令牌) |
Poe人工智能模型(MCP)
无需离开Osoba,即可在Poe平台上访问数百个人工智能模型,包括文本、图像、视频和音频生成。Poe MCP服务器连接到 Poe OpenAI兼容API 使用API密钥。
设置
- 首选 poe.com/api/keys (需要Poe订阅)。
- 生成API密钥。
- 添加到
backend/.env:
POE_API_KEY=your_poe_api_key_here后端自动启动Poe服务以及所有其他MCP服务,不需要单独的进程。要在不移除密钥的情况下禁用它,请设置 DISABLED_MCP_SERVICES=poe_service 在 .env.
工具
| 工具 | 参数 | 功能 |
|---|---|---|
poe_list_models | input_modality?, output_modality?, search?, limit? | 列出可用的Poe模型,可按模态(文本/图像/视频/音频)或名称进行筛选 |
poe_chat | prompt, model?, system?, temperature?, max_tokens?, image_urls? | 与任何Poe模特进行文字聊天(默认:Claude-Connect-4-6) |
poe_generate_image | prompt, model?, system?, aspect_ratio?, download_media? | 生成图像并返回URL+可选的base64数据 |
poe_generate_video | prompt, model, system?, download_media? | 生成视频(需要模型--使用 poe_list_models 找到一个) |
poe_generate_audio | prompt, model, system?, download_media? | 生成音频/TTS/音乐(需要型号) |
宽高比 (为 poe_generate_image): 9:16 (肖像,例如故事/卷轴), 16:9 (横向,例如YouTube缩略图)。省略模型的默认值(通常为1:1的正方形)。
默认图像模型: gpt-image-1.5 (OpenAI的最新成果)。其他受欢迎的选项包括 Flux-Pro-1.1, DALL-E-3, SD3.5-Large,以及更多--使用 poe_list_models(output_modality="image") 以发现所有可用的型号。
在聊天室
从中选择Poe工具✨ 工具选择器,然后自然地问:
- *“列出Poe上可用的图像生成模型”*
- *“生成日落时未来主义城市景观的16:9景观图像”*
- *“使用Flux Pro为咖啡店创建极简主义标志”*
- *“生成9:16东京霓虹灯小巷的肖像图像”*
- *“与GPT-5.4讨论量子计算”*
AI选择合适的工具,执行它,并用结果(图像URL、文本响应等)进行响应。
在任务中
Poe工具可供任务规划器用于多步骤自主工作流。规划者识别这些工具别名: poe, poe_models, poe_image, poe_video, poe_audio, poe_generate.
任务目标示例:
- *“生成一张16:9的山脉日落景观图像,并将其上传到我的Canva库”*
- *“研究2025年的顶级人工智能趋势,然后生成一张图片来说明每种趋势”*
- *“列出Poe上的所有图像模型,然后用三个不同的模型生成相同的提示进行比较”*
计划者可以连锁 poe_generate_image → upload_asset (坎瓦)→ autofill_design 从生成的图像创建完整设计工作流程的步骤。
文件
| 文件 | 目的 |
|---|---|
backend/server_poe.py | FastMCP服务器——5个MCP工具 |
backend/utils/poe_client.py | 异步httpx客户端,Pydantic模型,媒体下载 |
backend/tests/test_poe_mcp.py | 87个单元测试(不需要API密钥) |
运作原理
- 这 用户 与 反应前端.
- 这 前端 向发送请求(聊天消息、对话管理) FastAPI后端 API
- 对于聊天消息 后端 (
main.py)处理请求:
- 它可以通过提供者层与LLM交互(默认情况下为Ollama;在设置中配置其他层)。 - 如果用户通过UI启用工具(例如web搜索、SQL查询): - 后端准备必要的上下文(例如,获取SQL的数据库模式)。 - 它可能会提示Ollama模型生成特定于工具的输入(例如SQL查询或HubSpot JSON有效载荷)。 - 然后,后端与相关 MCP服务模块 (作为子流程管理:搜索、SQL、YouTube、HubSpot、Python、Codex)。 - MCP服务模块执行该工具(例如,调用Serper.dev API,查询MySQL)。 - MCP服务模块的结果返回给后端。 - 后端可能会用工具的结果重新提示Ollama,以生成最终的知情回复。
- 这 后端 存储/检索对话历史记录 MongoDB.
- 最终响应被流式传输回 前端 并显示给用户。
AI上下文总结
- 目的:固定对话为系统提示提供简短的LLM生成的摘要,以便未来的聊天可以参考之前的工作,而无需发送完整的成绩单。
- 世代:
- 按需、用户发起(非启发式)。如果你锁定了一个没有摘要的聊天,应用程序会要求先生成一个摘要,然后锁定,直到完成。 - 后端最多可组装约1000个单词的最近对话(HTML剥离),并提示所选模型生成一个不超过约750个字符的单段摘要。 - 重复使用存储的摘要;不进行自动再生。
- 限制与执行:
- 硬上限为5次固定对话。后端执行上限,UI禁用固定在限制上。 - 固定状态显示在UI中(例如,“X/5固定”)。
- 型号选择:
- 在“设置”下选择型号→ 摘要→ 选择型号。这与聊天使用相同的提供者模型目录。 - 如果没有为摘要配置模型,则生成将失败,直到您选择一个。
- 上下文组装:
- 只有存储的摘要才会包含在系统上下文提示中;不使用启发式/自动摘要。 - 上下文服务在配置文件提示旁边为摘要预留了空间。
- 维护:
- 存在管理实用程序来批量删除摘要和/或取消所有聊天记录的固定,以便重新开始。在生产中小心使用。
API(参考):
- 摘要设置:
GET /api/summaries/settings,POST /api/summaries/settings { model_name } - 生成摘要:
POST /api/summaries/generate { conversation_id } - 固定:
POST /api/user-context/pin-conversation { conversation_id, pinned }(上限强制执行) - Pin统计数据:
GET /api/user-context/pin-stats→{ count, max }
计划任务(时区和一次性)
- 从“任务”面板创建计划→ “计划”选项卡。
- 两种模式:
- 重复:cron表达式+时区。下一次运行是根据所选时区(夏令时感知)的本地挂钟计算的,并存储为UTC。 - 一次性:设置日期/时间和时区;auto-在第一次运行后禁用。
- 您可以“立即运行”,并可选择每次运行都覆盖模型。
看 TASKS_USER_GUIDE.md 了解全部细节。
定制
- 模型提供商:使用标题Model Picker选择提供者/模型。在“设置”中配置提供程序API密钥;非Ollama型号仅在配置后显示。
- Ollama模型:从可用的本地型号中选择(或设置
DEFAULT_OLLAMA_MODEL).非常适合编码的模型可能更适合SQL(例如codestral)。 - 搜索结果:调整中处理的搜索结果数量
backend/main.py. - 数据库架构上下文:修改
MAX_TABLES_FOR_SCHEMA_CONTEXT在backend/main.py以控制向LLM发送多少表的模式。 - 提示工程:修改发送给Ollama的系统提示
backend/main.py定制响应和SQL生成。 - 样式:通过修改React组件中的CSS文件或样式来定制前端外观
frontend/src/.
设置和使用(快速入门)
- 后端:
cd backend && uvicorn main:app --reload --port 8000 - 前端:
cd frontend && npm install && npm run dev - 在应用程序中:
- 选择型号(页眉→ 模型选择器)。 - 可选:打开“设置”以添加OpenAI/其他提供程序密钥。 - 使用✨ 工具选择器,用于运行智能网络搜索、数据库、YouTube、Python、HubSpot、Poe或Codex。 - Canva:设置 CANVA_API_TOKEN 在 backend/.env 并要求AI创建、导入或导出设计。 - Figma:设置 FIGMA_ACCESS_TOKEN 在 backend/.env 并要求AI读取文件(例如,“获取Figma文件ABC123的结构”)。 - 对于Poe:设置 POE_API_KEY 在 backend/.env 并要求AI生成图像或与前沿模型聊天。 - 任务面板支持临时任务和计划任务。
前提条件:
- Ollama运行本地模型(例如。,
ollama pull llama3.1). - MongoDB可达(用于历史/任务)。
- 对于Canva:Canva Connect API访问令牌(请参阅 安装说明).
- Figma:来自Figma帐户设置的个人访问令牌→ 安全→ 个人访问令牌。
- 对于Poe:Poe的API密钥 poe.com/api/keys (需要Poe订阅)。
- 对于Codex:在开始运行之前,安装Codex CLI并配置OpenAI API密钥(通过设置或env)。
更新
在不影响现有数据的情况下更新到最新版本(MongoDB、ChromaDB、, .env):
# 1. Pull latest code
git pull origin main
# 2. Update backend dependencies
cd backend
pip install -r requirements.txt
# 3. Rebuild frontend
cd ../frontend
npm install
npm run build
# 4. Restart the backend
# Manually:
cd ../backend
uvicorn main:app --host 127.0.0.1 --port 8000
# macOS Launch Agent:
launchctl stop com.osoba.backend && launchctl start com.osoba.backend
# Linux systemd:
sudo systemctl restart osoba-backend您的数据是安全的MongoDB(对话、任务、文档、设置)和ChromaDB(语义内存、KB嵌入)是不受代码更新影响的外部服务。你的 .env 文件被gitignored,永远不会被覆盖。
贡献
欢迎投稿!请随时提交拉取请求。
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
