From da1a41cdad067a532d3ba251d94c2cc21bfe53ed Mon Sep 17 00:00:00 2001 From: st2411020204 Date: Thu, 8 Jan 2026 21:04:51 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0README=E5=92=8C?= =?UTF-8?q?=E7=AC=94=E8=AE=B0=E6=95=B0=E6=8D=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新README.md中的开发心得部分,添加了关于AI学习报告功能的描述并优化了段落结构。同时调整notes_data.json中的标签和分类格式,添加新分类"1"。 --- README.md | 6 +- note_organizer.py | 1112 +++++++++++++++++++++++++++++---------------- notes_data.json | 11 +- 3 files changed, 736 insertions(+), 393 deletions(-) diff --git a/README.md b/README.md index 5cec0ef..0954e90 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,11 @@ ## 四、开发心得 -在开发这个学习笔记整理器的过程中,我们深刻体会到了技术与需求之间的平衡。这个项目的目的是为了帮助学生更好地管理和查询学习笔记,让学习变得更加高效有序。我们面向的主要是在校学生,他们需要记录大量的学习内容,我们希望能提供给他们一个有效的整理和检索工具。项目功能包括笔记的创建、编辑、删除、分类管理、标签系统、智能搜索、内容提炼以及导入导出等核心功能,力求为学生们提供一个简单易用的笔记管理平台。 +在开发这个学习笔记整理器的过程中,我们深刻体会到了技术与需求之间的平衡。这个项目的目的是为了帮助学生更好地管理和查询学习笔记,让学习变得更加高效有序。我们面向的主要是在校学生,他们需要记录大量的学习内容,我们希望能提供给他们一个有效的整理和检索工具。项目功能包括笔记的创建、编辑、删除、分类管理、标签系统、智能搜索、内容提炼以及导入导出等核心功能,同时也利用ai为项目增加了一个“ai学习报告”的功能,力求为学生们提供一个简单易用的笔记管理平台。 -最初我们考虑使用Chainlit框架,因为它在AI交互方面表现突出,但在实际开发过程中发现,虽然Chainlit在对话式交互上有优势,但在笔记管理功能上显得不够完善,而且智能搜索的效果也没有达到预期。为了让搜索更加智能,我们尝试了各种prompt设计,包括语义搜索的prompt,要求AI根据用户查询理解意图而非简单关键词匹配;概括提取的prompt,让AI对搜索结果进行智能总结和关键点提取;意图识别的prompt,用于判断用户是想创建、编辑还是删除笔记;删除意图的prompt,区分删除单个笔记、删除所有笔记还是删除某个分类的笔记;以及笔记识别的prompt,让AI从多个笔记中找到用户指定的目标。这些prompt设计经过多次调整,包括改变temperature参数、调整max_tokens长度、优化system prompt的表述方式,但效果始终不尽如人意,AI经常误解用户意图或返回不相关的内容。 +最初我们考虑使用Chainlit框架,因为它在AI交互方面表现突出,但在实际开发过程中发现,虽然Chainlit在对话式交互上有优势,但在笔记管理功能上显得不够完善,而且智能搜索的效果也没有达到预期。 + +为了让搜索更加智能,我们尝试了各种prompt设计,包括语义搜索的prompt,要求AI根据用户查询理解意图而非简单关键词匹配;概括提取的prompt,让AI对搜索结果进行智能总结和关键点提取;意图识别的prompt,用于判断用户是想创建、编辑还是删除笔记;删除意图的prompt,区分删除单个笔记、删除所有笔记还是删除某个分类的笔记;以及笔记识别的prompt,让AI从多个笔记中找到用户指定的目标。这些prompt设计经过多次调整,包括改变temperature参数、调整max_tokens长度、优化system prompt的表述方式,但效果始终不尽如人意,AI经常误解用户意图或返回不相关的内容。 最终我们意识到单纯依赖AI并不能解决所有问题,于是转向了更传统但更可靠的解决方案。在搜索功能上,我们结合了关键词匹配和简单的语义分析,虽然不如纯AI搜索那么智能,但准确性和稳定性大大提升。在笔记管理方面,我们采用了传统的CRUD操作配合Streamlit的交互组件,让用户能够通过直观的界面进行操作,而不是完全依赖自然语言交互。这种混合模式既保留了AI的辅助功能,又确保了核心功能的可靠性。经过反复比较和测试,最终选择了Streamlit框架,它在界面设计和功能实现上更加成熟,能够更好地满足我们的需求。 diff --git a/note_organizer.py b/note_organizer.py index af70a94..030c4f6 100644 --- a/note_organizer.py +++ b/note_organizer.py @@ -4,10 +4,46 @@ import json import os import re from collections import Counter +import requests +from dotenv import load_dotenv # 1. 页面配置 st.set_page_config(page_title="学习笔记整理器", page_icon="📚", layout="wide") +# 加载环境变量 +load_dotenv() + +# DeepSeek API配置 +DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY") +DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions" + +# 常量定义 +DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" + +def call_deepseek_api(messages, model="deepseek-chat", temperature=0.7, max_tokens=2000): + """调用DeepSeek API""" + try: + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {DEEPSEEK_API_KEY}" + } + + payload = { + "model": model, + "messages": messages, + "temperature": temperature, + "max_tokens": max_tokens + } + + response = requests.post(DEEPSEEK_API_URL, headers=headers, json=payload, timeout=30) + response.raise_for_status() + + result = response.json() + return result["choices"][0]["message"]["content"] + except Exception as e: + st.error(f"AI API调用失败: {str(e)}") + return None + # 添加自定义CSS样式 st.markdown("""