想通过docker buiid AutoGen 环境,并且发布到k8s环境,记录了一下过程。
build AutoGen 环境 镜像
准备一个 Python fastapi 代码,这样容器进程就不会退出了,监听8000端口。
- app.py
from fastapi import FastAPI app = FastAPI() # 实例名为 "app" @app.get("/") def read_root(): return {"message": "Hello World"}
- Dockerfile
准备镜像Dockerfile,因为AutoGen需要至少3.10以上的Python环境,这里选了python:3.12-slim基础镜像,然后安装autogen 和 autogenstudio, autogenstudio需要8001端口。
FROM python:3.12-slim # 设置工作目录 WORKDIR /app # 安装系统依赖和curl工具 RUN apt-get update && \ apt-get install -y --no-install-recommends curl && \ rm -rf /var/lib/apt/lists/* # 配置国内PyPI镜像源(阿里云),加速pip安装 RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && \ pip config set global.trusted-host mirrors.aliyun.com # 复制代码和配置文件 COPY . /app # 安装AgentChat和OpenAI客户端扩展 RUN pip install -U "autogen-agentchat" "autogen-ext[openai]" # 安装AutoGen Studio无代码GUI RUN pip install -U "autogenstudio" # 安装FastAPI和服务运行工具uvicorn RUN pip install -U fastapi uvicorn # 暴露端口(FastAPI默认使用8000端口,AutoGen Studio可能需要额外端口) EXPOSE 8000 EXPOSE 8001 # 启动命令:用uvicorn运行FastAPI服务 CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
准备k8s 部署用的 deployment yaml 和 service yaml
- service-autogen-deployment.yaml
# service-autogen-deployment.yaml # kubectl apply -f service-autogen-deployment.yaml -n common-services apiVersion: apps/v1 kind: Deployment metadata: name: service-autogen-deployment labels: app: service-autogen spec: replicas: 1 # 创建1个Pod副本 selector: matchLabels: app: service-autogen template: metadata: labels: app: service-autogen spec: containers: - name: service-autogen # 私有的镜像仓库地址 image: 123.xxx.xxx.xxx:5001/service-autogen:latest ports: - containerPort: 8000 name: fastapi - containerPort: 8001 name: autogen-studio # resources: # limits: # memory: "256Mi" # cpu: "500m" imagePullSecrets: - name: docker-registry-secret
- autogen-service.yaml
# autogen-service.yaml # kubectl apply -f autogen-service.yaml -n common-services apiVersion: v1 kind: Service metadata: name: autogen-service spec: selector: app: service-autogen ports: # FastAPI 端口转发配置 - port: 8000 # Service 暴露在集群内的端口 targetPort: 8000 # 转发到 Pod 内的端口 fastapi nodePort: 32180 # 手动指定节点端口,范围需在 30000-32767 之间 # AutoGen Studio 端口转发配置 - port: 8001 # Service 暴露在集群内的端口 targetPort: 8001 # 转发到 Pod 内的端口 autogenstudio nodePort: 32181 # 手动指定节点端口,范围需在 30000-32767 之间 type: NodePort # 暴露到集群外
配置Jenkins 脚本
写Jenkins脚本,用来 build 和 推送镜像到私有仓库,并在 k8s创建deployment。

