跳到主要内容

OpenThaiGPT 1.5

🇹🇭 OpenThaiGPT 1.5 版是参数规模分别为 70 亿、140 亿和 720 亿的泰语大型聊天模型,基于 Qwen 2.5 进一步开发而成,具备理解和撰写泰语的能力。该项目以开源方式免费公开代码与模型,任何人都可以在其基础上继续开发,甚至用于商业用途,旨在成为面向全体泰国民众的人工智能基础设施。

9 月 30 日发布的 7b/72b 版本宣传海报

Online Demo

OpenThaiGPT 1.5 72b 在线演示demo72b.aieat.or.th

Siam.AI Cloud 提供托管

Free Online API Service

通过 OpenAI 官方客户端库 openai 提供的免费 API 服务

Float16.cloud 提供托管

模型下载(最新更新:2024 年 10 月 13 日)

主要亮点

  • 最先进的泰语大语言模型:与其他开源泰语大语言模型相比,在多种类型的泰语测试中取得了最高的平均分。
  • 支持多轮对话,可进行连续的交互式会话。
  • 支持检索增强生成(Retrieval Augmented Generation, RAG),以提升答案生成的质量与效率。
  • 出色的上下文处理能力:最多可处理 131,072 个 token 的输入文本,并生成最多 8,192 个 token 的文本,能够对复杂问题给出详尽的解答。
  • 支持工具调用(Tool Calling):让用户可以指示模型调用各类函数,例如调用外部 API、从互联网获取数据、从各类数据库中查询数据等,并通过智能响应高效完成任务。

OpenThaiGPT Eval 上的测试结果

70 亿参数(7 billions)

关于该模型的评测结果,请查看 openthaigpt/openthaigpt1.5-7b-instruct

考试名称scb10x/llama-3-typhoon-v1.5x-8b-instructmeta-llama/Llama-3.1-7B-InstructQwen/Qwen2.5-7B-Instruct_statopenthaigpt/openthaigpt1.5-7b
01_a_level46.67%47.50%58.33%60.00%
02_tgat32.00%36.00%32.00%36.00%
03_tpat152.50%55.00%57.50%57.50%
04_investment_consult56.00%48.00%68.00%76.00%
05_facebook_beleble_th_20078.00%73.00%79.00%81.00%
06_xcopa_th_20079.50%69.00%80.50%81.00%
07_xnli2.0_th_20056.50%55.00%53.00%54.50%
08_onet_m3_thai48.00%32.00%72.00%64.00%
09_onet_m3_social75.00%50.00%90.00%80.00%
10_onet_m3_math25.00%18.75%31.25%31.25%
11_onet_m3_science46.15%42.31%46.15%46.15%
12_onet_m3_english70.00%76.67%86.67%83.33%
13_onet_m6_thai47.69%29.23%46.15%53.85%
14_onet_m6_math29.41%17.65%29.41%29.41%
15_onet_m6_social50.91%43.64%56.36%58.18%
16_onet_m6_science42.86%32.14%57.14%57.14%
17_onet_m6_english65.38%71.15%78.85%80.77%
微平均60.65%55.60%64.41%65.78%

140 亿参数(14 billions)

关于该模型的评测结果,请查看 openthaigpt/openthaigpt1.5-14b-instruct

考试名称scb10x/llama-3-typhoon-v1.5x-70b-instructQwen/Qwen2.5-14B-Instructopenthaigpt/openthaigpt1.5-14bopenthaigpt/openthaigpt1.5-72b
01_a_level59.17%61.67%65.00%76.67%
02_tgat46.00%44.00%50.00%46.00%
03_tpat152.50%60.00%52.50%55.00%
04_investment_consult60.00%76.00%72.00%72.00%
05_facebook_beleble_th_20087.50%84.50%87.00%90.00%
06_xcopa_th_20084.50%85.00%86.50%90.50%
07_xnli2.0_th_20062.50%69.50%64.50%70.50%
08_onet_m3_thai76.00%76.00%84.00%84.00%
09_onet_m3_social95.00%90.00%90.00%95.00%
10_onet_m3_math43.75%43.75%12.50%37.50%
11_onet_m3_science53.85%50.00%53.85%73.08%
12_onet_m3_english93.33%93.33%93.33%96.67%
13_onet_m6_thai55.38%52.31%56.92%56.92%
14_onet_m6_math41.18%23.53%41.18%41.18%
15_onet_m6_social67.27%60.00%61.82%65.45%
16_onet_m6_science50.00%50.00%57.14%67.86%
17_onet_m6_english73.08%82.69%78.85%90.38%
微平均(Micro Average)69.97%71.00%71.51%76.73%

