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