建立一個 Tool-Calling LLM 助手

更新 發佈閱讀 12 分鐘

下面是一個工程級但仍然精簡、可在 RTX 4090 本地跑通的完整範例

目標:建立一個 Tool-Calling LLM 助手

包含四部分:

1️⃣ 100 條 Tool-Calling 訓練資料生成器

2️⃣ LLaMA / Qwen LoRA 微調腳本

3️⃣ 4090 本地訓練流程

4️⃣ 自己的 ChatGPT + Tool 系統

使用 Qwen2-7BLlama 3 都可用的格式。


一、專案目錄(工程級結構)

llm_tool_agent/

├─ dataset/
│ ├─ generate_dataset.py
│ └─ tool_train.jsonl

├─ training/
│ └─ train_lora.py

├─ tools/
│ ├─ tools.py

├─ server/
│ └─ chat_agent.py

├─ requirements.txt

二、100 條 Tool Calling Dataset 生成器

dataset/generate_dataset.py

</>Python
import json
import random

queries = [
"查一下預算表",
"查2026年預算",
"查公司預算",
"找預算資料",
]

meetings = [
"排個會議",
"安排會議",
"新增會議",
]

dataset = []

for i in range(100):

query = random.choice(queries)
meeting = random.choice(meetings)

instruction = f"{query},並在明天下午三點{meeting}"

example = {
"messages":[
{
"role":"system",
"content":"你是一個AI助理,可以使用工具"
},
{
"role":"user",
"content":instruction
},
{
"role":"assistant",
"content":
'{"tool":"query_database","params":{"query_str":"budget"}}\n'
'{"tool":"add_calendar_event","params":{"title":"預算審核","start_time":"tomorrow 15:00"}}'
}
]
}

dataset.append(example)

with open("tool_train.jsonl","w",encoding="utf-8") as f:
for d in dataset:
f.write(json.dumps(d,ensure_ascii=False)+"\n")

print("dataset generated:",len(dataset))

執行:

</>Bash
python generate_dataset.py

會得到

tool_train.jsonl
100 samples

三、LoRA 微調腳本

training/train_lora.py

</>Python
from transformers import AutoModelForCausalLM, AutoTokenizer
from datasets import load_dataset
from peft import LoraConfig, get_peft_model
from transformers import TrainingArguments, Trainer

model_name = "Qwen/Qwen2-7B"

tokenizer = AutoTokenizer.from_pretrained(model_name)

model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_4bit=True,
device_map="auto"
)

lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj","v_proj"],
lora_dropout=0.05,
)

model = get_peft_model(model,lora_config)

dataset = load_dataset("json",data_files="../dataset/tool_train.jsonl")

def tokenize(example):

text = ""

for m in example["messages"]:
text += f"{m['role']}: {m['content']}\n"

tokens = tokenizer(
text,
truncation=True,
padding="max_length",
max_length=512
)

tokens["labels"] = tokens["input_ids"].copy()

return tokens

dataset = dataset.map(tokenize)

args = TrainingArguments(
output_dir="./lora_tool",
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
num_train_epochs=3,
learning_rate=2e-4,
logging_steps=10,
save_steps=100,
)

trainer = Trainer(
model=model,
args=args,
train_dataset=dataset["train"]
)

trainer.train()

model.save_pretrained("./lora_tool")

四、4090 本地訓練流程

1 安裝環境

</>Bash
pip install torch
pip install transformers
pip install datasets
pip install peft
pip install accelerate
pip install bitsandbytes

2 生成 dataset

</>Bash
cd dataset
python generate_dataset.py

3 開始訓練

</>Bash
cd training
python train_lora.py

4090 VRAM 使用:

≈ 18GB

訓練時間:

1530 分鐘

五、工具函式

tools/tools.py

</>Python
def query_database(query_str):

database = {
"budget":"2026 budget = 3M"
}

return database.get(query_str,"not found")

六、自己的 ChatGPT + Tool Agent

server/chat_agent.py

</>Python
import json
from transformers import AutoModelForCausalLM,AutoTokenizer
from peft import PeftModel
from tools import query_database,add_calendar_event

base_model = "Qwen/Qwen2-7B"

tokenizer = AutoTokenizer.from_pretrained(base_model)

model = AutoModelForCausalLM.from_pretrained(
base_model,
load_in_4bit=True,
device_map="auto"
)

model = PeftModel.from_pretrained(model,"../training/lora_tool")

def call_tool(tool,params):

if tool=="query_database":
return query_database(**params)

if tool=="add_calendar_event":
return add_calendar_event(**params)

七、系統運作流程

整個系統:

User

LLM

輸出 JSON tool call

Python backend

執行 tool

回傳結果

示例:

User:
查一下預算並安排會議

LLM:
{"tool":"query_database","params":{"query_str":"budget"}}

Tool result:
2026 budget = 3M

八、整個系統只需

硬體:

RTX4090
24GB VRAM

模型:

7B

LoRA adapter:

~300MB

九、可以擴充的工具

例如:

weather_api
stock_price
email_sender
web_search

