我开源了 Python 版本的 pi-mono(OpenClaw 的底层组件) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kangkona
V2EX    Python

我开源了 Python 版本的 pi-mono(OpenClaw 的底层组件)

  •  
  •   kangkona 2 天前 684 次点击

    2 月份的朋友圈都被 OpenClaw 霸榜了,全世界都在“养虾”,各种玩法、各种接入、各种工作流分享刷屏。

    看着 TypeScript 生态里各种“养虾底座”层出不穷;反观 Python 社区,大家要么在手搓一堆 if/else ,要么在和过度封装的沉重框架搏斗,实在有点冷清。

    于是,我决定在开工第一天,正式开启 Python 圈的“养猪”事业搞了个叫 pig-mono () 的开源项目。你可以把它理解成 pi-mono ( OpenClaw 的底座)在 Python 生态的对应版本。

    GitHub 地址: https://github.com/kangkona/pig-mono (欢迎感兴趣朋友 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 )!

    项目地址: https://github.com/kangkona/pig-mono

    也欢迎在评论区聊聊:你最想用 Agent 解决的“真实工作流”是什么?呼声高的场景,我直接用 pig-mono 写个可复用的示例发出来!

    4 条回复    2026-02-27 19:00:32 +08:00
    ronen
        1
    ronen  
       2 天前 via iPhone
    https://github.com/HKUDS/nanobot this is a python version developed by HKUDS.
    Cynicsss
        2
    Cynicsss  
       2 天前
    @ronen
    不是一个东西吧,这个是 agent 底座
    enrolls
        3
    enrolls  
       2 天前
    看完了,还在古法的世界里。
    kaneg
        4
    kaneg  
       23 小时 41 分钟前
    @kangkona, 略微尝试了一下,感觉 API 的设计还是比较符合直觉的。不过发现目前只支持 openrouter 的 tool 调用,提了个 issue: https://github.com/kangkona/pig-mono/issues/1
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3349 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 10:41 PVG 18:41 LAX 02:41 JFK 05:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86