每天认识一个新的Python库:pydantic_ai, 一键复刻一个使用 GLM Cloud 的免费 chatGPT

0 阅读2分钟

每天认识一个新的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

image-20260303172424537

通过这个包,你可以快速搭建起一个自己的 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 代码里面,我已经把智谱所有的免费模型加上了

docs.bigmodel.cn/cn/guide/mo…

image-20260303174020152

可以运行上面的 python 代码了,在终端输入下面的命令:

ZHIPUAI_API_KEY='换成你的 api key' uvicorn pa:app --host 127.0.0.1 --port 7943

运行效果,已经可以对话,可以看到所有智谱的免费模型了

image-20260303175534677

切对话记录会持久化在浏览器的 localStorage 中:

image-20260303180753747