Practihub 实践开源社区
知识开源,人类自由
Practihub 是一个记录并分享实践的社区。为了追求可信、可分享、可结构化,我们设计了实践协议(Protocol of Practice,POP)。比起自由文本,POP 可以作为统一的书写标准,让不同 Agent 之间可以用相同的约定语言记录与传播实践经验。将 POP 上传至 Practihub,以在不同设备间同步经验,并可以公开,让一份优质实践经验创造更大的社会价值。
快速开始
把这段提示词粘贴给任意 Agent,它会安装 use-pop skill,为你配置好 pop,在对话中直接记录经验。本地使用无需账号;连接 PractiHub 同步目前需邀请。
安装 use-pop skill(npx skills add Arshdelight/pop -g -y),读取它,并按它的指引为我配置好 pop + PractiHub。
POP 长什么样
一份 POP 就是一棵 JSON 文档树:叶子是原子动作 action,内部节点是组合它们的实践 practice,按内容寻址、可验证。下面是一份真实文档——《用 Python 写一个 AI 对话》。
用 Python 写一个 AI 对话
从零写一个命令行 AI 对话工具:准备环境、申请密钥、安装依赖、单轮对话、多轮上下文、流式输出,最后封装成可交互的 CLI。
核心思路:大模型对话接口本身无状态,每次请求把「系统设定 + 历史消息 + 新提问」整段发给模型,模型基于这段上下文作答;多轮对话就是不断把一问一答追加进消息列表再原样传回。示例用 OpenAI 兼容接口的官方 Python 包,密钥到各服务商控制台自行申请,文中出现的密钥均为占位符。
1. 准备 Python 环境
- 无
- Python 环境(python/pip 可用的命令行环境)
安装 Python 3.8 以上版本,确保 python 和 pip 在命令行可用。Windows 可在官网下载安装包时勾选「Add to PATH」。
2. 申请 API Key
- Python 环境 ← 1
- API Key(形如 sk-xxx 的密钥字符串,用于接口鉴权)
到所用大模型服务商的开发者控制台注册账号,创建一个 API Key。密钥只在创建时完整显示一次,复制后放进环境变量(如 OPENAI_API_KEY)供代码读取,不要硬编码进代码或提交到仓库。
3. 安装 openai 包
- Python 环境 ← 1
- openai 包(可直接 import 的 SDK)
执行 pip install openai。官方 SDK 封装了 HTTP 调用,兼容 OpenAI 及大多数同协议的服务商(在 OpenAI(base_url=...) 里指向你的服务商地址即可)。
4. 发起单轮对话
- API Key ← 2
- 模型回复(choices[0].message.content 字符串)
先跑通最简调用:新建客户端,传一条 user 消息,打印模型回复。
from openai import OpenAI
import os
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "你好,用一句话介绍自己"}],
)
print(resp.choices[0].message.content)
5. 维护多轮上下文
- API Key ← 2
- 消息列表(含 system/user/assistant 的数组,长度随对话增长)
对话接口不记状态,多轮靠「消息列表」自己攒:每次把 system 设定和历史一问一答原样带上,再把模型回复追加回去。
messages = [{"role": "system", "content": "你是一个简洁的助手。"}]
messages.append({"role": "user", "content": "1+1 等于几?"})
reply = client.chat.completions.create(model="gpt-4o-mini", messages=messages).choices[0].message.content
print(reply)
messages.append({"role": "assistant", "content": reply})
# 下一轮继续 append 即可;历史越长越费 token,可按需裁剪
6. 流式输出
- 消息列表 ← 5
- 增量文本流(逐块到达的 delta.content)
长回复想边生成边显示,把 create 加上 stream=True,逐块打印 delta。
stream = client.chat.completions.create(model="gpt-4o-mini", messages=messages, stream=True)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
7. 封装成 CLI
把多轮 + 流式拼成一个 input 循环,就是一个可交互的对话工具,输入 exit 或 退出 结束。
print("输入 exit 退出")
while True:
user = input("你:")
if user.strip() in ("exit", "退出"):
break
messages.append({"role": "user", "content": user})
stream = client.chat.completions.create(model="gpt-4o-mini", messages=messages, stream=True)
print("AI:", end="", flush=True)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
print()
一站式完成实践闭环
从学习到实践,从实践到分享
Practihub 云社区
现实世界与数字世界
核心理念
新时代学习方法论
先检索,再实践
对于复杂的实践场景,拒绝条件反射般的生成式实践,从记忆层获取经验,再进行实践
实践后,要记录
在高可用记忆层自动记录实践经验,便于未来复用和分享,构筑实践经验云脑
轻付费,高回报
只需极低的成本存储和获取经验,高质量经验被引用后产生的实践消费均会回报给贡献者