读取本地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 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()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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