Commit 0804f32e by tinywell

镜像编译及容器部署

parent 0a2be35f
tmp
claie_crawler
faiss
gradio_file
init_db
lae_pg_data
test
\ No newline at end of file
# 使用官方的Python 3.10基础镜像
FROM python:3.10
# 使用官方的Python 3.11基础镜像
FROM python:3.11
# 设置工作目录
WORKDIR /app
......@@ -12,10 +12,6 @@ RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 配置python环境
RUN pip install --no-cache-dir -r requirements.txt
RUN mv /usr/local/lib/python3.10/site-packages/gradio/templates/frontend/index.html /usr/local/lib/python3.10/site-packages/gradio/templates/frontend/index.html.back
RUN mv /usr/local/lib/python3.10/site-packages/gradio/templates/frontend/share.html /usr/local/lib/python3.10/site-packages/gradio/templates/frontend/share.html.back
RUN cp /app/gradio_file/index.html /usr/local/lib/python3.10/site-packages/gradio/templates/frontend
RUN cp /app/gradio_file/share.html /usr/local/lib/python3.10/site-packages/gradio/templates/frontend
# 运行一个简单的Python命令以确保环境正确配置
CMD ["python", "test/gradio_test.py"]
CMD cd src && python controller/api.py
\ No newline at end of file
lae_agent:
docker build -t brilliance/lae_agent .
version: '3'
services:
postgres:
image: postgres
container_name: lae_pgsql
lae_agent:
image: brilliance/lae_agent
container_name: lae_agent
environment:
POSTGRES_PASSWORD: 111111
# GEO_AGENT_TOOL_BASE_URL: http://localhost:5001
GEO_AGENT_TOOL_BASE_URL: http://172.30.0.37:30007
# GEO_AGENT_API_BASE: http://192.168.10.14:8000/v1
# GEO_AGENT_LLM_MODEL: Qwen2-7B
ports:
- "5434:5432"
volumes:
- ./lae_pg_data:/var/lib/postgresql/data
- ./init_db/create_db.sql:/docker-entrypoint-initdb.d/create_db.sql
- ./init_db/create_table.sql:/docker-entrypoint-initdb.d/create_table.sql
- "8088:8088"
#bitsandbytes==0.41.1
cpm-kernels==1.0.11
fastapi==0.100.0
Flask==2.1.1
jieba==0.42.1
langchain==0.1.13
peft==0.4.0
psycopg2==2.9.7
langchain
langchain-openai
langchain-community
langchain-core
pydantic==1.10.12
requests==2.31.0
sentence-transformers==2.2.2
transformers==4.31.0
uvicorn==0.23.1
unstructured==0.8.1
\ No newline at end of file
bs4==0.0.1
mdtex2html==1.2.0
faiss-cpu==1.7.2 # https://github.com/facebookresearch/faiss/blob/main/INSTALL.md
gradio==3.48.0
qianfan==0.3.13.1
modelscope==1.14.0
wkhtmltopdf==0.2
pdfkit==1.0.0
\ No newline at end of file
import httpx
from typing import List, Optional, Dict, TypeVar, Generic, Any
from typing import TypeVar, Generic, Any, Optional, List, Dict
from pydantic import BaseModel
import asyncio
from urllib.parse import urljoin
# 泛型类型定义
......
from typing import Dict, List, Tuple, Any, Optional
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from datetime import datetime
from pydantic import BaseModel, Field
from typing import Type
from langchain_core.tools import BaseTool
......@@ -17,7 +13,7 @@ class BaseRateTool(BaseTool):
def __init__(self, **data):
super().__init__(**data)
def format_response(self, data: Dict[str, Any], chart: go.Figure) -> Dict[str, Any]:
def format_response(self, data: Dict[str, Any], chart: Any) -> Dict[str, Any]:
"""格式化返回结果"""
return {
'data': data,
......
import os
import sys
import argparse
sys.path.append('../')
import argparse
from typing import Optional
from fastapi import FastAPI, Header
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
from src.server.agent_rate import new_rate_agent
from src.server.classify import new_router_llm
from src.controller.request import GeoAgentRateRequest
from langchain_openai import ChatOpenAI
# 默认配置
DEFAULT_CONFIG = {
"PORT": 8088,
"HOST": "0.0.0.0",
"LLM_MODEL": "Qwen2-7B",
"API_BASE": "http://192.168.10.14:8000/v1",
"TOOL_BASE_URL": "http://localhost:5001",
"API_KEY": "xxxxxxxxxxxxx"
}
def get_config(key: str, args: Optional[argparse.Namespace] = None) -> str:
"""
获取配置值,优先级:环境变量 > 命令行参数 > 默认值
Args:
key: 配置键名
args: 命令行参数对象
Returns:
str: 配置值
"""
# 环境变量名转换为大写
env_key = f"GEO_AGENT_{key.upper()}"
# 优先从环境变量获取
value = os.getenv(env_key)
if value is not None:
return value
print(f"env_key: {env_key} value: {value}")
# 其次从命令行参数获取
if args is not None:
arg_value = getattr(args, key.lower(), None)
if arg_value is not None:
return str(arg_value)
# 最后使用默认值
return str(DEFAULT_CONFIG[key.upper()])
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 允许所有域访问,也可以指定特定域名
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"], # 允许所有HTTP方法
allow_headers=["*"], # 允许所有HTTP头
allow_methods=["*"],
allow_headers=["*"],
)
global base_llm, tool_base_url
base_llm = None
tool_base_url = None
class AgentManager:
def __init__(self):
self.llm = None
self.agent = None
self.router_llm = None
def initialize(self, api_key: str, api_base: str, model_name: str, tool_base_url: str):
self.llm = ChatOpenAI(
......@@ -35,7 +76,7 @@ class AgentManager:
model_name=model_name,
verbose=True
)
self.agent = new_rate_agent(self.llm,verbose=True,tool_base_url=tool_base_url)
self.agent = new_rate_agent(self.llm, verbose=True, tool_base_url=tool_base_url)
self.router_llm = new_router_llm(self.llm)
def get_llm(self):
......@@ -49,10 +90,8 @@ class AgentManager:
agent_manager = AgentManager()
@app.post('/api/agent/rate')
def rate(chat_request: GeoAgentRateRequest, token: str = Header(None)):
agent = agent_manager.get_agent()
try:
res = agent.exec(prompt_args={"input": chat_request.query})
......@@ -69,7 +108,6 @@ def rate(chat_request: GeoAgentRateRequest, token: str = Header(None)):
@app.post('/api/classify')
def classify(chat_request: GeoAgentRateRequest):
llm = agent_manager.get_router_llm()
try:
res = llm.invoke(chat_request.query)
......@@ -84,22 +122,43 @@ def classify(chat_request: GeoAgentRateRequest):
'data': res
}
if __name__ == "__main__":
# 参数解析
def main():
# 命令行参数解析
parser = argparse.ArgumentParser(description="启动API服务")
parser.add_argument("--port", type=int, default=8088, help="API服务端口")
parser.add_argument("--host", type=str, default='0.0.0.0', help="API服务地址")
parser.add_argument("--llm", type=str, default='Qwen2-7B', help="API服务地址")
parser.add_argument("--api_base", type=str, default='http://192.168.10.14:8000/v1', help="API服务地址")
parser.add_argument("--tool_base_url", type=str, default='http://localhost:5001', help="API服务地址")
parser.add_argument("--port", type=int, help="API服务端口")
parser.add_argument("--host", type=str, help="API服务地址")
parser.add_argument("--llm", type=str, help="LLM模型名称")
parser.add_argument("--api_base", type=str, help="OpenAI API基础地址")
parser.add_argument("--tool_base_url", type=str, help="工具服务基础地址")
parser.add_argument("--api_key", type=str, help="OpenAI API密钥")
args = parser.parse_args()
# 获取配置
port = int(get_config("PORT", args))
host = get_config("HOST", args)
llm_model = get_config("LLM_MODEL", args)
api_base = get_config("API_BASE", args)
tool_base_url = get_config("TOOL_BASE_URL", args)
api_key = get_config("API_KEY", args)
# 初始化 agent
agent_manager.initialize(
api_key='xxxxxxxxxxxxx',
api_base=args.api_base,
model_name=args.llm,
tool_base_url=args.tool_base_url
api_key=api_key,
api_base=api_base,
model_name=llm_model,
tool_base_url=tool_base_url
)
uvicorn.run(app, host=args.host, port=args.port)
# 启动服务
print(f"Starting server with configuration:")
print(f"Host: {host}")
print(f"Port: {port}")
print(f"LLM Model: {llm_model}")
print(f"API Base: {api_base}")
print(f"Tool Base URL: {tool_base_url}")
uvicorn.run(app, host=host, port=port)
if __name__ == "__main__":
main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment