Nuro 是一个面向 Rust 开发者的 AI Agent SDK,强调事件驱动与图编排优先的执行模型,兼顾性能、安全与可组合性。它适合从命令行 Agent 到多 Agent 系统的研发与落地。
- 用
AgentLoop构建可控的 THINK -> ACT -> OBSERVE 执行循环 - 用
StateGraph组织复杂流程、条件路由与可恢复状态 - 以
Tool与ToolBox形式接入外部能力 - 通过
nuro-server快速暴露 HTTP/SSE 接口 - 以 MCP/A2A 进行多 Agent 协作与发现
确保已安装 Rust 2024 Edition 和 Cargo。
git clone https://github.com/nuro-rust/nuro.git
cd nuro
cargo build最小示例:
cargo run -p simple_chatbot其他示例:
cargo run -p graph_demo
cargo run -p http_server
cargo run -p mcp_demo
cargo run -p a2a_demo在你的项目 Cargo.toml 中加入:
[dependencies]
nuro = { git = "https://github.com/nuro-rust/nuro.git" }如果只需要某个模块,也可以直接引入对应 crate,例如:
[dependencies]
nuro-runtime = { git = "https://github.com/nuro-rust/nuro.git" }
nuro-graph = { git = "https://github.com/nuro-rust/nuro.git" }适合需要同时改 SDK 源码与业务代码的场景:
git submodule add https://github.com/nuro-rust/nuro.git vendor/nuro然后在你的 workspace 中引用本地路径:
[dependencies]
nuro = { path = "vendor/nuro/nuro" }启用 OpenAI:
[dependencies]
nuro = { git = "https://github.com/nuro-rust/nuro.git", features = ["openai"] }最小 StateGraph 示例:
use anyhow::Result;
use nuro::prelude::*;
#[derive(Debug, Clone)]
struct DemoState {
text: String,
}
impl GraphStateTrait for DemoState {
type Update = DemoState;
fn apply_update(&mut self, update: Self::Update) {
if !update.text.is_empty() {
if !self.text.is_empty() {
self.text.push(' ');
}
self.text.push_str(&update.text);
}
}
}
#[tokio::main]
async fn main() -> Result<()> {
let graph = StateGraph::<DemoState>::new()
.add_node(
"start",
FnNode::new(|state: &DemoState, _ctx: &mut NodeContext| DemoState {
text: format!("{}[start]", state.text),
}),
)
.add_node(
"end",
FnNode::new(|state: &DemoState, _ctx: &mut NodeContext| DemoState {
text: format!("{} -> [end]", state.text),
}),
)
.set_entry_point("start")
.add_edge("start", "end")
.set_finish_point("end")
.compile()?;
let result = graph.invoke(DemoState { text: "demo".to_string() }).await?;
println!("{:?}", result);
Ok(())
}最小 AgentLoop 示例:
use anyhow::Result;
use nuro::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
let toolbox = ToolBox::new().with_tool(CalculatorTool::new());
let agent = AgentLoop::builder()
.llm(MockLlmProvider::new())
.system_prompt("You are a simple echo bot with a calculator tool.")
.toolbox(toolbox)
.build()?;
let mut ctx = AgentContext::new();
let output = agent
.run(AgentInput::text("hello".to_string()), &mut ctx)
.await?;
println!("{}", output.text().unwrap_or_else(|| "<no output>".to_string()));
Ok(())
}nuro/:根 crate,统一 API 入口crates/nuro-core/:基础类型与 Trait(Message,Event,Agent,Tool等)crates/nuro-runtime/:Agent 执行循环与事件流crates/nuro-graph/:状态图引擎StateGraphcrates/nuro-tools/:工具抽象与工具容器crates/nuro-llm/:LLM Provider 抽象与实现crates/nuro-memory/:对话记忆与存储crates/nuro-rag/:RAG 相关组件crates/nuro-mcp/:MCP 协议最小实现crates/nuro-a2a/:A2A 协议实现crates/nuro-server/:最小 HTTP Server 封装examples/:示例工程
- 架构设计文档:
docs/Nuro_—_Rust_Agent_SDK_技术架构设计文档.lark.md - 进阶用法与 OpenAI:
docs/QUICKSTART-ADVANCED.md
默认使用 MockLlmProvider,不会访问在线服务。若需接入 OpenAI:
cargo build --features openai
export OPENAI_API_KEY=your_key欢迎 Issue 与 PR。请在提交前确保示例可运行,接口变更有对应说明。
