npcpy

GitHub
1.3k 94 简单 1 次阅读 昨天MIT开发框架插件图像Agent语言模型
AI 解读 由 AI 自动生成,仅供参考

npcpy 是一个专为自然语言处理、多模态大模型及智能体研发设计的灵活 Python 框架。它旨在解决开发者在构建 AI 应用时面临的模型接入复杂、多智能体协作困难以及工具调用繁琐等痛点,让从本地部署到云端服务的大模型调用变得统一且简单。

无论是希望快速验证想法的研究人员,还是需要构建复杂自动化流程的软件工程师,都能通过 npcpy 高效开展工作。其核心亮点在于极简的 API 设计:用户只需几行代码即可定义具有特定人设的智能体(NPC),或直接发起大模型对话。框架原生支持多智能体团队协作,允许开发者轻松挂载自定义工具(如运行测试、代码审查),并内置了专门的编程智能体以自动执行生成的代码块。此外,npcpy 还具备流式输出解析和原生 JSON 结构化返回能力,大幅降低了处理实时响应和数据提取的难度。通过屏蔽底层不同提供商的差异,npcpy 让用户能更专注于业务逻辑与创新研究,是探索下一代 AI 应用的得力助手。

使用场景

某初创团队正在开发一款自动化代码审查助手,需要让 AI 角色不仅能理解代码逻辑,还要能自主运行测试、对比 Git 差异并生成结构化报告。

没有 npcpy 时

  • 角色构建繁琐:开发者需手动编写大量 Prompt 工程代码来模拟特定专家人设,难以维持对话上下文的一致性。
  • 工具集成困难:想让 AI 执行本地命令(如 pytestgit diff),必须自行封装复杂的函数调用逻辑和错误处理机制。
  • 多模型切换成本高:尝试不同大小的模型(从本地 Ollama 到云端 API)时,需要重写底层请求代码,无法快速验证效果。
  • 数据解析易出错:获取 JSON 格式的分析报告时,常因模型输出格式微小偏差导致解析失败,需额外编写正则清洗代码。

使用 npcpy 后

  • 人设一键定义:通过 NPC 类仅需几行代码即可创建具备特定指令的“代码审查员”角色,自动维护记忆与语境。
  • 原生工具支持:利用 ToolAgent 可直接将自定义 Python 函数(如运行测试脚本)注册为 AI 工具,实现自动调用与执行。
  • 统一接口适配:更换底层模型只需修改 modelprovider 参数,无缝切换本地轻量模型与云端强大模型进行对比测试。
  • 结构化输出保障:设置 format='json' 后,npcpy 自动处理解析逻辑,直接返回可用的字典对象,彻底消除格式错误风险。

npcpy 将分散的 AI 应用开发环节整合为统一的智能体框架,让开发者从繁琐的底层对接中解放,专注于业务逻辑创新。

运行环境要求

操作系统
  • 未说明
GPU

未说明 (取决于所选模型提供商,如使用本地 Ollama 运行大模型则需相应 GPU 资源)

内存

未说明

依赖
notes该工具是一个灵活的代理框架,本身不强制绑定特定硬件,资源需求完全取决于用户选择的模型提供商(Provider)和具体模型(Model)。支持本地部署(如 Ollama、diffusers)和云端 API(如 OpenAI、Gemini、ElevenLabs)。若使用本地模型,需自行确保满足对应模型的显存和内存要求。支持通过 MCP 协议集成外部工具服务器。
python未说明
pydantic
mcp
npcpy hero image

快速开始

npc-python logo

npcpy

npcpy 是一个灵活的智能体框架,用于构建 AI 应用程序以及开展大语言模型相关的研究。它支持本地和云端服务提供商、多智能体协作团队、工具调用、图像/音频/视频生成、知识图谱、微调等功能。

pip install npcpy

快速示例

创建并使用角色

from npcpy import NPC

simon = NPC(
    name='西蒙·玻利瓦尔',
    primary_directive='解放南美洲,驱逐西班牙殖民者。',
    model='gemma3:4b',
    provider='ollama'
)
response = simon.get_llm_response("在安第斯山脉中,最重要的要守住的领土是什么?")
print(response['response'])

