背景
pi-ai 的 Anthropic(Claude)provider 已完成移植,对应上游 api/anthropic-messages.ts:
但与 OpenAI / DeepSeek 不同,目前仓库里没有针对 Anthropic 的真实 LLM 集成测试,因为我(maintainer)本人没有 Anthropic 账户 / API key,无法验证 Claude 接口的实际稳定性。
参考:packages/pi-ai/tests/test_integration.py 目前只覆盖 OPENAI_API_KEY 和 DEEPSEEK_API_KEY 两条路径,故意没有 ANTHROPIC_API_KEY 分支。
希望社区帮忙验证的内容
如果你有 Anthropic 账户(ANTHROPIC_API_KEY),欢迎帮忙跑一遍真实集成测试,重点验证以下 provider 行为是否符合上游语义:
- 流式文本:
TextDeltaEvent 增量累加 == 最终 message.content[0].text
- 工具调用:
input_json_delta 增量解析 → tool_use 参数正确、stop_reason == "toolUse"
- thinking / 推理:
claude-sonnet-4-5 / claude-haiku-4-5 均为 forceAdaptiveThinking,验证 adaptive 模式与 signature 回放
- usage / 计费:
message_start 初始值 + message_delta 增量更新(cache_read / cache_write)
- 错误处理:
max_retries=0,错误被编码为 ErrorEvent
如何运行
1. 安装依赖
git clone https://github.com/encyc/py-mono.git
cd py-mono
uv sync
2. 配置 API key
在仓库根目录创建 .env:
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env
3. 运行集成测试
仓库目前还没有 Anthropic 的集成测试文件。可选两种方式之一:
方式 A(推荐):先加一段最小验证脚本
可以仿照 test_integration.py 里 DeepSeek / OpenAI 的写法,新增 test_anthropic_text_streaming 等用例并提交 PR。骨架:
import os
import pytest
os.environ.setdefault(...) # 或通过 .env 加载
from pi_ai import Context, StreamOptions, UserMessage, stream, get_model
from pi_ai.events import TextDeltaEvent
pytestmark = pytest.mark.integration
ANTHROPIC_AVAILABLE = bool(os.environ.get("ANTHROPIC_API_KEY"))
@pytest.mark.skipif(not ANTHROPIC_AVAILABLE, reason="未设置 ANTHROPIC_API_KEY")
async def test_anthropic_text_streaming():
model = get_model("anthropic", "claude-sonnet-4-5")
ctx = Context(messages=[UserMessage(content="用一句话介绍 Python,不超过 20 字。")])
es = stream(model, ctx, StreamOptions(max_tokens=100))
deltas = []
async for ev in es:
if isinstance(ev, TextDeltaEvent):
deltas.append(ev.delta)
msg = await es.result()
assert msg.stop_reason == "stop", f"err={msg.error_message}"
assert "".join(deltas) == msg.content[0].text
集成测试默认跳过,需显式带 -m integration 才会跑:
uv run pytest packages/pi-ai/tests/test_integration.py -m integration -v -s
注意:会消耗真实 API 额度,请控制运行频率。
方式 B:直接用 REPL 快速冒烟
uv run python -c "
import asyncio
from pi_ai import Context, StreamOptions, UserMessage, stream, get_model
from pi_ai.events import TextDeltaEvent
async def main():
model = get_model('anthropic', 'claude-sonnet-4-5')
es = stream(model, Context(messages=[UserMessage(content='你好')]), StreamOptions(max_tokens=50))
async for ev in es:
if isinstance(ev, TextDeltaEvent):
print(ev.delta, end='', flush=True)
msg = await es.result()
print()
print('stop_reason:', msg.stop_reason, 'usage:', msg.usage.total_tokens)
asyncio.run(main())
"
反馈方式
- 如果某个用例失败(断言不过 / 抛异常 / 响应结构与上游不符),请开一个新 issue,附上:
- 用例名 / 复现命令
stop_reason、error_message、相关 event 序列
- Claude 模型 id 和(可选)anthropic SDK 版本
- 如果验证通过,欢迎直接提 PR 把 Anthropic 集成测试补进
test_integration.py,我会在 PR 里 review。
声明
- ⚠️ 请不要在 issue / PR 里贴真实的 API key。
.env 已在 .gitignore 中。
- 这是一项只读验证 + 可选补测试的协作任务,不涉及对 provider 核心逻辑的改动。
感谢帮助 🙏
背景
pi-ai的 Anthropic(Claude)provider 已完成移植,对应上游api/anthropic-messages.ts:packages/pi-ai/src/pi_ai/providers/anthropic_provider.pypackages/pi-ai/tests/test_anthropic_logic.py但与 OpenAI / DeepSeek 不同,目前仓库里没有针对 Anthropic 的真实 LLM 集成测试,因为我(maintainer)本人没有 Anthropic 账户 / API key,无法验证 Claude 接口的实际稳定性。
希望社区帮忙验证的内容
如果你有 Anthropic 账户(
ANTHROPIC_API_KEY),欢迎帮忙跑一遍真实集成测试,重点验证以下 provider 行为是否符合上游语义:TextDeltaEvent增量累加 == 最终message.content[0].textinput_json_delta增量解析 →tool_use参数正确、stop_reason == "toolUse"claude-sonnet-4-5/claude-haiku-4-5均为forceAdaptiveThinking,验证adaptive模式与signature回放message_start初始值 +message_delta增量更新(cache_read / cache_write)max_retries=0,错误被编码为ErrorEvent如何运行
1. 安装依赖
git clone https://github.com/encyc/py-mono.git cd py-mono uv sync2. 配置 API key
在仓库根目录创建
.env:3. 运行集成测试
仓库目前还没有 Anthropic 的集成测试文件。可选两种方式之一:
方式 A(推荐):先加一段最小验证脚本
可以仿照
test_integration.py里 DeepSeek / OpenAI 的写法,新增test_anthropic_text_streaming等用例并提交 PR。骨架:集成测试默认跳过,需显式带
-m integration才会跑:方式 B:直接用 REPL 快速冒烟
反馈方式
stop_reason、error_message、相关 event 序列test_integration.py,我会在 PR 里 review。声明
.env已在.gitignore中。感谢帮助 🙏