【第 1 篇:项目起点——《从零搭建企业级 LLM 应用》】
第 1 篇:项目起点——《从零搭建企业级 LLM 应用》
系列记录:《从零搭建企业级 LLM 应用》,这是第 1 篇
下一篇:框架选型——LangChain、LangGraph、CrewAI
为什么开始写这个
我想通过搭建一个给企业用的知识库智能助手的小项目,来学习搭建智能体的全工作流程、框架等。
这些记录是我自己复盘用的,也顺便整理成文。不是教程,就是我在这个过程中的思考、纠结和踩坑。
初步想法
最开始的规划比现在大不少,为了能逐步推进和实现,于是开始做减法。
- 知识库检索问答——“公司的财务报销流程是什么?”
- 基于企业相关 Excel 数据进行数据统计——“上个月各部门考勤异常统计”
- 能帮忙写报告——“根据知识库相关文件帮我写一份季度工作总结”
初步架构设计
初步架构分层图:
L1 用户界面层 Streamlit(Web 页面)
L2 网关层 登录认证 · 角色权限 · 操作日志
L3 智能体层 一个路由器 + 三个 Agent
L4 基础设施 知识库检索 · 代码沙箱 · LLM · 数据库
每层之间定好接口之后,各层之间互不干扰,便于开发过程中定位问题。
选技术栈的几个决定
SQLite——就一个文件,省事
-
SQLite:轻量级嵌入式数据库,数据库就是一个文件,零配置,适合单机、低并发、移动端或原型项目。
-
PostgreSQL:企业级全功能数据库,支持高并发、复杂查询、大规模数据、多用户协作,适合生产环境后端系统。
考虑到SQLite的轻量级,以及对数据库的需求不大,所以选了SQLite。
Streamlit——纯 Python,不用写前端
为了快速搭建项目,先将智能体核心形成闭环,故暂时选择了能够快速搭建前端的 Streamlit。Streamlit 的好处是写 Python 就是在写页面。打算后续再用其他前端框架做,不过暂时还没想好选择什么框架合适。
if st.button("登录"):
user = authenticate_user(username, password)
...
一行代码就是一个按钮、一个输入框。Streamlit的缺点是每次点击重跑整个脚本的模型,所有状态必须手动管理。后面踩了不少相关的坑,留到第 6 篇再说。
Qwen——中文处理好,且便宜
Qwen对中文文档的处理效果还是不错的,比同价位的 GPT-3.5 好一些。而且 qwen-plus 的定价不贵…新人还有不少免费额度
还有一个细节——我在代理层用的是 ChatOpenAI,Qwen 的 API 兼容 OpenAI 格式。这意味着如果哪天想换模型,改一行 base_url 就行。甚至我在代码里留了一段注释掉的 Ollama 本地部署配置,外网挂了可以直接切本地模型。
数据库:初步建了 4 张表
users -- 用户名、密码哈希(bcrypt)、角色(admin/user)
audit_logs -- 谁、什么时间、做了什么操作
conversations -- 对话列表
messages -- 每条消息的内容、所属对话、推理步骤
几点小设计:
- 密码存
bcrypt哈希,不存明文,泄漏了也解不开 - 禁用账号用
is_active=0而非物理删除,保留审计记录 - 登录失败不区分"用户名不存在"还是"密码错误",防止被暴力枚举
认证:两级角色,简单够用
admin → 全部功能 + 管理后台
user → 问答 + 数据 + 写文档
审计日志:记录所有操作
每次登录、对话、管理操作都自动写入审计日志,管理员后台可以按用户名、操作类型、日期筛选查询。
一些记录
每个模块都是"先跑通 → 再优化"。第一版不追求完美,跑起来发现问题再针对性修。
实际上第一版代码只有一个 agent.py 文件,所有逻辑都塞在一起。是在不断重构中,才慢慢分出 core/、agents/、rules/、data/ 这些目录的。先跑通再整理,比一开始就追求整洁高效得多。
下一篇记录:框架选型——LangChain、LangGraph、CrewAI
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)