直接调用大语言模型

from npcpy import get_llm_response

response = get_llm_response("凯尔特人的信使之神是谁?", model='qwen3:4b', provider='ollama')
print(response['response'])
# 或者使用 Ollama 的云端模型

test = get_llm_response('约翰·威克是谁', model='minimax-m2.7:cloud', provider='ollama',)

print(test['response'])

智能体与工具结合

from npcpy import Agent, ToolAgent, CodingAgent

# Agent — 自带默认工具(sh、Python、编辑文件、网络搜索等)
agent = Agent(name='ops', model='qwen3.5:2b', provider='ollama')
print(agent.run("查找这个仓库中所有超过 500 行的 Python 文件,并列出它们"))

# ToolAgent — 在默认工具基础上添加自定义工具
import subprocess

def run_tests(test_path: str = "tests/") -> str:
    """对给定路径运行 pytest 并返回结果"""
    result = subprocess.run(["python3", "-m", "pytest", test_path, "-v", "--tb=short"],
                            capture_output=True,text=True,timeout=120)
    return result.stdout + result.stderr

def git_diff(branch: str = "main") -> str:
    """显示与指定分支的 Git 差异"""
    result = subprocess.run(["git", "diff", branch, "--stat"], capture_output=True,text=True)
    return result.stdout

reviewer = ToolAgent(
    name='代码审查员',
    primary_directive='你负责审查代码变更、运行测试并报告问题。',
    tools=[run_tests,git_diff],
    model='qwen3.5:2b', provider='ollama'
)
print(reviewer.run("运行测试并总结任何失败的情况"))

流式输出

from npcpy import get_llm_response
from npcpy.streaming import parse_stream_chunk

response = get_llm_response("请解释量子纠缠的概念。", model='qwen3.5:2b', provider='ollama', stream=True)
for chunk in response['response']:
    content, _, _ = parse_stream_chunk(chunk, provider='ollama')
    if content:
        print(content, end='', flush=True)

# 同样的方式适用于其他服务提供商
response = get_llm_response("请解释量子纠缠的概念。", model='gemini-2.5-flash', provider='gemini', stream=True)
for chunk in response['response']:
    content, _, _ = parse_stream_chunk(chunk,provider='gemini')
    if content:
        print(content,end='',flush=True)

JSON 输出

在提示词中包含预期的 JSON 结构。使用 format='json' 参数后,响应会自动解析——response['response'] 已经是字典或列表。

from npcpy import get_llm_response

response = get_llm_response(
    '''请列出距离太阳最近的 3 颗行星。
    返回 JSON:{"planets": [{"name": "行星名称", "distance_au": 0.0, "num_moons": 0}]}''',
    model='qwen3.5:2b', provider='ollama',
    format='json'
)
for planet in response['response']['planets']:
    print(f"{planet['name']}: {planet['distance_au']} AU,{planet['num_moons']} 颗卫星")

response = get_llm_response(
    '''分析这条评论:“电池续航非常棒,但屏幕太暗了。”
    返回 JSON:{"tone": "positive/negative/mixed", "key_phrases": ["phrase1", "phrase2"], "confidence": 0.0}''',
    model='qwen3.5:2b', provider='ollama',
    format='json'
)
result = response['response']
print(result['tone'], result['key_phrases'])
Pydantic 结构化输出

传入一个 Pydantic 模型,JSON 模式将直接发送给大语言模型。

from npcpy import get_llm_response
from pydantic import BaseModel
from typing import List

class Planet(BaseModel):
    name: str
    distance_au: float
    num_moons: int

class SolarSystem(BaseModel):
    planets: List[Planet]

response = get_llm_response(
    "请列出距离太阳最近的前 4 颗行星。",
    model='qwen3.5:2b', provider='ollama',
    format=SolarSystem
)
for p in response['response']['planets']:
    print(f"{p['name']}: {p['distance_au']} AU,{p['num_moons']} 颗卫星")
图像、音频和视频生成
from npcpy.llm_funcs import gen_image,gen_video
from npcpy.gen.audio_gen import text_to_speech

# 图像 — OpenAI、Gemini、Ollama 或 diffusers
images = gen_image("山间的日落景象", model='gpt-image-1', provider='openai')
images[0].save("sunset.png")

# 音频 — OpenAI、Gemini、ElevenLabs、Kokoro、gTTS
audio_bytes = text_to_speech("来自 npcpy 的问候!", engine="openai", voice="alloy")
with open("hello.wav", "wb") as f:
    f.write(audio_bytes)

# 视频 — Gemini Veo
result = gen_video("一只猫在滑板上玩耍", model='veo-3.1-fast-generate-preview', provider='gemini')
print(result['output'])

多智能体团队

from npcpy import NPC, Team

team = Team(team_path='./npc_team')
result = team.orchestrate("分析最新的销售数据并撰写报告")
print(result['output'])

或者在代码中定义一个团队:

from npcpy import NPC, Team

coordinator = NPC(name='lead', primary_directive='协调团队。委派给@analyst和@writer。')
analyst = NPC(name='analyst', primary_directive='分析数据。提供数据和趋势。', model='gemini-2.5-flash', provider='gemini')
writer = NPC(name='writer', primary_directive='根据分析结果撰写清晰的报告。', model='qwen3:8b', provider='ollama')

team = Team(npcs=[coordinator, analyst, writer], forenpc='lead')
result = team.orchestrate("可再生能源采用的趋势是什么?")
print(result['output'])
从文件创建团队 — .npc、.jinx、team.ctx

team.ctx:

context: |
  用于分析科学文献的研究团队。
  团队负责人会根据需要将任务委派给专家。
forenpc: lead
model: qwen3.5:2b
provider: ollama
output_format: markdown
max_search_results: 5
mcp_servers:
  - path: ~/.npcsh/mcp_server.py

lead.npc:

#!/usr/bin/env npc
name: lead
primary_directive: |
  您是研究团队的负责人。将文献检索任务委派给@searcher,
  数据分析任务委派给@analyst。将他们的发现整合成一份连贯的总结。
jinxes:
  - {{ Jinx('sh') }}
  - {{ Jinx('python') }}
  - {{ Jinx('delegate') }}
  - {{ Jinx('web_search') }}

searcher.npc:

#!/usr/bin/env npc
name: searcher
primary_directive: |
  您负责搜索科学论文并提取关键发现。
  使用web_search和load_file来查找和阅读论文。
model: gemini-2.5-flash
provider: gemini
jinxes:
  - {{ Jinx('web_search') }}
  - {{ Jinx('load_file') }}
  - {{ Jinx('sh') }}

Jinx可以引用特定的NPC,以确保始终以该角色身份运行,并且可以访问team.ctx中的ctx变量

jinxes/search_and_summarize.jinx:

#!/usr/bin/env npc
jinx_name: search_and_summarize
description: 搜索论文并使用searcher NPC总结发现。
npc: {{ NPC('searcher') }}
inputs:
  - query
steps:
  - name: search
    engine: natural
    code: |
      搜索关于{{ query }}的论文。
      返回最多{{ ctx.max_search_results }}条结果。
  - name: summarize
    engine: natural
    code: |
      以{{ ctx.output_format }}格式总结发现:
      {{ output }}

npc:字段将Jinx绑定到特定的NPC——当这个Jinx运行时,无论由哪个NPC调用,它都会始终使用searcher角色。team.ctx中的任何自定义键(如output_formatmax_search_results)都可以在Jinja模板中作为{{ ctx.key }}使用,在Python步骤中则作为context['key']使用。

my_project/
├── npc_team/
│   ├── team.ctx
│   ├── lead.npc
│   ├── searcher.npc
│   ├── analyst.npc
│   ├── jinxes/
│   │   └── skills/
│   └── models/
├── agents.md             # 可选:用Markdown定义代理
└── agents/               # 可选:每个代理一个.md文件
    └── translator.md

.npc.jinx文件可以直接执行:

./npc_team/lead.npc "总结arxiv上关于transformers的最新论文"
./npc_team/jinxes/lib/sh.jinx bash_command="echo hello"
MCP服务器集成

为团队添加MCP服务器,以便访问外部工具:

team.ctx:

forenpc: assistant
mcp_servers:
  - path: ./tools/db_server.py
  - path: ./tools/api_server.py

db_server.py:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("数据库工具")

@mcp.tool()
def query_orders(customer_id: str, limit: int = 10) -> str:
    """查询客户的近期订单"""
    # 您的数据库逻辑在这里
    return f"找到{limit}个关于客户{customer_id}的订单"

@mcp.tool()
def search_products(query: str) -> str:
    """搜索产品目录"""
    return f"匹配'{query}'的产品:..."

if __name__ == "__main__":
    mcp.run()

团队中的NPC会自动获得MCP工具的访问权限,同时也能使用它们的Jinx。

Markdown中的代理定义与技能

agents.md——在一个文件中定义多个代理:

## summarizer
您将长文档总结为简洁的要点。
重点关注关键发现、方法论和结论。

## fact_checker
您会对照可靠来源核实陈述,并标记不准确之处。
请务必注明来源。

agents/translator.md——每个代理一个文件,可选前言:

---
model: gemini-2.5-flash
provider: gemini
---
您可以在不同语言之间翻译内容,同时保持语气和习语不变。

技能是基于知识内容的Jinx,可以根据需要向代理提供教学部分。

npc_team/jinxes/skills/code-review/SKILL.md:

---
name: code-review
description: 用于审查代码的质量、安全性及最佳实践。
---
# 代码审查技能

## 检查清单
- 检查是否存在安全漏洞(SQL注入、XSS等)
- 验证错误处理和边界情况
- 审查命名规范和代码清晰度

## 安全性
重点关注OWASP十大漏洞...

在您的NPC中引用:

jinxes:
  - {{ Jinx('skills/code-review') }}

CLI工具

# NPC Shell——推荐的使用NPC团队的方式
npcsh                        # 带有代理、工具和Jinx的交互式Shell

# 构建一个新的团队
npc-init

# 将AI编码工具作为团队中的NPC启动
npc-claude --npc corca       # Claude Code
npc-codex --npc analyst      # Codex
npc-gemini                   # Gemini CLI(交互式选择器)
npc-opencode / npc-aider / npc-amp

# 注册MCP服务器+钩子以实现更深入的集成
npc-plugin claude

NPCArray——在多个NPC上并行运行Jinx

可以在一组NPC实例上并行运行任意Jinx,并将结果收集为数组:

from npcpy import NPC
from npcpy.npc_array import NPCArray

# 三个具有不同模型/提供商的NPC
npcs = [
    NPC(name='drafter', primary_directive='起草简洁的提交信息。', model='qwen3:4b', provider='ollama'),
    NPC(name='reviewer', primary_directive='审查并改进提交信息的清晰度。', model='gemini-2.5-flash', provider='gemini'),
    NPC(name='enforcer', primary_directive='检查提交信息是否符合Conventional Commits规范。', model='gemini-2.5-flash', provider='gemini'),
]

arr = NPCArray.from_npcs(npcs)

# 在所有三个 NPC 上并行运行相同的 jinx,收集结果
results = arr.jinx('summarize', inputs={'topic': 'fix auth middleware to propagate clerkUserId through GraphQL resolvers'}).collect()
for npc, result in zip(npcs, results.data):
    print(f"[{npc.name}] {result}")

你也可以直接将列表传递给 jinx.execute()

from npcpy.npc_compiler import load_jinx_from_file

jinx = load_jinx_from_file('npc_team/jinxes/analyze.jinx')
results = jinx.execute({'topic': 'rate limiting'}, npc=npcs)  # 列表 → 并行 NPCArray 运行
知识图谱

从文本构建、演化和搜索知识图谱。知识图谱通过清醒(吸收)、睡眠(巩固)和做梦(推测性合成)不断成长。

