想通过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 按钮 添加本地模型,如果直接Add 新模型总出错的话,可以复制一个既存的非open ai的模型,然后再修改模型信息。

这里添加 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中,重新运行一下,看下结果。

