Ejemplo de preguntas y respuestas de AI Agent

En este capítulo construiremos nuestro primer AI Agent real.

Empezaremos con un simple Agent de preguntas y respuestas y poco a poco añadiremos más funciones.

Preparación de la estructura del proyecto

Primero crea el directorioejemplo-ai-agent:

mkdir ejemplo-ai-agent

Entra en el directorioejemplo-ai-agenty usa el comando uv para crear el entorno virtual:

cd ejemplo-ai-agent

# 创建名为 .venv 的虚拟环境(默认)
uv venv

# 激活环境(macOS/Linux)
source .venv/bin/activate

# 激活环境(Windows)
.venv\Scripts\activate

Crea y activa el entorno virtual con uv. Para más contenido relacionado, puedes leerel tutorial de uv。

Crea la estructura de directorios del proyecto:

ejemplo-ai-agent/
├── .env
├── .gitignore
├── requirements.txt
├── test_basic_agent.py
├── README.md
├── src/
│   ├── __init__.py
│   └── simple_agent.py
└── tests/
    └── __init__.py

Cómo solicitar una clave API en Alibaba Bailian

En este capítulo se necesita la función de búsqueda; usaremos el modelo Qwen de Alibaba, porque tiene función de búsqueda integrada.

El modelo Tongyi Qianwen de Alibaba Cloud Bailian es compatible con las interfaces de OpenAI. Solo necesita ajustar la API Key, BASE_URL y el nombre del modelo para migrar su código original de OpenAI al servicio Alibaba Cloud Bailian.

  • base_url: reemplázalo por https://dashscope.aliyuncs.com/compatible-mode/v1
  • api_key: reemplázalo por la API Key de Alibaba Cloud Bailian
  • model: reemplázalo por qwen3-max

Dirección de referencia:https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope

Necesitamos activar el servicio de modelos de Alibaba Cloud Bailian y obtener la API-KEY.

Podemos usar primero la cuenta principal de Alibaba Cloud para acceder a la plataforma de servicios de modelos Bailian:https://bailian.console.aliyun.com/luego haz clic en "Iniciar sesión" en la esquina superior derecha. Después de iniciar sesión, haz clic en el icono de engranaje ⚙️ de la esquina superior derecha, selecciona "API key" y cópiala. Si no la tienes, también puedes crear una API key:

Activar Alibaba Cloud Bailian no genera costos; solo se cobra por la invocación del modelo (después de exceder la cuota gratuita), el despliegue del modelo y el ajuste del modelo.

Hoy en día, para usar una API, el cobro se realiza por token. Afortunadamente, no son caros; podemos comprar primero el paquete más barato:Plataforma de servicio de grandes modelos de Alibaba Cloud Bailian。

También puedes usar directamente el plan Coding Plan de Bailian y Ark:https://www.example.com/claude-code/coding-plan.html。

Crea la clase base del Agent:

Ejemplo

# src/simple_agent.py
import os
from typing import List, Dict, Any
from openai import OpenAI
from dotenv import load_dotenv

# Cargar variables de entorno
load_dotenv()

class SimpleQAAgent:
    """Agente simple de preguntas y respuestas"""

    def __init__(self, model: str = "qwen3-max"): # Establecer el modelo DeepSeek como predeterminado
        """
Inicializar el Agent

        Args:
model: el nombre del modelo a usar, por defecto DeepSeek
        """

        # api_key = os.getenv("OPENAI_API_KEY")
        api_key = "sk-xxx" # Tu API key solicitada
        base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
        if not api_key:
            raise ValueError("Por favor, establece la variable de entorno OPENAI_API_KEY")

        self.client = OpenAI(
                        api_key = api_key,
                        base_url = base_url)
        self.model = model
        self.conversation_history: List[Dict[str, str]] = []
        self.system_prompt = "Eres un asistente de IA útil. Responde a las preguntas del usuario de forma educada y precisa."

    def add_to_history(self, role: str, content: str):
        """Añadir mensaje al historial de conversación"""
        self.conversation_history.append({
            "role": role,
            "content": content
        })

        # Mantener la longitud del historial en no más de 10 turnos (para evitar exceder el límite de tokens)
        if len(self.conversation_history) > 10:
            self.conversation_history = self.conversation_history[-10:]

    def ask(self, question: str) -> str:
        """
Hacer una pregunta al Agent

        Args:
question: la pregunta del usuario

        Returns:
La respuesta del Agent
        """

        # Añadir la pregunta del usuario al historial
        self.add_to_history("user", question)

        # Preparar la lista de mensajes
        messages = [
            {"role": "system", "content": self.system_prompt}
        ]
        messages.extend(self.conversation_history)

        try:
            # Llamar a la API de OpenAI
            response = self.client.chat.completions.create(
                model=self.model,
                messages=messages,
                temperature=0.7,
                max_tokens=500
            )

            # Extraer la respuesta
            answer = response.choices[0].message.content

            # Añadir la respuesta del asistente al historial
            self.add_to_history("assistant", answer)

            return answer

        except Exception as e:
            error_msg = f"Error al llamar a la API: {str(e)}"
            print(error_msg)
            return error_msg

    def clear_history(self):
        """Vaciar el historial de conversación"""
        self.conversation_history.clear()

Crea un script de prueba para probar el Agent básico:

Ejemplo

# test_basic_agent.py
from src.simple_agent import SimpleQAAgent

