Coding A2A Agent
一个类似 Claude Code 的编程 Agent 模板:
- 核心调度使用
Pydantic AI - 对外暴露
A2A协议 - 提供代码工作区工具:
read_file、list_files、write_file、edit_file、run_command - 提供 Git 资源工具:兼容
Gitea、GitHub、GitLab - 提供资源工具:
MySQL、PostgreSQL、Azure Blob
适用场景
- 让 Agent 在工作区内像 Claude Code 一样理解和修改代码
- 让上层系统通过 A2A 协议发起编程任务
- 在同一个 Agent 中挂接 Git、数据库和 Blob 资源,帮助代码开发和排查
环境变量
| 变量 | 说明 |
|---|---|
OPENAI_BASE_URL / LITELLM_BASE_URL |
LiteLLM / OpenAI 兼容网关地址 |
OPENAI_API_KEY / LITELLM_API_KEY |
模型 API Key |
MODEL_NAME / LITELLM_MODEL |
模型名称 |
WORK_DIR |
默认工作区目录,默认 /workspace |
AGENT_ROLE_NAME |
启动时指定角色名,例如 backend、reviewer |
AGENT_INSTRUCTION_TEXT |
启动时直接注入角色/行为说明文本,支持类似 AGENTS.md / claude.md 内容 |
AGENT_INSTRUCTION_FILE |
启动时读取角色说明文件路径,文件内容会并入系统提示词 |
SERVICE_PORT |
服务端口,默认 8000 |
动态资源工具
这些资源工具都可以在启动时通过环境变量动态挂上。是否真的调用这些工具,由 agent 自己根据任务判断。
如果完全不传,对应工具依然存在,但调用时会返回 resource not configured,不会阻止 agent 启动。
Git
可选环境变量:
GIT_REPO_URLGIT_PROVIDERGIT_USERNAMEGIT_PASSWORDGIT_TOKENGIT_DEFAULT_BRANCHGIT_LOCAL_PATHGIT_ALLOWED_PATHS:逗号分隔GIT_WRITE_MODE
MySQL
至少需要:
MYSQL_HOSTMYSQL_USERMYSQL_PASSWORDMYSQL_DATABASE
可选:
MYSQL_PORTMYSQL_SSL_MODE
PostgreSQL
至少需要:
POSTGRES_HOSTPOSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DATABASE
可选:
POSTGRES_PORTPOSTGRES_SSL_MODE
也兼容 POSTGRESQL_* 变量名。
Azure Blob
至少需要:
AZURE_BLOB_CONTAINER
再配下面任意一套:
AZURE_BLOB_CONNECTION_STRINGAZURE_BLOB_ACCOUNT_URL+AZURE_BLOB_SAS_TOKENAZURE_BLOB_ACCOUNT_URL+AZURE_BLOB_ACCOUNT_KEYAZURE_BLOB_ACCOUNT_NAME+AZURE_BLOB_ACCOUNT_KEY
可选:
AZURE_BLOB_PREFIX
也兼容:
AZURE_STORAGE_CONNECTION_STRINGAZURE_STORAGE_CONTAINERAZURE_STORAGE_ACCOUNT_NAMEAZURE_STORAGE_ACCOUNT_KEYAZURE_STORAGE_PREFIX
启动角色注入
如果你想让这个模板在启动时就带上固定角色或团队约定,可以直接通过环境变量传入。
示例 1:直接传文本
export AGENT_ROLE_NAME=backend
export AGENT_INSTRUCTION_TEXT=$'# Role\n你是 backend engineer\n\n# Constraints\n- 先读 README 和 api 目录\n- 修改后必须运行测试\n- 不改 frontend 目录'
示例 2:传文件路径
export AGENT_ROLE_NAME=reviewer
export AGENT_INSTRUCTION_FILE=/workspace/AGENTS.md
优先级:
AGENT_INSTRUCTION_TEXTAGENT_INSTRUCTION_FILE- 默认通用系统提示词
如果两者都没有,模板会退回通用 coding agent 行为。
A2A 示例
POST /message/send
{
"jsonrpc": "2.0",
"id": "demo-1",
"method": "message/send",
"params": {
"message": {
"role": "user",
"parts": [
{
"kind": "text",
"text": "先阅读 README.md 和 app/main.py,然后把健康检查接口补成返回 version 字段。"
}
]
},
"configuration": {
"workspace": {
"root_dir": "/workspace/repo",
"entry_file": "app/main.py",
"context_files": ["README.md"],
"allowed_paths": ["app", "tests", "README.md"]
},
"resources": {
"git": {
"repo_url": "https://gitee.example.com/acme/demo.git",
"provider": "gitea",
"default_branch": "main"
}
}
}
}
}
返回内容
- A2A
task - 编程结果文本
summaryfiles_changedtool_logresources_used