720 亿参数(72 billions)

关于该模型的评测结果,请查看 openthaigpt/openthaigpt1.5-72b-instruct

考试名称scb10x/llama-3-typhoon-v1.5x-70b-instructmeta-llama/Llama-3.1-70B-InstructQwen/Qwen2.5-72B-Instructopenthaigpt/openthaigpt1.5-72b-instruct
01_a_level59.17%61.67%75.00%76.67%
02_tgat46.00%40.00%48.00%46.00%
03_tpat152.50%50.00%55.00%55.00%
04_investment_consult60.00%52.00%80.00%72.00%
05_facebook_beleble_th_20087.50%88.00%90.00%90.00%
06_xcopa_th_20084.50%85.50%90.00%90.50%
07_xnli2.0_th_20062.50%63.00%65.50%70.50%
08_onet_m3_thai76.00%56.00%76.00%84.00%
09_onet_m3_social95.00%95.00%90.00%95.00%
10_onet_m3_math43.75%25.00%37.50%37.50%
11_onet_m3_science53.85%61.54%65.38%73.08%
12_onet_m3_english93.33%93.33%96.67%96.67%
13_onet_m6_thai55.38%60.00%60.00%56.92%
14_onet_m6_math41.18%58.82%23.53%41.18%
15_onet_m6_social67.27%76.36%63.64%65.45%
16_onet_m6_science50.00%57.14%64.29%67.86%
17_onet_m6_english73.08%82.69%86.54%90.38%
微平均(Micro Average)69.97%71.09%75.02%76.73%

以上测试在泰语选择题考试上进行,使用此前从未见过的全新测试集,采用零样本(zero-shot)学习方式。源代码与考试数据:GitHub 上的 OpenThaiGPT/openthaigpt_eval

(更新时间:2024 年 9 月 30 日)

scb10x/thai_exam 上的测试结果

模型泰语测试(Acc)
api/claude-3-5-sonnet-2024062069.2
openthaigpt/openthaigpt1.5-72b-instruct*64.07
api/gpt-4o-2024-05-1363.89
hugging-quants/Meta-Llama-3.1-405B-Instruct-AWQ-INT463.54
openthaigpt/openthaigpt1.5-14b-instruct*59.65
scb10x/llama-3-typhoon-v1.5x-70b-instruct58.76
Qwen/Qwen2-72B-Instruct58.23
meta-llama/Meta-Llama-3.1-70B-Instruct58.23
Qwen/Qwen2.5-14B-Instruct57.35
api/gpt-4o-mini-2024-07-1854.51
openthaigpt/openthaigpt1.5-7b-instruct*52.04
SeaLLMs/SeaLLMs-v3-7B-Chat51.33
openthaigpt/openthaigpt-1.0.0-70b-chat50.09

* 由 OpenThaiGPT 团队使用 scb10x/thai_exam 进行评测

许可证

  • 基于 Qwen 构建
  • Qwen 许可证:允许用于研究商业用途,但如果您的产品月活跃用户超过 1 亿人,则需要另行洽谈单独的商业许可。更多信息请参阅 LICENSE 文件。

支持方

Prompt Format

提示词格式基于 Llama2 并做了少量修改(新增 "###" 用于标识上下文部分)

<|im_start|>system\n{sytem_prompt}<|im_end|>\n<|im_start|>user\n{prompt}<|im_end|>\n<|im_start|>assistant\n

System prompt

คุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์

示例

单轮对话示例

<|im_start|>system\nคุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์<|im_end|>\n<|im_start|>user\nสวัสดีครับ<|im_end|>\n<|im_start|>assistant\n

带上下文的单轮对话(RAG)示例

