項目簡介
該工具包基于LangGraph、FastAPI和Streamlit構建,提供了構建和運行大模型Agent的最小原子能力,包含LangGraph代理、FastAPI服務、用于與服務交互的客戶端以及一個使用客戶端提供聊天界面的Streamlit應用。用戶可以利用該工具包提供的模板快速搭建基于LangGraph框架的智能體應用,簡化部署和調試過程,快速驗證效果。
功能特點
○ LangGraph代理:基于LangGraph框架的智能體工作流,可自由設置節點和中斷處理。
○ FastAPI服務:提供API服務,包含流式和非流式。
○ 內容審核:實現LlamaGuard進行內容審核。
○ UI界面:基于Streamlit的聊天界面,簡化交互流程。
○ 多代理支持:在服務中運行多個代理,并通過URL路徑調用,支持在UI界面隨時切換。
○ 異步設計:利用async/await高效處理并發請求。
○ Docker支持:包含Dockerfile和docker compose文件,方便開發和部署。
文件結構解析
○ src/agents/:定義具有不同功能的幾個代理。
○ src/core/:包括LLM定義和其他設置。
○ src/service/service.py:基于FastAPI的流式和非流式服務。
○ src/client/client.py:封裝的客戶端,用于與代理服務API進行交互。
○ src/streamlit_app.py:基于Streamlit的聊天界面。
快速啟動
1. 配置文件
在項目根目錄下創建一個.env文件,并填入模型服務商的API KEY。
# 最少需要填入一個模型服務商的API—KEY
# API keys for different providers
OPENAI_API_KEY=
DEEPSEEK_API_KEY=
ANTHROPIC_API_KEY=
GOOGLE_API_KEY=
GROQ_API_KEY=
USE_AWS_BEDROCK=false# Use a fake model for testing
USE_FAKE_MODEL=false# Set a default model
DEFAULT_MODEL=# Web server configuration
HOST=0.0.0.0
PORT=8080# Authentication secret, HTTP bearer token header is required if set
AUTH_SECRET=# Langsmith configuration
LANGCHAIN_TRACING_V2=false
LANGCHAIN_PROJECT=default
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY=# Application mode. If the value is "dev", it will enable uvicorn reload
MODE=# OpenWeatherMap API key
OPENWEATHERMAP_API_KEY=# Add for running ollama
# OLLAMA_MODEL=llama3.2
# Note: set OLLAMA_BASE_URL if running service in docker and ollama on bare metal
# OLLAMA_BASE_URL=http://host.docker.internal:11434# Agent URL: used in Streamlit app - if not set, defaults to http://{HOST}:{PORT}
# AGENT_URL=http://0.0.0.0:8080
2. 創建并啟動虛擬環境
pip install uv
uv sync --frozen
source .venv/bin/activate
3. 啟動agent服務
python src/run_service.py
4. 啟動UI界面
source .venv/bin/activate
streamlit run src/streamlit_app.py
自定義agent
按照該項目的介紹,自定義agent需要如下兩步:
- 在src/agents下新增自定義的agent模塊。
- 將新增的agent導入src/agents/agents.py。
該項目默認提供了4種agent,其中的chatbot只能做簡單的對話,因此筆者打算將其改造為智能問答閱讀助手,可以用于解讀上傳的文件。
只需修改src/streamlit_app.py
# ... existing code ...# Config options
with st.sidebar:st.header(f"{APP_ICON} <