from typing import List import json from openai import OpenAI def create_segmentation_prompt(text): prompt = f""" 请对以下文本进行分段处理,要求如下: 1. **内容相近原则**:将语义相近、主题一致的内容划分到同一段落 2. **长度适中**:每段不要太长(一般不超过200字)也不要太短(一般不少于50字) 3. **语意完整**:确保每段都能表达一个相对完整的意思或观点 4. **结构清晰**:保持原文的逻辑顺序,不要改变原意 5. **过渡自然**:段落之间应有合理的过渡或衔接 6. **关键词提取**:提取5-8个最能代表当前分析范围(整体或段落)核心内容的关键词或短语。避免使用过于通用和宽泛的词汇。 7. **实体提取**:识别并分类以下类型的实体(如果存在): * 人物姓名、别名、称号。 * 组织、公司、机构、政府部门。 * 地点、国家、城市、区域。 * 绝对或相对的日期、时间、年份、时期。 * 产品、作品、物品的名称。 * 历史事件、会议、活动名称。 (*注:实体需要去重) 请直接输出分段后的文本,不需要额外解释或标注 请返回以下JSON格式: {{ "segments": [ {{ "id": 1, "content": "第一段内容", "summary": "本段摘要", "keywords": ["关键词1", "关键词2", ...], "entities": ["实体1", "实体2", ...] }}, {{ "id": 2, "content": "第二段内容", "summary": "本段摘要", "keywords": ["关键词1", "关键词2", ...], "entities": ["实体1", "实体2", ...] }} ], "total_segments": 2 }} 需要分段的文本: "{text}" """ return prompt def text_segment(text: str): prompt = create_segmentation_prompt(text) res = chat_with_deepseek(prompt) return res def create_question_generation_prompt(text): """ 创建生成文本内容问题的 prompt 参数: text (str): 需要生成问题的文本 num_questions (int): 需要生成的问题数量 返回: str: 格式化后的 prompt """ prompt = f""" 请基于以下文本内容生成相关问题。要求: 1. 问题应覆盖文本的主要内容和关键信息 2. 问题类型多样(事实性、理解性、分析性等) 3. 问题应清晰明确,易于理解 4. 问题不应过于简单或复杂,适合文本内容的理解深度 请以严格的 JSON 数组格式返回结果,每个元素是一个问题对象,包含以下字段: - id: 问题序号(从1开始) - question: 问题文本 请返回以下JSON格式: {{ "questions": ["问题1", "问题2", ...] }} 文本内容: "{text}" """ return prompt def text_question(text_to_question: str): prompt = create_question_generation_prompt(text_to_question) return chat_with_deepseek(prompt) def create_keyword_summary_prompt(text, keyword): prompt = f""" 请基于以下关于关键词"{keyword}"的多条知识,生成一段全面、准确且连贯的知识。 ## 描述内容: {text} ## 知识要求: 1. 识别重叠与重复:找出不同文本中表述不同但含义相同的内容。 2. 解决矛盾与冲突:当不同文本的信息不一致时,需要辨别或调和。 3. 建立联系与结构:将分散的知识点连接起来,形成逻辑层次。 4. 提炼与升华:从合并后的信息中总结出更高层次的洞察和结论。 请返回以下JSON格式: {{ "keyword_summary": "关键词知识内容" }} """ return prompt def get_keyword_summary(text, keyword): prompt = create_keyword_summary_prompt(text, keyword) return chat_with_deepseek(prompt) def update_keyword_summary_prompt(text, keyword, new_content): prompt = f""" 请基于以下关于关键词"{keyword}"的相关知识,融合最新的知识到现有的知识中。 ## 知识要求: 1. 识别重叠与重复:找出不同文本中表述不同但含义相同的内容。 2. 解决矛盾与冲突:当不同文本的信息不一致时,需要辨别或调和。 3. 建立联系与结构:将分散的知识点连接起来,形成逻辑层次。 4. 提炼与升华:从合并后的信息中总结出更高层次的洞察和结论。 ## 现有知识: {text} ## 新知识: {new_content} 请返回以下JSON格式: {{ "keyword_summary": "关键词知识内容" }} """ return prompt def update_keyword_summary(text, keyword, new_content): prompt = update_keyword_summary_prompt(text, keyword, new_content) return chat_with_deepseek(prompt) def create_keyword_prompt(text): """ 创建生成关键词总结的 prompt 参数: text (str): 需要生成总结的文本 keyword (int): 关键词 返回: str: 格式化后的 prompt """ prompt = f""" 提取最能代表当前分析范围(整体或段落)核心内容的关键词或短语。避免使用过于通用和宽泛的词汇 ## 描述内容: {text} 请返回以下JSON格式: {{ "keywords": ["关键词1", "关键词2", ...] }} """ return prompt def get_keywords(text): prompt = create_keyword_prompt(text) return chat_with_deepseek(prompt) def chat_with_deepseek(prompt, model="deepseek-chat", max_tokens=8192, temperature=0.7): """ 使用OpenAI兼容方式调用DeepSeek API 参数: prompt (str): 用户输入的提示文本 model (str): 使用的模型,默认为deepseek-chat max_tokens (int): 生成的最大token数 temperature (float): 控制生成随机性的参数(0-1) 返回: str: API的回复内容 """ # 初始化客户端,指定DeepSeek的API端点 client = OpenAI( api_key='sk-cfd2df92c8864ab999d66a615ee812c5', base_url="https://api.deepseek.com/v1", # DeepSeek的API端点 ) try: # 创建聊天完成请求 response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], max_tokens=max_tokens, temperature=temperature, stream=False, response_format={"type": "json_object"} ) # 返回回复内容 return json.loads(response.choices[0].message.content) except Exception as e: return f"发生异常: {str(e)}" if __name__ == '__main__': print(chat_with_deepseek('你好啊'))