图形理解基础
大模型支持在文本之外输入图片,你可以让模型描述图片、识别截图中的文字、分析图表等。
如果需要使用大模型理解图形,那么除了要提交问题本身,还需要提交图片,图形可以来自网络,base64,也可以是通过Files API上传的文件。
LLMCaller的UserMessage属性用于设置用户问题,用户问题可以是一个字符串,也可以是一个JArray数组,这样就可以同时提交用户问题以及图片文件。
DeepSeek官方关于图形理解的说明文档地址:
https://api-docs.deepseek.com/zh-cn/guides/vision
以下代码均可以直接在命令窗口执行。
理解网络图片
Dim
caller
As
New
LLMCaller("https://api.deepseek.com/chat/completions",
"deepseek-flash",
"sk-a734b83536da45e9aedc3e42605bfb3a")
Dim
msgArray
As
New
JArray()
'添加用户问题
msgArray.Add(
New
JObject
From
{
{"type",
"text"},
{"text",
"这张图片里有什么?"}
})
'添加第一个图片,可以添加多个图片
msgArray.Add(New
JObject
From
{
{"type",
"image_url"},
{"image_url",
New
JObject
From
{
{"url",
"http://www.foxtable.com/lib/images/banner1a.jpg"}
}}
})
caller.UserMessage = msgArray
If
caller.GetResult()
Then
MessageBoxA.Show(caller.Result)
Else
MessageBoxA.Show(caller.Error)
End
If
理解本地图片
Dim
caller
As
New
LLMCaller("https://api.deepseek.com/chat/completions",
"deepseek-flash",
"sk-a734b83536da45e9aedc3e42605bfb3a")
'请替换为自己的密钥
Dim
imgPath
As
String
=
"C:\test\test.jpg"
'本地图片地址
Dim
bytes
As
Byte()
= System.IO.File.ReadAllBytes(imgPath)
'将图片转为字节数组
Dim
base64Str
As
String
= Convert.ToBase64String(bytes)
'将字节数组转为base64格式
Dim
imgBase64
As
String
=
"data:image/jpeg;base64,"
& base64Str
'合成图片的base64字符串形式
Dim
msgArray
As
New
JArray()
'添加文本问题
msgArray.Add(New
JObject
From
{
{"type",
"text"},
{"text",
"识别这张图片的内容,提取关键信息"}
})
'添加图片,可以添加多个图片
msgArray.Add(New
JObject
From
{
{"type",
"image_url"},
{"image_url",
New
JObject
From
{
{"url",
imgBase64}
}}
})
caller.UserMessage = msgArray
If
caller.GetResult()
Then
MessageBoxA.Show(caller.Result)
Else
MessageBoxA.Show(caller.Error)
End
If
规范信息提取格式
我们可以在用户提示词中规范图片信息提取的格式,这在很多场合(例如发票识别)中时非常有必要的。
以下代码可直接在命令窗口执行,测试前请将一张增值税发票图片文件放在对应的目录:
Dim
caller
As
New
LLMCaller("https://api.deepseek.com/chat/completions",
"deepseek-flash",
"sk-a734b83536da45e9aedc3e42605bfb3a")
'请替换为自己的密钥
Dim
imgPath
As
String
=
"C:\test\增值税发票.png"
'发票图片地址
Dim
bytes
As
Byte()
= System.IO.File.ReadAllBytes(imgPath)
'将图片转为字节数组
Dim
base64Str
As
String
= Convert.ToBase64String(bytes)
'将字节数组转为base64格式
Dim
imgBase64
As
String
=
"data:image/png;base64,"
& base64Str
'合成图片的base64字符串形式
Dim
msgArray
As
New
JArray()
'用户问题,用于告知AI识别发票后,输出的JSON格式,内容较多,用CDATA方便点
Dim
outfmt
As
String
=
<![CDATA[
识别这张增值税发票,严格只输出JSON字符串,不要任何解释、不要markdown、不要换行多余内容。
JSON字段规定:
invoice_type:发票类型,
invoice_code:发票代码,
invoice_no:发票号码,
invoice_date:开票日期格式YYYY-MM-DD,
buyer_name:购买方名称,
buyer_taxid:购买方纳税人识别号,
seller_name:销售方名称,
seller_taxid:销售方纳税人识别号,
total_cn:价税合计大写,
total_num:价税合计小写数字,
amount_without_tax:不含税总金额数字,
tax:税额数字,
detail:商品明细多行文本。
缺失数据填空字符串,数字类型填0。
]]>.Value.Trim()
'添加文本问题
msgArray.Add(New
JObject
From
{
{"type",
"text"},
{"text",
outfmt}
})
'添加图片,可以添加多个图片
msgArray.Add(New
JObject
From
{
{"type",
"image_url"},
{"image_url",
New
JObject
From
{
{"url",
imgBase64}
}}
})
caller.UserMessage = msgArray
If
caller.GetResult()
Then
MessageBoxA.Show(caller.Result)
Else
MessageBoxA.Show(caller.Error)
End
If