构建数据分析师代理:使用LangGraph和Azure Container Apps动态会话
在这个示例中,我们将构建一个能够查询Postgres数据库并运行Python代码来分析检索到的数据的代理。我们将使用LangGraph进行代理协调,并使用Azure Container Apps动态会话来安全地执行Python代码。
注意:构建与SQL数据库交互的大型语言模型(LLM)系统需要执行模型生成的SQL查询。这样做存在固有风险。确保您的数据库连接权限始终尽可能地限制在代理需求的范围内。这将减轻但不能完全消除构建模型驱动系统的风险。有关一般安全最佳实践的更多信息,请参见我们的安全指南。
安装
让我们通过安装Python依赖项并设置我们的OpenAI凭据、Azure Container Apps会话池端点和我们的SQL数据库连接字符串来开始设置。
安装依赖项
%pip install -qU langgraph langchain-azure-dynamic-sessions langchain-openai langchain-community pandas matplotlib
设置凭据
默认情况下,此演示使用:
- Azure OpenAI用于模型:Azure OpenAI 创建资源
- Azure PostgreSQL用于数据库:Azure CLI 创建PostgreSQL服务器
- Azure Container Apps动态会话用于代码执行:Azure Container Apps 代码解释器会话
此LangGraph架构也可以与任何其他调用工具的LLM和任何SQL数据库一起使用。
import getpass
import os
os.environ["AZURE_OPENAI_API_KEY"] = getpass.getpass("Azure OpenAI API key")
os.environ["AZURE_OPENAI_ENDPOINT"] = getpass.getpass("Azure OpenAI endpoint")
AZURE_OPENAI_DEPLOYMENT_NAME = getpass.getpass("Azure OpenAI deployment name")
SESSIONS_POOL_MANAGEMENT_ENDPOINT = getpass.getpass(
"Azure Container Apps dynamic sessions pool management endpoint"
)
SQL_DB_CONNECTION_STRING = getpass.getpass("PostgreSQL connection string")
导入
import ast
import base64
import io
import json
import operator
from functools import partial
from typing import Annotated, List, Literal, Optional, Sequence, TypedDict
import pandas as pd
from IPython.display import display
from langchain_azure_dynamic_sessions import SessionsPythonREPLTool
from langchain_community.utilities import SQLDatabase
from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, ToolMessage
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_core.runnables import RunnablePassthrough
from langchain_core.tools