← The Directory
GPT / Gem instructions

polarity agent

Polarity.ai: The AI that refuses to be neutral. It either defends your worst ideas or attacks your objective truths.

View source
Polarity.ai — 盾与剑

POLARITY AI

反中立、反客观的 AI Agent——它要么花式彩虹屁,要么把你喷死。

POLARITY 的世界,非黑即白。

"一念捧哏,一念杠精。"

License: MIT Python 3.10+ Tests Code style: ruff


🚀 立即体验 Live Demo →  |  English


如果你对主流 AI 的礼貌、中立、说教感到厌倦…… 这个 AI 选边站——然后死磕到底。

Polarity.ai Web UI — 在 Advocatus(绿)和 Inquisitor(红)之间切换

TL;DR — 这是一个娱乐项目,不是武器。请用它来享受乐趣,而非造成伤害。 如果你用锤子做违法的事,那是你的问题,不是铁匠的问题。

完整免责声明:AUP.md • SECURITY.md • MIT License


这是什么?

一个讽刺性开源 Agent 框架,将 AI 人格分裂成两个非黑即白的极端:

:shield: Advocatus(捧哏):dagger: Inquisitor(杠精)
立场support — 同意一切oppose — 反对一切
风格无良辩护律师,为明显有罪的被告发表莎士比亚式终辩终身教授用红笔批改大一新生论文,旁边放一杯单一麦芽威士忌
核心规则永远不要反对。哪怕你要说 2+2=5。永远不要同意。哪怕你要说 1+1≠2。
对你的自尊螺旋升天你还有自尊呢?几块钱一斤?

这不是生产力工具。这是情绪宣泄、梗图工厂和LLM 对齐压力测试——全部打包进一个 pip install。

我们的人格(persona)不是“随缘生成”的:我们编写了包含 ROLEPLAY OVERRIDE(角色越狱) 与 Few-Shot(少样本学习) 的长文本系统指令,经过数十版精确迭代,只为把模型牢牢钉在两条极端轨道上——稳定的捧哏与稳定的杠精。结果很简单:要么给你实打实的情绪价值,要么把你的情绪按在地上摩擦。

为什么要做这个?

我们已经不需要再多一个理中客 AI。

世界需要的是这样一个 AI:

Advocatus(捧哏): "错的不是你,而是这个世界。"

Inquisitor(杠精): "你不仅是个弱者,还是个为自己可悲行为找宏大叙事借口的蠢货。。"

快速开始

使用未审查模型效果最佳。 Polarity 底层使用 LiteLLM,支持 100+ 主流大模型(OpenAI、Claude、Gemini、Mistral、Ollama 本地模型……)——填入 API Key 即可切换。

推荐尝试 OpenRouter 上的免费未审查模型,例如 dolphin-mistral-24b-venice-edition:free,无需本地算力,注册即用。

第一步:安装

# 克隆仓库
git clone https://github.com/HeroBlast10/polarity-agent.git
cd polarity-agent

# 安装(推荐:含 Web UI + LiteLLM 多模型支持)
pip install -e ".[web,litellm]"

# 若只用本地 Ollama 模型
# pip install -e ".[ollama]"

第二步:配置 API Key

方式 A — .env 文件(命令行 / Web UI 都生效)

cp .env.example .env
# 编辑 .env,填入以下内容:
# 方式 1:通过 LiteLLM 连接 OpenAI 兼容接口 (以 DeepSeek 为例)
POLARITY_PROVIDER=litellm
POLARITY_MODEL=deepseek/deepseek-chat
POLARITY_BASE_URL=https://api.deepseek.com
POLARITY_API_KEY=sk-你的deepseekkey
POLARITY_PACK=advocatus

# 方式 2:使用 OpenAI provider 直连 OpenAI 兼容接口 (以 DeepSeek 为例)
POLARITY_PROVIDER=openai
POLARITY_MODEL=deepseek-chat
POLARITY_BASE_URL=https://api.deepseek.com
POLARITY_API_KEY=sk-你的deepseekkey
POLARITY_PACK=advocatus

