What the documents look like
Channel receivables collection happens after credit sales. The work centres on credit exposure and cash recovery rather than on matching buyers and sellers. The materials that feed copy drafting are the receivables ageing table, the dunning letter, the credit agreement and the shipment freeze notice. They come from the finance system, bank receipts, distributor orders and sales contracts.
This page covers one task only: drafting product and marketing copy. The drafting step takes wording that already exists in those materials and turns it into sentences intended for external use, then checks whether each sentence is supported by the source. The materials refresh weekly or monthly. A draft that cites an ageing figure therefore needs the ageing period it came from, so that balances and overdue days from different periods do not end up in one sentence. The people involved are brand finance staff, sales support staff and distributor owners. Because the copy speaks to distributor channels and touches credit limits, overdue days and shipment status, every statement of status or scope has to be traced back to the source wording.
Constraints at the model connections step
Model connections run through AI Proxy. From V4.17.0, both the App service and the Admin service that reuses App/Service configuration must set AIPROXY_API_ENDPOINT and a non-empty AIPROXY_API_TOKEN. Missing either one causes the startup validation to fail. Older OpenAI environment variables or a single-model custom request address do not replace these two settings. AIPROXY_API_ENDPOINT holds the service root address and does not take a /v1 suffix. Model types are language, index, rerank, speech synthesis and speech recognition. The system needs at least one language model and one index model to work. Copy drafting leans on the language model. If a draft has to read an ageing table image, confirm first that the model metadata field vision is true.
Hypothetical paper exercise, not a real customer. Material one is an extract from a brand finance ageing table dated March 2026, stating "Distributor A, as of 31 March 2026, 45 days overdue, unsettled amount 120,000 yuan". Material two is an extract from a February 2026 credit agreement, stating "Distributor A credit limit 300,000 yuan, limit valid until 31 December 2026". Material three is an extract from an April 2026 dunning letter draft, stating "please settle by 20 April 2026". The sentence to be judged reads: "Distributor A has a credit limit of 300,000 yuan, 45 days ageing, and shipment has been frozen."
Configuration and implementation checks
The table covers only settings or implementation checks that are documented and that relate to this drafting task.
| Configuration item | Hypothetical starting point for this exercise | Reason for the choice and what it is compared against |
|---|---|---|
AIPROXY_API_ENDPOINT | AI Proxy service root address | Documentation states no /v1 suffix; compare against the documented format |
AIPROXY_API_TOKEN | Non-empty administrator token matching the server | Documentation requires non-empty; distinguish from an application API key |
Language model metadata maxContext | Starting value 125000 | Compare against the character volume of draft plus materials; truncation follows if exceeded |
Language model metadata vision | Starting value true | Compare against whether the draft must read the ageing table image |
Index model metadata maxToken | Starting value 3000 | Compare against the length of the ageing table slice |
| Model status probe interval | Starting value 10 minutes | Documentation supports integers from 5 to 60 minutes; compare against alerting timeliness |
Three common errors
- Treating "shipment has been frozen" in the draft sentence as already recorded. None of the three materials mentions a freeze status, and no shipment freeze notice was supplied. The check takes the draft sentence and the three source texts as input, compares whether a freeze record exists for the same subject, the same period and the same field, and finds no such record, so the statement is unsupported.
- Treating the credit limit validity date as a supply period. Material two states only that the limit is valid until 31 December 2026 and says nothing about a supply period. The check compares whether the draft rewrites the validity date into a supply commitment; a rewrite does not match the source.
- Merging figures from different periods into one sentence. Material one carries the 31 March ageing, material three carries the 20 April payment request. The check compares whether the draft places the 45 days ageing beside the 20 April date without marking each period; the absence of period labels means the periods are mixed.
How to verify the setup
- Input the three source texts from the hypothetical sample and the draft sentence. Compare each factual fragment in the draft against a matching statement with the same subject, the same period and the same field. The observable result is that "shipment has been frozen" has no corresponding record, so it is judged unsupported.
- Input material two and the draft sentence. Compare whether "credit limit 300,000 yuan" matches the agreement and whether the validity date has been rewritten as a supply period. The observable result is that the amount matches and the period has been rewritten, so the period wording does not match the source.
- Input material one and material three. Compare the periods to which the ageing days and the payment date belong. The observable result is that the two dates fall in different periods and the draft does not mark them, so period labelling is missing.
All of the above is paper checking. No deployment, call or test was carried out. Model probe alerts, Webhook delivery and the call log retention window exist under the conditions described in the official documentation; this page does not verify how they behave in this scenario.