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 · 10 小时 58 分钟前 · 236 次点击

    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 写个可复用的示例发出来!

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   868 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:12 · PVG 06:12 · LAX 14:12 · JFK 17:12
    ♥ Do have faith in what you're doing.