每天认识一个新的Python库:pydantic_ai, 一键复刻一个使用 GLM Cloud 的免费 chatGPT
最近把项目中的 pydantic v1 升级到 pydantic v2 的时候,发现 pydantic 除了一个 AI 版本, pydantic_ai 的地址 ai.pydantic.dev/
这个 pydantic_ai 是干嘛的?就是用 pydantic 的模型定义的方式去使用各种第三方大模型,基于 pydantic 模型统一抽象输入输出
但是今天我想讲的,不是 pydantic_ai 这个库本身的用法,而是他的附加功能:Web Chat UI
通过这个包,你可以快速搭建起一个自己的 chatGPT 页面,如果你有服务器的话,就可以一键部署
但是随之而来会有两个问题:
1、这个只是一个页面,本身没有AI回答能力,怎么办?而且我不想花钱,毕竟 GPT 、Gemini、deepseek 这些都要钱
2、相比直接使用 chatGPT、豆包、千问这些网页,我自己搭建一个的意义是什么?
先回答第一个问题:智谱和硅基流动提供了一些免费,而且能力不错,虽然不能胜任 vibe coding 这类任务,但是回答一些日常琐碎的问题时候了
再回答第二个问题:这样做有什么意义?哈哈哈,其实一点意义也没有,只能说,生命的意义在于折腾。学习也是一种快乐,不是吗?所以意义就是搭建本身
上面的闲话说完了,来实际搭建一个吧
安装第三方依赖
pip install pydantic_ai
使用下面的代码
import os
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.openai import OpenAIProvider
zai_api_key = os.getenv('ZAI_API_KEY') or os.getenv('ZHIPUAI_API_KEY')
os.environ.setdefault('OPENAI_BASE_URL', 'https://api.z.ai/api/paas/v4')
if zai_api_key:
os.environ.setdefault('OPENAI_API_KEY', zai_api_key)
provider = OpenAIProvider(
base_url='https://api.z.ai/api/paas/v4',
api_key=zai_api_key,
)
model = OpenAIChatModel('glm-4-flash', provider=provider)
agent = Agent(model=model)
web_models = [
'openai-chat:glm-4v-flash',
'openai-chat:glm-4.6v-flash',
'openai-chat:glm-4.7-flash',
'openai-chat:glm-4.7-flashx',
'openai-chat:glm-4.1v-thinking-flashx',
'openai-chat:glm-4.1v-thinking-flash',
]
app = agent.to_web(models=web_models)
if __name__ == '__main__':
result = agent.run_sync('你好,请介绍一下你自己。')
print(f"Agent 回答: {result.output}")
在上面的 python 代码里面,我已经把智谱所有的免费模型加上了
可以运行上面的 python 代码了,在终端输入下面的命令:
ZHIPUAI_API_KEY='换成你的 api key' uvicorn pa:app --host 127.0.0.1 --port 7943
运行效果,已经可以对话,可以看到所有智谱的免费模型了
切对话记录会持久化在浏览器的 localStorage 中: