读取本地chatandrole初步成功

This commit is contained in:
2026-03-19 19:31:12 +08:00
parent 4b85b35cf8
commit 91d11abe90
9 changed files with 69 additions and 50 deletions

View File

@@ -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

View File

@@ -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'}")

View File

@@ -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")

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View 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,
}
}
}
})

View File

@@ -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}"}