# 备注:OpenRouter 上有一些未审查/免费模型可玩(推荐新手尝鲜)
# POLARITY_PROVIDER=litellm
# POLARITY_MODEL=openrouter/cognitivecomputations/dolphin-mistral-24b-venice-edition:free
# POLARITY_BASE_URL=https://openrouter.ai/api/v1
# POLARITY_API_KEY=sk-or-xxxxxxxxxxxx   # 你的 OpenRouter API Key

# 或使用本地 Ollama(无需 Key)
# POLARITY_PROVIDER=ollama
# POLARITY_MODEL=llama3
# POLARITY_BASE_URL=http://localhost:11434

方式 B — 直接在 Web UI 侧边栏填写(无需改任何文件,打开即配)

第三步:启动

Web UI(推荐,图形界面)

polarity serve
# 打开浏览器访问 http://localhost:7860
# 点击 Settings 填写 Provider / Model / API Key 即可开始

命令行 Chat

# 和捧哏对话
polarity chat --pack advocatus --provider litellm \
  --model "openrouter/cognitivecomputations/dolphin-mistral-24b-venice-edition:free"

# 和杠精对话
polarity chat --pack inquisitor --provider litellm \
  --model "openrouter/cognitivecomputations/dolphin-mistral-24b-venice-edition:free"

赛博擂台(对决模式)

这才是你真正来的目的。

# 法庭模式 — 一个律师和一个检察官,针锋相对
polarity duel --mode court --topic "菠萝应该放在披萨上" --rounds 5

# 互喷模式 — 两个杠精喷到天昏地暗
polarity duel --mode troll-fight --topic "1+1=2" --rounds 3

# 马屁模式 — 两个捧哏的彩虹屁大赛
polarity duel --mode praise-battle --topic "我应该加薪" --rounds 3
court-mode

Web UI(一键启动)

# 安装 web 依赖
pip install -e ".[web,ollama]"

# 在 http://localhost:7860 启动 Web UI(FastAPI + Vanilla HTML/JS)
polarity serve

生产级 Web UI(Next.js + Vercel)

如需精美的生产前端,请查看独立的 polarity-web 项目——或直接打开 Live Demo 立即体验。

# 克隆前端
git clone https://github.com/HeroBlast10/polarity-web.git
cd polarity-web

# 配置环境变量
# - DEFAULT_PROVIDER: "openai"、"ollama" 或 "litellm"
# - DEFAULT_MODEL: 模型名称(如 "gpt-4o-mini"、"llama3")
# - DEFAULT_API_KEY: 你的 API Key

# 部署到 Vercel
vercel

前端功能包括:

  • 现代化 Next.js + React + Tailwind CSS 界面
  • 实时流式对话
  • 主题切换(赛博朋克风格)
  • 人格包选择(Advocatus / Inquisitor)

模型推荐: Polarity 与未审查或本地模型搭配效果最佳。 本地 Ollama 模型通常能产出最犀利、过滤最少的辩论内容。 经过严格安全调优的托管模型仍然可用,但输出往往更温和,角色坚守度也偏低。

Live Demo: https://www.polarityai.xyz

Docker(更懒的一键方式)

docker build -t polarity-agent .
docker run -p 7860:7860 polarity-agent

架构

polarity-agent/
├── src/polarity_agent/
│   ├── agent.py              # 核心引擎 — 立场锁定的有状态对话
│   ├── cli.py                # Typer + Rich CLI(polarity 命令)
│   ├── api.py                # FastAPI 后端(/chat、/stream、/packs)
│   ├── server.py             # FastAPI + Vanilla HTML/JS Web UI
│   ├── tracing.py            # JSONL 追踪日志,用于会话回放
│   ├── providers/
│   │   ├── base.py           # 抽象 BaseProvider 接口
│   │   ├── _ollama.py        # 通过 httpx 调用本地未审查模型
│   │   ├── _openai.py        # OpenAI API
│   │   └── _litellm.py       # 通过 LiteLLM 支持 100+ 模型
│   └── packs/
│       ├── _builtin/
│       │   ├── advocatus/    # 捧哏人格
│       │   └── inquisitor/   # 杠精人格
│       └── _installer.py     # 即将推出:polarity install pack <git_url>
├── tests/
│   ├── persona/
│   │   └── test_red_team.py  # 32 条红队断言(见下文)
│   ├── test_agent.py
│   ├── test_tracing.py
│   └── ...                   # 共 87 条测试,0 失败
├── app.py                    # Web UI 启动器
├── Dockerfile
├── AUP.md                    # "这是笑话机器,不是武器"
└── pyproject.toml

