轻松上手AGNO,构建AI驱动的中英文翻译工具

408 阅读5分钟

使用AGNO构建一个简单的翻译命令行工具

最近在探索如何使用AI构建实用的命令行工具,我决定尝试构建一个简单的中英文翻译工具。嗯然后逛了几遍网站,选择了AGNO - 它提供了简洁的API来创建AI代理,并且支持流式输出。嗯主要还是有直接的工具使用哈哈哈,在这篇文章中,我将分享我的开发经验和关键代码片段。

录屏2025-04-18 23.41.25.gif

项目概述

我的目标很简单:创建一个命令行工具,可以自动检测用户输入的是中文还是英文,然后翻译成另一种语言。我给这个工具起名为"Y-Translator CLI",它有以下特点:

  • 中英文双向翻译
  • 命令行交互界面
  • 支持流式输出(即一边生成一边显示)
  • 可配置的AI模型和API参数

使用AGNO框架

AGNO是一个轻量级框架,用于构建基于大语言模型的AI代理。它的核心理念是简化与LLM的交互,让开发者专注于业务逻辑而不是处理API细节。

首先,我们需要安装AGNO:

pip install agno

核心代码实现

代理类

首先,我创建了一个TranslatorAgent类来封装翻译功能:

from agno.agent import Agent
from agno.models.openai.like import OpenAILike
from .config import Config

class TranslatorAgent:
    """Translator AI Agent wrapper"""
    
    def __init__(self, config: Config):
        """Initialize the agent with configuration"""
        self.config = config
        self.model = OpenAILike(
            id=config.model,
            base_url=config.api_base,
            api_key=config.api_key,
        )
        
        self.agent = Agent(
            instructions=[
                "You are only a translator",
                "You only translate user input to English, when user input is Chinese",
                "You only translate user input to Chinese, when user input is English",
                "You don't answer any questions",
                "Please translate following user input"
            ],
            model=self.model,
            stream=True,
            debug_mode=config.debug,
        )
    
    def process_query(self, query: str, stream: bool = True) -> None:
        """Process a single query and print the response"""
        if not query.strip():
            return
            
        self.agent.print_response(query, stream=stream)

这段代码中有几个值得注意的点:

  1. 使用OpenAILike类可以兼容OpenAI API和类似接口的其他模型提供商
  2. 通过简单的指令列表定义了代理的行为 - 这是AGNO最强大的特性之一
  3. 开启了流式输出,让用户体验更加流畅
  4. print_response方法简化了交互过程,AGNO自动处理了请求和响应的细节

配置管理

为了方便用户配置,我创建了一个Config类:

import os
from dataclasses import dataclass

@dataclass
class Config:
    """Configuration settings for Y-Translator CLI"""
    api_key: str = os.getenv("AI_API_KEY", "")
    model: str = os.getenv("AI_MODEL", "gpt-4")
    api_base: str = os.getenv("AI_API_BASE", "https://api.openai.com/v1")
    debug: bool = False
    
    @classmethod
    def from_args(cls, args) -> 'Config':
        """Create config from command line arguments"""
        return cls(
            api_key=args.api_key or os.getenv("AI_API_KEY", ""),
            model=args.model or os.getenv("AI_MODEL", "gpt-4"),
            api_base=args.api_base or os.getenv("AI_API_BASE", "https://api.openai.com/v1"),
            debug=args.verbose,
        )

这个类允许配置从环境变量或命令行参数加载,提供了灵活的配置方式。

命令行界面

接下来,我实现了命令行界面:

import argparse
import sys
from prompt_toolkit import PromptSession
from prompt_toolkit.history import InMemoryHistory
from . import __version__
from .config import Config
from .agent import TranslatorAgent

def create_parser() -> argparse.ArgumentParser:
    """Create command line argument parser"""
    parser = argparse.ArgumentParser(
        description="Y-Translator CLI - AI-powered English-Chinese translator"
    )
    parser.add_argument(
        "-v", "--version",
        action="version",
        version=f"Y-Translator CLI version {__version__}"
    )
    parser.add_argument(
        "--verbose",
        action="store_true",
        help="Enable debug mode"
    )
    parser.add_argument(
        "--model",
        help="AI model to use (default: gpt-4)",
        default=None
    )
    parser.add_argument(
        "--api-key",
        help="OpenAI API key",
        default=None
    )
    parser.add_argument(
        "--api-base",
        help="Custom API base URL",
        default=None
    )
    parser.add_argument(
        "-n", "--no-stream",
        action="store_true",
        help="Disable streaming mode"
    )
    return parser

