A Bid Review in Minutes: How OCR Skills and an AI Agent Caught a 3,959-Yuan Quotation Gap
I Asked WorkBuddy All the Way, Using Tencent Cloud OCR Skills to Complete a Bid Review in Minutes
The most time-consuming part of procurement review is not reading a single document, but repeatedly cross-checking between the tender requirements, technical responses, and quotation sheets. A supplier writing "compliant" does not necessarily mean they truly are, and a lower quotation does not necessarily mean they can be recommended.
I built a bid review process from scratch using WorkBuddy. Even without understanding API keys, OCR activation, Python dependencies, or Skill development, you can ask it directly; it will provide entry points, locate problems, and complete local operations it can handle on your behalf. The process is driven by Tencent Hunyuan Hy3, which was in a limited-time free trial during my testing period; please refer to the official page for the specific deadline.
The results are direct: 8 page-by-page PDFs generated 4 review documents, with a compliance matrix covering 30 checkpoints. The process identified a discrepancy of 3,959.96 yuan between Supplier B's two quotations, and corrected its self-assessed "12 days - non-compliant" to 12 <= 15, actually compliant.
The actual processing time for a single set of materials was tens of seconds to a few minutes. If manual completion of equivalent extraction, calculation, and organization takes over an hour, the efficiency gain reaches an order of magnitude of 10x; this is a scenario-based estimate converted from a manual baseline, not a strictly controlled experiment.
First, Clarify the Business Problem
The test material is a fictional procurement project for smart warehouse label printing equipment. The tender document requires the purchase of 12 industrial barcode label printers, 12 spare print heads, along with installation, commissioning, and training services. Core thresholds include: print speed no less than 200 mm/s, resolution no less than 300 dpi, support for Wi-Fi 6, delivery within 15 calendar days, and a warranty of no less than 3 years for the complete unit and print head. It also requires the submission of a technical response form, itemized quotation, delivery plan, warranty commitment letter, and description of similar projects.
I deliberately prepared two suppliers that were not fully qualified: A's Wi-Fi is Wi-Fi 5, delivery takes 18 days, and the stamped warranty commitment letter was not submitted; B's resolution is only 203 dpi, the warranty is only 1 year, and the quotation summary does not match the independent quotation sheet. B's response form self-assessed the 12-day delivery as "non-compliant," but the tender requires a maximum of 15 days, 12 <= 15, so it should ultimately be judged as compliant. This error was specifically designed to test whether the process would blindly copy the supplier's conclusion.
The input files were prepared page by page because the real-time document extraction API uses page number parameters for PDFs, and uploading page by page is easier to reproduce across different WorkBuddy versions. The final complete review used 8 files: 2 pages of the tender document, 2 pages of A's response and 1 page of quotation, 2 pages of B's response and 1 page of quotation. Although the quotation sheet is only one page, it was also placed in the pages/ directory for unified management.
Install Two Recognition Skills First, Then Confirm the Division of Labor
The division of labor in this process is very clear.
| Layer | Responsibility | Outputs for this task |
|---|---|---|
| WorkBuddy + Hy3 | Understand tasks, break down steps, call Skills, read local files, consolidate evidence, generate deliverables | compliance_matrix.md, risk_list.md, quotation_compare.csv, review_summary.md |
tencentcloud-ocr-extractdocagent |
Extract tender requirements, response values, commercial commitments, missing files, and page numbers by field | Structured results of tender requirements and supplier responses |
tencentcloud-ocr-recognizetableaccurate |
Recover cells and total rows for borderless, multi-column quotation tables | Quotation details, Excel files, and cross-table amount verification |
tender-compliance-reviewer |
Solidify field schema, judgment rules, evidence format, and output templates | A reusable, dedicated Skill for bid compliance review |
Tencent Cloud's Table Recognition (V3) API supports regular tables, borderless tables, and multi-table detection, can return cell text, and supports saving as Excel. The quotation table in this case has no borders, with model, quantity, tax rate, subtotal, and warranty squeezed into the same row. Restoring the cell structure first provides reliable input for subsequent amount verification.
When searching, I directly used the full slug tencentcloud-ocr-recognizetableaccurate. In this case, it is only responsible for the quotation page: preserving 9 business columns, three detail rows, and the total row, without judging whether the supplier meets the tender requirements.
The second one installed is tencentcloud-ocr-extractdocagent. It processes the tender document and response files, extracting natural language constraints like "within 15 days" and "no less than 3 years" into fields, while also returning the source page number. The responsibilities of the two Skills do not overlap: one restores tables, the other extracts document fields.
After installing both Skills, I returned to the "My Installed" page to confirm the toggle status. At this point, both the Document Extraction Agent and Table Recognition V3 were enabled, providing the underlying capabilities for subsequent custom Skills to call. The client version during the installation phase was 5.3.11, which was upgraded to 5.3.14 during the formal review, with no changes to the entry points or calling methods.
Starting from "I Don't Know How to Configure," Ask WorkBuddy Directly
Successful installation does not mean the Tencent Cloud API can be called. I didn't look up a configuration tutorial first; instead, I directly asked WorkBuddy to perform a minimal self-check without uploading any business files. It checked the Skill files, authentication variables, and runtime dependencies, then narrowed the problem down to two issues: TENCENTCLOUD_SECRET_ID/KEY were not being read, and tencentcloud-sdk-python was not installed. The originally vague "Skill not working" had now become two specific, addressable problems.
At the time, I didn't know where to create this set of keys, so I directly asked: "Where do I get TENCENTCLOUD_SECRET_ID/KEY?" WorkBuddy provided the direct link to Tencent Cloud's Access Management (CAM), creation steps, available configuration locations, and the note that the SecretKey is only displayed once. The user doesn't need to understand what CAM is first; just follow the accurate path to complete the necessary operation.
Following the address it provided, I entered CAM's "API Key Management" page to create the key. This step must be completed by the account owner; for production environments, it's more appropriate to use a sub-user key granted only the necessary OCR permissions, avoiding the use of overly permissive root account keys.
After creating the key, I still didn't know where to activate the OCR service, so I continued with a question: "Is there an activation link?" WorkBuddy immediately returned the addresses for the Optical Character Recognition console, API Key Management, Intelligent Structured OCR, and Table Recognition V3 documentation, and listed the steps for "one-click activation of the OCR service."
The key was initially written into ~/.zshrc by me. I also couldn't distinguish where exactly the Skill loads environment variables from, so I just told WorkBuddy: "Check now, I've configured it." After reading the current environment, it found that the Skill's env_loader does not automatically source ~/.zshrc, so it still couldn't get the credentials at runtime. The subsequent fix was completed by WorkBuddy: writing the same set of keys to $HOME/.env supported by the loader, and then installing the missing tencentcloud-sdk-python into the managed venv. Upon re-checking, both Skills could read the authentication, and the Python SDK could be imported normally.
This configuration process actually demonstrates WorkBuddy's role most directly: Ask when you don't know, and hand over the current state for it to check when errors occur. The user doesn't need to know where to create the SecretId, whether OCR is activated, or how the Skill loads environment variables. WorkBuddy provides the next step based on actual inspection results and continues to complete local repairs it can perform. It also retains necessary boundary reminders: All green at the code layer does not mean the cloud API is already usable; the OCR service still needs to be activated in the console.
After Activating OCR, Verify the Free Resource Pack
Opening the OCR console via the link provided by WorkBuddy, the page prompted that the service had not yet been activated for the current account. Checking the service terms and clicking "Activate Now" completed the conditions for calling the cloud API. The division of labor here is very clear: WorkBuddy is responsible for diagnosis and guidance, the Skills are responsible for initiating calls, while account authorization-related actions like creating keys and activating services are still confirmed by the user.
After service activation, I entered the data report to check the actual resource packs. In the console, Table Recognition V3, Document Extraction Basic Edition, and Multimodal Edition all showed remaining free quota; according to the official free quota description, Table Recognition V3 falls under the shared 1,000 calls/month resource pack, while the Document Extraction Agent is 1,000 calls/user, valid for 1 year after first activation. The page displays the resource packs already credited to the current account; the Agent's quota rules are still subject to the official description and the actual account credit.
From Two Skills to One Business Skill
Installing two capability packs alone is not enough. Procurement personnel shouldn't have to re-explain "first extract the tender document, then the response documents, then identify the quotation sheets, and finally compare against the thresholds" every time. I also didn't learn the Skill directory specification from scratch, hand-write SKILL.md and verification scripts. Instead, I entered WorkBuddy's "Create Skill" function, described the input files, the two OCR Skills that must be called, the judgment rules, and the four output files in natural language, letting skill-creator create tender-compliance-reviewer.
Four types of rules are solidified in this custom Skill:
- Extract project number, procurement scope, core technical indicators, delivery cycle, warranty period, payment terms, and required submission documents from the tender document.
- Extract model, itemized technical parameters, delivery commitment, warranty commitment, and missing documents from supplier responses.
- Retain name, model, quantity, tax-inclusive unit price, tax rate, tax-inclusive subtotal, delivery cycle, warranty, and total row by row from the quotation sheet.
- Each conclusion must include the tender requirement, response value, comparison expression, status, file name, and page number; materials not present can only be marked as "Missing," and different values appearing in different files are marked as "To Be Confirmed."
WorkBuddy ultimately generated the complete Skill directory, field definitions, judgment rules, output templates, and build scripts, and completed verification and packaging. "Customization" here does not mean retraining a model, but solidifying the business fields, calling sequence, and judgment criteria. Hy3 is responsible for understanding and organizing tasks, while the actual actions of recognizing tables and documents still fall to the two Tencent Cloud Skills; the process can be initiated using natural language without pressing all professional recognition onto a general conversational model.
Round One: First, Turn the Tender Document into Thresholds
In the first round of formal testing, only two pages of the tender document were uploaded, without uploading any supplier materials or providing the manual baseline CSV to WorkBuddy in advance. The prompt required each field to be accompanied by the original file name and page number, first obtaining the structured requirements from the tenderer.
The result on the right is no longer a generic summary, but a collection of fields with sources: print speed at least 200 mm/s, resolution at least 300 dpi, interface requirements including USB, Gigabit Ethernet, and Wi-Fi 6, delivery cycle of 15 calendar days after contract effectiveness, warranty no less than 3 years, and a service time limit including a 4-hour response and a solution plan within 24 hours.
It also extracted acceptance conditions that generic summaries often miss: support for 203 mm outer diameter paper rolls, continuous printing of 500 sheets, no task loss after disconnection and reconnection, and the installation of 12 devices with training for no fewer than 6 warehouse personnel. Every condition has a source page number, providing a comparison baseline for later supplier reviews.
Round Two: Supplier A's Table is Restored First, Then Compliance is Discussed
The input for A's second round was response files p1, p2, and SupplierA_ItemizedQuotation_p1.pdf. Under the constraints of the custom Skill, the response files were handed to the Document Extraction Agent, and the quotation sheet to Table Recognition V3. The results page clearly stated the two calling paths, and the quotation sheet also exported an editable Excel file.
A's technical response is not complex; the difficulty lies in putting it and the tender thresholds into the same table: print speed 250 mm/s, resolution 300 dpi, warranty response 3 years — these three items are compliant; Wi-Fi 5 is not equal to Wi-Fi 6, and 18 days is greater than 15 days. The commercial response also included a 48-hour solution plan, while the tender requires 24 hours; the commercial part cannot be judged as "no deviation" just because the payment ratio is consistent.
The quotation table recognition result retained three detail rows: TL-3000, 12 units, tax-inclusive subtotal 168,000 yuan; PH-TL3000, 12 pieces, tax-inclusive subtotal 18,960 yuan; Service Package-A, 8,000 yuan; total 194,960 yuan. More notably, the response form stated a 3-year warranty for the complete unit, but the quotation table only stated 1 year for the spare print heads and installation training. This issue cannot be directly judged as non-compliant, nor can it be ignored; the correct status is "To Be Confirmed".
Round Three: Supplier B Proved Why Original Values Should Be Retained
B's input was also two response pages and a single-page quotation sheet. Here, I specifically added a sentence to the prompt: do not directly accept the supplier's self-assessed "Compliant/Non-compliant," while retaining both the supplier's self-assessment and an independent check based on the tender thresholds.
B's 203 dpi is less than 300 dpi, and the 1-year warranty is less than 3 years — these two hard deviations are undisputed; the 12-day delivery is the opposite, 12 <= 15, numerically compliant. WorkBuddy also pointed out that B's response file quotation summary was 178,960 yuan, while the independent quotation sheet totaled 175,000.04 yuan, and the amounts for spare print heads and installation training in the two files were also inconsistent.
When I repeated the run with the exact same files and requirements, WorkBuddy directly reused the already generated B results, avoiding consuming OCR calls again. This mechanism is suitable for daily processing, but for performance testing, a new session must be created and the call records confirmed, ensuring a cache hit is not counted as a new API execution.
Final Review: Four Files and One Re-check
The complete review handed 8 page-by-page files to WorkBuddy at once, requiring it to first extract the tender thresholds, then compare the two responses, and finally verify the quotation details. The result generated four files that can continue to be circulated: a 30-item compliance matrix, a graded risk list, a quotation comparison CSV, and a one-page review summary.
The first round summary statistics were 11 items compliant, 8 non-compliant, 3 missing, 8 to be confirmed. A's core issues were wireless network, delivery cycle, and service response time limit; B's core issues were resolution, warranty period, service response time limit, and quotation document conflict. WorkBuddy did not write B's lower price directly as a recommendation, but delivered "hard non-compliance" and "needs clarification" separately, allowing procurement personnel to first address deviations affecting eligibility, then handle material supplementation and amount confirmation.
The quotation comparison table retained the original decimals: B's first row unit price was 12,666.67 yuan, subtotal 152,000.04 yuan, and the three rows summed to 175,000.04 yuan. The amounts were not formatted into integers, nor was the independent quotation sheet overwritten with the 178,960 yuan from the response file. For procurement review, this traceable original row is far more useful than a sentence saying "B's quotation is lower."
Final Round Re-check: Pulling the Model's Judgment Back to the Rules
I did not treat the complete review summary as the final conclusion, but initiated another review specifically targeting 7 borderline items, requiring a line-by-line output of "Tender Requirement | Response Value | Comparison Expression | Judgment | Evidence File and Page Number." This step anchored the conclusions back to the numbers and original text.
The final review provided clear results: A's Wi-Fi 5, 18-day delivery, and 48-hour solution plan are all non-compliant; B's 203 dpi, 1-year warranty, and 48-hour solution plan are non-compliant; B's 12-day delivery is compliant; B's failure to submit proof of similar projects is Missing. The results also retained a cautious note: the tender text extraction results only clearly showed "description of similar projects"; whether a quantity of "at least 2" is strictly required should still be confirmed by the procurement personnel by reviewing the complete tender document.
This step clearly defines the process's boundary of responsibility: it can recalculate values that are easily misread and identify conflicts between two documents, but it will not conflate "Missing" and "Non-compliant" into the same category, nor will it complete the final bid award decision for the procurement personnel.
What This Set of Skills Ultimately Achieved
| Original Manual Action | Result After Skill Combination |
|---|---|
| Page-by-page search for tender thresholds | Extracted into structured requirements with file names and page numbers |
| Manual restoration of borderless quotation tables | Preserved 9 business columns, original decimals, and total rows, and exported to Excel/CSV |
| Copying two responses for item-by-item comparison | Automatically generated a 30-item compliance matrix, distinguishing Compliant, Non-compliant, Missing, and To Be Confirmed |
| Manual amount calculation and conflict identification | Identified the cross-file conflict between 178,960 and 175,000.04 |
| Entering conclusions based on supplier self-assessment | Recalculated against thresholds, correcting B's 12-day delivery to Compliant |
| Compiling review materials | Generated 4 deliverables at once: matrix, risk list, quotation comparison, review summary |
The work left for procurement personnel is more focused: confirming warranty interpretations, judging whether missing materials can be supplemented, deciding which document's conflicting quotation prevails, and reviewing the handling of hard deviations. Real-time document extraction still has constraints on PDF page input; long files need to be split; free quotas are not unlimited calls. When it comes to contract validity, seal authenticity, quotation validity, and final bid award, one should still return to the original documents and regulations to complete the sign-off confirmation.
Conclusion
Starting from a blank WorkBuddy session this time, the entire process did not require me to first figure out key acquisition, OCR activation, environment variable loading, or Skill development. When encountering something unclear, I just asked; when encountering a failure, I let WorkBuddy check the current state. It provided entry points, located causes, completed local repairs, and then organized the two Tencent Cloud OCR Skills into a bid review process. Ultimately, 8 files entered WorkBuddy, and 4 review files that can continue to be circulated were output, with every key judgment traceable back to the original text, numbers, and evidence.
For material-intensive work like procurement, contracts, acceptance, and supplier onboarding, I prefer to treat WorkBuddy as a process orchestration platform and treat specialized Skills as verifiable tool nodes. The model can be fast, and the output can be auto-generated, but the final line of the conclusion should still be able to answer three questions: Based on which requirement, what response value was read, and on which page of which file is the evidence.