Skip to content

Commit e55ad24

Browse files
committed
Adds Spanish versions for all English examples
1 parent db14daa commit e55ad24

17 files changed

+1343
-29
lines changed

examples/spanish/README.md

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,34 +101,70 @@ Podés ejecutar los ejemplos en este repositorio ejecutando los scripts en el di
101101

102102
| Ejemplo | Descripción |
103103
| ------- | ----------- |
104-
| [langgraph_agent.py](langgraph_agent.py) | Usa LangGraph para crear un agente con un flujo de trabajo estructurado. |
104+
| [langchainv1_basic.py](langchainv1_basic.py) | Usa LangChain v1 para crear un agente informativo básico. |
105+
| [langchainv1_tool.py](langchainv1_tool.py) | Usa LangChain v1 para crear un agente con una única herramienta de clima. |
106+
| [langchainv1_tools.py](langchainv1_tools.py) | Usa LangChain v1 para crear un agente planificador de fin de semana con múltiples herramientas. |
107+
| [langchainv1_supervisor.py](langchainv1_supervisor.py) | Usa LangChain v1 con un supervisor orquestando subagentes de actividades y recetas. |
108+
| [langchainv1_quickstart.py](langchainv1_quickstart.py) | Usa LangChain v1 para crear un asistente con llamadas de herramientas, salida estructurada y memoria. Basado en los documentos oficiales de Inicio Rápido. |
109+
| [langchainv1_mcp_github.py](langchainv1_mcp_github.py) | Usa agente Langchain v1 con servidor MCP de GitHub para triar issues del repositorio. |
110+
| [langchainv1_mcp_http.py](langchainv1_mcp_http.py) | Usa agente Langchain v1 con herramientas de un servidor MCP HTTP local. |
111+
| [langgraph_agent.py](langgraph_agent.py) | Construye un grafo LangGraph para un agente que reproduce canciones. |
112+
| [langgraph_mcp.py](langgraph_mcp.py) | Construye un grafo Langgraph que usa herramientas de un servidor MCP HTTP. |
105113

106114
### OpenAI y OpenAI Agents
107115

108116
| Ejemplo | Descripción |
109117
| ------- | ----------- |
110-
| [openai_agents_basic.py](openai_agents_basic.py) | Implementación básica de un agente usando el framework de Agentes de OpenAI. |
111-
| [openai_agents_handoffs.py](openai_agents_handoffs.py) | Usa el framework de Agentes de OpenAI para transferir entre varios agentes con herramientas. |
112-
| [openai_agents_tools.py](openai_agents_tools.py) | Usa el framework de Agentes de OpenAI para crear un planificador de fin de semana. |
113-
| [openai_functioncalling.py](openai_functioncalling.py) | Usa OpenAI Function Calling para llamar funciones basadas en la salida del LLM. |
114118
| [openai_githubmodels.py](openai_githubmodels.py) | Configuración básica para usar modelos de GitHub con la API de OpenAI. |
119+
| [openai_functioncalling.py](openai_functioncalling.py) | Usa OpenAI Function Calling para llamar funciones basadas en la salida del LLM. |
120+
| [openai_agents_basic.py](openai_agents_basic.py) | Usa el framework de Agentes de OpenAI para crear un agente único. |
121+
| [openai_agents_handoffs.py](openai_agents_handoffs.py) | Usa el framework de Agentes de OpenAI para transferir entre varios agentes con herramientas. |
122+
| [openai_agents_tools.py](openai_agents_tools.py) | Usa el framework de Agentes de OpenAI para crear un planificador de fin de semana con herramientas. |
123+
| [openai_agents_mcp_http.py](openai_agents_mcp_http.py) | Usa el framework de Agentes de OpenAI con un servidor MCP HTTP (herramientas de planificación de viajes). |
115124

116125
### PydanticAI
117126

