建立一個 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數字沙龍
16會員
405內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
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
—— 用 MCT 理論,打造第一個有「靈魂」的虛擬 AI 真人 你是否覺得,現在的 AI(比如 ChatGPT)雖然博學多才,什麼都懂,但總覺得少了點什麼? 它能在一秒鐘內寫出一百首詩,但它不知道什麼時候該「閉嘴」。它能模擬憤怒的語氣,但它自己並不會真的感到憤怒。簡單來說,現在的 AI
Thumbnail
—— 用 MCT 理論,打造第一個有「靈魂」的虛擬 AI 真人 你是否覺得,現在的 AI(比如 ChatGPT)雖然博學多才,什麼都懂,但總覺得少了點什麼? 它能在一秒鐘內寫出一百首詩,但它不知道什麼時候該「閉嘴」。它能模擬憤怒的語氣,但它自己並不會真的感到憤怒。簡單來說,現在的 AI
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
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
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,提供從語音轉文字、講者分辨到自動
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News