42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
from typing import Any
|
||
|
||
|
||
def summarize_entity(context: dict[str, Any]) -> list[dict]:
|
||
entity_name = context.get('entity_name', '')
|
||
existing_summary = context.get('existing_summary', '')
|
||
episodes = context.get('episodes', [])
|
||
previous = context.get('previous_episodes', [])
|
||
|
||
existing_section = ''
|
||
if existing_summary:
|
||
existing_section = f'\n<已有摘要>\n{existing_summary}\n</已有摘要>\n'
|
||
|
||
previous_section = ''
|
||
if previous:
|
||
import json
|
||
previous_section = f'\n<历史内容>\n{json.dumps(previous, ensure_ascii=False)}\n</历史内容>\n'
|
||
|
||
episodes_text = '\n---\n'.join(episodes) if isinstance(episodes, list) else episodes
|
||
|
||
user_prompt = f"""
|
||
{previous_section}
|
||
<当前内容>
|
||
{episodes_text}
|
||
</当前内容>
|
||
{existing_section}
|
||
为实体 **{entity_name}** 生成一段信息密集的摘要。
|
||
|
||
规则:
|
||
1. 只使用<当前内容>和<已有摘要>中的事实。不要推测。
|
||
2. 保留所有实质性的人名、角色、地点、日期、数值。
|
||
3. 用第三人称直接陈述事实。
|
||
4. 不要使用"提及了""讨论了""指出"等元语言动词。直接陈述事实。
|
||
5. 如果会议对已有信息做了更新,采用更新的说法。
|
||
6. 摘要不超过 500 字。
|
||
7. 返回 JSON:{{"summary": "摘要内容"}}
|
||
"""
|
||
return [
|
||
{'role': 'system', 'content': '你是实体摘要助手。根据会议内容为实体生成信息密集的摘要。'},
|
||
{'role': 'user', 'content': user_prompt},
|
||
]
|