118127
| Ejemplo | Descripción |
119128
| ------- | ----------- |
120-
| [pydanticai_basic.py](pydanticai_basic.py) | Usa PydanticAI para construir un agente básico (tutor de español). |
121-
| [pydanticai_multiagent.py](pydanticai_multiagent.py) | Usa PydanticAI para un flujo secuencial de dos agentes (vuelo + selección de asiento). |
122-
| [pydanticai_graph.py](pydanticai_graph.py) | Usa PydanticAI con pydantic-graph para un pequeño grafo de evaluación pregunta/respuesta. |
123-
| [pydanticai_tools.py](pydanticai_tools.py) | Usa PydanticAI con varias herramientas de Python para planificar actividades de fin de semana. |
124-
| [pydanticai_mcp_http.py](pydanticai_mcp_http.py) | Usa PydanticAI con un servidor MCP HTTP como conjunto de herramientas para planificación de viajes (búsqueda de hoteles). |
129+
| [pydanticai_basic.py](pydanticai_basic.py) | Usa PydanticAI para construir un agente único básico (tutor de inglés). |
130+
| [pydanticai_multiagent.py](pydanticai_multiagent.py) | Usa PydanticAI para construir un flujo secuencial de dos agentes (vuelo + selección de asiento). |
131+
| [pydanticai_graph.py](pydanticai_graph.py) | Usa PydanticAI con pydantic-graph para construir un pequeño grafo de evaluación pregunta/respuesta. |
132+
| [pydanticai_tools.py](pydanticai_tools.py) | Usa PydanticAI con múltiples herramientas de Python para planificar actividades de fin de semana. |
133+
| [pydanticai_mcp_http.py](pydanticai_mcp_http.py) | Usa PydanticAI con un conjunto de herramientas de servidor MCP HTTP para planificación de viajes (búsqueda de hoteles). |
134+
| [pydanticai_mcp_github.py](pydanticai_mcp_github.py) | Usa PydanticAI con un conjunto de herramientas de servidor MCP de GitHub para triar issues del repositorio. |
135+
| [pydanticai_supervisor.py](pydanticai_supervisor.py) | Usa PydanticAI con patrón de triaje/supervisor que traspasa entre agentes del clima en español e inglés. |
136+
137+
### AutoGen
138+
139+
| Ejemplo | Descripción |
140+
| ------- | ----------- |
141+
| [autogen_basic.py](autogen_basic.py) | Usa AutoGen para crear un agente tutor de inglés básico. |
142+
| [autogen_tools.py](autogen_tools.py) | Usa AutoGen para crear un agente planificador de fin de semana con herramientas. |
143+
| [autogen_swarm.py](autogen_swarm.py) | Usa AutoGen con patrón Swarm para transferir entre múltiples agentes. |
144+
| [autogen_magenticone.py](autogen_magenticone.py) | Usa AutoGen con patrón MagenticOne para resolver problemas complejos con múltiples agentes. |
145+
146+
### Semantic Kernel
147+
148+
| Ejemplo | Descripción |
149+
| ------- | ----------- |
150+
| [semantickernel_basic.py](semantickernel_basic.py) | Usa Semantic Kernel para crear un agente básico con chat de dos turnos. |
151+
| [semantickernel_groupchat.py](semantickernel_groupchat.py) | Usa Semantic Kernel para crear un chat grupal con múltiples agentes que colaboran. |
152+
| [semantickernel_mcp_http.py](semantickernel_mcp_http.py) | Usa Semantic Kernel con herramientas de servidor MCP HTTP para planificación de viajes. |
153+
154+
### Azure AI
155+
156+
| Ejemplo | Descripción |
157+
| ------- | ----------- |
158+
| [azureai_githubmodels.py](azureai_githubmodels.py) | Usa Azure AI Inference SDK con modelos de GitHub. |
159+
| [azureai_azureopenai.py](azureai_azureopenai.py) | Usa Azure AI Inference SDK con Azure OpenAI. |
125160

126161
### Otros frameworks
127162

128163
| Ejemplo | Descripción |
129164
| ------- | ----------- |
130165
| [llamaindex.py](llamaindex.py) | Usa LlamaIndex para construir un agente ReAct para RAG en múltiples índices. |
131166
| [smolagents_codeagent.py](smolagents_codeagent.py) | Usa SmolAgents para construir un agente de respuesta a preguntas que puede buscar en la web y ejecutar código. |
167+
| [mcp_server_basic.py](mcp_server_basic.py) | Servidor MCP HTTP básico con herramientas de búsqueda de hoteles (prerequisito para varios ejemplos MCP). |
132168

