多模态消息(文本 + 图片)支持,遵循 OpenAI API 规范。
Prompt 层 (SimplePrompt) → OpenAI 格式消息 → Provider 层适配 → 模型 API
关键原则:
实现位置:agent/prompts/wrapper.py:SimplePrompt
功能:构建 OpenAI 格式的多模态消息
# 使用示例
prompt = SimplePrompt("task.prompt")
messages = prompt.build_messages(
text="内容",
images="path/to/image.png" # 或 images=["img1.png", "img2.png"]
)
关键方法:
build_messages(**context) - 构建消息列表,支持 images 参数_build_image_content(image) - 将图片路径转为 OpenAI 格式(data URL)消息格式(OpenAI 规范):
[
{"role": "system", "content": "系统提示"},
{
"role": "user",
"content": [
{"type": "text", "text": "..."},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}
]
}
]
实现位置:agent/llm/providers/gemini.py:_convert_messages_to_gemini
功能:将 OpenAI 多模态格式转换为 Gemini 格式
转换规则:
content 是否为数组(多模态标志){"type": "text"} → Gemini {"text": "..."}{"type": "image_url"} → Gemini {"inline_data": {"mime_type": "...", "data": "..."}}关键逻辑:
# 处理多模态消息
if isinstance(content, list):
parts = []
for item in content:
if item.get("type") == "text":
parts.append({"text": item.get("text")})
elif item.get("type") == "image_url":
# 解析 data URL 并转换
mime_type, base64_data = parse_data_url(url)
parts.append({"inline_data": {"mime_type": mime_type, "data": base64_data}})
标准 .prompt 文件格式:
---
model: gemini-2.5-flash
temperature: 0.3
---
$system$
系统提示...
$user$
用户提示:%text%
参考示例:examples/feature_extract/run.py
# 1. 加载 prompt
prompt = SimplePrompt("task.prompt")
# 2. 构建消息(自动处理图片)
messages = prompt.build_messages(text="...", images="img.png")
# 3. 调用 Agent
runner = AgentRunner(llm_call=create_gemini_llm_call())
result = await runner.call(messages=messages, model="gemini-2.5-flash")
当前支持:
未来扩展: