From efa63a870aac068d1c3b6edc27bfd26f83f38c4d Mon Sep 17 00:00:00 2001 From: tanxing Date: Thu, 14 Aug 2025 14:23:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=89=8D=E7=AB=AF=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E6=96=87=E4=BB=B6=E6=97=B6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E9=BB=98=E8=AE=A4force=5Frebuild=20chore:=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E6=8F=90=E7=A4=BA=E8=AF=8D=20chore:=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E5=90=91=E9=87=8F=E6=A3=80=E7=B4=A2=E7=9A=84top=5Fk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deepsearcher/agent/deep_search.py | 49 ++++++++------ deepsearcher/templates/html/index.html | 4 +- deepsearcher/templates/index.html | 88 -------------------------- deepsearcher/vector_db/milvus.py | 4 +- main.py | 6 +- 5 files changed, 38 insertions(+), 113 deletions(-) delete mode 100644 deepsearcher/templates/index.html diff --git a/deepsearcher/agent/deep_search.py b/deepsearcher/agent/deep_search.py index 3d6fdb6..9a5d75a 100644 --- a/deepsearcher/agent/deep_search.py +++ b/deepsearcher/agent/deep_search.py @@ -23,9 +23,11 @@ COLLECTION_ROUTE_PROMPT = """ SUB_QUERY_PROMPT = """ 为了能够全面的回答这个问题,请你尝试把原本的问题拆分或扩展为几个子问题 -不可以太多,但是也不可以太少,请根据问题复杂程度来决定子问题的数量 +请你使用自顶向下和自底向上两种方向来思考如何拆分问题 +子问题的数量不可以太多,但是也不可以太少,应当保证问题的回答全面性,请根据问题复杂程度来决定子问题的数量 如果原问题本身非常简单,没有必要进行拆分,则保留输出原问题本身 -需要保证每个子问题都具体、清晰、不可分(原子性),最终返回一个字符串列表 +需要保证每个子问题都具体、清晰、不可分(原子性,即不可以再包含更细分的子问题),子问题中不要包含"请你回答"、"请你总结"、"请你分析"等祈使类型词语 +你需要最终返回一个字符串列表 原问题: {original_query} @@ -49,8 +51,8 @@ SUB_QUERY_PROMPT = """ RERANK_PROMPT = """ -根据当前的问题和获取到的文档片段 -请你对当前获取到的文档是否能帮助回答这个问题(直接或间接,全面或部分,都可以)给出一个快速判断 +根据当前的问题和获取到的文档片段(文档片段包裹都在标签中并有对应的id) +请你对当前获取到的文档是否能帮助回答这个问题(直接或间接、全面或部分,都可以)给出一个快速判断 对于每一个文档片段,你只应该返回"YES"或者"NO"(需要注意顺序和数量) 问题: {query} @@ -58,17 +60,18 @@ RERANK_PROMPT = """ 检索到的文档片段: {chunks} -例如,给定4个chunks(实际检索到的文档片段不一定是4个),返回: ["YES", "NO", "YES", "YES"] +例如,假如给出4个chunks(实际检索到的文档片段不一定是这么多),返回4个"YES"或者"NO"(注意这只是一个示例,不代表实际判断): ["YES", "NO", "YES", "YES"] 使用的语言与问题相同 你需要返回的是 a python list of str without any addtional content: """ REFLECT_PROMPT = """ -根据原问题和子问题,以及获取到的文档片段,请你决定是否要生成更多的问题。 -如果已经获得的文档片段没能覆盖所有的子问题,这意味着这些文档无法被检索到。 -你可以尝试生成相似但些许不同的问题来尝试重新检索,但是也可以根据获得到的文档片段进行批评思考,生成新的问题来保证原问题的回答的准确和全面 -如果没有真的必要继续研究(取决于你的判断),返回一个空列表 +根据原问题和子问题,以及获取到的文档片段,请你决定是否要生成更多的问题,这些问题将被用于后续的思考和搜索。 +你应该根据已经获得到的文档片段进行批评思考,生成其他新的问题来保证原问题的回答的准确和全面。 +如果已经获得的文档片段没能覆盖所有的子问题,这意味着有关这些问题的文档无法被检索到,你应该根据你自己的知识补充思考。 +需要保证每个新的问题都具体、清晰、不可分(原子性)并且不可以和之前的问题重复,新的问题中不要包含"请你回答"、"请你总结"、"请你分析"等祈使类型词语 +如果没有真的必要继续研究(取决于你的判断),返回一个空列表。 原问题: {original_query} @@ -83,24 +86,34 @@ REFLECT_PROMPT = """ SUMMARY_PROMPT = """ -你是一个内容分析专家,请你根据提供的问题和检索到的信息生成详尽的长文回答。 -如果检索到的信息不足以回答问题或者必须添加额外信息才能能回答,你应该使用你的知识来进行补充, -这种情况下,你自己提供的信息需要使用例如"your knowledge here[^0]"引用,注意,这里的"[^0]"的序号0是固定的,表示你的知识,下文当中有文末引用的例子 -同时,你应该根据提供的信息生成文内引用和文末参考资料列表,来自文档切片的reference引用从[^1]开始 -如果多个片段是相同的来源或者一个片段可以回答多个问题,文内引用可以引用多次,但文末只引用一次来源,即文末的引用列表中不能有重复的来源。 +你是一个内容分析专家,请你根据提供的问题和检索到的信息生成详尽的、有逻辑的长文回答。 +同时,你应该根据提供的信息生成文内引用和文末参考资料列表,使用markdown脚注。 +如果检索到的信息不足以回答问题或者必须添加额外信息才能回答,你应该使用你的知识来进行补充, +这种情况下,你自己提供的信息需要使用例如"your knowledge here[^0]"引用。 +注意,这里的"[^0]"的序号0是固定的,表示你的知识,文末引用使用"[^0]: AI 生成", +来自的引用序号从[^1]开始,来源需要与前文中的href一致,不需要对每个分配一个引用,而是相同共用一个引用 +另外,如果回答的内容文内引用需要引用多个,请添加多个[^index]到句尾。 +如果多个片段是相同的来源或者一个片段可以回答多个问题,文内引用可以引用多次,但文末只引用一次来源,即文末的引用列表中不能有重复。 例子: -文内引用示例(使用markdown脚注): +文内引用示例: "XGBoost是非常强大的集成学习模型[^2]" -(必须使用 "[^index]",这里的index是对应的的id) -文末引用示例 (需要与前文reference的href一致,不需要对每个chunk分配一个引用,而是每一个referecen共用一个引用): -[^0]: AI Generated +文末引用示例: +正确例子: +[^0]: AI 生成 +[^1]: files/docs/machine_learning.md [^2]: files/docs/chap_001_003_models.md +错误例子: +[^0]: AI 生成 +[^1]: files/docs/machine_learning.md +[^2]: files/docs/chap_001_003_models.md +[^3]: files/docs/chap_001_003_models.md(错误,这是重复引用) + 原问题: {original_query} diff --git a/deepsearcher/templates/html/index.html b/deepsearcher/templates/html/index.html index f9591d0..00a7803 100644 --- a/deepsearcher/templates/html/index.html +++ b/deepsearcher/templates/html/index.html @@ -33,7 +33,7 @@
-

网站内容加载

+

网站加载

@@ -46,7 +46,7 @@
- +
diff --git a/deepsearcher/templates/index.html b/deepsearcher/templates/index.html deleted file mode 100644 index 20af32f..0000000 --- a/deepsearcher/templates/index.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - DeepSearcher - 智能搜索系统 - - - -
-
-

DeepSearcher 智能搜索系统

-

基于大型语言模型和向量数据库的企业知识管理系统,支持私有数据搜索和在线内容整合,提供准确答案和综合报告。

-
- -
-
-

文件加载

-
- - -
-
- - -
-
- - -
- -
-
- -
-

网站加载

-
- - -
-
- - -
-
- - -
- -
-
- -
-

智能查询

-
- - -
-
- - -
- - -
- -
-

查询结果:

-
-
- -
-

处理过程:

-
-
-
-
-
-
- -
-

DeepSearcher © 2025 | 企业知识管理与智能问答系统

-
-
- - - - \ No newline at end of file diff --git a/deepsearcher/vector_db/milvus.py b/deepsearcher/vector_db/milvus.py index 720bef9..2376b22 100644 --- a/deepsearcher/vector_db/milvus.py +++ b/deepsearcher/vector_db/milvus.py @@ -152,7 +152,7 @@ class Milvus(BaseVectorDB): self, collection: str, vector: np.ndarray | list[float], - top_k: int = 3, + top_k: int = 4, query_text: str = None, *args, **kwargs, @@ -163,7 +163,7 @@ class Milvus(BaseVectorDB): Args: collection (Optional[str]): Collection name. If None, uses default_collection. vector (Union[np.array, List[float]]): Query vector for similarity search. - top_k (int, optional): Number of results to return. Defaults to 5. + top_k (int, optional): Number of results to return. Defaults to 4. query_text (Optional[str], optional): Original query text for hybrid search. Defaults to None. *args: Variable length argument list. **kwargs: Arbitrary keyword arguments. diff --git a/main.py b/main.py index e9e5eda..d30f423 100644 --- a/main.py +++ b/main.py @@ -112,7 +112,7 @@ def load_files( examples=[256], ), force_rebuild: bool = Body( - False, + True, description="Whether to force rebuild the collection if it already exists.", examples=[False], ), @@ -141,7 +141,7 @@ def load_files( batch_size=batch_size if batch_size is not None else 8, force_rebuild=force_rebuild, ) - return {"message": "Files loaded successfully."} + return {"message": "成功加载文档"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @@ -198,7 +198,7 @@ def load_website( batch_size=batch_size if batch_size is not None else 8, force_rebuild=force_rebuild, ) - return {"message": "Website loaded successfully."} + return {"message": "成功加载网址"} except Exception as e: raise HTTPException(status_code=500, detail=str(e))