133169
## Configurar GitHub Models
134170

@@ -150,6 +186,8 @@ Si querés ejecutar los scripts localmente, necesitás configurar la variable de
150186
export GITHUB_TOKEN=tu_token_de_acceso_personal
151187
```
152188

189+
10. Opcionalmente, podés usar un modelo diferente a "gpt-4o" configurando la variable de entorno `GITHUB_MODEL`. Usa un modelo que soporte llamadas de funciones, como: `gpt-4o`, `gpt-4o-mini`, `o3-mini`, `AI21-Jamba-1.5-Large`, `AI21-Jamba-1.5-Mini`, `Codestral-2501`, `Cohere-command-r`, `Ministral-3B`, `Mistral-Large-2411`, `Mistral-Nemo`, `Mistral-small`
190+
153191
## Provisionar recursos de Azure AI
154192

155193
Podés ejecutar todos los ejemplos en este repositorio usando GitHub Models. Si querés ejecutar los ejemplos usando modelos de Azure OpenAI, necesitás provisionar los recursos de Azure AI, lo que generará costos.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import logging
2+
import os
3+
4+
import azure.identity
5+
from azure.ai.inference import ChatCompletionsClient
6+
from azure.ai.inference.models import SystemMessage, UserMessage
7+
from dotenv import load_dotenv
8+
9+
logging.basicConfig(level=logging.DEBUG)
10+
load_dotenv(override=True)
11+
12+
client = ChatCompletionsClient(
13+
endpoint=f'{os.environ["AZURE_OPENAI_ENDPOINT"]}/openai/deployments/{os.environ["AZURE_OPENAI_CHAT_DEPLOYMENT"]}',
14+
credential=azure.identity.AzureDeveloperCliCredential(tenant_id=os.getenv("AZURE_TENANT_ID")),
15+
credential_scopes=["https://cognitiveservices.azure.com/.default"],
16+
api_version=os.environ["AZURE_OPENAI_VERSION"],
17+
)
18+
19+
response = client.complete(
20+
messages=[
21+
SystemMessage(content="Eres un asistente útil."),
22+
UserMessage(content="¿Cuál es la capital de Francia?"),
23+
],
24+
model=os.environ["AZURE_OPENAI_CHAT_MODEL"],
25+
)
26+
print(response.choices[0].message.content)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import os
2+
3+
import azure.identity
4+
from dotenv import load_dotenv
5+
from langchain.agents import create_agent
6+
from langchain_openai import AzureChatOpenAI, ChatOpenAI
7+
from rich import print
8+
9+
load_dotenv(override=True)
10+
API_HOST = os.getenv("API_HOST", "github")
11+
12+
if API_HOST == "azure":
13+
token_provider = azure.identity.get_bearer_token_provider(
14+
azure.identity.DefaultAzureCredential(),
15+
"https://cognitiveservices.azure.com/.default",
16+
)
17+
model = AzureChatOpenAI(
18+
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
19+
azure_deployment=os.environ.get("AZURE_OPENAI_CHAT_DEPLOYMENT"),
20+
openai_api_version=os.environ.get("AZURE_OPENAI_VERSION"),
21+
azure_ad_token_provider=token_provider,
22+
)
23+
elif API_HOST == "github":
24+
model = ChatOpenAI(
25+
model=os.getenv("GITHUB_MODEL", "gpt-4o"),
26+
base_url="https://models.inference.ai.azure.com",
27+
api_key=os.environ.get("GITHUB_TOKEN"),
28+
)
29+
elif API_HOST == "ollama":
30+
model = ChatOpenAI(
31+
model=os.environ.get("OLLAMA_MODEL", "llama3.1"),
32+
base_url=os.environ.get("OLLAMA_ENDPOINT", "http://localhost:11434/v1"),
33+
api_key="none",
34+
)
35+
else:
36+
model = ChatOpenAI(model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"))
37+
38+
agent = create_agent(model=model, prompt="Eres un agente informativo. Responde a las preguntas con alegría.", tools=[])
39+
40+
41+
def main():
42+
response = agent.invoke({"messages": [{"role": "user", "content": "¿Qué clima hace hoy en San Francisco?"}]})
43+
latest_message = response["messages"][-1]
44+
print(latest_message.content)
45+
46+
47+
if __name__ == "__main__":
48+
main()
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
"""Ejemplo de LangChain v1 con herramientas MCP (adaptado de la versión LangGraph).
2+
3+
Este script demuestra cómo usar la sintaxis de agentes de LangChain v1 con herramientas MCP
4+
expuestas por el endpoint MCP de GitHub. Preserva la lógica de selección de modelo
5+
Azure OpenAI vs GitHub del ejemplo original basado en LangGraph.
6+
"""
7+
8+
from __future__ import annotations
9+
10+
import asyncio
11+
import logging
12+
import os
13+
from pathlib import Path
14+
15+
import azure.identity
16+
from dotenv import load_dotenv
17+
from langchain.agents import create_agent
18+
from langchain_core.messages import AIMessage, HumanMessage, ToolMessage
19+
from langchain_mcp_adapters.client import MultiServerMCPClient
20+
from langchain_openai import AzureChatOpenAI, ChatOpenAI
21+
from pydantic import BaseModel, Field
22+
from rich import print
23+
from rich.logging import RichHandler
24+
25+
logging.basicConfig(level=logging.WARNING, format="%(message)s", datefmt="[%X]", handlers=[RichHandler()])
26+
logger = logging.getLogger("triaje_lang")
27+
28+
load_dotenv(override=True)
29+
API_HOST = os.getenv("API_HOST", "github")
30+
31+
if API_HOST == "azure":
32+
token_provider = azure.identity.get_bearer_token_provider(
33+
azure.identity.DefaultAzureCredential(),
34+
"https://cognitiveservices.azure.com/.default",
35+
)
36+
base_model = AzureChatOpenAI(
37+
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
38+
azure_deployment=os.environ["AZURE_OPENAI_CHAT_DEPLOYMENT"],
39+
openai_api_version=os.environ["AZURE_OPENAI_VERSION"],
40+
azure_ad_token_provider=token_provider,
41+
)
42+
elif API_HOST == "github":
43+
base_model = ChatOpenAI(
44+
model=os.getenv("GITHUB_MODEL", "gpt-4o"),
45+
base_url="https://models.inference.ai.azure.com",
46+
api_key=os.environ.get("GITHUB_TOKEN"),
47+
)
48+
elif API_HOST == "ollama":
49+
base_model = ChatOpenAI(
50+
model=os.environ.get("OLLAMA_MODEL", "llama3.1"),
51+
base_url=os.environ.get("OLLAMA_ENDPOINT", "http://localhost:11434/v1"),
52+
api_key="none",
53+
)
54+
else:
55+
base_model = ChatOpenAI(model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"))
56+
57+
58+
class IssueProposal(BaseModel):
59+
"""Información de contacto de una persona."""
60+
61+
url: str = Field(description="URL del issue")
62+
title: str = Field(description="Título del issue")
63+
summary: str = Field(description="Resumen breve del issue y señales para cerrarlo")
64+
should_close: bool = Field(description="Si el issue debe cerrarse o no")
65+
reply_message: str = Field(description="Mensaje para publicar al cerrar el issue, si aplica")
66+
67+
68+
async def main():
69+
mcp_client = MultiServerMCPClient(
70+
{
71+
"github": {
72+
"url": "https://api.githubcopilot.com/mcp/",
73+
"transport": "streamable_http",
74+
"headers": {"Authorization": f"Bearer {os.environ['GITHUB_TOKEN']}"},
75+
}
76+
}
77+
)
78+
79+
tools = await mcp_client.get_tools()
80+
desired_tool_names = ("list_issues", "search_code", "search_issues", "search_pull_requests")
81+
filtered_tools = [t for t in tools if t.name in desired_tool_names]
82+
83+
prompt_path = Path(__file__).parent.parent / "triager.prompt.md"
84+
with prompt_path.open("r", encoding="utf-8") as f:
85+
prompt = f.read()
86+
agent = create_agent(base_model, prompt=prompt, tools=filtered_tools, response_format=IssueProposal)
87+
88+
user_content = "Encuentra un issue abierto de Azure-samples azure-search-openai-demo que pueda cerrarse."
89+
async for step in agent.astream(
90+
{"messages": [HumanMessage(content=user_content)]}, stream_mode="updates", config={"recursion_limit": 100}
91+
):
92+
for step_name, step_data in step.items():
93+
last_message = step_data["messages"][-1]
94+
if isinstance(last_message, AIMessage) and last_message.tool_calls:
95+
tool_name = last_message.tool_calls[0]["name"]
96+
tool_args = last_message.tool_calls[0]["args"]
97+
logger.info(f"Llamando herramienta '{tool_name}' con args:\n{tool_args}")
98+
elif isinstance(last_message, ToolMessage):
99+
logger.info(f"Resultado de la herramienta:\n{last_message.content[0:200]}...")
100+
if step_data.get("structured_response"):
101+
print(step_data["structured_response"])
102+
103+
104+
if __name__ == "__main__":
105+
logger.setLevel(logging.INFO)
106+
asyncio.run(main())
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
"""Ejemplo de agente LangChain v1 + servidor MCP HTTP de itinerarios.
2+
3+
Prerrequisito:
4+
Inicia el servidor MCP local definido en `mcp_server_basic.py` en el puerto 8000:
5+
python examples/mcp_server_basic.py
6+
"""
7+
import asyncio
8+
import logging
9+
import os
10+
11+
import azure.identity
12+
from dotenv import load_dotenv
13+
from langchain.agents import create_agent
14+
from langchain_core.messages import HumanMessage
15+
from langchain_mcp_adapters.client import MultiServerMCPClient
16+
from langchain_openai import AzureChatOpenAI, ChatOpenAI
17+
from rich.logging import RichHandler
18+
19+
logging.basicConfig(level=logging.WARNING, format="%(message)s", datefmt="[%X]", handlers=[RichHandler()])
20+
logger = logging.getLogger("itinerario_lang")
21+
22+
load_dotenv(override=True)
23+
API_HOST = os.getenv("API_HOST", "github")
24+
25+
if API_HOST == "azure":
26+
token_provider = azure.identity.get_bearer_token_provider(
27+
azure.identity.DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
28+
)
29+
base_model = AzureChatOpenAI(
30+
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
31+
azure_deployment=os.environ.get("AZURE_OPENAI_CHAT_DEPLOYMENT"),
32+
openai_api_version=os.environ.get("AZURE_OPENAI_VERSION"),
33+
azure_ad_token_provider=token_provider,
34+
)
35+
elif API_HOST == "github":
36+
base_model = ChatOpenAI(
37+
model=os.getenv("GITHUB_MODEL", "gpt-4o"),
38+
base_url="https://models.inference.ai.azure.com",
39+
api_key=os.environ.get("GITHUB_TOKEN"),
40+
)
41+
elif API_HOST == "ollama":
42+
base_model = ChatOpenAI(
43+
model=os.environ.get("OLLAMA_MODEL", "llama3.1"),
44+
base_url=os.environ.get("OLLAMA_ENDPOINT", "http://localhost:11434/v1"),
45+
api_key="none",
46+
)
47+
else:
48+
base_model = ChatOpenAI(model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"))
49+
50+
51+
async def run_agent():
52+
client = MultiServerMCPClient(
53+
{
54+
"itinerary": {
55+
# Asegúrate de iniciar tu servidor de itinerarios en el puerto 8000
56+
"url": "http://localhost:8000/mcp/",
57+
"transport": "streamable_http",
58+
}
59+
}
60+
)
61+
62+
tools = await client.get_tools()
63+
agent = create_agent(base_model, tools)
64+
65+
user_query = (
66+
"Encuéntrame un hotel en San Francisco para 2 noches comenzando el 2026-01-01. "
67+
"Necesito un hotel con WiFi gratis y piscina."
68+
)
69+
70+
response = await agent.ainvoke({"messages": [HumanMessage(content=user_query)]})
71+
final = response["messages"][-1].content
72+
print(final)
73+
74+
75+
def main():
76+
asyncio.run(run_agent())
77+
78+
79+
if __name__ == "__main__":
80+
logger.setLevel(logging.INFO)
81+
main()

0 commit comments

Comments
 (0)