codecamp

Ollama Pi

Pi 是极简主义的编码代理。它的核心只有四个工具——read、write、edit、bash,其他能力全部通过扩展系统按需加载。喜欢「只用我需要的」这种风格的话,Pi 会比功能全的代理更顺手。

版本基线 v0.40.12,官方 docs.ollama.com/integrations/pi。

一、快速启动

ollama launch pi

会按需安装 Pi、把 Ollama 配成 provider(含联网工具),然后进入交互会话。

只配置不启动:

ollama launch pi --config

指定模型:

ollama launch pi --model qwen3.5:cloud

二、四个核心工具

工具 作用
read 读文件
write 写文件
edit 改文件
bash 执行命令

其余能力靠扩展:按需加载的能力包通过 /skill:name 形式的命令调用。

三、安装扩展

从 npm 或 git 安装:

pi install npm:@foo/some-tools
pi install git:github.com/user/repo@v1

可用扩展包在 pi.dev/packages 浏览。

四、联网搜索

Pi 通过 @ollama/pi-web-search 包获得联网搜索和抓取能力。通过 Ollama 启动时,这个包的安装和更新自动完成。

手动安装:

pi install npm:@ollama/pi-web-search

五、自主实验:pi-autoresearch

pi-autoresearch 是一个很有代表性的扩展,把「自动实验循环」带给 Pi。思路来自 Karpathy 的 autoresearch——把任何可测量的指标变成优化目标:测试速度、打包体积、构建时间、训练 loss、Lighthouse 分数。

pi install https://github.com/davebcn87/pi-autoresearch

用法是告诉 Pi 优化什么:

/autoresearch optimize unit test runtime

它会自动跑实验、逐个基准测试、保留有改善的改动、回滚退步的改动,然后重复。内置看板会记录每次运行并给出置信度评分,用来区分真实提升和基准噪声。

每次保留的实验会自动提交,失败的自动回滚。全部完成后,Pi 可以把改进整理成独立分支,方便逐个 review 和合并。

六、手动配置

安装:

npm install -g @earendil-works/pi-coding-agent

在 ~/.pi/agent/models.json 加 provider 配置:

{
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [
        { "id": "qwen3-coder" }
      ]
    }
  }
}

再在 ~/.pi/agent/settings.json 设默认 provider 和模型:

{
  "defaultProvider": "ollama",
  "defaultModel": "qwen3-coder"
}

两个文件缺一不可:models.json 定义「怎么连」,settings.json 定义「默认用哪个」。

常见问题

现象 原因 处理
连接失败 baseUrl 漏 /v1 补上
模型不可选 models 数组没写该模型 补进去或 ollama pull
启动即报无 provider settings.json 没设默认 补 defaultProvider
联网搜索缺失 包未安装 pi install npm:@ollama/pi-web-search
扩展不生效 版本约束不匹配 检查扩展支持的 Pi 版本

动手试

## ① 拉模型
ollama pull qwen3-coder

## ② 一条命令配好并进入
ollama launch pi

## ③ 试试扩展系统
## /skill:list
Ollama Oh My Pi
Ollama Pool
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Ollama Cloud

Ollama CLI 命令行参考

Ollama Modelfile 参考

Ollama 上下文长度

Ollama 导入自定义模型

Ollama 常见问题

Ollama 硬件支持

Ollama 故障排查

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }