StarryOS Agent 龙虾浅尝成功

StarryOS Agent 龙虾浅尝成功

hejiashenghejiasheng
15 次阅读
StarryOSAgentClaw
文章目录

介绍

本文档介绍一个 Agent 尝试项目 StarryClaw,目前开发的版本还是一个尝试版本。 目标是为了以后在辰龙机器人上运行一个智能体 Agent。

GitHub 地址

项目地址

bash
https://github.com/chenlongos/StarryClaw

开始实验

环境搭建

  • PC Ubuntu 24.04
  • qemu
  • 目标体系 RISC-V (辰龙机器人 SG2002)
  • 主机 IP: 192.168.1.8

安装 rustup

bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

rust 支持 RISC-V 编译

bash
# 以 riscv64 为例rustup target add riscv64gc-unknown-linux-musl

安装交叉编译器

bash
# 在合适的目录下载wget https://musl.cc/riscv64-linux-musl-cross.tgz# 解压tar zxf riscv64-linux-musl-cross.tgz

配置编译器环境

bash
export PATH=`pwd`/riscv64-linux-musl-cross/bin:$PATH

下载运行 StarryOS

bash
git clone --recursive https://github.com/Starry-OS/StarryOS.gitcd StarryOS

编译 RISCV64 版本

bash
make build                   # 默认 riscv64# 或make ARCH=riscv64 build      # 显式指定 riscv64

下载建立磁盘

bash
make img ARCH=riscv64

我的磁盘在 make/disk.img 位置

运行 StarryOS

bash
make run ARCH=riscv64

编译 StarryClaw 并添加到 StarryOS

bash
git clone https://github.com/chenlongos/StarryClawcd StarryClawcargo build --release --target riscv64gc-unknown-linux-musl

我使用的是免费的云 Ollama。

所以在 main.rs 里关于免费 Ollama 的配置:

bash
const DEFAULT_OLLAMA_BASE: &str = "http://192.168.1.8:11434/v1";const DEFAULT_OLLAMA_MODEL: &str = "kimi-k2.5:cloud";

这两行需要根据你的 Ollama 配置进行修改。ollama 免费配置方法

关于 Ollama 的免费云环境,请参考上面的文档。

注意修改共享IP

这样 qemu里的 StarryOS就可以访问 ollama 的主机ip了。

bash
OLLAMA_HOST=0.0.0.0:11434 ollama serve

获取 StarryClaw 二进制文件

bash
StarryClaw/target/riscv64gc-unknown-linux-musl/release/starryclaw

制作 disk.img

bash
cd StarryOSmkdir -p mnt sudo mount -o loop make/disk.img mntsudo cp ../StarryClaw/target/riscv64gc-unknown-linux-musl/release/starryclaw mnt/sudo umount mnt

运行

bash
make run

图片

图片

图片

为了让 StarryOS 支持 StarryClaw 的中文输入,需要修改代码

rust
+++ b/kernel/src/pseudofs/dev/tty/terminal/ldisc.rs@@ -145,7 +145,8 @@ impl<R: TtyRead, W: TtyWrite> InputReader<R, W> {                 continue;             } -            if ch.is_ascii_graphic() {+            // 空格、制表、可打印 ASCII、UTF-8 多字节(>=0x80)均应进入行缓冲(原仅 is_ascii_graphic 会丢掉中文与空格)+            if ch == b' ' || ch == b'\t' || ch.is_ascii_graphic() || ch >= 0x80 {                 self.line_buf.push(ch);                 continue;             }@@ -173,7 +174,9 @@ impl<R: TtyRead, W: TtyWrite> InputReader<R, W> {             b'\n' => self.writer.write(b"\n"),             b'\r' => self.writer.write(b"\r\n"),             ch if ch == term.special_char(VERASE) => self.writer.write(b"\x08 \x08"),-            ch if ch == b' ' || ch.is_ascii_graphic() => self.writer.write(&[ch]),+            ch if ch == b' ' || ch == b'\t' || ch.is_ascii_graphic() || ch >= 0x80 => {+                self.writer.write(&[ch]);+            }             ch if ch.is_ascii_control() && term.has_lflag(ECHOCTL) => {                 self.writer.write(&[b'^', (ch + 0x40)]);             }

评论区0

还没有评论,快来抢沙发吧~

登录 后可发表评论