from npcpy.memory.knowledge_graph import (
    kg_initial, kg_evolve_incremental, kg_sleep_process,
    kg_dream_process, kg_hybrid_search,
)
from npcpy.data.load_file import load_file_contents

# 从一份设计文档 PDF 和一个迁移脚本初始化知识图谱
design_doc = load_file_contents("docs/auth_migration_plan.pdf")
migration_sql = load_file_contents("migrations/003_clerk_auth.sql")

kg = kg_initial(
    content=design_doc + "\n\n" + migration_sql,
    model="qwen3:4b", provider="ollama",
)

# 吸收后续的提交和 PR 描述
kg, _ = kg_evolve_incremental(
    kg,
    new_content_text=(
        "PR #412:将 Stripe 客户会话查询替换为 Clerk JWT 验证。移除了 /api/stripe/webhook 端点。在所有保护路由上添加了 ClerkMiddleware。更新了 CSP 头部,允许 clerk.accounts.dev 域名访问。"
    ),
    model="qwen3:4b", provider="ollama”,获取概念,
)

# 巩固——合并冗余节点,强化高频边
kg, sleep_report = kg_sleep_process(kg, model="qwen3:4b", provider="ollama")

# 做梦——生成松散相关概念之间的推测性连接
kg, dream_report = kg_dream_process(kg, model="qwen3:4b", provider="ollama")

# 跨越事实、概念和推测性边进行搜索
results = kg_hybrid_search(kg, "认证如何通过 GraphQL 解析器传播?",
                           model="qwen3:4b", provider="ollama")
for r in results:
    print(r['score'], r['text'])
print(f"{len(kg['facts'])} 条事实,{len(kg['concepts'])} 个概念")

从对话中提取结构化记忆:

from npcpy.llm_funcs import get_facts

conversation = """
用户:我们要完全移除 Stripe,把认证迁移到 Clerk。JWT 验证将由 ClerkMiddleware 而不是自定义的 verify_stripe_session 辅助函数来完成。
助手:明白了。我会更新中间件链。那现有的会话存储呢?
用户:把 Redis 会话缓存关掉——Clerk 会在其端管理会话状态。
另外,CSP 头部需要将 clerk.accounts.dev 和 clerk.enpisi.com 添加到 connect-src 中。
"""

facts = get_facts(conversation,模型="qwen3:4b",提供商="ollama")
for f in facts:
    print(f"[{f.get('category', 'general')}] {f['statement']}")
# [架构] 认证提供商从 Stripe 迁移到 Clerk,使用 ClerkMiddleware 进行 JWT 验证
# [基础设施] 移除了 Redis 会话缓存——Clerk 管理会话状态
# [安全] CSP 的 connect-src 更新,加入了 clerk.accounts.dev 和 clerk.enpisi.com
Sememolution — 基于种群的知识图谱演化

维护一个独立演化的知识图谱变体种群。每个个体都采用泊松采样的搜索参数,每次查询都会产生不同的遍历路径。响应排名带来的选择压力会促使图结构向更有用的方向收敛。

from pathlib import Path
from npcpy.memory.kg_population import SememolutionPopulation
from npcpy.data.load_file import load_file_contents

pop = SememolutionPopulation(population_size=100, sample_size=10)
pop.initialize()

# 引入异质语料——PDF、DOCX、源代码、会议记录
corpus_dirs = [Path("docs/architecture"), Path("docs/meeting_notes"), Path("src/auth")]
for d in corpus_dirs:
    for f in sorted(d.glob("*")):
        if f.suffix in (".pdf", ".docx", ".md", ".py", ".ts", ".txt"):
            text = load_file_contents(str(f))
            pop.assimilate_text(text)

# 睡眠/做梦周期——每个个体根据其基因组进行巩固
pop.sleep_cycle()