<|im_start|>system\nคุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์<|im_end|>\n<|im_start|>user\nกรุงเทพมหานคร เป็นเมืองหลวง นครและมหานครที่มีประชากรมากที่สุดของประเทศไทย กรุงเทพมหานครมีพื้นที่ทั้งหมด 1,568.737 ตร.กม. มีประชากรตามทะเบียนราษฎรกว่า 8 ล้านคน\nกรุงเทพมหานครมีพื้นที่เท่าไร่<|im_end|>\n<|im_start|>assistant\n

多轮对话示例

第一轮

<|im_start|>system\nคุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์<|im_end|>\n<|im_start|>user\nสวัสดีครับ<|im_end|>\n<|im_start|>assistant\n

第二轮

<|im_start|>system\nคุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์<|im_end|>\n<|im_start|>user\nสวัสดีครับ<|im_end|>\n<|im_start|>assistant\nสวัสดีครับ ยินดีต้อนรับครับ คุณต้องการให้ฉันช่วยอะไรครับ?<|im_end|>\n<|im_start|>user\nกรุงเทพมหานคร ชื่อเต็มยาวๆคืออะไร<|im_end|>\n<|im_start|>assistant\n

曼谷的全称是 "กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยา มหาดิลกภพ นพรัตนราชธานีบูรีรมย์ อุดมราชนิเวศน์มหาสถาน อมรพิมานอวตารสถิต สักกะทัตติยวิษณุกรรมประสิทธิ์"

结果

<|im_start|>system\nคุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์<|im_end|>\n<|im_start|>user\nสวัสดีครับ<|im_end|>\n<|im_start|>assistant\nสวัสดีครับ ยินดีต้อนรับครับ คุณต้องการให้ฉันช่วยอะไรครับ?<|im_end|>\n<|im_start|>user\nกรุงเทพมหานคร ชื่อเต็มยาวๆคืออะไร<|im_end|>\n<|im_start|>assistant\nชื่อเต็มของกรุงเทพมหานครคือ \"กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยา มหาดิลกภพ นพรัตนราชธานีบูรีรมย์ อุดมราชนิเวศน์มหาสถาน อมรพิมานอวตารสถิต สักกะทัตติยวิษณุกรรมประสิทธิ์\"

使用方法

通过 Curl 使用免费 API(由 Siam.AI 与 Float16.Cloud 托管)

Siam.AI

curl https://api.aieat.or.th/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer dummy" \
-d '{
"model": ".",
"prompt": "<|im_start|>system\nคุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์<|im_end|>\n<|im_start|>user\nกรุงเทพมหานครคืออะไร<|im_end|>\n<|im_start|>assistant\n",
"max_tokens": 512,
"temperature": 0.7,
"top_p": 0.8,
"top_k": 40,
"stop": ["<|im_end|>"]
}'

Float16.cloud

curl -X POST https://api.float16.cloud/dedicate/78y8fJLuzE/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer float16-AG0F8yNce5s1DiXm1ujcNrTaZquEdaikLwhZBRhyZQNeS7Dv0X" \
-d '{
"model": "openthaigpt/openthaigpt1.5-7b-instruct",
"messages": [
{
"role": "system",
"content": "คุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์"
},
{
"role": "user",
"content": "สวัสดี"
}
]
}'

OpenAI 客户端(由 vLLM 托管,详见下文)

import openai

# Configure OpenAI client to use vLLM server
openai.api_base = "http://127.0.0.1:8000/v1"
openai.api_key = "dummy" # vLLM doesn't require a real API key

prompt = "<|im_start|>system\nคุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์<|im_end|>\n<|im_start|>user\nกรุงเทพมหานครคืออะไร<|im_end|>\n<|im_start|>assistant\n"

try:
response = openai.Completion.create(
model=".", # Specify the model you're using with vLLM
prompt=prompt,
max_tokens=512,
temperature=0.7,
top_p=0.8,
top_k=40,
stop=["<|im_end|>"]
)
print("Generated Text:", response.choices[0].text)
except Exception as e:
print("Error:", str(e))

Huggingface

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "openthaigpt/openthaigpt1.5-72b-instruct"

model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