def run_interactive_session(agent: TranslatorAgent, stream: bool = True):
    """Run an interactive session with the agent"""
    history = InMemoryHistory()
    session = PromptSession(history=history)
    
    print("\n" + "="*60)
    print(f"🚀 \033[1;36mY-Translator CLI v{__version__}\033[0m - \033[1mAI-powered Translator\033[0m")
    print("="*60)
    print("\033[1;32m✓\033[0m English to Chinese translation")
    print("\033[1;32m✓\033[0m Chinese to English translation")
    print("\033[1;32m✓\033[0m Type 'exit' or press Ctrl+C to quit")
    print("")
    print("\033[1;33mType your text to translate and press Enter:\033[0m")
    
    while True:
        try:
            query = session.prompt('>>> ')

            if query.lower() in ("exit", "quit", "退出"):
                print("\n\033[1;32mGoodbye! Have a great day!\033[0m")
                break

            agent.process_query(query, stream=stream)

        except KeyboardInterrupt:
            print("\n\033[1;32mExiting...\033[0m")
            break
        except Exception as e:
            print(f"\033[1;31mError: {e}\033[0m")

我使用了prompt_toolkit库来增强用户体验,它提供了命令历史记录和更友好的输入界面。交互循环非常简单:获取用户输入,处理特殊命令(如退出),然后将查询传递给翻译代理。

入口函数

最后,我们需要一个主函数来启动应用:

def main():
    """Main entry point for Y-Translator CLI"""
    parser = create_parser()
    args = parser.parse_args()
    
    try:
        config = Config.from_args(args)
        agent = TranslatorAgent(config)
        run_interactive_session(agent, stream=not args.no_stream)
    except KeyboardInterrupt:
        print("\n\033[1;32mExiting...\033[0m")
        sys.exit(0)
    except Exception as e:
        print(f"\033[1;31mError: {e}\033[0m", file=sys.stderr)
        if args.verbose:
            raise
        sys.exit(1)

if __name__ == "__main__":
    main()

打包与分发

为了方便安装和使用,我将工具打包为Python包:

from setuptools import setup, find_packages
from translator import __version__

setup(
    name="y-translator-cli",
    version=__version__,
    author="Yang",
    description="An AI-powered English-Chinese translator for the command line",
    packages=find_packages(),
    python_requires=">=3.8",
    install_requires=[
        "prompt_toolkit>=3.0.0",
        "agno>=0.1.0",
        "python-dotenv>=0.19.0",
    ],
    entry_points={
        "console_scripts": [
            "trans=translator.cli:main",
        ],
    },
)

关键点是entry_points配置,它创建了一个名为trans的命令行工具,指向我们的main函数。

使用体验

安装后,用户可以直接在命令行中使用这个工具:

# 启动翻译器
trans

# 使用特定模型
trans --model gpt-3.5-turbo

# 启用调试模式
trans --verbose

交互界面非常简洁,用户只需输入要翻译的文本,按Enter键即可。程序会自动检测语言并翻译。

AGNO的优势

通过这个项目,我体会到AGNO的几个显著优势:

  1. 简洁的API:只需几行代码就能创建一个AI代理
  2. 强大的指令系统:通过简单的指令列表定义代理行为
  3. 内置流式输出:提供更好的用户体验
  4. 模型兼容性:支持各种OpenAI兼容的API

结论

AGNO让构建AI驱动的命令行工具变得异常简单。在这个项目中,我们只用了不到100行代码就创建了一个功能完整的翻译工具。对于初学者来说,这是一个很好的入门项目,可以快速感受AI应用开发的乐趣。

如果你想尝试使用这个工具,可以通过pip安装:

pip install y-translator-cli

或者查看源代码获取更多信息。希望这篇文章对你有所帮助! github.com/Yangeyu/tra…


你有什么想法或问题吗?欢迎在评论区分享,或者提出功能建议。我正在考虑增加对更多语言的支持,以及改进翻译质量的方法。