# 查询:随机抽取 10 个个体,生成竞争性回答,并对其进行排名
rankings = pop.query_and_rank("认证中间件链如何与 GraphQL 上下文交互?")
for rank, entry in enumerate(rankings[:3], 1):
    print(f"#{rank}(个体 {entry['id']}, 分数 {entry['score']:.3f}):{entry['response'][:120]}..."
  
# 选择与繁殖——表现最好的个体繁衍后代,表现最差的则被淘汰
pop.evolve_generation()

stats = pop.get_stats()
print(f"第 {stats['generation']} 代 | 平均适应度 {stats['avg_fitness']:.3f} | 最佳适应度 {stats['best_fitness']:.3f} | 多样性 {stats['diversity']:.3f}")
微调(SFT、RL、MLX)
from npcpy.ft.sft import run_sft

# 训练一个模型,用于从会议记录中提取结构化的决策

# LoRA 微调 — 自动在 Apple Silicon 上使用 MLX
X_train = [
    "会议:身份验证迁移同步(2025-01-15)\n参会人员:Sarah、Mike、Priya\n"
    "讨论:评估了 Clerk 和 Auth0,以替代 Stripe 的身份验证系统。最终选择了 Clerk,因为它延迟更低且原生支持 Next.js。迁移将于第 12 轮开发开始。\n一旦 Clerk 的 JWT 验证稳定,Redis 会话存储将被移除。",

    "会议:API 速率限制审查(2025-01-22)\n参会人员:Mike、Jordan\n"
    "讨论:当前基于会话的令牌桶机制与 Clerk 的无状态 JWT 不兼容。双方同意切换到基于 IP 的滑动窗口限流策略,默认每分钟 100 次请求。高级用户则为每分钟 500 次。Jordan 将于周五前完成实施。",

    "会议:GraphQL 模式冻结(2025-02-01)\n参会人员:Sarah、Priya、Jordan\n"
    "讨论:v2 版本的 GraphQL 模式已锁定准备发布。通过数据加载器实现嵌套的身份验证上下文传递已被确认有效。所有经过身份验证的查询都将采用新的 'viewer' 模式。重大变更已在 CHANGELOG 中记录。",

    "会议:部署复盘(2025-02-10)\n参会人员:全体团队成员\n"
    "讨论:生产环境的中断是由缺少 clerk.accounts.dev 的 CSP 头部导致的。\n根本原因:部署脚本未能正确读取新的环境变量。解决方案:在 CI 流水线中添加 CSP 验证检查。新规定:所有外部域名必须列入 csp_allowlist.json 文件中。",
]
y_train = [
    '{"decisions": [{"what": "采用 Clerk 进行身份验证", "why": "延迟更低,原生支持 Next.js", "owner": "团队", "deadline": "第 12 轮开发"}, {"what": "移除 Redis 会话存储", "why": "Clerk 已经可以处理会话状态", "owner": "团队", "deadline": "JWT 验证稳定后"}]}',
    '{"decisions": [{"what": "切换到基于 IP 的滑动窗口限流器", "why": "令牌桶机制与无状态 JWT 不兼容", "owner": "Jordan", "deadline": "周五"}, {"what": "设置默认限流为每分钟 100 次,高级用户为每分钟 500 次", "why": "分级访问控制", "owner": "Jordan", "deadline": "周五"}]}',
    '{"decisions": [{"what": "冻结 GraphQL v2 模式", "why": "为发布做准备", "owner": "Sarah", "deadline": "立即"}, {"what": "为经过身份验证的查询采用 viewer 模式", "why": "确保嵌套解析器中具有一致的身份验证上下文", "owner": "Priya", "deadline": "立即"}]}',
    '{"decisions": [{"what": "在 CI 流水线中加入 CSP 验证检查", "why": "防止部署时遗漏 CSP 头部", "owner": "团队", "deadline": "立即"}, {"what": "要求所有外部域名都列在 csp_allowlist.json 中", "why": "强制对外部域名进行显式批准", "owner": "团队", "deadline": "立即"}]}',
]

model_path = run_sft(X_train=X_train, y_train=y_train)

功能特性

  • 智能体(NPCs) — 具有角色设定、指令和工具调用能力的智能体。子类包括:Agent(默认工具)、ToolAgent(自定义工具 + MCP)、CodingAgent(自动执行代码块)
  • 多智能体团队 — 带有协调员(forenpc)的团队协作机制
  • Jinx 工作流 — 基于 Jinja 的执行模板,用于多步骤提示管道
  • 技能 — 包含知识内容的 Jinx,可按需为智能体提供教学模块
  • NPCArray — 类似 NumPy 的向量化操作,适用于模型群体
  • 图像、音频与视频 — 通过 Ollama、diffusers、OpenAI、Gemini、ElevenLabs 等生成
  • 知识图谱 — 从文本构建并演化知识图谱,具备睡眠/梦境生命周期
  • Sememolution — 基于种群的知识图谱演化,结合遗传选择和泊松采样搜索
  • 记忆流水线 — 提取、审核并回填记忆,通过自我改进的质量反馈提升效果
  • 微调与演化 — SFT、USFT、RL/DPO、扩散模型、遗传算法,以及在 Apple Silicon 上使用 MLX
  • 服务部署 — 使用 Flask 服务器通过 REST API 部署团队
  • 机器学习函数 — Scikit-learn 网格搜索、集成预测、PyTorch 训练
  • 流式响应与 JSON — 流式响应、结构化 JSON 输出、消息历史记录

服务提供商

通过 LiteLLM 支持所有主流 LLM 提供商:ollamaopenaianthropicgeminideepseekairllmopenai-like 等。

安装说明

pip install npcpy              # 基础包
pip install npcpy[lite]        # + API 提供商库
pip install npcpy[local]       # + ollama、diffusers、transformers、airllm
pip install npcpy[yap]         # + TTS/STT
pip install npcpy[all]         # 所有功能
系统依赖

Linux:

sudo apt-get install espeak portaudio19-dev python3-pyaudio ffmpeg libcairo2-dev libgirepository1.0-dev
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen3.5:2b

macOS:

brew install portaudio ffmpeg pygobject3 ollama
brew services start ollama
ollama pull qwen3.5:2b

Windows: 安装 Ollamaffmpeg,然后运行 ollama pull qwen3.5:2b

API 密钥需配置在 .env 文件中:

export OPENAI_API_KEY="your_key"
export ANTHROPIC_API_KEY="your_key"
export GEMINI_API_KEY="your_key"

文档阅读

完整文档、指南和 API 参考请访问 npcpy.readthedocs.io

相关链接

  • Incognide — 桌面环境,内置 AI 聊天、浏览器、文件查看器、代码编辑器、终端、知识图谱、团队管理等功能(下载
  • NPC Shell — 用于与 NPCs 交互的命令行 shell
  • 新闻通讯 — 保持信息更新

研究

  • 用于自然语言处理的量子语义框架:arxiv,已被 QNLP 2025 接收
  • 为人工智能模拟激素周期:arxiv
  • TinyTim:用于发散式生成的语言模型系列 arxiv
  • 自然语言处理中的意义生成:arxiv
  • 面向智能体的 ALARA:通过可移植、可组合的多智能体团队实现最小权限上下文工程:arxiv

您的研究是否受益于 npcpy?请告诉我们!

支持

每月捐赠 | 周边商品 | 咨询:info@npcworldwi.de

贡献

欢迎贡献!请在 GitHub 仓库 上提交问题和拉取请求。

许可证

MIT 许可证。

星标历史

星标历史图表

版本历史

v1.4.192026/04/17
v1.4.182026/04/15
v1.4.172026/04/08
v1.4.162026/04/06
v1.4.152026/04/04
v1.4.142026/04/04
v1.4.132026/04/03
v1.4.122026/04/02
v1.4.112026/03/28
v1.4.102026/03/28
v1.4.92026/03/28
v1.4.82026/03/28
v1.4.72026/03/28
v1.4.62026/03/27
v1.4.52026/03/27
v1.4.42026/03/26
v1.4.32026/03/25
v1.4.12026/03/24
v1.3.372026/03/22
v1.3.362026/03/20

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

159.6k|★★☆☆☆|今天
开发框架Agent语言模型

opencode

OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信

144.3k|★☆☆☆☆|昨天
Agent插件

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像