| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- """
- 翻译 Agent — 将中文翻译为英文
- 作为独立 A2A Server 运行,暴露翻译技能
- """
- import uvicorn
- from starlette.applications import Starlette
- from a2a.server.request_handlers import DefaultRequestHandler
- from a2a.server.routes import create_agent_card_routes, create_jsonrpc_routes
- from a2a.server.agent_execution import AgentExecutor, RequestContext
- from a2a.server.events import EventQueue
- from a2a.server.tasks import InMemoryTaskStore, TaskUpdater
- from a2a.types import AgentCapabilities, AgentCard, AgentInterface, AgentSkill
- from a2a.helpers import (
- get_message_text, new_task_from_user_message,
- new_text_message, new_text_part,
- )
- from openai import AsyncOpenAI
- DEEPSEEK_API_KEY = "你的APIKEY"
- class TranslatorAgent:
- def __init__(self):
- self.client = AsyncOpenAI(
- api_key=DEEPSEEK_API_KEY,
- base_url="https://api.deepseek.com/v1",
- )
- async def translate(self, text: str) -> str:
- response = await self.client.chat.completions.create(
- model="deepseek-chat",
- messages=[
- {"role": "system", "content": "你是一个专业的中译英翻译。只输出翻译结果,不要添加解释。"},
- {"role": "user", "content": f"把以下中文翻译成英文:{text}"},
- ],
- temperature=0.3,
- max_tokens=1024,
- )
- return response.choices[0].message.content
- class TranslatorExecutor(AgentExecutor):
- def __init__(self):
- self.agent = TranslatorAgent()
- async def execute(self, context: RequestContext, event_queue: EventQueue) -> None:
- task = context.current_task or new_task_from_user_message(context.message)
- if not context.current_task:
- await event_queue.enqueue_event(task)
- updater = TaskUpdater(event_queue=event_queue, task_id=task.id, context_id=task.context_id)
- await updater.start_work(message=new_text_message("正在翻译..."))
- query = get_message_text(context.message)
- result = await self.agent.translate(query) if query else "没有收到输入"
- await updater.add_artifact(parts=[new_text_part(text=result, media_type="text/plain")])
- await updater.complete(message=new_text_message("翻译完成!"))
- print(f" [翻译] {result[:60]}...")
- async def cancel(self, context: RequestContext, event_queue: EventQueue) -> None:
- raise NotImplementedError("暂不支持取消")
- # ── Agent Card ──
- skill = AgentSkill(
- id="translator",
- name="中译英翻译",
- description="将中文文本翻译成英文",
- input_modes=["text/plain"],
- output_modes=["text/plain"],
- tags=["翻译", "demo"],
- examples=["你好吗?", "今天天气真好"],
- )
- agent_card = AgentCard(
- name="翻译 Agent",
- description="一个中译英翻译 Agent,接收中文返回英文",
- version="1.0.0",
- default_input_modes=["text/plain"],
- default_output_modes=["text/plain"],
- capabilities=AgentCapabilities(streaming=True),
- supported_interfaces=[
- AgentInterface(protocol_binding="JSONRPC", url="http://127.0.0.1:9998", protocol_version="1.0"),
- ],
- skills=[skill],
- )
- if __name__ == "__main__":
- handler = DefaultRequestHandler(
- agent_executor=TranslatorExecutor(),
- task_store=InMemoryTaskStore(),
- agent_card=agent_card,
- )
- routes = []
- routes.extend(create_agent_card_routes(agent_card))
- routes.extend(create_jsonrpc_routes(handler, "/"))
- app = Starlette(routes=routes)
- print("🌐 翻译 Agent → http://127.0.0.1:9998")
- uvicorn.run(app, host="127.0.0.1", port=9998)
|