读取本地chatandrole初步成功
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
from fastapi import FastAPI
|
||||
# 假设这些函数已经在其他地方定义
|
||||
from backend.core.items import ChatRequest
|
||||
from backend.tools.get_all_role_and_chat import get_all_role_and_chat as get_chat_file
|
||||
from fastapi import APIRouter
|
||||
from ..core.items import ChatRequest
|
||||
from ..tools.get_all_role_and_chat import get_all_role_and_chat
|
||||
from ..tools.save_input_to_json import save_input_to_json
|
||||
|
||||
app = FastAPI()
|
||||
router = APIRouter()
|
||||
|
||||
# 1. 将输入内容持久化存储到本地jsonl方便前端读
|
||||
@app.post("/generate_reply")
|
||||
async def save_input_to_json(chat_request: ChatRequest):
|
||||
return 0
|
||||
@router.post("/generate_reply")
|
||||
async def save_chat_to_json(chat_request: ChatRequest):
|
||||
# 调用实际的保存函数
|
||||
return await save_input_to_json(chat_request)
|
||||
|
||||
# 2. 从本地jsonl中读取历史对话
|
||||
@app.get("/api/get_all_role_and_chat")
|
||||
def get_all_role_and_chat():
|
||||
# 直接调用导入的函数
|
||||
result = get_chat_file()
|
||||
return result
|
||||
@router.get("/tool_bar/get_all_role_and_chat")
|
||||
def get_all_role_and_chat_endpoint():
|
||||
# 正确调用函数并返回结果
|
||||
return get_all_role_and_chat()
|
||||
|
||||
@@ -7,8 +7,7 @@ from dotenv import load_dotenv
|
||||
# __file__ 指向本文件的绝对路径
|
||||
# .parent 指向 backend/ 目录
|
||||
# .parent.parent 指向项目根目录 (即包含 backend/ 和 frontend/ 的目录)
|
||||
PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent.parent # 修改这里,添加一个 .parent
|
||||
|
||||
PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
|
||||
# 2. 加载 .env 文件
|
||||
# 假设 .env 文件位于项目根目录下
|
||||
load_dotenv(PROJECT_ROOT / ".env")
|
||||
@@ -41,7 +40,9 @@ class Settings:
|
||||
settings = Settings()
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 实例化配置对象
|
||||
settings = Settings()
|
||||
print(settings.BASE_PATH)
|
||||
print(f"项目根目录: {settings.BASE_PATH}")
|
||||
print(f"数据目录: {settings.DATA_PATH}")
|
||||
print(f"聊天目录: {settings.DATA_PATH / 'chat'}")
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# backend/app/main.py
|
||||
from fastapi import FastAPI
|
||||
from .api.routes import router
|
||||
from .api.route import router
|
||||
|
||||
app = FastAPI(title="LLM Workflow Engine")
|
||||
|
||||
|
||||
@@ -43,4 +43,4 @@ def get_all_role_and_chat() -> Dict[str, List[str]]:
|
||||
print(f"处理文件夹 {entry.name} 时出错: {str(e)}")
|
||||
continue
|
||||
|
||||
return result
|
||||
return result
|
||||
@@ -2,7 +2,7 @@ import json
|
||||
from datetime import datetime
|
||||
from backend.core import config as cfg
|
||||
from pathlib import Path
|
||||
|
||||
from ..core.items import ChatRequest
|
||||
|
||||
# 假设 ChatRequest 定义在这里或者从其他地方导入
|
||||
# from backend.app.core.items import ChatRequest
|
||||
|
||||
@@ -3,14 +3,12 @@ version: '3.8'
|
||||
services:
|
||||
backend:
|
||||
build: ./backend
|
||||
# 启动命令:明确指定 backend.api.route,并开启热重载
|
||||
command: uvicorn backend.api.route:app --host 0.0.0.0 --port 8000 --reload
|
||||
command: uvicorn backend.main:app --host 0.0.0.0 --port 8000 --reload
|
||||
ports:
|
||||
- "3001:8000"
|
||||
volumes:
|
||||
# 挂载后端源码,实现代码热更新
|
||||
- ./backend:/app/backend
|
||||
- ./data:/data
|
||||
- ./data:/app/data
|
||||
- ./outputs:/outputs
|
||||
environment:
|
||||
- PYTHONUNBUFFERED=1
|
||||
@@ -23,17 +21,13 @@ services:
|
||||
ports:
|
||||
- "3000:5173"
|
||||
volumes:
|
||||
# 挂载前端源码,实现代码热更新
|
||||
- ./frontend-react:/app
|
||||
# 匿名卷:防止宿主机的 node_modules 覆盖容器内的模块
|
||||
# (这是前端 Docker 开发的最佳实践,防止因系统差异导致依赖不兼容)
|
||||
- /app/node_modules
|
||||
environment:
|
||||
# 告诉前端后端地址
|
||||
# 注意:这里使用 localhost 是因为它们都映射到了宿主机
|
||||
# 在容器内部通信时,前端通过 Vite 代理转发到 http://backend:8000
|
||||
- VITE_BACKEND_URL=http://localhost:3001
|
||||
# 修改 command:先安装依赖(确保vite存在),再启动开发服务器(保留热更新)
|
||||
# 如果不需要特定环境变量,可以完全移除 environment 部分
|
||||
# 或者添加有效的环境变量,例如:
|
||||
- NODE_ENV=development
|
||||
- VITE_BACKEND_URL=http://backend:8000
|
||||
command: sh -c "npm install && npm run dev -- --host 0.0.0.0"
|
||||
depends_on:
|
||||
- backend
|
||||
|
||||
@@ -13,19 +13,31 @@ const Toolbar = ({
|
||||
const [roleData, setRoleData] = useState({});
|
||||
|
||||
// 获取角色和聊天数据
|
||||
React.useEffect(() => {
|
||||
const fetchRoleData = async () => {
|
||||
try {
|
||||
const response = await fetch('/api/get_all_role_and_chat');
|
||||
const data = await response.json();
|
||||
setRoleData(data);
|
||||
} catch (error) {
|
||||
console.error('获取角色数据失败:', error);
|
||||
const fetchRoleData = async () => {
|
||||
console.log('开始获取角色数据...');
|
||||
try {
|
||||
const response = await fetch('/api/tool_bar/get_all_role_and_chat', {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Cache-Control': 'no-cache',
|
||||
'Pragma': 'no-cache',
|
||||
'Expires': '0'
|
||||
}
|
||||
};
|
||||
});
|
||||
console.log('响应状态:', response.status);
|
||||
const data = await response.json();
|
||||
console.log('获取到的数据:', data);
|
||||
setRoleData(data);
|
||||
} catch (error) {
|
||||
console.error('获取角色数据失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
fetchRoleData();
|
||||
}, []);
|
||||
// 处理下拉框展开/收起
|
||||
const handleDropdownToggle = async () => {
|
||||
await fetchRoleData();
|
||||
setIsDropdownOpen(!isDropdownOpen);
|
||||
};
|
||||
|
||||
// 处理角色选择
|
||||
const handleRoleSelect = (role) => {
|
||||
@@ -61,7 +73,7 @@ const Toolbar = ({
|
||||
<div className="dropdown-container">
|
||||
<div
|
||||
className="dropdown-trigger"
|
||||
onClick={() => setIsDropdownOpen(!isDropdownOpen)}
|
||||
onClick={handleDropdownToggle}
|
||||
>
|
||||
{selectedRole || '选择角色'}
|
||||
<span className="dropdown-arrow">▼</span>
|
||||
@@ -104,4 +116,4 @@ const Toolbar = ({
|
||||
);
|
||||
};
|
||||
|
||||
export default Toolbar;
|
||||
export default Toolbar;
|
||||
|
||||
14
frontend-react/vite.config.js
Normal file
14
frontend-react/vite.config.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import react from '@vitejs/plugin-react'
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [react()],
|
||||
server: {
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://backend:8000',
|
||||
changeOrigin: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
8
main.py
8
main.py
@@ -1,13 +1,11 @@
|
||||
from fastapi import FastAPI
|
||||
from backend.api.route import router
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
# 注册API路由
|
||||
app.include_router(router, prefix="/api")
|
||||
|
||||
@app.get("/")
|
||||
async def root():
|
||||
return {"message": "Hello World"}
|
||||
|
||||
|
||||
@app.get("/hello/{name}")
|
||||
async def say_hello(name: str):
|
||||
return {"message": f"Hello {name}"}
|
||||
|
||||
Reference in New Issue
Block a user