prompt = "ประเทศไทยคืออะไร"
messages = [
{"role": "system", "content": "คุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์"},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

vLLM

  1. 安装 VLLM (https://github.com/vllm-project/vllm)
  2. 启动服务
vllm serve openthaigpt/openthaigpt1.5-72b-instruct --tensor-parallel-size 4
  1. 执行推理(CURL 示例)
curl -X POST 'http://127.0.0.1:8000/v1/completions' \
-H 'Content-Type: application/json' \
-d '{
"model": ".",
"prompt": "<|im_start|>system\nคุณคือผู้ช่วยตอบคำถามที่ฉลาดและซื่อสัตย์<|im_end|>\n<|im_start|>user\nสวัสดีครับ<|im_end|>\n<|im_start|>assistant\n",
"max_tokens": 512,
"temperature": 0.7,
"top_p": 0.8,
"top_k": 40,
"stop": ["<|im_end|>"]
}'

处理长文本

当前的 config.json 设置的上下文长度上限为 32,768 个 token。为了处理超过 32,768 个 token 的超长输入,我们采用了 YaRN——一种增强模型长度外推能力的技术,以确保模型在长文本上仍能保持最佳性能。

对于支持该技术的框架,您可以在 config.json 中添加以下内容以启用 YaRN:

{
...
"rope_scaling": {
"factor": 4.0,
"original_max_position_embeddings": 32768,
"type": "yarn"
}
}

Tool Calling

OpenThaiGPT 1.5 中的工具调用(Tool Calling)功能使用户能够通过智能响应高效地调用各种函数。这包括通过调用外部 API 获取实时数据(例如当前的温度信息),或只需提交一条查询即可预测未来的数据。

例如,用户可以向 OpenThaiGPT 提问:"旧金山现在的气温是多少?",AI 便会执行预先定义好的函数并立即给出回答,无需编写额外的代码。

该功能还支持与外部数据源结合的更广泛应用场景,包括调用天气预报、股票市场行情等服务的 API,或获取用户自有系统内部的数据。

示例:

import openai

def get_temperature(location, date=None, unit="celsius"):
"""Get temperature for a location (current or specific date)."""
if date:
return {"temperature": 25.9, "location": location, "date": date, "unit": unit}
return {"temperature": 26.1, "location": location, "unit": unit}

tools = [
{
"name": "get_temperature",
"description": "Get temperature for a location (current or by date).",
"parameters": {
"location": "string", "date": "string (optional)", "unit": "enum [celsius, fahrenheit]"
},
}
]

messages = [{"role": "user", "content": "อุณหภูมิที่ San Francisco วันนี้ีและพรุ้่งนี้คือเท่าไร่?"}]

# Simulated response flow using OpenThaiGPT Tool Calling
response = openai.ChatCompletion.create(
model=".", messages=messages, tools=tools, temperature=0.7, max_tokens=512
)

print(response)

完整示例:api_tool_calling_powered_by_siamai.py — GitHub

显存需求

参数量FP 16 位8 位(量化)4 位(量化)4 位可用显卡示例
7b24 GB12 GB6 GBNvidia RTX 4060 8GB
13b48 GB24 GB12 GBNvidia RTX 4070 16GB
72b192 GB96 GB48 GBNvidia RTX 4090 24GB x 2 cards

作者

引用

如果 OpenThaiGPT 对您的工作有所帮助,敬请按以下格式引用:

Bibtex

@misc{yuenyong2024openthaigpt15thaicentricopen,
title={OpenThaiGPT 1.5: A Thai-Centric Open Source Large Language Model},
author={Sumeth Yuenyong and Kobkrit Viriyayudhakorn and Apivadee Piyatumrong and Jillaphat Jaroenkantasima},
year={2024},
eprint={2411.07238},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2411.07238},
}

APA 格式(适用于 TXT、MS Word)

Yuenyong, S., Viriyayudhakorn, K., Piyatumrong, A., & Jaroenkantasima, J. (2024). OpenThaiGPT 1.5: A Thai-Centric Open Source Large Language Model. arXiv [Cs.CL]. Retrieved from http://arxiv.org/abs/2411.07238

免责声明:本模型提供的回答不保证准确无误。