為了驗證Dify對票據識別的正確率,博主開發了一個批量調用Dify API 完成OCR識別工具,在RPA項目上測試樣本數據識別的正確率。只需要點一下按鈕,程序就放出10次請求,然後把AI智能體OCR識別的結果全部返回。感謝zoujiawei提供的DifyWebClient類庫,我們只需要直接調用就行,不過還是有一些地方需要博主説明一下:
1、Dify 調用API上傳文件,還是老問題,如果設置了多個文件,你需要給數組,如果單個文件,你不能給數組,否則接口調用會報錯。DifyWebClient類庫提供的是多個文件功能,所以Dify中也需要設置成多個文件。
2、DifyWebClient類庫,需要在線程中調用,比如winform中使用,你會一直卡在那兒,但如果放線程中,使用就正常了。
網上C# 調用Dify API的代碼居然很少,我來提供一篇吧。WinForm .net8
using DifyWebClient.Net;
using DifyWebClient.Net.ApiClients;
using DifyWebClient.Net.Enum;
using DifyWebClient.Net.Models.Base;
using DifyWebClient.Net.Models.Knowledge;
using DifyWebClient.Net.Models.WorkflowApp;
namespace DifyUpload
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
Task task = Task.Run(() => Thread1());
}
}
void Thread1()
{
//上傳需要識別的圖片
WorkflowAppApiClient workflowAppApiClient = new WorkflowAppApiClient("https://agent.cloud-uat.XXXXX.cn/v1", "app-65i3syVDIQ6U3op3mVdKEXXX");
FileUploadResponse fileUploadResponse = workflowAppApiClient.FileUpload(FileToBinaryConverter.ConvertFileToBinary("d:\\527800.png"), "527800.png");
// ps(listBox1, fileUploadResponse.id);
//準備調用工作流的參數,注意:智能體的文件輸入必須是多個文件,設置成單文件會報錯!
Dictionary<string, object> inputkeyValuePairs = new Dictionary<string, object>();
List<FileListElement> fileListElements = new List<FileListElement>();
fileListElements.Add(new FileListElement(upload_file_id: fileUploadResponse.id, "image", "local_file", null));
inputkeyValuePairs.Add("input_file", fileListElements); // input_file 是自己在dify中的命名參數
//調用工作流
ExecuteWorkflowRequest executeWorkflowRequest = new ExecuteWorkflowRequest(inputkeyValuePairs, user: "abc-123", ResponseMode.Blocking);
CompletionResponse completionResponse = workflowAppApiClient.ExecuteWorkflow(executeWorkflowRequest);
// ps(listBox1, completionResponse.RealJsonstring);
// textBox1.Text = (completionResponse.data.outputs["text"].ToString());
// Console.WriteLine(completionResponse.RealJsonstring);
// ps(listBox1, completionResponse.data.outputs["text"].ToString());
ps(listBox1, completionResponse.data.outputs["text"].ToString());
}
public void ps(ListBox box, string s)
{
String line = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + s;
box.Items.Add(line);
}
}
}
----------2025.10.23--------------
為了批量調用Dify 完成OCR識別後,校對識別的內容,然後去不斷優化修改提示詞,工具升級了自動校對全部返回文本的功能。