Jev模型需手动封装Web界面,推荐用Gradio快速搭建本地页面:安装gradio后运行app.py即可打开http://127.0.0.1:7860,输入state、选择问题类型及参数,点击Submit获得结构化JSON输出。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Jev 模型本身不提供 Web 页面,安装完成(如 pip install fast-browser-use)后,它只是一个 Python 函数 ask_jev(),需要你手动封装成可交互的界面。搭建简易调用页面,核心是“用轻量前端把字典输入和结构化输出可视化”,不是部署服务,也不依赖模型权重文件。
确认本地调用已通
在写页面前,请先确保命令行能成功运行:
- 新建
test_jev.py,内容为官方示例(state + questions 字典) - 运行
python test_jev.py,得到类似{"intent":"code_rewrite","intent_confidence":0.92}的结果 - 若报错
ImportError: DLL load failed,说明缺 Visual C++ 2015–2022 运行库,需单独安装
用 Gradio 快速生成单页界面
Gradio 是最省事的选择,几行代码就能起一个带输入框、按钮、结果展示的本地网页。它不暴露端口到公网,纯本机使用:
- 安装:
pip install gradio - 新建
app.py,粘贴以下代码(已适配 Jev 输入格式):
from fast_browser_use import ask_jev
def run_jev(state, q_type, q_name, q_options_or_levels):
if q_type == "choice":
questions = [{"type": "choice", "name": q_name, "options": q_options_or_levels.split(",")}]
elif q_type == "score":
levels = [lvl.strip() for lvl in q_options_or_levels.split(",")]
questions = [{"type": "score", "name": q_name, "levels": levels}]
else:
questions = [{"type": "noul", "name": q_name}]
try:
return str(ask_jev(state=state, questions=questions))
except Exception as e:
return f"错误: {e}"
demo = gr.Interface(
fn=run_jev,
inputs=[
gr.Textbox(label="state(当前上下文)", placeholder="用户说:帮我重写这段代码..."),
gr.Radio(["choice", "score", "noul"], label="问题类型"),
gr.Textbox(label="字段名(name)", value="decision"),
gr.Textbox(label="选项或等级(用英文逗号分隔)", placeholder="low,medium,high 或 yes,no"),
],
outputs=gr.Textbox(label="Jev 返回结果"),
title="Jev 本地调用演示页"
)
demo.launch()
- 运行
python app.py,浏览器自动打开http://127.0.0.1:7860 - 填入 state 文本,选类型、命名、填选项,点 Submit 即得结构化 JSON 输出
不装额外库?用 Flask 写个极简 HTML 页面
如果不想引入 Gradio,可用 Python 自带的 http.server + 简单 Flask(仅需 2 个文件):
- 创建
server.py(后端):
from fast_browser_use import ask_jev
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html")
@app.route("/api/ask", methods=["POST"])
def handle_ask():
data = request.json
try:
res = ask_jev(
state=data["state"],
questions=[{
"type": data["q_type"],
"name": data["q_name"],
**({"options": data["options"].split(",")} if data["q_type"]=="choice" else {}),
**({"levels": data["levels"].split(",")} if data["q_type"]=="score" else {})
}]
)
return jsonify(res)
except Exception as e:
return jsonify({"error": str(e)}), 400
if __name__ == "__main__":
app.run(debug=True)
- 新建
templates/index.html(前端),含表单 + JS 提交 + 结果显示区 - 运行
python server.py,访问http://127.0.0.1:5000
关键注意事项
页面只是外壳,真正影响调用成败的是输入结构:
- state 必须是字符串,不能是 dict/list;超长(>2048字符)会被静默截断
-
questions 列表里每个 item 必须有 type 和 name,type 只接受
"choice"/"score"/"noul",拼错就报 ValueError - 返回结果是 Python 字典,前端展示时建议用
JSON.stringify(res, null, 2)格式化,别直接 .toString() - 首次运行会自动解压 ONNX Runtime 到
%LOCALAPPDATA%\fast-browser-use\runtime\,确保该路径有写权限

















