65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
"""Agent 可调用的工具定义和实现。"""
|
||
|
||
from app.services.image_gen import generate_images
|
||
|
||
# OpenAI Function Calling 格式的工具定义
|
||
TOOL_DEFINITIONS = [
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "generate_image",
|
||
"description": (
|
||
"根据文字描述生成图片。prompt 必须是英文。"
|
||
"如果用户提供了参考图,会自动传入 ref_image_url 参数。"
|
||
),
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"prompt": {
|
||
"type": "string",
|
||
"description": "英文图片描述 prompt,详细描述要生成的图片内容、风格、颜色等",
|
||
},
|
||
"num_images": {
|
||
"type": "integer",
|
||
"description": "生成图片数量,1-4 张",
|
||
"default": 1,
|
||
"minimum": 1,
|
||
"maximum": 4,
|
||
},
|
||
},
|
||
"required": ["prompt"],
|
||
},
|
||
},
|
||
}
|
||
]
|
||
|
||
|
||
async def execute_tool(
|
||
tool_name: str,
|
||
arguments: dict,
|
||
ref_image_url: str | None = None,
|
||
image_model: str | None = None,
|
||
) -> dict:
|
||
"""执行工具调用,返回结果。"""
|
||
if tool_name == "generate_image":
|
||
prompt = arguments["prompt"]
|
||
num_images = arguments.get("num_images", 1)
|
||
result = await generate_images(
|
||
prompt=prompt,
|
||
num_images=num_images,
|
||
ref_image_url=ref_image_url,
|
||
model_id=image_model,
|
||
)
|
||
valid_urls = [u for u in result.urls if not u.startswith("[")]
|
||
errors = [u for u in result.urls if u.startswith("[")]
|
||
return {
|
||
"success": len(valid_urls) > 0,
|
||
"images": valid_urls,
|
||
"errors": errors,
|
||
"prompt_used": prompt,
|
||
"model_name": result.model_name,
|
||
"model_id": result.model_id,
|
||
}
|
||
|
||
return {"success": False, "error": f"未知工具: {tool_name}"}
|