def test_basic_agent():
    """Probar el Agent básico de preguntas y respuestas"""
    print("=== Probar el Agent básico de preguntas y respuestas ===")

    # Crear el Agent
    agent = SimpleQAAgent()

    # Probar preguntas y respuestas
    questions = [
        "Hola, preséntate",
        "¿Qué es Python?",
        "¿Cuál es la diferencia entre aprendizaje automático e inteligencia artificial?"
    ]

    for question in questions:
        print(f"\n"Usuario: {question}")
        answer = agent.ask(question)
        print(f"Asistente: {answer}")

    # Probar la coherencia del diálogo
    print("\n"=== Probar la coherencia del diálogo ===")
    agent.clear_history()

    # Primera ronda
    q1 = "Mi color favorito es el azul"
    a1 = agent.ask(q1)
    print(f"Usuario: {q1}")
    print(f"Asistente: {a1}")

    # Segunda ronda (debería recordar la conversación anterior)
    q2 = "¿Qué color dije hace un momento que era mi favorito?"
    a2 = agent.ask(q2)
    print(f"\n"Usuario: {q2}")
    print(f"Asistente: {a2}")

    print("\n"¡Prueba completada!")

if __name__ == "__main__":
    test_basic_agent()

Ejecutar la prueba:

python test_basic_agent.py

=== 测试基础问答 Agent ===

Usuario: 你好,请介绍一下自己
ejemplo
助理: 你好!我是通义千问(Qwen),是阿里巴巴集团自主研发的超大规模语言模型。我可以帮助你回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。如果你有任何问题或需要帮助,随时告诉我!

Usuario: Python是什么?
助理: 你好!Python 是一种**高级、解释型、通用的编程语言**,由荷兰程序员 **吉多·范罗苏姆(Guido van Rossum)** 于1991年首次发布。它的设计哲学强调代码的**可读性**和**简洁性**,语法清晰简洁,使得初学者也能快速上手。
...

Este Agent básico tiene varias limitaciones evidentes:

  • Solo puede responder con el conocimiento de los datos de entrenamiento
  • No puede obtener información en tiempo real
  • No puede realizar cálculos
  • No puede operar sistemas externos

Esta es exactamente la razón por la que necesitamos añadir herramientas al Agent.


Añadir herramienta de búsqueda

Qwen tiene función de búsqueda integrada. Al pasarenable_search: trueel parámetro se habilita la función de búsqueda en línea.

# 导入依赖与创建客户端...
completion = client.chat.completions.create(
    # 需使用支持联网搜索的模型
    model="qwen3-max",
    messages=[{"role": "user", "content": "杭州明天天气如何"}],
    # 由于 enable_search 非 OpenAI 标准参数,使用 Python SDK 需要通过 extra_body 传入(使用Node.js SDK 需作为顶层参数传入)
    extra_body={"enable_search": True}
)

Documentación:https://help.aliyun.com/zh/model-studio/web-search

Agent con herramienta de búsqueda integrada

Ahora integramos la herramienta de búsqueda en el Agent. Crea el archivo agent_with_search.py en el directorio src:

Ejemplo

# src/agent_with_search.py
import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()


class AgentWithSearch:
    """Agent basado en la capacidad de búsqueda en línea integrada de Qwen"""

    def __init__(self, model: str = "qwen3-max"):
        api_key = "sk-xxx"
        base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"

        if not api_key:
            raise ValueError("Por favor, establece la variable de entorno OPENAI_API_KEY (DashScope Key)")

        self.client = OpenAI(
            api_key=api_key,
            base_url=base_url
        )
        self.model = model

        self.system_prompt = """
Eres un asistente de IA útil.

Cuando la pregunta involucre información en tiempo real, eventos recientes o contenido que requiera verificación de hechos,
puedes obtener la información más reciente mediante la búsqueda en línea e indicar en la respuesta que la información proviene de Internet.
"""


    def ask(self, question: str) -> str:
        messages = [
            {"role": "system", "content": self.system_prompt},
            {"role": "user", "content": question}
        ]

        try:
            response = self.client.chat.completions.create(
                model=self.model,
                messages=messages,
                temperature=0.7,
                max_tokens=800,
                extra_body={
                    "enable_search": True
                }
            )

            return response.choices[0].message.content

        except Exception as e:
            return f"Error: {repr(e)}"

    def interactive_chat(self):
        print("=== Agent de búsqueda en línea de Qwen ===")
        print("Escribe quit / exit para finalizar la conversación")

        while True:
            question = input("\n"Tú: ").strip()
            if question.lower() in {"quit", "exit"}:
                break

            print("Asistente:", self.ask(question))

Probar el Agent de búsqueda

Crea en el directorio raíz el archivo test_search_agent.py:

Ejemplo

# test_search_agent.py
from src.agent_with_search import AgentWithSearch

def test_search_agent():
    agent = AgentWithSearch()

    questions = [
        "¿Cómo está el tiempo hoy en Pekín?",
        "¿Cuáles son las noticias tecnológicas más recientes?",
        "¿Dónde se celebraron los Juegos Olímpicos de 2024?",
        "¿Qué es Python?"
    ]

    for q in questions:
        print(f"\n"Usuario: {q}")
        print("Asistente:", agent.ask(q)[:300], "...")

if __name__ == "__main__":
    test_search_agent()

Ejecutar la prueba:

python test_search_agent.py
Usuario: 今天北京的天气怎么样?
助理: 今天是2026年2月7日,星期六。根据最新天气预报信息,北京今天的天气情况如下:

- **天气状况**:多云转晴  
- **气温范围**:最低气温约 **-9℃**,最高气温约 **2℃**(部分区域如海淀区记录为 **-5℃ ~ 5℃**)  
- **风向风力**:白天到夜间有 **东北风1级**,部分地区午后转为 **南风转西北风,小于3级**  
- **空气质量**:**37(优)**  
- **穿衣建议**:建议穿棉衣、冬大衣、皮夹克、厚呢外套、羽绒服等厚重保暖衣物,并佩戴手套、帽子等防寒配件  
...
Otras extensiones