奥查探员
Agent Orcha是一个用于构建、管理和扩展多代理AI系统的声明性框架。在YAML中定义代理、工作流和知识存储——Orcha处理其余部分。在裸机上本地运行以获得最大性能,在云提供商的Docker中运行,或下载适用于macOS、Windows和Linux的本地桌面应用程序。
# Native app (macOS, Windows, Linux) — download from Releases
# https://github.com/ddalcu/agent-orcha/releases
# With npx (local inference — uses your GPU / Apple Silicon directly)
npx agent-orcha
# With Docker (cloud LLM providers)
docker run -p 3333:3333 -v ./my-workspace:/data ddalcu/agent-orcha为什么是奥查探员?
- 声明性AI:在清晰、版本控制的YAML文件中定义代理、工作流和基础架构
- P2P代理和LLM共享:通过加密的对等网络在您的团队或组织中共享代理和LLM引擎-不暴露API密钥,不需要中央服务器,具有逐人速率限制和专用网络密钥
- 本机桌面应用程序:从以下网址下载适用于macOS(.app)、Windows(.exe)和Linux的预构建二进制文件 --系统托盘、自动更新、零设置
- 模型不可知:在OpenAI、Gemini、Anthropic或本地LLM(Omni-native、Ollama、LM Studio)之间无缝交换,无需重写逻辑
- 出版代理商:通过独立聊天页面共享代理
/chat/具有可选的每个代理密码保护 - 通用工具:利用 模型上下文协议(MCP) 将代理连接到任何外部服务、API或数据库
- 知识库:内置基于SQLite的矢量存储,可选 直接映射 面向知识图谱的一级公民语义搜索与图谱分析
- 强大的工作流引擎:通过并行执行、条件逻辑和状态管理来编排复杂的多代理序列——或使用 交互式推理与行动 用于具有多回合连续性的自主提示驱动工作流
- 浏览器沙盒:带有CDP控件、Xvfb和noVNC的完整Chromium浏览器,以及一个实验性的 视觉浏览器 用于视觉LLM的像素坐标控制
- 对话记忆:内置基于会话的内存,用于多回合对话,具有自动消息管理和TTL清理功能
- 安全:身份验证端点的速率限制、SSRF保护、SQL注入强化、沙盒执行
- 可扩展功能:插入简单的JavaScript函数,以零样板扩展代理功能
奥查特工工作室
内置网络仪表板 http://localhost:3333 具有代理测试、知识浏览、工作流执行、实时监控以及带有可视化代理编辑器的浏览器内IDE。
- 代理 --浏览、调用、流式响应、管理会话
- 知识 --浏览、搜索、查看实体和图形结构
- 主控程序 --浏览服务器、查看和调用工具
- 技能 --浏览和检查技能
- 监视器 --实时LLM呼叫日志、P2P任务跟踪、ReAct循环指标和活动提要
- 集成开发环境 --具有语法高亮显示、热重新加载和 视觉代理作曲家 为了
.agent.yaml文件 - 本地法学硕士 --下载、激活和管理本地模型(Omni native、Ollama、LM Studio)
- 对等网络 --浏览对等体、测试远程代理和LLM、配置共享和速率限制
- 组织 --创建和管理具有票、例程和CEO代理的自主AI组织
建筑
知识层
用法
Agent Orcha可以以多种方式使用:
- 本机桌面应用程序 --下载自 (macOS.app、Windows.exe、Linux二进制文件),带系统托盘集成
- CLI工具 —
npx agent-orcha启动服务器(第一次运行时自动脚手架工作区) - Docker镜像 --官方图片: ddalcu/代理orcha
- 后端API服务器 -用于现有前端的REST API
要求: Node.js>=24.0.0(用于CLI/库)或Docker
快速开始
原生应用程序(推荐)
从以下网址下载适用于您平台的最新版本 .启动应用程序——它会自动构建一个工作区 ~/.orcha/workspace 带有示例代理和配置。系统托盘图标可快速访问Studio UI。
命令行界面
直接在您的机器上运行,以利用本地型号(Omni native、Ollama、LM Studio)的裸机GPU/Apple Silicon性能。
# Start the server (auto-scaffolds ~/.orcha/workspace on first run)
npx agent-orcha
# Or point to a custom workspace
WORKSPACE=./my-project npx agent-orcha码头工人
最好使用云LLM提供商(OpenAI、Anthropic、Gemini)或连接到主机上运行的LLM服务器。Docker不能直接访问主机GPU,因此容器内的本地推理引擎将不可用。
docker run -p 3333:3333 -e AUTH_PASSWORD=mypass -v ./my-project:/data ddalcu/agent-orcha一个空的工作空间会自动用示例代理、工作流和配置搭建起来。
配置
型号配置(models.yaml)
所有型号配置均已安装 models.yaml (YAML格式),包含以下部分: llm (聊天模型), embeddings, image, tts, video每个部分都有指向提供者+模型组合的命名配置。代理和知识库按名称引用配置。这 default key是指向活动配置的指针。
# models.yaml
llm:
default: omni
omni:
provider: omni
model: gemma-4-E2B-it-IQ4_NL
contextSize: 32768
ollama:
provider: local
engine: ollama
baseUrl: http://localhost:11434/v1
model: qwen3.5:latest
reasoningBudget: 0
anthropic:
provider: anthropic
apiKey: ${ANTHROPIC_API_KEY}
model: claude-sonnet-4-6
embeddings:
default: omni
omni:
provider: omni
model: nomic-embed-text-v1.5.Q4_K_M
image:
default: flux
flux:
provider: omni
model: FLUX.2-Klein
tts:
default: qwen-tts
qwen-tts:
provider: omni
model: Qwen3-TTSdefault--指针字符串(例如。,"omni")选择活动配置provider—omni,openai,anthropic,或geminicontextSize--上下文窗口大小(本地模型)reasoningBudget/thinkingBudget--用于推理的令牌预算(0表示禁用)share--在P2P网络上共享此模型(true)image,tts,video--图像生成、文本到语音和视频模型部分(结构与llm)${ENV_VAR}--环境变量替换(适用于所有配置文件)
环境变量
PORT=3333 # Server port
HOST=0.0.0.0 # Server host (SEA default: 127.0.0.1)
WORKSPACE=/path/to/project # Workspace directory (default: ~/.orcha/workspace)
AUTH_PASSWORD=your-secret-password # Password auth for all API routes and Studio
CORS_ORIGIN=https://your-frontend.com # Cross-origin policy (default: same-origin)
LOG_LEVEL=debug # Pino log level (default: info)
EXPERIMENTAL_VISION=false # Enable vision browser tools
BROWSER_SANDBOX=true # Enable browser sandbox (Docker)
BROWSER_VERBOSE=false # Show Chromium logs
P2P_ENABLED=false # Disable P2P swarm network (enabled by default)
P2P_PEER_NAME=my-peer # Display name on the P2P network (default: hostname)
P2P_NETWORK_KEY=agent-orcha-default # Shared key for peer discovery (configurable in UI)
P2P_SHARE_LLMS=true # Share all active LLM models on P2P (overrides per-model flag)
P2P_RATE_LIMIT=60 # Max incoming P2P requests per minute (0 = unlimited)所有配置文件(.yaml, .json, .env)支持 ${ENV_VAR} 替代秘密和环境特定值。
代理
代理是在YAML中定义的由AI驱动的单元 agents/ 目录。
# agents/researcher.agent.yaml
name: researcher
description: Researches topics using web fetch and knowledge search
version: "1.0.0"
model:
llm: default
temperature: 0.5
prompt:
system: |
You are a thorough researcher. Search knowledge bases,
fetch web information, and synthesize findings.
inputVariables:
- topic
- context
tools:
- mcp:fetch
- knowledge:transcripts
output:
format: text
maxIterations: 50 # Override default iteration limit (optional)
memory: true # Enable persistent memory (optional)
skills: # Skills to attach (optional)
- skill-name
publish: true # Standalone chat at /chat/researcher (optional)
p2p: # P2P network config (optional)
share: true # Share this agent to peers
leverage: local-first # P2P model leverage mode (see below)对话记忆
通过a sessionId 为了在交互中保持上下文:
const result = await orchestrator.runAgent('chatbot', { message: 'My name is Alice' }, 'session-123');
const result2 = await orchestrator.runAgent('chatbot', { message: 'What is my name?' }, 'session-123');结构化输出
output:
format: structured
schema:
type: object
properties:
sentiment:
type: string
enum: [positive, negative, neutral]
confidence:
type: number
required: [sentiment, confidence]工作流
工作流协调多个代理。两种类型: 基于步骤 和 交互式推理与行动.
基于步骤
具有明确步骤定义的顺序/并行代理编排。
name: research-paper
description: Research a topic and write a paper
type: steps
input:
schema:
topic:
type: string
required: true
steps:
- id: research
agent: researcher
input:
topic: "{{input.topic}}"
- id: write
agent: writer
input:
research: "{{steps.research.output}}"
output:
paper: "{{steps.write.output}}"交互式推理与行动
自主、快速驱动的工作流程,支持多回合对话。代理决定调用哪些工具和代理。完成后,线程状态将保留以供后续问题使用。
name: react-research
type: react
input:
schema:
topic:
type: string
required: true
prompt:
system: |
You are a research assistant with access to tools and agents.
Identify all tools you need, call them in parallel, then synthesize results.
goal: "Research and analyze: {{input.topic}}"
graph:
model: default
executionMode: single-turn # or: react (multi-round)
tools:
mode: all
sources: [mcp, knowledge, function, builtin]
agents:
mode: all
maxIterations: 10
chatOutputFormat: text # Controls chat UI rendering (text or markdown)
sampleQuestions: # Example prompts shown in Studio UI
- "Research quantum computing"
- "Analyze market trends in AI"
output:
analysis: "{{state.messages[-1].content}}"P2P网络
使用加密的对等群网络在机器之间共享代理和LLM引擎,该网络由 超温没有中央服务器,没有云依赖性——对等体直接使用共享网络密钥相互发现。P2P默认启用;集 P2P_ENABLED=false 禁用。
所有通信均通过Noise协议握手进行端到端加密。API密钥、机密或模型权重都不会传输,只有推理请求和响应会通过连线传输。每个同行的费率限制可以防止滥用。
这 P2P选项卡 Studio中提供了一个设置面板,用于启用/禁用P2P、更改计算机名称、设置专用网络密钥、配置速率限制和查看共享内容。
共享代理
添加 p2p: true 对于任何代理YAML:
name: my-agent
p2p: true共享LLM引擎
添加 share: true 模型在 models.yaml,或在LLM选项卡中的每个提供程序上使用P2P共享切换。仅适用于具有以下功能的活动模型 share: true 共享:
# models.yaml
llm:
omni:
provider: omni
model: gemma-4-E2B-it-IQ4_NL
share: true # Share on P2P network没有共享API密钥或机密,只有模型名称和提供程序。
使用远程资源
有三种方法可以使用远程P2P资源:
- 直接LLM聊天(P2P选项卡) --从P2P选项卡中选择远程对等体的LLM,并直接与其聊天。纯LLM推理,不涉及代理或工具。
- 远程代理调用(P2P选项卡) --调用对等体的共享代理。代理完全在主机上运行——他们的LLM、他们的工具、他们的知识库。您将收到流式输出。
- 具有远程LLM的本地代理 --使用配置您的代理
model: "p2p"(自动选择)或model: "p2p:model-name"。代理使用您的工具、反应循环、内存和知识存储在本地运行,而只有LLM推理发生在远程对等端。完全支持工具调用——远程LLM生成tool_calls,您的本地代理执行它们,并通过网络反馈结果。
P2P模型杠杆
通过以下方式控制代理如何使用远程对等模型执行图像、TTS和视频任务 p2p.leverage 字段:
p2p:
leverage: local-first # Try local, fall back to P2P peers (default)
leverage: remote-first # Try P2P peers first, fall back to local
leverage: remote-only # Only use P2P peers, skip local entirely| 模式 | 行为 |
|---|---|
false | 此代理禁用P2P(默认) |
local-first | 使用当地模型;如果本地失败或不可用,则回退到P2P |
remote-first | 首先尝试P2P对等体执行模型任务(图像、TTS);如果没有同行响应,则退回本地 |
remote-only | 仅将P2P对等体用于模型任务——完全跳过本地模型 |
这 leverage 模式适用于 模型工具 (图像生成、TTS、视频)。对于显式P2P LLM聊天路由,请使用 model: p2p 或 model: p2p:model-name.
负载平衡
当多个对等体共享同一模型时,Agent Orcha会使用 负载最小 选择策略:
- 客户端跟踪 --每个节点跟踪它向每个对等体发送了多少正在进行的请求。新请求被路由到未处理请求最少的对等端。
- 对等报告负载 --对等方通过目录更新来广播他们当前的任务负载。当对等体开始或完成处理任务时,它会广播其更新的负载,以便其他节点可以将其纳入他们的选择。
- 决胜 --当多个对等体具有相等的负载分数时,随机选择一个对等体以避免聚类。
这确保了请求在对等体之间均匀分布,而不需要中央协调器。
速率限制
默认情况下,传入的P2P请求的速率限制为每分钟60个请求。通过配置 P2P_RATE_LIMIT env-var或P2P选项卡UI。吃起来 0 无限制。
专用网络
默认情况下,所有实例都加入同一个公共网络。要创建专用网络,请设置 P2P_NETWORK_KEY 设置为自定义值(或在P2P选项卡中配置)。在加入之前,密钥是SHA-256散列的——只有具有相同密钥的对等体才能发现彼此。
组织
创建自主的人工智能管理组织。每个组织都是一个独立的工作区,有票、例程、组织结构图和一个按预定心跳运行的CEO代理。
CEO战略
自主管理的两种策略:
- 代理CEO --使用ORCHA代理(在YAML中定义)对工单进行分类、委派工作和审查输出
- 克劳德代码首席执行官 -直接使用Claude与ORCHA API工具自主管理组织
门票
完整生命周期: backlog → todo → in_progress → in_review → blocked → done。门票带有优先级、标签、代理分配和活动历史记录。
惯例
每个组织基于Cron的定期代理执行。安排代理自动运行,并跟踪完整的运行历史记录。
心跳
预定的首席执行官分流运行。首席执行官审查票板,将任务委派给团队成员,并跟踪进度——所有这些都在可配置的cron时间表上进行。
知识库
语义搜索和RAG的使用 SQLite+SQLite-vec --不需要外部矢量数据库。在中定义 knowledge/ 目录。
name: transcripts
description: Meeting transcripts
source:
type: directory
path: knowledge/sample-data
pattern: "*.txt"
loader:
type: pdf # Optional — defaults to html (web) or text (file/directory)
splitter:
type: character
chunkSize: 1000
chunkOverlap: 200
embedding: default
reindex:
schedule: "0 */6 * * *" # Cron expression for automatic periodic reindexing
search:
defaultK: 4
scoreThreshold: 0.2数据源
- 目录/文件 --具有glob模式的本地文件
- 数据库 --PostgreSQL/MySQL通过SQL查询
- 网络 --HTML抓取、JSON API(带
jsonPath对于嵌套数组),原始文本
装载机类型: text, pdf, csv, json, markdown, htmlThe loader 字段是可选的--默认为 html 对于网络源, text 用于文件/目录。Web资源也支持 jsonPath (点符号。, data.results)在解析之前从JSON响应中提取嵌套数组。
知识图谱(直接映射)
添加 graph.directMapping 从结构化数据构建实体图:
graph:
directMapping:
entities:
- type: Post
idColumn: id
nameColumn: title
properties: [title, slug, content]
- type: Author
idColumn: author_email
nameColumn: author_name
relationships:
- type: WROTE
source: Author
target: Post
sourceIdColumn: author_email
targetIdColumn: id带有实体的商店可以获得额外的图形工具: entity_lookup, traverse, graph_schema, sql.
函数
自定义JavaScript工具 functions/:
// functions/fibonacci.function.mjs
export default {
name: 'fibonacci',
description: 'Returns the nth Fibonacci number',
parameters: {
n: { type: 'number', description: 'The index (0-based, max 100)' },
},
execute: async ({ n }) => {
let prev = 0, curr = 1;
for (let i = 2; i ` |来自MCP服务器的外部工具|
| `knowledge:` |知识库的语义搜索|
| `function:` |自定义JavaScript函数|
| `builtin:` |框架工具(`ask_user`, `memory_save`, `canvas_write`, `canvas_append`) |
| `sandbox:exec` |沙盒VM中的JavaScript执行|
| `sandbox:shell` |Shell命令(非root沙盒用户)|
| `sandbox:web_fetch` |具有SSRF保护的URL获取|
| `sandbox:web_search` |网络搜索|
| `sandbox:browser_*` |基于CDP的Chromium控件(导航、观察、单击、键入、截图、评估)|
| `sandbox:vision_*` |视觉LLM的像素坐标浏览器控件(导航、单击、键入、滚动、按键、拖动、截图)|
| `sandbox:file_*` |沙盒文件工具(读、写、编辑、插入、替换行)的范围为 `/tmp` |
| `org:` |组织工具(list_tickets、update_ticket、assign_agent等)|
| `workspace:read/write/delete/list/list_resources/diagnostics` |工作区文件和资源访问|
### 视觉浏览器(实验)
视觉LLM的像素坐标浏览器控件。需要 `EXPERIMENTAL_VISION=true` 要启用的环境变量:
|工具|说明|
|------|-------------|
| `sandbox_vision_screenshot` |捕获JPEG屏幕截图|
| `sandbox_vision_navigate` |导航到URL|
| `sandbox_vision_click` |在x、y坐标处单击|
| `sandbox_vision_type` |键入文本|
| `sandbox_vision_scroll` |滚动页面|
| `sandbox_vision_key` |按键盘键|
| `sandbox_vision_drag` |在坐标之间拖动|
每个动作工具都会自动捕获一个屏幕截图,将屏幕截图推断动作循环切割为每个动作一个调用。
## API
API完整文档可在 [agentorcha.com](https://agentorcha.com).关键终点组:
|组|基本路径|描述|
|-------|-----------|-------------|
|健康| `GET /health` |健康检查|
|认证| `/api/auth/*` |登录、注销、会话检查|
|代理商| `/api/agents/*` |列表、调用、流、会话管理|
|聊天| `/api/chat/*` |已发布的代理独立聊天|
|工作流程| `/api/workflows/*` |列表、运行、流式传输|
|知识| `/api/knowledge/*` |列表、搜索、刷新、图形实体/边|
LLM `/api/llm/*` |列表配置、聊天、流媒体|
|功能| `/api/functions/*` |列表,呼叫|
|MCP| `/api/mcp/*` |列出服务器、列出工具、调用工具|
|技能| `/api/skills/*` |列出、检查|
|任务| `/api/tasks/*` |提交、跟踪、取消|
|文件| `/api/files/*` |文件树,读,写|
|本地法学硕士| `/api/local-llm/*` |发动机管理、型号下载/激活|
|图表| `/api/graph/*` |多店铺图聚合|
|日志| `/api/logs/*` |实时日志流|
|P2P| `/api/p2p/*` |P2P网络状态、设置、配置、远程代理/LLM|
|组织机构| `/api/organizations/*` |组织、门票、日常活动、组织结构图、首席执行官跑步|
|VNC| `/api/vnc/*` |浏览器沙盒VNC状态|
## 目录结构
~/.orcha/workspace/ ├── agents/ # Agent definitions (YAML) ├── workflows/ # Workflow definitions (YAML) ├── knowledge/ # Knowledge store configs and data ├── functions/ # Custom function tools (JavaScript .mjs) ├── skills/ # Skill prompt files (Markdown) ├── models.yaml # Model and embedding configurations ├── mcp.json # MCP server configuration └── .env # Environment variables
## 常见问题解答
### 本地LLM在Linux上失败,“找不到CPU后端”
在最小的Linux安装中,llama cpp CPU后端需要 `libgomp` (GCC OpenMP运行时),默认情况下可能不会安装。安装时使用:
Debian / Ubuntu
sudo apt install libgomp1
Fedora / RHEL
sudo dnf install libgomp
Arch
sudo pacman -S gcc-libs
安装后,重新启动服务器。您可以通过以下方式验证修复:
ldd templates/.llama-server/linux-x64/libggml-cpu-x64.so | grep "not found"
如果没有打印任何内容,则满足所有依赖关系。
## 发展
npm run dev # Dev server with auto-reload (uses ~/.orcha/workspace) WORKSPACE=./templates npm run dev # Dev with local templates npm run build # Build npm start # Run build npm run lint # ESLint npm run typecheck # TypeScript type checking
## 许可证
麻省理工学院