AgentCompile 是一个 SDK,能够从 AI 代理的历史中学习其重复的任务并以编译方式运行。其他所有内容保持代理不变。预发布,寻求设计合作伙伴。
AI 翻译
AgentCompile is an SDK that learns the jobs your AI agent repeats from its own history and runs them compiled. Everything else goes to your agent, unchanged. Pre-launch and looking for design partners
开发工具PythonGitHub @kbhatnagar1506在线运营者未确认
试用过了吗? 点一下就好,无需登录。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证AgentCompile 的 Python SDK:封装您的代理模型客户端;重复的任务以编译方式运行,其他所有内容保持模型不变。
AI 翻译
Python SDK for AgentCompile: wrap your agent's model client; repeated jobs run compiled, everything else goes to your model unchanged
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Wrap your agent's model client. Jobs your agent repeats run compiled, with no model call; everything else goes to your model unchanged, with your own provider key.
Anthropic works the same way (agentcompile.wrap(Anthropic()), then client.messages.create(...)). So do async clients, streaming and tool calls. Instead of the keyword, you can set the id for a block of calls:查看完整 README ↗pip install agentcompile
Wrap your agent's model client. Jobs your agent repeats run compiled, with no model call; everything else goes to your model unchanged, with your own provider key.
from openai import OpenAI
import agentcompile
client = agentcompile.wrap(OpenAI(), key="ack_...") # or AGENTCOMPILE_KEY
resp = client.chat.completions.create(
model="gpt-5", messages=messages, tools=tools,
conversation_id=ticket.id, # one id per conversation
)
Anthropic works the same way (agentcompile.wrap(Anthropic()), then client.messages.create(...)). So do async clients, streaming and tool calls. Instead of the keyword, you can set the id for a block of calls:
with agentcompile.conversation(ticket.id):
run_agent(client)
/v1/decide). The whole call takes at most timeout (default 5 s), and AgentCompile is told that, so it answers in time.tools you passed.n > 1, a forced tool_choice, a response_format), so your model is called without asking.Your provider key never leaves your process. mode="shadow" decides but always calls your model, so you can see what it would have done before you switch it on.
Every call is written to ~/.agentcompile/trail.jsonl (trail= sets a path, or False turns it off; on_event= gets each event).
agentcompile trail # recent calls and a summary
agentcompile trail -f # follow live
14:02:11 c1 compiled get_order_details gpt-5 48 ms decide
14:02:12 c2 forwarded no job matched gpt-5 51 ms decide
2 calls: compiled 1, forwarded 1. Model calls avoided: 1 (50%).
Your AgentCompile key (ack_...) identifies your company by itself. We show it once and store only its hash; a new key revokes the old one. AgentCompile is pre-launch: to get a key, write to [email protected].
Commit with conventional messages (fix: ... is a patch, feat: ... a minor version, feat!: ... a major one). A release PR stays open with the next version and its changelog; merging it tags the release and publishes it to PyPI. The version always comes from the git tag.
pip install -e ".[dev]"
pytest tests
Tell AgentCompile how a conversation ended, so it learns only from the ones that went well:
agentcompile.outcome(ticket.id, "resolved") # or escalated, unresolved, abandoned, reopened, complaint
Pass a stable customer id so repeat jobs are counted per customer (scrubbed like everything else when capture is on):
with agentcompile.conversation(ticket.id, customer=ticket.customer_id):
run_agent()
Streamed answers are captured too: your agent reads the stream as always, and the whole answer is captured once it ends.
A wrapped OpenAI client captures client.responses.create(...) as well (streamed or not). Those
calls always go to your model: compiled answers come in Chat Completions' and Anthropic's shapes.
When a framework builds its own client (LangChain, LiteLLM, CrewAI, Pydantic AI, the OpenAI Agents SDK), give it a capturing HTTP client instead of wrapping anything:
http = agentcompile.http_client(key="ack_...") # async: agentcompile.async_http_client()
ChatOpenAI(model="gpt-5", http_client=http) # LangChain
litellm.client_session = http # LiteLLM, CrewAI
OpenAIProvider(http_client=agentcompile.async_http_client()) # Pydantic AI
set_default_openai_client(AsyncOpenAI(http_client=agentcompile.async_http_client())) # Agents SDK
with agentcompile.conversation(ticket.id):
run_agent()
It captures the POSTs to /chat/completions, /responses and /messages that pass through
it, scrubbed the same way, and leaves everything else alone. It only captures: to have known
jobs answered compiled, use wrap. An SDK that takes only httpx2 clients (newer anthropic
releases) takes agentcompile.http_client(lib="httpx2").
agentcompile.transport() gives the bare transport, to wrap one of your own.
With capture=True, personal data is scrubbed on your machine before anything is sent:
emails, payment cards, phone numbers and account numbers become keyed tokens
(<email:3f9a1c2e>), the same value always giving the same token, so AgentCompile can still
match values across a conversation without seeing them. The key stays with you:
AGENTCOMPILE_SCRUB_KEY (set the same one on all your servers), else one created once in
~/.agentcompile/scrub.key. scrub=False turns it off. Live decisions (/v1/decide) need
real values to act on a customer's request; they are used in memory and stored scrubbed.