Skip to content

nuro-rust/nuro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nuro logo

Nuro - A Rust-Native AI Agent SDK

Nuro 是一个面向 Rust 开发者的 AI Agent SDK,强调事件驱动与图编排优先的执行模型,兼顾性能、安全与可组合性。它适合从命令行 Agent 到多 Agent 系统的研发与落地。

你能用 Nuro 做什么

  • AgentLoop 构建可控的 THINK -> ACT -> OBSERVE 执行循环
  • StateGraph 组织复杂流程、条件路由与可恢复状态
  • ToolToolBox 形式接入外部能力
  • 通过 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

集成指南

方式一:以 git 依赖引入

在你的项目 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" }

方式二:作为 workspace 子模块开发

适合需要同时改 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"] }

Demo 速写

最小 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/:状态图引擎 StateGraph
  • crates/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

OpenAI 支持

默认使用 MockLlmProvider,不会访问在线服务。若需接入 OpenAI:

cargo build --features openai
export OPENAI_API_KEY=your_key

反馈与贡献

欢迎 Issue 与 PR。请在提交前确保示例可运行,接口变更有对应说明。

About

Rust Agent SDK

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages