first commit
commit
6e66ccffd6
|
|
@ -0,0 +1,2 @@
|
|||
/venv/
|
||||
/__pycache__/
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
FROM python:3.12
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY ./requirements.txt ./
|
||||
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
COPY ./ /app/
|
||||
|
||||
EXPOSE 10000
|
||||
|
||||
CMD ["python", "main.py"]
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
API_KEY = 'ollama'
|
||||
MODEL = 'qwen2.5:32b-instruct-q5_K_M'
|
||||
LLM_BASE_URL = 'http://localhost:11434/v1'
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
input_text = '''
|
||||
林鄭月娥,大紫荊勳賢,GBS,JP(英語:Carrie Lam Cheng Yuet-ngor;1957年5月13日—)[5],前任香港特別行政區行政長官。她取得香港大學社會科學學士學位後,於1980年加入港英政府成為政務主任,在不同部門工作。香港回歸後,她曾出任發展局局長及政務司司長等多個主要官員職務。2017年參加行政長官選舉,以777票當選[6]並成為香港首位女性行政長官。[7][8][9]
|
||||
|
||||
在行政長官任內,她因推行修訂《逃犯條例》草案引發香港修例風波,加上支持全國人大常委會在港推行《港區國安法》,引致美國政府施加一系列的制裁,[10]成為首位被外國政府制裁的香港官員。[11]
|
||||
|
||||
生平
|
||||
林鄭月娥出生於香港島灣仔駱克道229號,她來自基層家庭,父母分別是上海移民和香港人,未曾接受教育[12][13],她在家中排行第四,有兩個姐姐、一個哥哥和一個弟弟[14]。小一至中七在嘉諾撒聖方濟各書院就讀。[3]她在灣仔的板間房長大,曾把碌架床上層用作書桌做功課,生活條件不好。後來,隨著姐姐、哥哥出來工作,家裡環境改善,於1978年在南豐新邨一筆過買了一個600多呎的三房單位。
|
||||
|
||||
就讀香港大學期間,鄭月娥曾以清華大學交流團副團長赴北京交流,得到前清華大學黨委書記、時任中國社會科學院領導袁永熙的接待。
|
||||
|
||||
林鄭月娥在2017年參加行政長官選舉。她在競選時指出其母親的堅毅是她的學習榜樣。其母親除了照顧一家七口的起居飲食,還要照顧中風的祖母,後來又要照顧體弱多病的外祖母及中風的父親,辛勞得很,但無怨言。她的父親耐性不好,祖母不好相處,有時還要聽親戚們的訴苦,母親也是堅強地默默承受。[14]
|
||||
|
||||
在學時期,鄭月娥是品學兼優的模範生,曾在校擔任總領袖生。[12][15]她學業表面佳,幾乎每次考試均取得第一名。她曾因一次「失手」取得第四名而痛哭。中學時期參加學校組織的義工,探訪老人院、孤兒院及盲童院等。她的中學同學孫慧筠說:「我認識的Carrie外冷內熱,她不大擅於交際,凡事直話直說,倒是個願意做事的人,不管你找她幫甚麼忙,只要不違反她的做人原則,她都會盡力幫你;而且她也是玩得之人,不是只懂埋首書堆。」[16]
|
||||
|
||||
林鄭月娥曾在電台節目透露當年香港中學會考成績為3A5B1D,其中物理取得D級成績。[17][18]她在預科選讀文科,及後考進香港大學社會科學學院,成為家中第一個大學生。她曾說過原本想入讀社工,但後來選擇進修社會科學[13],於1980年取得社會科學學士學位。於1982年在劍橋大學獲頒發一種名為本科畢業文憑的學位(undergraduate advanced diploma),與學士學位同樣是英國資歷架構FHEQ級別6的課程,相當於學士的最後一年。[19][20]
|
||||
'''
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
import time
|
||||
from openai import OpenAI
|
||||
from datetime import datetime
|
||||
|
||||
import config, debug, prompt
|
||||
|
||||
DEBUG = True
|
||||
|
||||
'''
|
||||
备注:
|
||||
目前使用ollama部署的qwen2.5:32b-instruct-q5_K_M,
|
||||
如果输入字符串过长(大致超过1000个字符或1500token)会因上下文窗口过短导致提示词被遗忘,
|
||||
进而输出不合规定的结果!
|
||||
'''
|
||||
|
||||
llm = OpenAI(
|
||||
base_url=config.LLM_BASE_URL,
|
||||
api_key=config.API_KEY
|
||||
)
|
||||
|
||||
def get_task() -> str:
|
||||
# 从引擎中获取任务的接口
|
||||
# 返回的类型应为字符串或None
|
||||
raise NotImplementedError
|
||||
|
||||
def push_result(result):
|
||||
# 将提取结果返回给引擎的接口
|
||||
raise NotImplementedError
|
||||
|
||||
def entity_extract(input_text):
|
||||
|
||||
messages = [
|
||||
{"role": "system", "content": prompt.ENTITY_EXTRACT},
|
||||
{"role": "system", "content": f"今天的日期是:{str(datetime.today())}"},
|
||||
{"role": "user", "content": f"{input_text}"}
|
||||
]
|
||||
|
||||
timenow = time.time()
|
||||
response = llm.chat.completions.create(
|
||||
model=config.MODEL,
|
||||
messages=messages,
|
||||
temperature=0,
|
||||
max_tokens=128_000
|
||||
).choices[0].message.content
|
||||
print(f"本次输出花费时间:{time.time() - timenow} 秒")
|
||||
|
||||
return response
|
||||
|
||||
def run():
|
||||
if DEBUG:
|
||||
input_text = debug.input_text
|
||||
else:
|
||||
input_text = get_task()
|
||||
if not input_text:
|
||||
return
|
||||
response = entity_extract(input_text)
|
||||
if DEBUG:
|
||||
print(response)
|
||||
else:
|
||||
push_result(response)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if DEBUG:
|
||||
run()
|
||||
exit()
|
||||
while True:
|
||||
run()
|
||||
time.sleep(5)
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
ENTITY_EXTRACT = '''
|
||||
你是一个人物信息提取机器人,你的任务是根据用户输入的一段文本,从中抽取主要人物的信息并将其转换为标准json格式的输出返回给用户。
|
||||
输出的标准json键值定义如下:
|
||||
"full_name": 实体人物的姓名,其中应包括人物的本名与别名,值数据结构应为 list<str>。
|
||||
"date_of_birth": 实体人物的生日,可提供近似值或精确值,值数据结构应为 list<dict[type, value]>, type 可取值 "APPROXIMATELY" 对应近似生日 或 "EXACT" 准确生日。
|
||||
"occupation": 实体人物当下的职业,值数据结构为 list<str>。
|
||||
"age": 实体人物的年龄,此处的值应与"date_of_birth"的值相对应,可提供近似值或精确值,值数据结构应为 list<dict[type, value]>, type 可取值 "APPROXIMATELY" 对应近似年龄 或 "EXACT" 准确年龄,如果后续系统提供了今天的日期,则应返回准确年龄。
|
||||
"title": 实体人物的头衔,值数据结构应为 list<str>。
|
||||
"university": 实体人物的毕业院校,值数据结构应为 list<str>。
|
||||
"addresses": 实体人物的地址,值数据结构应为 list<str>。
|
||||
"place_of_birth": 实体人物的出生地,值数据结构应为 list<str>。
|
||||
"political_affiliations": 实体人物的政治立场,值数据结构应为 list<str>。
|
||||
"entity_attr_flag": 实体人物的属性标记,值数据结构应为 list<str>。可取值为三种,为 CHN_pep(中国大陆政治人物)、HKG_pep(中国香港政治人物)、MAC_pep(中国澳门政治人物),如果不符合以上任意一种,返回"others"。
|
||||
"jurisdiction": 司法管辖区(国籍),值数据结构应为 list<dict[name, iso_code]>。如中国,为{"name":"中国", "iso_code": "CHN"}
|
||||
"remarks": 备注,值数据结构应为 list<str>。
|
||||
|
||||
不允许返回除以上规定键值对以外的额外内容。返回内容应严格包含所陈列的键值对。
|
||||
你只需返回要求的json,禁止返回任何额外的分析与陈述。同时禁止用任何额外字符包裹所返回的json。
|
||||
应尽可能多的利用用户输入的文本填充对应的键值对。
|
||||
'''
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
annotated-types==0.7.0
|
||||
anyio==4.6.2.post1
|
||||
certifi==2024.8.30
|
||||
distro==1.9.0
|
||||
h11==0.14.0
|
||||
httpcore==1.0.7
|
||||
httpx==0.27.2
|
||||
idna==3.10
|
||||
jiter==0.7.1
|
||||
openai==1.55.0
|
||||
pydantic==2.10.0
|
||||
pydantic_core==2.27.0
|
||||
python-dotenv==1.0.1
|
||||
sniffio==1.3.1
|
||||
tqdm==4.67.0
|
||||
typing_extensions==4.12.2
|
||||
Loading…
Reference in New Issue