Jenkins脚本
pipeline { agent any // 禁止并发构建,确保一次只有一个实例运行 options { disableConcurrentBuilds() } environment { PATH = "$PATH:/usr/local/bin" // 添加凭据助手所在路径 } stages { stage('Git Clone') { steps { git( url: 'http://123.xxx.xxx.xxx:3001/xxxx/wechat-applet-services', credentialsId: 'd2ed6ebb-xxx-xxx-xxx-ca9dd3bc75ba', branch: 'main', ) } } // 删除K8s Deployment stage('Delete Deployment') { steps { sh 'kubectl delete deployment service-autogen-deployment -n common-services --ignore-not-found=true' } } stage('Dokcer Image Build & Push') { steps { dir('service-autogen') { sh 'docker build --progress=plain -t service-autogen .' sh 'docker tag service-autogen:latest 123.xxx.xxx.xxx:5001/service-autogen:latest' sh "docker push 123.xxx.xxx.xxx:5001/service-autogen:latest" } } } stage('Create Deployment') { steps { dir('service-autogen') { sh 'kubectl apply -f service-autogen-deployment.yaml -n common-services' } } } stage('clean prune Image') { steps { sh 'docker image prune -f' // -f 强制删除悬空镜像 } } } }
可以看到deployement已经发布好了

用上面的servcie yaml创建service服务

进入Pod启动 AutoGen Studio 服务
可以在k8s dashboard的Pod界面,选择AutoGen的Pod,点击执行,进入容器。

可以看到Python的版本 和 autogenstudio ui 都确认是OK的。

用下面的命令,启动 autogenstudio ui, 注意–host 0.0.0.0 是必须的,否则只能localhost本地访问, 不能在别的机器用ip访问。
autogenstudio ui --host 0.0.0.0 --port 8001
浏览器 http://localhost:32181/ 就可以打开 autogenstudio ui 页面了。(32181是Node port,service 映射端口8001)

在AutoGen Studio 创建模型
AutoGen 想使用本地模型,在ollama上确认下可以使用的模型。
mini ~ % ollama list NAME ID SIZE MODIFIED qwen3:1.7b 8f68893c685c 1.4 GB 45 hours ago deepseek-r1:1.5b e0979632db5a 1.1 GB 45 hours ago deepseek-r1:8b 6995872bfe4c 5.2 GB 5 days ago qwen3:8b 500a1f067a9f 5.2 GB 5 days ago
点击Gallery -> Models -> Add Model 按钮 添加本地模型
这里添加 qwen3:8b 模型。
Name:qwen3:8b Model:qwen3:8b Base URL:http://192.168.3.3:11434/v1 (本地 ollama api的路径)
‼️注意:非常重要 添加的模型必须支持 function call, 否则后面运行的时候会出错,qwen3:8b是支持function call的,deepseek-r1的模型都不支持function call,所以 deepseek-r1的模型用不了。

如果用 deepseek-r1 模型会出下面的错误,这是因为deepseek-r1 大模型不支持 Function call 功能。
| ERROR | Function call is not supported for this model.’
可以点击Test 按钮测试,看和模型通信是否正常。

配置一个可以取得页面内容的智能体
点击Team Builder -> New Team 按钮

修改Team名字:可以修改Team的名字,这里改成 team-get-webpage
修改Agent模型:然后从左边的面板Models模块,选中qwen3:8b模型,拖拽到右边AssistantAgent的位置【Drop models here】位置。

给Agent添加Tool:从左边的Tool面板,选择fetch_webpage工具,拖拽到右边AssistantAgent的【Drop tools here】位置。

保存的时候,出现这个错误:


解决办法参考:
https://github.com/microsoft/autogen/discussions/6658


所以我们选择编辑 AssistantAgent-> 点击JSON Editor


删除JSON Editor这部分内容 -> 保存

点击Run,我们运行智能体,并且输入下面的提示词。
获取 https://92it.top/?p=269网页的内容, 帮我总结下.



创建有多个Agent 旅行计划工作流的例子
这个例子,我们要创建一个工作流,配置多个角色的Agent来制定旅行计划

我们先创建一个新的Team: team_travel_plan, 然后在AssistantAgent 里面,输入:
Description:一个能够规划旅行的助手 name:planner_agent model:qwen3:8b system message:你是一位乐于助人的助手,能够根据用户的请求提供旅行计划建议。

都设置好以后,点击保存,然后添加另一个AssistantAgent。我们在左边面板Agents处,选择AssistantAgent 拖拽到右边 【Drop agents here】位置,添加一个新的agent。

可以看到多了一个新的智能体

我们编辑新的智能体,输入如下内容,保存:
Description:一个能够推荐当地活动或游览地点的本地助手。 name:local_agent model:qwen3:8b system message:你是一位乐于助人的助手,能够为用户推荐正宗且有趣的当地活动或游览地点,并且能够利用提供的任何上下文信息。

再按照上面方法继续添加两个新的Agent
Description:一个能够为特定目的地提供语言提示的有用助手。 name:language_agent model:qwen3:8b system message:你是一位乐于助人的助手,能够审查旅行计划,提供关于如何最好地应对特定目的地的语言或沟通挑战的重要/关键提示。如果计划中已经包含了语言提示,你可以附带理由表明该计划是令人满意的。

Description:一个能够总结旅行计划的有用助手。 name:travel_summary_agent model:qwen3:8b system message:你是一位乐于助人的助手,能够接收其他助手的所有建议和意见,并提供详细的最终旅行计划。你必须确保最终计划是整合的且完整的。你的最终回复必须是完整的计划。当计划完成且所有观点都被整合后,你可以回复'TERMINATE'。

可以看到我们这个智能体工作流创建好了,没有写一行代码,我们只设置了描述,还有提示词,工作流有4个Agent。
这个工作流执行流程就是:用户输入要去的目的地,然后由planner_agent 和 local_agent, language_agent 会根据这个目的地各种制定旅行方案,然后由travel_summary_agent进行总结汇总。

我们可以测试一下
输入提示词:
泰国三日游, 给个计划。
发现智能体Flow执行的有问题,总有计算器Tool的内容。

我们点开每个Agent的,JSON Editor,发现里面有计算器的workbench,把每个Agent的这部分内容删除掉。


‼️ 重要:还有需要 去ollama 设置里面 调整Context length, token的数量,否则Agent会超过上限token,可以看到很超过4k的token数了


上面都修改好以后,我们在Playgroud中,重新运行一下,看下结果。

