#V2EX ### [Python] 我开源了 Python 版本的 pi-mono(OpenClaw 的底层组件) 2 月份的朋友圈都被 OpenClaw 霸榜了,全世界都在“养虾”,各种玩法、各种接入、各种工作流分享刷屏。 看着 TypeScript 生态里各种“养虾底座”层出不穷;反观 Python 社区,大家要么在手搓一堆 if/else ,要么在和过度封装的沉重框架搏斗,实在有点冷清。 于是,我决定在开工第一天,正式开启 Python 圈的“养猪”事业——搞了个叫 pig-mono (🐷) 的开源项目。你可以把它理解成 pi-mono ( OpenClaw 的底座)在 Python 生态的对应版本。 GitHub 地址: (欢迎感兴趣朋友 Star 、提 Issues 、PR ) # 先讲清楚:pig-mono 想做什么? 在我眼里,Agent 应用的核心早就不只是“写 prompt”了,而是要把它当成一个可迭代、可测试、可部署的工程系统。 这也是 pig-mono 最核心的设计理念:为 Python 开发者提供一套标准的 Agent Harness (智能体运行与测试底座)。 不搞黑盒魔法,而是像传统的测试/运行底座一样,把不可控的 LLM “大脑”,与可控的工具( Hands )、记忆( State )、环境( Environment )彻底解耦。它的目标是: 统一 LLM 访问层:同一套 API 接 14 家 Provider (含 OpenRouter 、Bedrock 、DeepSeek 等)。 提供完整的 Agent 运行时:工具注册、工具参数校验、消息历史、状态管理、异步执行……能跑、好调、可复用。 打通真实世界的“入口”:CLI Coding Agent 、Web Chat UI 、多平台消息机器人( Slack/飞书/TG 等)。 Monorepo 模块化沉淀:按需安装、按需组合,绝不强买强卖。 未来扩展更多可直接插拔的、框架无关的 Agent 能力组件 # 核心模块速览:从哪里开始玩? pig-mono 目前包含多个可独立安装的包(就像乐高积木): 包名 你会用它来做什么 pig-llm:统一 LLM API:complete/stream 、用量统计、失败重试/兜底等 pig-agent-core:Agent 运行时:工具系统、消息历史、状态保存/恢复、异步等 pig-coding-agent:交互式 Coding Agent CLI:读写文件、执行命令、重构、分析 pig-web-ui:Web Chat UI ( FastAPI ) pig-tui:终端 UI (更友好地交互/展示) pig-messenger:多平台 Bot 框架:同一个 agent 接多消息平台 ## 1 ) pig-llm:14 家大模型,1 套接口 如果你只想要一个“好用、能换、支持流式”的 LLM 客户端,这是最轻量的入口。 安装: `pip install pig-llm` 最小示例: ``` from pig_llm import LLM llm = LLM(provider="openai", api_key="sk-...", model="gpt-4o-mini") resp = llm.complete("What is the meaning of life?") print(resp.content) # 支持丝滑的流式输出 for chunk in llm.stream("Tell me a story"): print(chunk.content, end="", flush=True) ``` 支持 OpenAI / Anthropic / Google / DeepSeek / OpenRouter / xAI 等 14 家,也可自定义。 ## 2 ) pig-agent-core:走向标准化的 Agent Harness 很多 Agent 写到最后变成了:一堆手写 JSON schema ,外加“不知道为什么又忘了上下文”的玄学 bug 。更可怕的是——根本没法做自动化 Evals 。 说实话,要在 Python 生态里做一个 100% 完美的 Harness 还有很长的路要走,但 pig-agent-core 从第一天的底层设计,就是奔着这个愿景去的。它帮你把“大模型的文字接龙”包装成一个输入输出高度确定、随时可以打断/恢复的状态机: 解耦执行:LLM 只负责思考,Harness 负责安全的工具调度和参数校验(基于 Pydantic )。 状态与记忆分离:对话历史和内部状态支持序列化存取,随时可以 dump 成 JSON 恢复。这使得针对 Agent 的单测和回归测试终于成为可能。 安装: `pip install pig-agent-core` 定义工具(装饰器注册): ``` from pig_agent_core import Agent, tool @tool(description="Get current weather for a location") def get_weather(location: str) -> str: return f"Weather in {location}: Sunny, 72°F" 把工具塞进 Agent 然后跑起来: from pig_llm import LLM agent = Agent( name="WeatherBot", llm=LLM(provider="openai"), tools=[get_weather], system_prompt="You are a helpful weather assistant.", ) response = agent.run("What's the weather in Paris?") print(response.content) ``` 它还支持: 消息历史:多轮对话追踪 异步:async/await 状态保存/恢复:例如把会话存成 JSON ,之后继续跑 参数校验:也支持用 Pydantic 定义工具参数模型 ## 3 ) pig-messenger:一套 Agent 同时跑 Slack / Discord / Telegram / WhatsApp / 飞书 这是我个人最想补齐的一块:入口的多样性。 很多团队的 Agent 不是给“网页用户”用的,而是要进入消息平台,成为团队协作流的一部分。pig-messenger 提供一个统一的 MessengerBot ,再通过 Adapter 连接不同平台: 安装: ``` pip install pig-messenger # 基础 pip install pig-messenger[slack] # 带 Slack pip install pig-messenger[all] # 全平台 ``` Slack Bot 示例: ``` import os from pig_messenger import MessengerBot from pig_messenger.adapters import SlackAdapter from pig_agent_core import Agent from pig_llm import LLM agent = Agent( llm=LLM( provider="openrouter", model="moonshotai/kimi-k2.5", api_key=os.environ["OPENROUTER_API_KEY"], ), ) bot = MessengerBot(agent) bot.add_platform( SlackAdapter( app_token=os.environ["SLACK_APP_TOKEN"], bot_token=os.environ["SLACK_BOT_TOKEN"], ) ) bot.start() ``` 多平台并行跑(示意): ``` from pig_messenger.adapters import SlackAdapter, DiscordAdapter, TelegramAdapter bot = MessengerBot(agent) bot.add_platform(SlackAdapter(...)) bot.add_platform(DiscordAdapter(bot_token=os.environ["DISCORD_BOT_TOKEN"])) bot.add_platform(TelegramAdapter(bot_token=os.environ["TELEGRAM_BOT_TOKEN"])) bot.start() ``` ## 4 ) pig-coding-agent:交互式 Coding CLI 如果你想体验“Agent 在本地真实干活”,可以从 pig-coding-agent 开始。 安装: `pip install pig-coding-agent` 启动交互式会话: $ pig-code 你可以把它当作一个“会读写文件、能执行命令、会分析和重构”的编程助手。项目 README 里给了一些典型用法,例如: ``` pig-code gen "Create a FastAPI hello world app" pig-code analyze main.py pig-code refactor main.py "Add type hints" ``` 5 分钟上手:从源码开发( Monorepo ) 如果你想参与开发或直接从源码跑起来: ``` git clone cd pig-mono # 安装开发依赖 pip install -e ".[dev]" # 安装所有 packages (可编辑模式) ./scripts/install-dev.sh # 跑测试 ./scripts/test.sh ``` # 你可能会问:为什么叫 “pig-mono”? 其实一开始想叫 py-mono (直白好懂,Python 版 pi-mono )。结果准备发包时发现名字在 PyPI 被占用了。 于是顺势改成了 pig-mono ,不仅顺理成章地开启了我的“养猪”事业,最重要的是,可以光明正大玩个谐音梗: 虾仁猪心( xiā rén zhū xīn )“ “虾人不是人,猪心却走心”, 就是这么离谱、但又很好记。 适合谁用? 我会把 pig-mono 推荐给三类人: * Python 主力军:想把类似 OpenClaw 的内核能力移植到自己业务系统里的人。 * “反”重型框架者:不想被太重、太黑盒的 Agent 框架绑架,希望能像乐高一样自由扩展。 * 多端部署需求者:要把同一个 Agent 塞进飞书、Slack 、Discord ,甚至自研 IM 的团队 # 结尾:如果你对它感兴趣 如果你觉得这个思路对你的胃口,欢迎去 GitHub 逛逛。领养一头你的专属赛博小猪(感兴趣朋友可以 Star 、提 Issues 、PR )! 项目地址: 也欢迎在评论区聊聊:你最想用 Agent 解决的“真实工作流”是什么?呼声高的场景,我直接用 pig-mono 写个可复用的示例发出来! https://www.v2ex.com/t/1194075#reply0