图形理解基础

大模型支持在文本之外输入图片,你可以让模型描述图片、识别截图中的文字、分析图表等。

如果需要使用大模型理解图形,那么除了要提交问题本身,还需要提交图片,图形可以来自网络,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


本页地址:http://www.foxtable.com/webhelp/topics/7224.htm