必须通过百度千帆平台restful接口调用ernie-code模型(如ernie-code-3.5),使用qianfan sdk配置ak/sk并避免硬编码,通过chatcompletion接口传入system角色约束输出纯代码,再以markdown渲染实现语法高亮。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Jupyter Notebook中直接调用文心快码(Wenxin Code)完成代码生成、补全或解释等任务,必须绕过其官方未开放的独立SDK路径,转而复用百度千帆平台统一认证体系与RESTful接口,同时解决Notebook环境特有的会话持久性、异步阻塞和输出渲染问题。
确认文心快码可用模型与接入方式
文心快码并非独立API服务,而是千帆大模型平台中以ERNIE-Code系列模型(如ernie-code-3.5、ernie-code-4.0)封装的编程专用能力。它不提供qianfan包专属方法,必须通过千帆通用ChatCompletion接口调用,且【model参数必须显式指定为ernie-code-3.5或ernie-code-4.0】,填错会导致400错误或返回通用文本而非代码。
登录千帆控制台 → 进入「模型广场」→ 搜索“ERNIE-Code” → 确认已开通对应模型的调用权限(免费额度通常包含在基础套餐内)。
在Jupyter中配置千帆认证与请求环境
方法一:使用qianfan SDK(推荐,自动管理token刷新)
执行!pip install qianfan安装后,在Notebook首个cell中运行:
import qianfan
qianfan.AK = "your_api_key"
qianfan.SK = "your_secret_key"
注意:qianfan 1.22+版本支持Jupyter内核自动识别环境变量,但【不要把AK/SK写死在代码里,务必用%env或python-dotenv加载】,否则导出notebook时密钥会明文泄露。
方法二:纯requests手动构造(适合调试或受限环境)
先调用OAuth接口获取access_token,再拼接chat/completions URL;需自行处理token过期重试逻辑——这在Notebook长会话中极易因token失效导致后续所有cell报401错误。
编写可交互的代码生成单元格
第一步:定义基础调用函数
def generate_code(prompt: str, model: str = "ernie-code-3.5") -> str:
chat_comp = qianfan.ChatCompletion()
resp = chat_comp.do(messages=[{"role": "user", "content": prompt}], model=model)
return resp["result"]
第二步:构建带语法高亮的输出单元
from IPython.display import Markdown, display
code = generate_code("用pandas读取csv并统计每列缺失值数量")
display(Markdown(f"
{code}"))这一步关键在于用Markdown渲染而非print,否则代码块无缩进、无高亮,且无法被Jupyter识别为可执行代码段。
第三步:封装成可重用的魔法命令(可选)
%%code
生成一个用matplotlib绘制时间序列折线图的脚本,数据来自DataFrame df,x轴为'date',y轴为'value'
需提前注册IPython magic,否则该语法会报错;此功能对频繁调试代码生成任务效率提升明显。
处理常见报错与响应解析
当返回内容含非代码字符(如“好的,以下是……”、“当然可以!”等引导语)时,说明模型未严格遵循system prompt指令。必须在messages中强制加入system角色:
messages = [
{"role": "system", "content": "你是一个严格的Python代码生成器,只输出可执行代码,不加任何解释、注释或markdown标记"},
{"role": "user", "content": prompt}
]
若遇到qianfan.errors.InvalidArgumentError: messages must be list,检查是否误将字符串直接传入messages参数——这是Jupyter新手最常踩的坑,qianfan不接受str类型,必须是list[dict]。
响应中出现"finish_reason": "stop"表示正常结束;若为"length",说明输出被截断,需在do()调用中显式增加max_output_tokens=2048参数。











