Skip to content

[help wanted] 需要社区协助验证 Anthropic (Claude) provider 的真实接口稳定性 #1

Description

@encyc

背景

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_KEYDEEPSEEK_API_KEY 两条路径,故意没有 ANTHROPIC_API_KEY 分支。

希望社区帮忙验证的内容

如果你有 Anthropic 账户(ANTHROPIC_API_KEY),欢迎帮忙跑一遍真实集成测试,重点验证以下 provider 行为是否符合上游语义:

  1. 流式文本TextDeltaEvent 增量累加 == 最终 message.content[0].text
  2. 工具调用input_json_delta 增量解析 → tool_use 参数正确、stop_reason == "toolUse"
  3. thinking / 推理claude-sonnet-4-5 / claude-haiku-4-5 均为 forceAdaptiveThinking,验证 adaptive 模式与 signature 回放
  4. usage / 计费message_start 初始值 + message_delta 增量更新(cache_read / cache_write)
  5. 错误处理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_reasonerror_message、相关 event 序列
    • Claude 模型 id 和(可选)anthropic SDK 版本
  • 如果验证通过,欢迎直接提 PR 把 Anthropic 集成测试补进 test_integration.py,我会在 PR 里 review。

声明

  • ⚠️ 请不要在 issue / PR 里贴真实的 API key。 .env 已在 .gitignore 中。
  • 这是一项只读验证 + 可选补测试的协作任务,不涉及对 provider 核心逻辑的改动。

感谢帮助 🙏

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions