视觉代理是一个库,帮助您利用代理框架生成代码来解决视觉任务。许多当前的视觉问题可能需要花费数小时或数天时间来解决,您需要找到合适的模型,弄清楚如何使用它,并编程实现您想要完成的任务。视觉代理旨在通过允许用户以文本形式描述他们的问题,让代理框架生成代码来解决任务,从而提供秒级体验。请查看我们的Discord以获取更新和路线图!
网络应用
在 va.landing.ai 上试用视觉代理(注意,这可能不是最新版本)
文档
入门指南
安装
要开始使用,您可以使用pip安装库:
pip install vision-agent
确保您有一个OpenAI API密钥,并将其设置为环境变量(如果您使用Azure OpenAI,请参阅Azure设置部分):
export OPENAI_API_KEY="your-api-key"
视觉代理
有两种代理可供使用。视觉代理是一个会话代理,可以访问允许它编写和导航Python代码和文件系统的工具。它可以用自然语言与用户交谈。视觉代理编码器是一个可以为视觉任务编写代码的代理,比如计算图像中的人数。但是,它不能进行对话,只能用代码回应。视觉代理可以调用视觉代理编码器来编写视觉代码。
基本用法
要在本地运行streamlit应用程序与视觉代理聊天,您可以运行以下命令:
pip install -r examples/chat/requirements.txt
export WORKSPACE=/path/to/your/workspace
export ZMQ_PORT=5555
streamlit run examples/chat/app.py
您可以在这里找到有关streamlit应用程序的更多详细信息。
基本编程用法
>>> from vision_agent.agent import VisionAgent
>>> agent = VisionAgent()
>>> resp = agent("Hello")
>>> print(resp)
[{"role": "user", "content": "Hello"}, {"role": "assistant", "content": "{'thoughts': '用户向我打招呼了。我将回应一个问候并询问我能如何帮助他们。', 'response': '你好!今天我能为您提供什么帮助?', 'let_user_respond': True}"}]
>>> resp.append({"role": "user", "content": "你能数一下这张图片中有多少人吗?", "media": ["people.jpg"]})
>>> resp = agent(resp)
视觉代理编码器
基本用法
您可以像与任何LLM或LMM模型交互一样与代理交互:
>>> from vision_agent.agent import VisionAgentCoder
>>> agent = VisionAgentCoder()
>>> code = agent("罐子中咖啡豆占据了多大比例的面积?", media="jar.jpg")
这将生成以下代码:
from vision_agent.tools import load_image, grounding_sam
def calculate_filled_percentage(image_path: str) -> float:
# 步骤1:加载图像
image = load_image(image_path)
# 步骤2:分割罐子
jar_segments = grounding_sam(prompt="jar", image=image)
# 步骤3:分割咖啡豆
coffee_beans_segments = grounding_sam(prompt="coffee beans", image=image)
# 步骤4:计算分割后的罐子面积
jar_area = 0
for segment in jar_segments:
jar_area += segment['mask'].sum()
# 步骤5:计算分割后的咖啡豆面积
coffee_beans_area = 0
for segment in coffee_beans_segments:
coffee_beans_area += segment['mask'].sum()
# 步骤6:计算咖啡豆占罐子面积的百分比
if jar_area == 0:
return 0.0 # 避免除以零
filled_percentage = (coffee_beans_area / jar_area) * 100
# 步骤7:返回计算得出的百分比
return filled_percentage
要更好地理解模型是如何得出答案的,您可以通过传入verbose参数来以调试模式运行:
>>> agent = VisionAgentCoder(verbose=2)
详细用法
您还可以通过调用chat_with_workflow
来获取更多信息。输入格式是一个包含键role
、content
和media
的字典列表:
>>> results = agent.chat_with_workflow([{"role": "user", "content": "罐子面积的百分之多少被咖啡豆填满了?", "media": ["jar.jpg"]}])
>>> print(results)
{
"code": "from vision_agent.tools import ..."
"test": "calculate_filled_percentage('jar.jpg')",
"test_result": "...",
"plan": [{"code": "...", "test": "...", "plan": "..."}, ...],
"working_memory": ...,
}
通过这种方式,您可以检查更详细的信息,如测试代码、测试结果、完成任务所使用的计划或工作记忆。
多轮对话
您也可以与vision-agent进行多轮对话,对代码提供反馈并让它更新。您只需要将代码作为助手的回复添加:
agent = va.agent.VisionAgent(verbosity=2)
conv = [
{
"role": "user",
"content": "这些工人是否穿戴了安全装备?只输出True或False值。",
"media": ["workers.png"],
}
]
result = agent.chat_with_workflow(conv)
code = result["code"]
conv.append({"role": "assistant", "content": code})
conv.append(
{
"role": "user",
"content": "你能否也返回穿戴安全装备的工人数量?",
}
)
result = agent.chat_with_workflow(conv)
工具
模型或用户可以使用各种工具。有些在本地执行,而其他则是为您托管的。您还可以直接要求LMM为您构建工具。例如:
>>> import vision_agent as va
>>> lmm = va.lmm.OpenAILMM()
>>> detector = lmm.generate_detector("你能为我构建一个罐子检测器吗?")
>>> detector(va.tools.load_image("jar.jpg"))
[{"labels": ["jar",],
"scores": [0.99],
"bboxes": [
[0.58, 0.2, 0.72, 0.45],
]
}]
您还可以向代理添加自定义工具:
import vision_agent as va
import numpy as np
@va.tools.register_tool(imports=["import numpy as np"])
def custom_tool(image_path: str) -> str:
"""我的自定义工具文档。
参数:
image_path (str): 图像的路径。
返回:
str: 工具的结果。
示例
-------
>>> custom_tool("image.jpg")
"""
return np.zeros((10, 10))
您需要确保使用@va.tools.register_tool
调用它使用的任何导入。全局变量不会被register_tool
捕获,所以您需要将它们包含在函数中。确保文档格式与上面相同,包括描述、参数:
、返回:
和示例\n-------
。您可以在这里找到一个用例示例,因为这是代理用来选择和使用工具的方式。
Azure设置
如果您想使用Azure OpenAI模型,您需要有两个OpenAI模型部署:
- OpenAI GPT-4o模型
- OpenAI文本嵌入模型
然后您可以设置以下环境变量:
export AZURE_OPENAI_API_KEY="您的api密钥"
export AZURE_OPENAI_ENDPOINT="您的端点"
# 您的Azure OpenAI聊天模型的部署名称
export AZURE_OPENAI_CHAT_MODEL_DEPLOYMENT_NAME="您的gpt4o模型部署名称"
# 您的Azure OpenAI文本嵌入模型的部署名称
export AZURE_OPENAI_EMBEDDING_MODEL_DEPLOYMENT_NAME="您的嵌入模型部署名称"
注意:确保您的Azure模型部署有足够的配额(每分钟令牌数)来支持它。默认值8000TPM是不够的。
然后您可以使用Azure OpenAI模型运行Vision Agent:
import vision_agent as va
agent = va.agent.AzureVisionAgentCoder()
问答
如何开始使用OpenAI API积分
- 访问OpenAI API平台注册API密钥。
- 按照说明购买和管理您的API积分。
- 确保您的API密钥在项目设置中正确配置。
如果没有足够的API积分,可能会导致依赖OpenAI API的功能受限或无法使用。
有关管理API使用和积分的更多详细信息,请参阅OpenAI API文档。