# agent **Repository Path**: WUJIACHEN123/agent ## Basic Information - **Project Name**: agent - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-22 - **Last Updated**: 2026-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Enterprise AI Copilot - 智能对话助手 基于 LangChain 和阿里云 DashScope 构建的企业级 AI 助手,支持多轮对话、意图识别、文档检索问答(RAG)、数据分析和图片识别等功能。 ## ✨ 功能特性 ### 🎯 核心能力 - **智能意图识别**:自动识别用户需求并路由到相应处理模块 - **多轮对话管理**:维护聊天历史上下文,支持连续对话 - **全链路 Trace**:完整的对话流程和意图识别追踪 ### 📄 RAG 文档问答 - 上传 PDF 文档自动解析和分块 - 基于向量检索的智能问答 - 答案附带引用来源页码 ### 📊 数据分析 Agent - 上传 CSV 文件自动加载 - 自然语言生成 Pandas 代码 - 支持数据分析和可视化(matplotlib) ### 🖼️ 图片识别(Vision) - 支持 PNG/JPG/JPEG 格式 - OCR 文字提取和信息结构化 - 发票、截图等场景识别 ### 💬 普通问答 - 基于上下文的智能对话 - 保留最近 10 轮对话历史 ## 🛠️ 技术栈 - **前端框架**:Streamlit - **AI 框架**:LangChain - **大模型服务**:阿里云 DashScope(通义千问) - `qwen-max`:主要对话模型 - `qwen-turbo`:意图识别(低成本) - `qwen-vl-max`:视觉理解 - **向量数据库**:Chroma - **嵌入模型**:text-embedding-v2 - **文档处理**:PyMuPDF - **数据处理**:Pandas, NumPy ## 📋 环境要求 - Python 3.8+ - Windows / Linux / macOS ## 🚀 快速开始 ### 1. 安装依赖 ```bash pip install streamlit langchain-community langchain-core langchain-text-splitters pandas pymupdf chromadb dashscope pydantic matplotlib numpy ``` ### 2. 配置 API Key 在侧边栏输入您的 DashScope API Key,或设置环境变量: ```bash # Windows PowerShell $env:DASHSCOPE_API_KEY="your-api-key" # Linux/macOS export DASHSCOPE_API_KEY="your-api-key" ``` 获取 API Key:[阿里云 DashScope 控制台](https://dashscope.console.aliyun.com/) ### 3. 启动应用 ```bash cd chatper_12 streamlit run chatbot.py ``` 浏览器会自动打开 `http://localhost:8501` ## 📖 使用指南 ### 界面说明 #### 侧边栏(左侧) - **API Key 配置**:输入 DashScope API Key - **已上传文件状态**:显示当前会话中上传的文件 - **清空按钮**: - 🗑️ 清空对话:清除聊天历史 - 📤 清空文件:移除所有已上传文件 #### 主界面(右侧) - **顶部标题**:Enterprise AI Copilot - **聊天区域**:显示对话历史 - **底部输入区**: - 📁 CSV:上传 CSV 文件用于数据分析 - 📄 PDF:上传 PDF 文件用于文档问答 - 🖼️ 图片:上传图片用于视觉识别 - 🗑️ 清空:清除所有上传文件 - 文本输入框:输入您的问题 ### 典型使用场景 #### 场景 1:PDF 文档问答 1. 点击底部 "📄 PDF" 按钮 2. 选择 PDF 文件(如员工手册、产品文档) 3. 等待处理完成(显示 "📄 PDF: xxx.pdf") 4. 在输入框提问,例如: - "员工手册里病假最多几天?" - "公司的报销流程是什么?" 5. 系统自动检索相关段落并回答,附带页码引用 #### 场景 2:CSV 数据分析 1. 点击底部 "📁 CSV" 按钮 2. 选择 CSV 文件(如销售数据、用户信息) 3. 等待加载完成(显示 "📊 CSV: xxx.csv") 4. 用自然语言提问,例如: - "统计各类别的数量分布" - "用条形图展示销售额趋势" - "计算平均价格和标准差" 5. 系统自动生成并执行 Pandas 代码,返回结果和图表 #### 场景 3:图片识别 1. 点击底部 "🖼️ 图片" 按钮 2. 选择图片文件(发票、截图、照片等) 3. 等待上传完成(显示 "🖼️ 图片: xxx.png") 4. 提问关于图片的问题,例如: - "这张发票的金额是多少?" - "识别截图中的文字内容" 5. 系统返回识别结果和结构化数据 #### 场景 4:普通对话 直接输入问题即可,无需上传文件,例如: - "帮我写一封邮件" - "解释一下量子计算" - "推荐几本编程书籍" ## 🏗️ 项目结构 ``` chatper_12/ ├── chatbot.py # 主程序文件 └── README.md # 项目说明文档 data/ # 测试数据目录 ├── house_price.csv # 房价数据集 ├── personal_data.csv # 个人数据示例 └── sample_document.pdf # 示例文档 ``` ## ⚙️ 配置说明 ### 模型配置(Config 类) ```python class Config: LLM_MODEL = "qwen-max" # 主要对话模型 INTENT_MODEL = "qwen-turbo" # 意图识别模型(轻量级) VISION_MODEL = "qwen-vl-max" # 视觉识别模型 EMBEDDING_MODEL = "text-embedding-v2" # 向量嵌入模型 CONFIDENCE_THRESHOLD = 0.65 # 意图识别置信度阈值 CHUNK_SIZE = 800 # 文档分块大小 CHUNK_OVERLAP = 120 # 分块重叠大小 RETRIEVAL_K = 4 # 检索返回的文档数量 ``` ### 意图类型 | 意图 | 说明 | 触发关键词 | |------|------|-----------| | `rag_qa` | 文档检索问答 | 文档、PDF、手册、规定、制度、知识库 | | `data_agent` | 数据分析 | 数据分析、统计、画图、CSV、表格、分析数据 | | `vision_extract` | 图片识别 | 图片、发票、截图、识别、照片、看图 | | `general` | 普通对话 | 其他情况 | ## 🔧 高级用法 ### 自定义意图识别提示词 修改 `INTENT_PROMPT` 可以调整意图识别的行为: ```python INTENT_PROMPT = ChatPromptTemplate.from_messages([ ("system", "你的自定义提示词..."), # ... ]) ``` ### 调整文档分块策略 在 `process_pdf()` 函数中修改分块参数: ```python splitter = RecursiveCharacterTextSplitter( chunk_size=800, # 增大提高检索精度,减小降低 token 成本 chunk_overlap=120, # 增大使语义更连贯 separators=[...] # 自定义分隔符优先级 ) ``` ### 扩展新的能力模块 1. 添加新的意图类型到 `IntentName` 2. 实现对应的处理函数(如 `custom_answer()`) 3. 在 `process_user_message()` 中添加路由逻辑 ## ⚠️ 注意事项 1. **API Key 安全**:不要在代码中硬编码 API Key,使用环境变量或侧边栏输入 2. **临时文件清理**:PDF 和图片会创建临时文件,程序会自动清理 3. **内存管理**:向量数据库存储在内存中,刷新页面后需要重新上传文件 4. **代码执行安全**:数据分析功能会执行 LLM 生成的代码,生产环境建议添加沙箱 5. **matplotlib 依赖**:如需生成图表,请安装 matplotlib: ```bash pip install matplotlib ``` ## 🐛 常见问题 ### Q1: 启动时报错 "ModuleNotFoundError" **A**: 确保安装了所有依赖包: ```bash pip install -r requirements.txt # 如果有 requirements.txt # 或手动安装 pip install streamlit langchain-community pandas pymupdf chromadb ``` ### Q2: 意图识别不准确 **A**: - 尝试更明确的表述 - 调整 `CONFIDENCE_THRESHOLD` 阈值 - 优化 `INTENT_PROMPT` 中的判断规则 ### Q3: PDF 处理后回答不准确 **A**: - 检查 PDF 是否为可搜索文本(非扫描版) - 调整 `CHUNK_SIZE` 和 `RETRIEVAL_K` 参数 - 确保问题与文档内容相关 ### Q4: 数据分析报错 **A**: - 检查 CSV 文件格式是否正确 - 确认列名和数据类型 - 查看生成的代码是否有语法错误 ### Q5: 图片识别失败 **A**: - 确认图片格式为 PNG/JPG/JPEG - 检查图片是否清晰可读 - 验证 VISION_MODEL 是否有访问权限 ## 📝 开发计划 - [ ] 支持更多文档格式(Word、Excel、TXT) - [ ] 持久化向量数据库 - [ ] 对话历史记录导出 - [ ] 多文件同时处理 - [ ] 自定义 Agent 工具扩展 - [ ] 用户认证和权限管理 - [ ] 部署到云端(Streamlit Cloud / Docker) ## 📄 许可证 本项目仅供学习和研究使用。 ## 🙏 致谢 - [LangChain](https://github.com/langchain-ai/langchain) - [Streamlit](https://streamlit.io/) - [阿里云 DashScope](https://dashscope.aliyun.com/) - [Chroma](https://www.trychroma.com/) --- **Enjoy your AI Copilot! 🤖**