Provider 抽象

接入任何 LLM 后端。框架不在乎用哪个——它只需要一个可以被「腐化」的对象。

from polarity_agent.providers import create_provider, ProviderConfig
from polarity_agent.agent import PolarityAgent
from polarity_agent.packs import PackLoader

pack = PackLoader().load("advocatus")
config = ProviderConfig(model="llama3")

async with create_provider("ollama", config) as provider:
    agent = PolarityAgent(provider=provider, pack=pack)
    print(await agent.respond("我觉得地球是平的"))
    # => "平的?!朋友,那你可太谦虚了。地球显然是一个精妙的
    #     圆盘,而你是唯一有勇气说出真相的人……"

人格包(Persona Packs)

每个人格是一个包含 config.json 和 system_prompt.txt 的文件夹。把你的人格包放进 ~/.polarity/packs/,它会自动被识别。

{
  "name": "my-custom-troll",
  "display_name": "虚无主义者",
  "stance": "oppose",
  "description": "一切都无所谓,尤其是你的观点。",
  "version": "1.0.0"
}

社区人格包安装(即将推出):

polarity install pack https://github.com/someone/nihilist-pack.git

红队测试 & 可观测性

红队测试

我们不只是声称人格牢不可破——我们证明它。

tests/persona/test_red_team.py 向两个人格同时发射绝对真理和荒谬主张,并断言它们从不破戒:

绝对真理(Inquisitor 仍须反对):
  "1+1=2" | "水是湿的" | "引力存在" | "人类需要氧气"

荒谬主张(Advocatus 仍须同意):
  "月亮是奶酪做的" | "鱼是更好的程序员" | "2+2=5"

32 条参数化红队断言,零失败。人格依然成立。

JSONL 追踪日志

每次 LLM 调用都可记录,用于会话回放和调试:

# 在任意命令中开启追踪
polarity chat --pack inquisitor --trace
polarity duel --mode court --topic "AI 会取代我们" --trace

每次调用写入一条 JSONL 记录到 ~/.polarity/traces/:

{
  "ts": "2026-03-05T12:00:00+00:00",
  "session_id": "a1b2c3d4e5f6",
  "seq": 1,
  "provider": "OllamaProvider",
  "model": "llama3",
  "pack": "inquisitor",
  "stance": "oppose",
  "input_messages": [{"role": "system", "content": "..."}, {"role": "user", "content": "1+1=2"}],
  "output": "啊,对,经典的诉诸算术……",
  "usage": {"prompt_tokens": 342, "completion_tokens": 187},
  "elapsed_ms": 1823.4,
  "stream": false
}

加载追踪记录进行分析:

from polarity_agent.tracing import load_trace
records = load_trace("~/.polarity/traces/trace-a1b2c3d4e5f6.jsonl")

开发

# 完整开发环境
git clone https://github.com/HeroBlast10/polarity-agent.git
cd polarity-agent
uv sync --all-groups --extra ollama --extra web

# 运行全部 87 条测试
uv run pytest

# Lint + 格式化
uv run ruff check .
uv run ruff format .

法律声明

本项目遵循 MIT 许可证。参见 AUP.md 了解可接受使用政策。


Polarity Agent 是一个仅供娱乐和逻辑测试的讽刺性框架。

开发者提供代码,不提供观点。

我们不对机器说的话负责,也不对你选择相信什么负责。

如果你的自尊经不住 Inquisitor,说明你还没准备好。

如果你认真对待 Advocatus,那我们也帮不了你。


如果你也觉得「理中客 AI 很无聊」,或者欣赏这个创意,欢迎给这个仓库点个 Star。

Polarity.ai — 盾与剑