LLM 就會變成 AI agent


✅ 這就是一個真正可以運作的本地 Tool-Calling ChatGPT 系統



留言
avatar-img
sirius數字沙龍
11會員
242內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
sirius數字沙龍的其他內容
2026/03/08
一、程式碼的問題 原本的: </>Python training_example = { "instruction": "幫我查一下預算表,並在明天下午三點排個審核會。", "output": '{"tool": "query_database",
Thumbnail
2026/03/08
一、程式碼的問題 原本的: </>Python training_example = { "instruction": "幫我查一下預算表,並在明天下午三點排個審核會。", "output": '{"tool": "query_database",
Thumbnail
2026/03/08
模型在腦中建立了一個簡化的「世界結構」,有些研究者發現 LLM 內部可能形成「世界模型」(world model),「世界模型」是近年 AI 研究中非常熱門的概念。許多研究者認為,一些大型語言模型在內部可能逐漸形成了某種簡化的世界結構表示。
Thumbnail
2026/03/08
模型在腦中建立了一個簡化的「世界結構」,有些研究者發現 LLM 內部可能形成「世界模型」(world model),「世界模型」是近年 AI 研究中非常熱門的概念。許多研究者認為,一些大型語言模型在內部可能逐漸形成了某種簡化的世界結構表示。
Thumbnail
2026/03/08
最近 AI 可解釋性研究的一個重大發現 - 語言概念神經元,在大型語言模型(LLM)裡,某些神經元似乎對特定「概念」特別敏感。研究者常把這類現象稱為 “concept neurons(概念神經元)” 或 “feature neurons(特徵神經元)”。
Thumbnail
2026/03/08
最近 AI 可解釋性研究的一個重大發現 - 語言概念神經元,在大型語言模型(LLM)裡,某些神經元似乎對特定「概念」特別敏感。研究者常把這類現象稱為 “concept neurons(概念神經元)” 或 “feature neurons(特徵神經元)”。
Thumbnail
看更多
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
「提示工程」(Prompt Engineering)的核心在於如何精準地與 AI 溝通,以獲取高品質的產出。這不僅是「問問題」,更像是「寫程式」或「下指令」。 一、 核心黃金法則 (The Golden Rules) 1. 賦予角色 (Assign a Persona) 不要讓 AI 只是個
Thumbnail
「提示工程」(Prompt Engineering)的核心在於如何精準地與 AI 溝通,以獲取高品質的產出。這不僅是「問問題」,更像是「寫程式」或「下指令」。 一、 核心黃金法則 (The Golden Rules) 1. 賦予角色 (Assign a Persona) 不要讓 AI 只是個
Thumbnail
—— 用 MCT 理論,打造第一個有「靈魂」的虛擬 AI 真人 你是否覺得,現在的 AI(比如 ChatGPT)雖然博學多才,什麼都懂,但總覺得少了點什麼? 它能在一秒鐘內寫出一百首詩,但它不知道什麼時候該「閉嘴」。它能模擬憤怒的語氣,但它自己並不會真的感到憤怒。簡單來說,現在的 AI
Thumbnail
—— 用 MCT 理論,打造第一個有「靈魂」的虛擬 AI 真人 你是否覺得,現在的 AI(比如 ChatGPT)雖然博學多才,什麼都懂,但總覺得少了點什麼? 它能在一秒鐘內寫出一百首詩,但它不知道什麼時候該「閉嘴」。它能模擬憤怒的語氣,但它自己並不會真的感到憤怒。簡單來說,現在的 AI
Thumbnail
AI一鍵自動化YouTube影片轉社群貼文與筆記工作流 核心工具與流程 1. 影片內容提取與轉寫 Memo AI:貼入YouTube連結後,自動生成逐字稿、雙語字幕,並整合OpenAI生成摘要與心智圖,點擊文字可直接跳轉影片對應段落。 Reccap:將影片轉為可快速閱讀的圖文文章,自動分段並
Thumbnail
AI一鍵自動化YouTube影片轉社群貼文與筆記工作流 核心工具與流程 1. 影片內容提取與轉寫 Memo AI:貼入YouTube連結後,自動生成逐字稿、雙語字幕,並整合OpenAI生成摘要與心智圖,點擊文字可直接跳轉影片對應段落。 Reccap:將影片轉為可快速閱讀的圖文文章,自動分段並
Thumbnail
AI自動生成會議紀錄與逐字稿 核心技術與工具分類 AI自動生成會議紀錄及逐字稿主要結合語音辨識(Speech-to-Text)與生成式AI(如GPT、Claude等)技術,分為以下三類工具: 一站式整合平台:如Subanana、Vocol.ai、Notta,提供從語音轉文字、講者分辨到自動
Thumbnail
AI自動生成會議紀錄與逐字稿 核心技術與工具分類 AI自動生成會議紀錄及逐字稿主要結合語音辨識(Speech-to-Text)與生成式AI(如GPT、Claude等)技術,分為以下三類工具: 一站式整合平台:如Subanana、Vocol.ai、Notta,提供從語音轉文字、講者分辨到自動
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News