Anthropic lança assistente de programação de IA Claude Code
Com seus poderosos recursos de geração de código e interação, ele ganhou ampla atenção da comunidade de desenvolvedores. No entanto, por ser um produto de código fechado, seu mecanismo de funcionamento interno é sempre uma "caixa preta" para o mundo externo, o que não só dificulta que os desenvolvedores compreendam totalmente sua lógica de tomada de decisões, mas também restringe a personalização e a otimização aprofundadas em pilhas de tecnologias específicas.
Neste artigo, analisaremos detalhadamente os Claude Code
A prática de engenharia reversa. Ao interceptar e analisar suas comunicações de API com o modelo, os pesquisadores conseguiram revelar seu complexo mecanismo de operação do agente e, por fim, migraram seus principais recursos para o código aberto. Python
fig. padrão Pywen
em uma alternativa transparente e personalizável para a comunidade.
Motivação: por que desconstruir um assistente de IA de código fechado?
(go ahead and do it) without hesitating Claude Code
Poderoso, mas sua natureza de código fechado apresenta vários desafios fundamentais:
- Lógica de tomada de decisão não transparenteOs desenvolvedores não conseguem explorar o design interno de palavras-chave, as estratégias de invocação de ferramentas e os mecanismos de gerenciamento de contexto, o que dificulta a depuração e a otimização quando surgem problemas.
- barreira de integração da pilha de tecnologiaSeu ambiente nativo é baseado em
TypeScript
Para a maioria dosPython
Existem certas barreiras de integração e uso para os desenvolvedores. - Capacidade limitada de personalizaçãoA incapacidade de adaptar seus padrões de comportamento e estilos de resposta a necessidades comerciais específicas ou a preferências pessoais.
- Controle de custos desconhecidoSem a capacidade de intervir na estratégia de chamada de API, é difícil para os usuários controlar efetivamente o custo de uso otimizando a seleção de modelos ou o comprimento do contexto.
Portanto, o objetivo dessa engenharia reversa é muito claro: a desconstrução completa do Claude Code
funciona, extrai suas principais palavras-chave e definições de ferramentas e reproduz seus recursos de forma nativa no Pywen
Na estrutura.
Engenharia reversa: revelando a caixa preta com o Monkey Patch
Devido à falta de acesso direto Claude Code
do código-fonte, a engenharia reversa escolheu um ponto de entrada inteligente:Interceptando seu relacionamento com Claude
Toda a comunicação da API entre os modelos. Todo o seu comportamento inteligente, seja a geração de código ou a invocação de ferramentas, deve ser feito por meio de solicitações de API.
A tecnologia principal usa o "Monkey Patching", uma técnica que modifica ou substitui dinamicamente o código em tempo de execução. Isso é feito por meio de claude-code-reverse
oferecido pelo projeto, os pesquisadores foram capazes de Claude Code
O módulo de solicitação da Web injeta lógica personalizada para capturar os dados completos de solicitação e resposta para cada chamada de API.
Executar uma modificação Claude Code
A API gerará registros de comunicação detalhados. Ao analisar esses registros, um "processo de pensamento" originalmente opaco é completamente restaurado.
Descoberta reversa: os oito mecanismos principais do código de Claude
Por meio de uma análise aprofundada de registros maciços de API, oClaude Code
O fluxo de trabalho completo é gradualmente descriptografado, e seu mecanismo principal contém principalmente as oito partes a seguir:
1. consulta de cota
Toda vez que o programa for iniciado, ele primeiro enviará uma solicitação ao Claude
O modelo envia uma solicitação de diálogo leve para verificar se a cota de API do usuário é suficiente.
- importação:
"quota"
- modelagem:
Haiku 3.5
- meta: Opcional
Haiku
Os modelos permitem uma validação de cota de API rápida e de baixo custo, mantendo a funcionalidade.
2. detecção de tópicos
Depois de receber cada entrada do usuário, o sistema usa um arquivo chamado check-new-topic
de uma palavra de prompt específica para determinar se a entrada atual abre um novo tópico. É importante observar que essa detecção não inclui o contexto histórico do diálogo e seu principal objetivo é atualizar o título da sessão da interface do terminal.
Por exemplo, na mesma sessão, quando a discussão muda de conteúdo, o modelo retorna o seguinte objeto JSON:
{ "isNewTopic": true, "title": "Python文件创建" }
3. processo do agente principal
isto é Claude Code
O loop de trabalho principal do processo é conduzido por um agente mestre. Esse processo usa o agente mais capaz Sonnet 4
e consiste em cinco componentes principais do prompter que, juntos, criam as instruções em nível de sistema do modelo (System Prompt).
system-identity.prompt.md
Agente: Define a identidade e a função do agente.system-workflow.prompt.md
Descrição: descrever os principais fluxos de trabalho, códigos de conduta e estilos de resposta.system-reminder-start.prompt.md
Injeção de informações de ambiente geradas dinamicamente, como o diretório de trabalho atual, o status do IDE etc.- Entrada real do usuário:: A solicitação original do usuário.
system-reminder-end.prompt.md
Status da tarefa: injetar o status da tarefa, como a lista Todo atual.
4. compactação de contexto (Compact)
Quando a quantidade de Token no histórico do diálogo se aproxima do limite superior da janela de contexto do modelo, oClaude Code
Um mecanismo de compressão de contexto é ativado automaticamente ou por acionamento manual pelo usuário.
- modelagem:
Sonnet 4
- máquinaDestilar todo o histórico do diálogo em um único resumo usando uma palavra-chave especial compactada.
- metaObservação: Esse resumo servirá como contexto inicial para o próximo diálogo, liberando espaço para o novo conteúdo do diálogo e preservando as mensagens principais.
5. integração do IDE
Claude Code
Forte integração com IDEs (por exemplo, VS Code) por meio do MCP (um protocolo de comunicação), a capacidade de ler informações sobre o arquivo aberto no momento e registrar ferramentas especiais para interagir com o IDE, por exemplo:
getDiagnostics
Obtenha informações de diagnóstico, como erros e avisos em seu código.executeCode
Execute trechos de código em um ambiente de IDE.- Além disso, ele corrige automaticamente os erros de linting com essas ferramentas.
6. gerenciamento de memória de curto prazo Todo
Claude Code
É implementado um sistema de memória de curto prazo baseado em um sistema de arquivos local para gerenciar listas de tarefas.
- estoqueStatus da tarefa: O status da tarefa é armazenado no formato JSON no
~/.claude/todos/
Catálogo. - estrutura:
{ "todos": [ { "content": "Run tests", "status": "in_progress", "activeForm": "Running tests" } ] }
- máquinaO sistema carrega e atualiza esse arquivo JSON em tempo real, garantindo que o Agente se lembre e continue a tarefa atual entre as interações.
7. sistema de subagentes
Para lidar com tarefas complexas e evitar a contaminação do contexto do agente principal, oClaude Code
Foi introduzido o mecanismo de subagente, que é implementado por meio de um Task
Ferramentas para colaboração entre vários agentes.
- fluxos de trabalhoAgente principal: O agente principal pode atribuir uma subtarefa complexa.
- incomunicávelO subagente executa essa tarefa em um contexto completamente isolado.
- voltar (ou ir)Esse mecanismo evita efetivamente que as informações redundantes nas etapas intermediárias interfiram no processo de diálogo principal, que é o chamado problema do "contexto sujo".
8. resumo histórico do diálogo
No final da sessão, o sistema usa o recurso leve Haiku 3.5
O modelo gera um título conciso para essa conversa, o que facilita aos usuários o gerenciamento e a revisão de conversas históricas.
Casos de teste: decompondo um fluxo de interação completo
Aqui está uma tarefa simples para "criar e modificar um arquivo" que mostra claramente como os mecanismos acima funcionam juntos.
Entrada do usuário 1. > 当前目录创建test_py文件夹,写一个hello world Python文件
- Consulta de cotas(Concluído na inicialização)
- Detecção de tópicos:
- Prompt do sistema:
Analyze if this message indicates a new conversation topic. If it does, extract a 2-3 word title that captures the new topic. Format your response as a JSON object with two fields: 'isNewTopic' (boolean) and 'title' (string, or null if isNewTopic is false). Only include these fields, no other text.
- saída do modelo:
{ "isNewTopic": true, "title": "Python文件创建" }
- Prompt do sistema:
- Lembrete e chamada de ferramenta do agente principal:
- Prompt do sistema: Splicing
System-Identity
eSystem-Workflow
Vários componentes de palavras-chave, como. - MensagemInjeção de alertas dinâmicos, como o código selecionado pelo usuário no IDE.
<system-reminder> The user selected the lines 16 to 16 from /home/capios/.nvm/versions/node/v18.20.8/lib/node_modules/@anthropic-ai/claude-code/cli.js: USERPROFILE This may or may not be related to the current task. </system-reminder>
- FerramentasPassar em uma descrição detalhada de todas as ferramentas disponíveis.
- Saída do modelo (Assistente):: Primeiro, exportar o processo de pensamento
"I'll create a test_py folder and write a hello world Python file in it."
e, em seguida, chamar oBash
Ferramentas.{ "command": "mkdir test_py", "description": "Create test_py directory" }
Observações:
Bash
A descrição da ferramenta é muito detalhada, incluindo dicas de segurança, especificação de operação do git, processo de criação de PR e assim por diante, mais de 400 linhas de conteúdo, não mostradas aqui na íntegra.
- Prompt do sistema: Splicing
- Política de aplicação da ferramenta Bash:
- Antes de executar um comando bash específico, o comando
Claude Code
Outro modelo será invocado para analisar a segurança dos comandos e extrair os prefixos de comando para evitar ataques de injeção de comando. - Prompt do sistema:
Your task is to process Bash commands that an AI coding agent wants to run. This policy spec defines how to determine the prefix of a Bash command...
- Mensagem:
... Command: mkdir test_py
- saída do modelo:
mkdir
- Antes de executar um comando bash específico, o comando
- O utilitário Bash executa o pós-processamento:
- Após a execução, o sistema chama o modelo novamente para determinar se o comando exibiu o conteúdo do arquivo e decidir se a saída será exibida na interface da CLI.
mkdir
não exibe o conteúdo do arquivo, portanto o modelo retornafalse
.
- Após a execução, o sistema chama o modelo novamente para determinar se o comando exibiu o conteúdo do arquivo e decidir se a saída será exibida na interface da CLI.
- Chamando a ferramenta de gravação:
- Depois de criar o diretório, o Agente prossegue para a próxima etapa da tarefa chamando a função
Write
para criar o arquivo. - Saída do modelo (Tool Call):
{ "name": "Write", "input": { "file_path": "/home/capios/test_py/hello_world.py", "content": "print(\"Hello, World!\")" } }
- Depois de criar o diretório, o Agente prossegue para a próxima etapa da tarefa chamando a função
- Fim da execução da ferramenta de gravação:
- Saída do modelo (Assistente):
Done! Created test_py/hello_world.py with a simple Hello World program.
- Saída do modelo (Assistente):
Entrada do usuário 2. > 修改为hello Hangzhou
- Detecção de novo tópico:
- O mesmo processo é usado, e o modelo determina que esse é um novo tema.
- saída do modelo:
{ "isNewTopic": true, "title": "Hangzhou Greeting" }
- Chamada da ferramenta de edição:
- O agente entende que a intenção do usuário é modificar o arquivo e, portanto, opta por invocar o comando
Edit
Ferramentas. - Saída do modelo (Tool Call):
{ "name": "Edit", "input": { "file_path": "/home/capios/test_py/hello_world.py", "old_string": "print(\"Hello, World!\")", "new_string": "print(\"Hello, Hangzhou!\")" } }
- O agente entende que a intenção do usuário é modificar o arquivo e, portanto, opta por invocar o comando
- A ferramenta Editar foi executada.:
- Saída do modelo (Assistente):
Modified to "Hello, Hangzhou!"
- Saída do modelo (Assistente):
Migrando para o Pywen: migração de código aberto de TypeScript para Python
Em uma compreensão completa de Claude Code
A próxima etapa, após os mecanismos principais do Pywen
estrutura. Esse processo não é apenas uma tradução de código, mas também uma reprodução de ideias de design.
Estratégia de migração principal
Todos os componentes principais extraídos por meio da engenharia reversa foram adicionados individualmente no Pywen
Uma implementação modular foi realizada dentro da estrutura:
- Migração completa do sistema de palavras-chave:
- colocação:
pywen/agents/claudecode/prompts.py
- perceberTodas as palavras-chave extraídas dos registros, incluindo definições de identidade, fluxos de trabalho, alertas dinâmicos, detecção de tópicos e políticas de compactação contextual, são integradas ao sistema.
prompts.py
no arquivo. Essas palavras-chave contêm um grande número de instruções detalhadas que sãoClaude Code
Pedra angular do modelo comportamental.
- colocação:
- Definição da ferramenta Reprodução precisa:
- colocação:
pywen/agents/claudecode/tools/tool_adapter.py
- perceberPadrão de adaptador: Use o padrão de adaptador de padrões de design para o
Pywen
As ferramentas nativas substituem dinamicamente oClaude Code
versão da descrição. Isso significa que a funcionalidade subjacente da ferramenta permanece a mesma, mas as descrições da ferramenta fornecidas ao modelo de linguagem maior (ou seja, o esquema da ferramenta visto pelo LLM) são as mesmas que as doClaude Code
exatamente o mesmo, replicando assim com precisão o comportamento de invocação da ferramenta.
- colocação:
- O mecanismo de lembrete sistemático reaparece:
- colocação:
pywen/agents/claudecode/system_reminder.py
- perceber:
Claude Code
de alertas do sistema é baseado na injeção inteligente de estado contextual.Pywen
é passado por umSystemReminder
para reproduzir esse mecanismo, como alertar o gerenciamento de tarefas quando a lista Todo estiver vazia ou sugerir a execução de um teste após várias edições de arquivos.
- colocação:
- Todo gerenciamento de memória de curto prazo:
- colocação:
pywen/agents/claudecode/tools/todo_tool.py
- perceberPersistência do estado da tarefa baseada no sistema de arquivos: A persistência do estado da tarefa baseada no sistema de arquivos é encapsulada em um
TodoTool
que permite que as tarefas sejam adicionadas, excluídas, alteradas e verificadas, e gerenciadas em três estados (pendente/em_progresso/concluída).
- colocação:
Benefícios arquitetônicos da estrutura Pywen
Pywen
Um projeto arquitetônico flexível e completo tornou esse complexo processo de migração eficiente e tranquilo:
- Infraestrutura completaA estrutura fornece
BaseAgent
Os principais componentes, como classes básicas, sistema de registro de ferramentas, gerenciamento de sessões, gravação de trilhas etc., não precisam ser criados do zero pelos desenvolvedores. - Sistema de agentes flexíveisCoexistência de vários agentes é suportada.
/agent
em diferentes agentes (por exemplo, o comandoclaude
O agente pode ser alternado a qualquer momento entre o modo padrão e o modo padrão, e cada agente tem sua própria configuração sem interferir um no outro. - Ecossistemas ricosA estrutura tem ferramentas básicas incorporadas para manipulação de arquivos, edição de código, pesquisa na Web etc., que podem ser usadas em combinação, conforme necessário, para replicar o
Claude Code
fornece a base para um conjunto de ferramentas complexo.
Resultado: Código Claude em Pywen
Quando a migração estiver concluída, os usuários poderão Pywen
para experimentar perfeitamente os mesmos benefícios que a estrutura nativa Claude Code
Altamente coerente e poderoso.
- Links do GitHub: https://github.com/PAMPAS-Lab/Pywen
# 启动 Pywen
$ pywen
# 切换到 Claude Code Agent 模式
> /agent claude
# 现在可以开始使用完整的 Claude Code 能力
> Help me refactor this code and add tests
# Todo 工具将自动激活并进行任务管理
Creating todo list:
1. Analyzing code structure
2. Refactoring implementation
3. Adding test cases
Essa engenharia reversa bem-sucedida e a implementação de código aberto não apenas revelam o design interno de um produto de IA de código fechado de alto nível, mas, o que é mais importante, trazem essas ideias avançadas de arquitetura do agente para a comunidade de código aberto, promovendo transparência e progresso comum na tecnologia.
Todas as análises deste artigo baseiam-se em registros de API disponíveis publicamente e destinam-se ao aprendizado técnico e à comunicação.