Skip to content

cubenlp/ChatTool

Repository files navigation

以 CLI 为核心的 Python 开发套件,集成 LLM 对话、工具箱(DNS、飞书、绘图等)、MCP 服务和环境管理。

支持 Python >=3.9

安装

默认安装只包含核心聊天能力和基础 CLI。DNS、MCP、Serve、交互式 TUI 等较重依赖已拆到 extras。

pip install chattool --upgrade
pip install "chattool[tools]"        # 常用工具全集
pip install "chattool[mcp,dns]"      # MCP 服务 + DNS 工具
pip install "chattool[images]"       # 含图像工具
pip install "chattool[pypi]"         # 含 Python 包构建/发布依赖
pip install "chattool[dev]"          # 仓库开发依赖

功能概览

环境变量管理 (chatenv)

chatenv init -i                  # 交互式初始化(敏感字段自动隐藏)
chatenv init -i -t openai        # 仅初始化指定服务
chatenv cat                      # 查看配置(敏感值打码)
chatenv cat -t feishu           # 查看飞书配置,供 chattool cc init 默认候选值参考
chatenv set OPENAI_API_KEY=sk-xxx
chatenv new mini -t feishu      # 从当前激活配置复制一份新的 Feishu profile
chatenv new -t openai           # 交互式创建 OpenAI profile:先问名称,再补齐字段,不改 active .env
chatenv save work -t openai && chatenv use work -t openai   # 按类型管理 profile
chattool lark info -e work       # 显式使用 Feishu profile,优先级高于当前 shell 环境变量
chattool cc init -i --quiet      # 生成默认 quiet 的 cc-connect 项目配置

LLM 对话 (chattool.Chat)

from chattool import Chat

# 多轮对话
chat = Chat("Hello!")
chat.get_response()
chat.user("How are you?").get_response()

# 异步并发
import asyncio
base = Chat().system("你是助手")
tasks = [base.copy().user(f"主题 {i}").async_get_response() for i in range(5)]
responses = asyncio.run(asyncio.gather(*tasks))

# 流式输出
async for chunk in Chat().user("写一首诗").async_get_response_stream():
    if chunk.delta_content:
        print(chunk.delta_content, end="", flush=True)

飞书机器人 (chattool lark)

chattool lark send USER_ID "Hello"
chattool lark send "Hello"                  # 使用 FEISHU_DEFAULT_RECEIVER_ID
chattool lark send -t chat_id "Hello team" # 使用 FEISHU_DEFAULT_CHAT_ID
chattool lark info
chattool setup lark-cli
chattool serve lark echo                        # 回显机器人
chattool serve lark ai --system "你是工作助手"  # AI 对话机器人
from chattool.tools.lark import LarkBot, ChatSession

bot = LarkBot()
session = ChatSession(system="你是助手")

@bot.on_message
def chat(ctx):
    ctx.reply(session.chat(ctx.sender_id, ctx.text))

bot.start()

DNS 管理 (chattool dns)

chattool dns
chattool dns get home.example.com
chattool dns set home.example.com -v 1.2.3.4
chattool dns ddns home.example.com --monitor
chattool dns cert-update -d example.com -e admin@example.com

交互终端里直接运行 chattool dns 会先进入命令选择;get / set / ddns 缺少必要参数时会自动补问,-I 才会禁用交互并直接报错。

Nginx 配置生成 (chattool nginx)

chattool nginx --list
chattool nginx proxy-pass --set SERVER_NAME=app.example.com --set PROXY_PASS=http://127.0.0.1:8080
chattool nginx websocket-proxy ./websocket.conf --set SERVER_NAME=ws.example.com --set PROXY_PASS=http://127.0.0.1:3000
chattool nginx static-root ./nas.conf --set SERVER_NAME=share.example.com --set ROOT_DIR=/storage/nas
chattool nginx -i  # 交互式选择模板并逐项填写

AI 绘图 (chattool image)

chattool image pollinations generate "a cat in space" -o cat.png
chattool image siliconflow generate "a cute dog" -o dog.png
chattool image huggingface generate

交互终端里,各家 generate 命令缺少 prompt 时会自动补问;huggingface generate 缺少 -o/--output 也会自动补问。显式传 -I 时保持直接报错。

数据探索 (chattool explore)

chattool explore arxiv search -p ai4math -n 10
chattool explore arxiv daily -p math-formalization --days 3
chattool explore arxiv daily -p math-formalization-weekly --days 7 -v
chattool explore arxiv get 1706.03762 -v
chattool explore arxiv get

交互终端里,chattool explore arxiv get 缺少 arXiv ID 时会自动补问。

其他工具

工具 命令 说明
网络扫描 chattool network 扫描局域网主机和端口
Nginx 配置 chattool nginx 按模板生成常见的反向代理、路径转发和静态目录配置
PyPI 工具 chattool pypi 创建、构建、校验、上传与探测 Python 包
MCP 服务 chattool mcp start 标准 MCP Server,供 Claude/Cursor 调用
环境安装 chattool setup codex/claude/opencode/lark-cli/docker 安装或检查常用 CLI / Docker 环境,并在确认后执行建议的系统命令
Workspace chattool setup workspace 初始化围绕核心项目的人类-AI 协作工作区骨架;新目录直接生成协议,已有 workspace 则生成 setup.md 迁移指南与辅助协议文件
Skills chattool skill install 安装 ChatTool skills 到 Codex / Claude / OpenCode
CC-Connect chattool cc cc-connect 快速配置与启动

文档

完整文档见 chattool.wzhecnu.cn 仓库结构设计草案见 docs/design/python-library-repo-structure.md PyPI 发布命令设计草案见 docs/design/chattool-pypi-cli-design.md

测试约定

  • tests/cli-tests/:真实 CLI 链路与真实环境验收,采用 doc-first。
  • tests/mock-cli-tests/:所有基于 mockpatchmonkeypatch、fake client / API 的 CLI 测试,统一集中到这里。
  • tests/code-tests/:非 CLI 的代码测试与历史测试迁移落点。

快速建包可直接运行:

chattool pypi init mychat
chattool pypi init cli-style mycli
chatpypi mychat

chatpypi 现在是更直接的快捷入口:传入普通首参数时,会自动按 chattool pypi init <name> 处理;如果首参数本身就是 init/build/check/upload/probe 之一,则保持原样透传给 chattool pypi

默认生成的 pyproject.toml 会写入 requires-python = ">=3.9"

cli-style 模板会额外生成 DEVELOP.mdsetup.mdCHANGELOG.mdAGENTS.mddocs/tests/cli-tests/tests/mock-cli-tests/tests/code-tests/.github/workflows/ 骨架,并默认依赖 chatstyle 作为可复用 CLI 运行时。

chattool pypi 现在只保留最小命令集:init/build/check/upload/probe。其中 upload 只是对原始 twine upload 的薄封装,不再接管凭证、仓库和交互逻辑。

其中 chattool pypi probe 现在默认面向正式 pypi,按精确项目名检查名称是否已被占用;若命中现有项目,会顺手输出少量项目摘要信息,便于快速判断是否需要换名。

开源协议

MIT License

About

Toolkit for Chat API.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors