桌面端交互:基于Electron + React + Vite,包含桌面主面板、模板预览和桥接层。流程化 Agent:基于Python + LangGraph编排问答、报销、预算、决算等任务流。本地优先:知识库、数据库、导出结果和审计日志都落在本地目录,便于追踪与维护。多格式解析:支持Word / Excel / PDF / 图片 / Markdown / HTML / PPT等文档输入。模型可选接入:既可仅使用本地规则,也可接入兼容 OpenAI 的模型服务。安全沙箱:支持代码扫描、隔离执行与审计留痕。
| 模块 | 说明 | 建议文件名 |
|---|---|---|
| 主面板 | 展示桌面端首页、功能入口、任务状态 | docs/images/dashboard.png |
| 模板预览 | 展示 docx/xlsx 的实时预览界面 |
docs/images/preview.png |
| 桌宠交互 | 展示桌宠悬浮窗、气泡消息或拖拽入口 | docs/images/pet.png |
| 问答或审计结果 | 展示规则问答、审计报告或生成结果 | docs/images/qa-or-report.png |

报销规则问答:回答报销制度、材料要求和流程问题。单次报销处理:扫描材料、提取结构化信息、执行规则校验并生成结果。年度决算与预算:聚合历史记录,输出预算表、决算表和分析内容。模板文件预览:对xlsx/xls/docx模板进行本地预览和自动刷新。安全代码执行:在受限环境中完成扫描、执行与审计。
后端
PythonLangGraphpandasjsonschemaopenpyxlpython-docxpython-pptxPyMuPDF
桌面端
ElectronReactTypeScriptViteAnt Design
输入数据
-> Data_Extraction
-> Category_Alignment
-> Consistency_Check
-> Compliance_Audit
-> Report_Generator
-> JSON / Markdown 报告
desktop_app/ Electron 桌面端与预览界面
agent/ Agent 核心能力、图编排、工具与子模块
data/ 本地数据库、知识库、审计日志、模板数据
docs/ 示例文档、设计资料和输出样例
tests/ 自动化测试
git clone <your-repo-url>
cd agent建议使用 Python 3.10+。
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt建议使用 Node.js 18+。
cd desktop_app
npm install
npm run devpython run_v2.py也可以运行最小示例流程:
python agent.py默认情况下,系统可使用本地规则回复;如果配置了模型环境变量,则普通对话可切换为自由问答模式。
# PowerShell 示例
$env:AGENT_LLM_API_KEY="你的Key"
$env:AGENT_LLM_MODEL="gpt-4o-mini"
$env:AGENT_LLM_BASE_URL="https://api.openai.com/v1"
$env:AGENT_LLM_TIMEOUT="60"说明:
- 未设置
AGENT_LLM_API_KEY时,系统不会调用云端模型。 AGENT_LLM_BASE_URL与AGENT_LLM_API_URL均可使用,代码优先读取BASE_URL。- 若地址未带
/v1,系统会自动补齐再调用接口。
$env:AGENT_LLM_API_KEY="<你的真实Key>"
$env:AGENT_LLM_API_URL="https://llmapi.paratera.com"
$env:AGENT_LLM_MODEL="<平台可用模型ID>"$env:AGENT_LLM_BASE_URL="http://127.0.0.1:1234/v1"
$env:AGENT_LLM_MODEL="google/gemma-3-4b"也可以写入 desktop_app/.env:
AGENT_LLM_BASE_URL=http://127.0.0.1:1234/v1
AGENT_LLM_MODEL=google/gemma-3-4b如果你已经将报销制度文档放入 docs/reimbursement,可先构建本地知识库:
python -m agent.kb.ingest --source docs/reimbursement --output data/kb/reimbursement_kb.json然后在 desktop_app/.env 中配置:
AGENT_KB_PATH=../data/kb/reimbursement_kb.json
AGENT_KB_TOP_K=4
AGENT_KB_MAX_CHARS=1800可在任务 payload 中通过 graph_policy 控制各 SubGraph 的行为:
{
"graph_policy": {
"reimburse_stop_on_rule_violation": true,
"qa_allow_empty_query": false,
"qa_kb_top_k": 4,
"qa_kb_score_threshold": 0.75,
"final_generate_when_empty": true,
"budget_skip_calculate_when_empty": true
}
}可选环境变量:
AGENT_GRAPH_REIMBURSE_STOP_ON_RULE_VIOLATIONAGENT_GRAPH_QA_ALLOW_EMPTY_QUERYAGENT_GRAPH_QA_KB_TOP_KAGENT_GRAPH_QA_KB_SCORE_THRESHOLDAGENT_GRAPH_FINAL_GENERATE_WHEN_EMPTYAGENT_GRAPH_BUDGET_SKIP_CALCULATE_WHEN_EMPTY
AGENT_CATEGORY_OVERRUN_THRESHOLD=0.10
AGENT_HIGH_RISK_LABEL=High Risk
AGENT_SPECIAL_EXPENSE_KEYWORDS=餐饮,会议agent/
├── core/ 调度、事件总线、窗口管理
├── graphs/ 主图与各类 SubGraph
├── kb/ 本地知识库构建与检索
├── parser/ 多格式文档解析能力
├── sandbox/ 代码沙箱与安全策略
└── tools/ 面向工作流的工具封装
desktop_app/
├── electron/ Electron 主进程与 preload
├── src/ React 页面与组件
└── agent_bridge/ 桌面端与 Python Agent 桥接层
data/
├── audit/ 审计日志
├── db/ 本地数据库
├── kb/ 本地知识库文件
└── templates/ 示例模板与输出依赖
可以。未设置 AGENT_LLM_API_KEY 时,系统仍可使用本地规则问答和既有流程能力,不会调用云端模型。
可以。项目支持兼容 OpenAI 协议的本地服务,例如 LM Studio。
重新执行一次 python -m agent.kb.ingest ... 构建命令即可刷新本地知识库。
当前仓库里还没有正式截图资源。建议将截图放入 docs/images/ 后,在“截图预览”部分替换占位内容。
仓库目前未看到明确的 LICENSE 文件。如果准备公开发布,建议补充许可证文件和说明。
项目当前测试以 unittest 为主,可在根目录执行:
python -m unittest discover -s tests已接入 TruLens 离线评估入口,用于评估当前检索链路(search_policy)在真实知识库上的表现。
pip install -r requirements.txtpython run_trulens_eval.py --kb-path data/kb/reimbursement_kb.json --top-k 4 --max-samples 30python run_trulens_eval.py --kb-path data/kb/reimbursement_kb.json --dataset data/eval/qa_eval_samples.json启用 LLM Judge(可选):
python run_trulens_eval.py --dataset data/eval/qa_eval_samples.json --use-llm-judge --judge-model gpt-4o-mini说明:
- 需配置
AGENT_LLM_API_KEY,可选配置AGENT_LLM_BASE_URL - 若 Judge 初始化失败,会自动回退为启发式评分,并在结果
summary.feedback_warnings中记录原因
评估集 JSON 示例:
[
{
"id": "q1",
"question": "高铁一等座是否允许报销?",
"expected_keywords": ["高铁", "报销", "一等座"]
}
]输出结果:
- 默认落盘到
data/eval/trulens_rag_eval_*.json summary包含样本数和平均得分records包含每条问题的检索上下文、引用与打分
可基于空白模板批量生成“指令-输入-输出”数据,用于表单填充类任务微调。
- 使用内置模板生成:
python scripts/generate_sft_synthetic_data.py --template data/eval/sft_template_form_fill.json --output data/eval/sft_synthetic_data.jsonl --count 500- 若你已配置兼容 OpenAI 的模型接口(例如智谱兼容网关),可启用 LLM 生成并自动回退规则生成:
$env:AGENT_SYNTH_API_KEY="<your_key>"
python scripts/generate_sft_synthetic_data.py --template data/eval/sft_template_form_fill.json --use-llm --count 500输出为 JSONL,每行包含 instruction / input / output / meta 字段。
欢迎通过 Issue 和 Pull Request 参与项目改进。
建议贡献流程:
- Fork 仓库并创建功能分支。
- 在本地完成开发与必要测试。
- 更新相关文档,确保配置说明和行为一致。
- 提交 PR,并说明变更背景、实现方式和验证结果。
提交前建议检查:
- 代码是否与现有目录职责一致。
- 新增配置是否已写入 README。
- 测试是否能覆盖关键变更。
- 敏感信息是否已从代码和提交中移除。
- 增加更多附件类型的可视化预览能力
- 优化大文件解析与后台处理性能
- 补充更完整的模板、规则和工作流配置能力
- 完善桌面端打包与分发流程
- 补充正式产品截图、演示动图与发布说明
当前仓库中未看到明确的 LICENSE 文件;如果计划开源,建议补充许可证声明。