欢迎光临
我们一直在努力

大模型Skill

1.项目简介

本案例 ,通过skill赋予大模型摘要生成能力

2.skill目录结构

3.项目实践

.env

# .env
OLLAMA_MODEL=deepseek-r1:latest
OLLAMA_HOST=http://127.0.0.1:11434
OUTPUT_DIR=./output

注释:本地运行ollama服务,查询效果如下

main.py

# -*- coding:utf-8 -*-

import os
import sys

from dotenv import load_dotenv

from skill_loader import SkillLoader

load_dotenv()

def main():
print("=== 本地大模型 Skill 系统启动 ===")
print(f"当前模型: {os.getenv('OLLAMA_MODEL')}")
print(f"显存状态: 检测到 NVIDIA RTX 4090 D (假设环境正常)")
print("-" * 30)

# 初始化加载器
loader = SkillLoader()
loader.discover_skills()

if "text_summary" not in loader.available_skills:
print("错误:未找到 text_summary 技能,请检查目录结构。")
return

# 加载技能
try:
summary_module = loader.load_skill("text_summary")

print("\\n>>> 执行 text_summary 技能 (测试模式)…")

if hasattr(summary_module, "run"):
# 你可以替换这里的文本为实际想要摘要的长文本
long_text = """
(此处可以粘贴任何长文章,新闻,报告等)
随着 2026 年技术的进步,本地 AI 已成为主流。RTX 4090 D 凭借其强大的 24GB 显存,
能够轻松承载 DeepSeek-R1 等先进模型。这不仅降低了企业成本,更保障了数据安全。
在未来的办公场景中,本地摘要、本地翻译、本地代码审计将成为标配。
用户不再需要将敏感文档上传至公有云,一切计算均在本地完成。
这种范式转变正在重塑软件开发的格局,开发者需要更多地考虑本地资源的调度与优化。
"""
summary_module.run(long_text, style="detailed")
else:
print("错误:技能脚本中未找到 'run' 函数。")

except Exception as e:
print(f"执行出错: {e}")

if __name__ == "__main__":
main()

skill_loader.py

import os
import importlib.util

class SkillLoader:
def __init__(self, skills_dir="skills"):
self.skills_dir = skills_dir
self.available_skills = {}

def discover_skills(self):
if not os.path.exists(self.skills_dir):
print("未找到 skills 目录")
return

for skill_name in os.listdir(self.skills_dir):
skill_path = os.path.join(self.skills_dir, skill_name)
script_path = os.path.join(skill_path, "script.py")

if os.path.isdir(skill_path) and os.path.exists(script_path):
self.available_skills[skill_name] = script_path
print(f"[发现技能]: {skill_name}")

def load_skill(self, skill_name):
if skill_name not in self.available_skills:
raise ValueError(f"技能 '{skill_name}' 不存在")

script_path = self.available_skills[skill_name]

# 动态导入模块
spec = importlib.util.spec_from_file_location(f"skills.{skill_name}.script", script_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

return module

skills/text_summary/script.py

import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../')))

from tools import generate_completion, save_to_file

def run(text, style="concise"):
# 构建提示词
style_instructions = {
"concise": "请用简练的一句话概括核心内容。",
"bullet_points": "请提取关键信息,并以无序列表形式列出要点。",
"detailed": "请生成一份详细的摘要,保留主要论据和数据,篇幅约为原文的 20%。"
}

instruction = style_instructions.get(style, style_instructions["concise"])
system_prompt = "你是一个由 RTX 4090 驱动的高效 AI 助手,擅长快速阅读并提炼长文精华。"
user_prompt = f"""
任务:对以下文本进行摘要。
要求:{instruction}

原文内容:
{text}
"""

print(f"正在使用 {os.getenv('OLLAMA_MODEL')} 模型进行推理… (这可能需要几秒到几十秒)")
summary = generate_completion(user_prompt, system_prompt)

if "错误" in summary:
print(summary)
return None

filename = f"summary_{style}.txt"
saved_path = save_to_file(filename, summary, sub_dir="text_summary")

print("-" * 30)
print("【生成摘要】")
print(summary)
print("-" * 30)
print(f"结果已保存至: {saved_path}")

return summary

skills/text_summary/skill.md

# 技能名称:智能文本摘要 (Text Summary)

## 功能描述
利用本地部署的 DeepSeek-R1 大模型,对输入的长文本进行关键信息提取和摘要生成。
支持自定义摘要长度和风格(如:一句话总结、要点列表、详细摘要)。

## 输入参数
– `text`: 需要处理的原始文本字符串。
– `style`: 摘要风格 (可选: "concise", "bullet_points", "detailed"),默认为 "concise"。

## 输出
– 生成后的摘要文本。
– 自动保存至 `output/text_summary/` 目录下。

## 依赖模型
– deepseek-r1:latest (需本地 Ollama 运行中)

tools.py

# -*- coding:utf-8 -*-

import os
import requests
import json
from dotenv import load_dotenv

load_dotenv()

OLLAMA_HOST = os.getenv("OLLAMA_HOST", "http://127.0.0.1:11434")
MODEL_NAME = os.getenv("OLLAMA_MODEL", "deepseek-r1:latest")

def generate_completion(prompt, system_prompt="你是一个专业的文本摘要助手。"):
url = f"{OLLAMA_HOST}/api/generate"

payload = {
"model": MODEL_NAME,
"prompt": prompt,
"system": system_prompt,
"stream": False,
"options": {
"temperature": 0.3,
"num_predict": 1024,
}
}

try:
response = requests.post(url, json=payload, timeout=120)
response.raise_for_status()
result = response.json()
return result.get("response", "")
except requests.exceptions.ConnectionError:
return "错误:无法连接到 Ollama 服务。请确保 'ollama serve' 正在运行。"
except Exception as e:
return f"错误:{str(e)}"

def save_to_file(filename, content, sub_dir=""):
base_dir = os.getenv("OUTPUT_DIR", "./output")
if sub_dir:
full_path = os.path.join(base_dir, sub_dir)
os.makedirs(full_path, exist_ok=True)
file_path = os.path.join(full_path, filename)
else:
os.makedirs(base_dir, exist_ok=True)
file_path = os.path.join(base_dir, filename)

with open(file_path, "w", encoding="utf-8") as f:
f.write(content)
return file_path

运行效果

赞(0)
未经允许不得转载:171主机测评 » 大模型Skill
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址