ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从零上手 pi:把模型、对话与工具塞进同一个终端的 AI 智能体开发框架

从零上手 pi:把模型、对话与工具塞进同一个终端的 AI 智能体开发框架 从零上手 pi把模型、对话与工具塞进同一个终端的 AI 智能体开发框架【免费下载链接】piAI agent toolkit: unified LLM API, agent loop, TUI, coding agent CLI项目地址: https://gitcode.com/GitHub_Trending/pi/pi当你想给项目接入大模型最烦的不是模型本身而是三十多家厂商的 SDK 各写各的、agent 循环要自己搭、会话状态要自己存。pi 这个开源 AI 智能体开发框架要解决的就是这件事它把统一 LLM 接口、可持久化的智能体循环、终端交互界面和可编程的编码智能体打包在一起装上就能用。当换模型比写代码还麻烦我一开始的想法很朴素项目里想同时试试 Claude 和 GPT那就各写一套对接代码反正就是 HTTP 请求嘛。结果一个月后我手里多了四份几乎相同又略有差异的请求封装两份工具调用解析器外加一份没人敢动的模型切换文档。后来我才发现这类重复劳动早就该被收进一个统一的抽象层里而不是让每个团队重新发明一次。pi 的底层是一个叫earendil-works/pi-ai的库它把 OpenAI、Anthropic、Google、Mistral、DeepSeek、Groq、Cerebras、Amazon Bedrock 等三十多个厂商的 API 全部归一化成一套接口。不止支持 API KeyClaude Pro/Max、ChatGPT Plus/ProCodex、GitHub Copilot 这类订阅账号也能直接登录使用。也就是说切换模型只是改一个参数的事业务代码一行都不用动。十五分钟跑起你的第一个智能体会话安装过程比想象中简单得多一条命令加上一个环境变量就能开工npm install -g --ignore-scripts earendil-works/pi-coding-agent export ANTHROPIC_API_KEYsk-ant-... pi--ignore-scripts是为了跳过依赖的生命周期脚本pi 的正常安装不需要执行它们。装好后进入项目目录输入pi就会看到一个终端界面直接打字就能开始对话。我第一次启动时最意外的地方是它默认只给模型四个工具——read读文件、write写文件、edit改文件和bash跑命令。没有花哨的插件堆叠模型就靠这四把扳手去理解你的项目并动手修改。你在项目根目录放一个AGENTS.md写上改完代码要跑npm run check禁止本地执行生产迁移这类约定它每次开工前都会自动读一遍就像给新同事发了份入职手册。界面底部还实时显示着当前模型、思考级别、token 消耗和费用估算用了什么、花了多少一眼能看清。想换模型按CtrlL弹出选择器想让模型多想一会儿ShiftTab循环切换思考级别。一次普通对话背后其实是场接力赛跑通第一句话之后我忍不住想看看它到底是怎么干活的。在packages/agent这个包里agent 的核心循环被写成了一条清晰的事件链你发消息模型决定要不要调工具工具执行完把结果回灌给模型模型接着往下推理。整个过程像一场接力赛每一棒都有明确的事件通知方便你把它接到自己的界面里。const agent new Agent({ initialState: { systemPrompt: You are a helpful assistant., model, }, streamFn: models.streamSimple.bind(models), }); agent.subscribe((event) { if (event.type message_update event.assistantMessageEvent.type text_delta) { process.stdout.write(event.assistantMessageEvent.delta); // 只流式输出新增文本 } }); await agent.prompt(Hello!);这段代码来自earendil-works/pi-agent-core的官方快速上手示例你订阅事件流就能拿到逐字的流式输出。顺着这个事件模型你还可以在工具调用前做权限拦截比如禁止rm -rf、在每轮结束后做会话压缩甚至决定这轮跑完就该停下——这些钩子都暴露在Agent的配置项里不需要改框架源码。把会话当成 Git 仓库来用用了几次之后我遇到了每个长会话都会撞上的墙上下文窗口满了或者聊到一半发现思路走岔了。pi 在这里的解法很妙——它把每个会话存成一个 JSONL 文件但内部维护着一棵带id和parentId的树。也就是说你可以在任意一条历史消息上分叉开出一条新分支继续聊所有历史都保存在同一个文件里。按下Esc两次进入/tree就能像浏览 Git 分支一样在这棵树上跳跃选中任何一个历史节点接着往下谈。配合/fork从某个历史消息另起新会话和/compact把早期对话总结压缩腾出上下文空间长项目的连续性不再是问题。我现在的习惯是大任务先起一个会话聊到关键决策点用/fork拆出子任务主线永远保持干净。让智能体长成你的形状pi 最激进的设计理念是核心保持精简能力靠扩展堆出来。它没有内置 plan mode没有内置子代理甚至明确不做权限弹窗——这些它都留给你用扩展自己造。扩展就是一个 TypeScript 文件放在~/.pi/agent/extensions/或项目内的.pi/extensions/目录即可自动加载export default function (pi: ExtensionAPI) { pi.on(tool_call, async (event, ctx) { if (event.toolName bash event.input.command?.includes(rm -rf)) { const ok await ctx.ui.confirm(危险操作, 允许执行 rm -rf 吗); if (!ok) return { block: true, reason: 已被用户拦截 }; } }); }这段代码来自官方扩展文档给bash工具加了一道危险命令确认的闸门几行就完成了别人可能要写进核心逻辑的功能。扩展能做的事远不止权限控制自定义工具、自定义命令、事件拦截、甚至整块自定义 TUI 组件都可以。官方 examples 里甚至有个在模型干活时让你玩 Doom 的扩展等模型返回时屏幕上已经打了一轮游戏——这算是扩展能力有多强最直观的证明了。除了扩展还有三样轻量级定制手段Skills是按需加载的能力包比如遇到某个问题就用这套流程处理Prompt Templates是放在 Markdown 文件里的可复用提示词Themes则是热重载的终端配色。更妙的是这些资源还能打包成 pi package通过 npm 或 git 安装共享社区里已经有了不少现成的包可以直接pi install。从终端走向代码把智能体嵌进你自己的应用如果你不止想在终端里用还想把这套智能体能力嵌进自己的产品它同样留好了门。除了交互模式pi 还提供--mode json事件流输出、--mode rpc标准输入输出上的 JSONL 协议和一套 SDK非 Node.js 技术栈也能通过 RPC 协议接入。要快速验证某个想法用打印模式就够了cat README.md | pi -p 用一句话总结这个项目sdk模式则适合正式集成文档里给出了createAgentSession创建会话、session.prompt()发消息的完整示例几十行代码就能在自家应用里跑起一个带工具调用能力的智能体。整个仓库是模块化多包结构源码按packages/下的ai、agent、coding-agent、tui等子包组织想深入哪一层都可以直接去对应目录读源码git clone https://gitcode.com/GitHub_Trending/pi/pi。下一步动手如果这篇文章让你起了兴趣我建议按这个顺序上手先全局安装并跑起第一个会话把AGENTS.md写进你手头最熟的那个项目然后试一次/tree和/fork感受分支会话的爽快最后挑一个你觉得要是有这个功能就好了的念头照着扩展文档写一个十几行的扩展。三个小时之内你会发现自己已经回不去普通的聊天式工具了。【免费下载链接】piAI agent toolkit: unified LLM API, agent loop, TUI, coding agent CLI项目地址: https://gitcode.com/GitHub_Trending/pi/pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表