123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- 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('你好啊'))
|