This workflow corresponds to n8n.io template #6039 — we link there as the canonical source.
This workflow follows the Agent → Chat Trigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "eZfFdSNlnzCVX3Vq",
"name": "Hyperpresonalized Outreach",
"tags": [
{
"id": "tWKtoc0mr7oKZh9m",
"name": "INDIA",
"createdAt": "2025-07-09T07:09:33.889Z",
"updatedAt": "2025-07-09T07:09:33.889Z"
}
],
"nodes": [
{
"id": "63af4c83-7aae-485d-8f84-84d51148874d",
"name": "Apollo Scraper",
"type": "n8n-nodes-base.httpRequest",
"position": [
2760,
-320
],
"parameters": {
"url": "https://api.apify.com/v2/acts/code_crafter~apollo-io-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN_HERE",
"options": {},
"jsonBody": "={\n \"getPersonalEmails\": true,\n \"getWorkEmails\": true,\n \"totalRecords\": 500,\n \"url\": \"\"\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2,
"alwaysOutputData": false
},
{
"id": "4bce359d-0cea-4155-b596-f82cd0491d66",
"name": "Required Data",
"type": "n8n-nodes-base.set",
"position": [
2940,
-320
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "12627ab3-3654-4f68-8a59-6a73e24bda05",
"name": "linkedin_url",
"type": "string",
"value": "={{ $json.linkedin_url }}"
},
{
"id": "159c2aae-13c6-4ea9-bdf9-9b35df005f41",
"name": "email",
"type": "string",
"value": "={{ $json.email }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "43b754c0-91e0-4559-b8f1-f05e6a6dc623",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
2580,
-320
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b742c3ec-1a3c-4274-9716-75638b545f4a",
"name": "Supabase",
"type": "n8n-nodes-base.supabase",
"position": [
3140,
-320
],
"parameters": {
"tableId": "Data",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "linkedin_url",
"fieldValue": "={{ $json.linkedin_url }}"
},
{
"fieldId": "email",
"fieldValue": "={{ $json.email }}"
}
]
}
},
"typeVersion": 1
},
{
"id": "e86c3301-442a-4a71-a772-29e4c0528cbf",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
2520,
-600
],
"parameters": {
"color": 6,
"width": 820,
"height": 460,
"content": "## Lead Collector\n\n\n## 1. Go to apollo.io, use filters and after that copy the link from tab and paste that in the http node url section (paste inside the \"\").\n## 2. Pay for APify to get more data\n## 3. Create a supabase table beforhand according to your fields and make changes to both scrape and outreach workflow accordingly."
},
"typeVersion": 1
},
{
"id": "0324b737-19f1-47ad-adba-24f504bd846f",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
4820,
740
],
"parameters": {
"jsonSchemaExample": "{\n\t\"Subject\": \"\",\n\t\"Body\": \"\"\n}"
},
"typeVersion": 1.2
},
{
"id": "98d9aa9f-d7e9-4719-9f2a-c4b8131bab68",
"name": "Story",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
4600,
560
],
"parameters": {
"text": "=Pain Point + Solution:{{ $json['Pain Point + Solution'] }}\nPersonal History:{{ $json.Fullposition }}",
"options": {
"systemMessage": "="
},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": true,
"typeVersion": 1.9
},
{
"id": "8eae5dd1-f6df-4a3a-a592-6e5e93525514",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
5020,
500
],
"parameters": {},
"typeVersion": 3.1
},
{
"id": "b7c0f891-ba44-499a-9200-54b150554f2f",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
5400,
680
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "gpt-4.1"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "b40150f2-4fed-47a5-8139-475c232545d9",
"name": "Aggregate",
"type": "n8n-nodes-base.aggregate",
"position": [
5200,
500
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "7f8f830d-1db2-4b1e-8eb7-4f42191fef3d",
"name": "HTML Modifier",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
5420,
500
],
"parameters": {
"text": "=HTML File: {{ $json.data[1].output.Body }}\nFirst Name:{{ $json.data[0].data[0].firstName }}",
"options": {
"systemMessage": "="
},
"promptType": "define"
},
"retryOnFail": true,
"typeVersion": 1.9
},
{
"id": "7cce232a-dabc-4a1a-9b08-fb81d223be6c",
"name": "Code",
"type": "n8n-nodes-base.code",
"position": [
2480,
680
],
"parameters": {
"jsCode": "const url = $input.first().json.linkedin_url; \nconst p1 = \"http://www.linkedin.com/in/\";\nconst p2 = \"linkedin.com/in/\";\n\nlet handle = url;\nif (handle.startsWith(p1)) {\n handle = handle.slice(p1.length);\n} else if (handle.startsWith(p2)) {\n handle = handle.slice(p2.length);\n}\n\n// now `handle` is just the username\nreturn [{ json: { handle } }];"
},
"typeVersion": 2
},
{
"id": "3b7621a2-e10f-4cd2-9bef-3a35734cf256",
"name": "Structured Output Parser1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
4000,
320
],
"parameters": {
"jsonSchemaExample": "{\n\t\"Yes\": \"True\",\n\t\"No\": \"False\",\n \"Pain Point + Solution\": \"\"\n}"
},
"typeVersion": 1.2
},
{
"id": "bbaf969a-6287-42e1-aee2-694d69bbf2a3",
"name": "Aggregate1",
"type": "n8n-nodes-base.aggregate",
"position": [
3180,
600
],
"parameters": {
"options": {
"includeBinaries": true
},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "eb12db12-0a58-47e9-aed9-913c50fbebf7",
"name": "Merge1",
"type": "n8n-nodes-base.merge",
"position": [
3020,
600
],
"parameters": {},
"typeVersion": 3.1
},
{
"id": "06b5cb2b-d08a-40f6-b6db-9ba841dd6e60",
"name": "LinkedIn Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
2480,
480
],
"parameters": {
"url": "=https://li-data-scraper.p.rapidapi.com/get-profile-data-by-url?url= {{ $json.linkedin_url }}",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-rapidapi-host",
"value": "li-data-scraper.p.rapidapi.com"
},
{
"name": "x-rapidapi-key"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "a6b4b60f-9ea6-43fd-863d-9b434af3bd65",
"name": "LinkedIn Posts",
"type": "n8n-nodes-base.httpRequest",
"position": [
2640,
680
],
"parameters": {
"url": "https://li-data-scraper.p.rapidapi.com/get-profile-posts",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "username",
"value": "={{ $json.handle }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-rapidapi-host",
"value": "li-data-scraper.p.rapidapi.com"
},
{
"name": "x-rapidapi-key"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "eba257da-fdde-458e-a00e-751642528380",
"name": "Summery+First Name",
"type": "n8n-nodes-base.set",
"position": [
2640,
480
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "ab22b342-5eaf-4623-af3d-959cda750294",
"name": "firstName",
"type": "string",
"value": "={{ $json.firstName }}"
},
{
"id": "43306643-963b-414b-a882-9513006b9a7d",
"name": "summary",
"type": "string",
"value": "={{ $json.summary }}"
},
{
"id": "3c792265-2f1d-4195-9aa2-6e7e05275d6c",
"name": "position[0].companyName",
"type": "string",
"value": "={{ $json.position[0].companyName }}"
},
{
"id": "d7a3c26e-ed8f-4095-87c6-7fca37d1ef07",
"name": "position[0].title",
"type": "string",
"value": "={{ $json.position[0].title }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "c86745b3-fdd1-42b0-b504-56f6985f00ed",
"name": "Last 5 Posts",
"type": "n8n-nodes-base.set",
"position": [
2780,
680
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e3ed3613-293f-4c67-8e64-b0dacc739129",
"name": "data[0].text",
"type": "string",
"value": "={{ $json.data[0].text }}"
},
{
"id": "9e801380-0227-4b9c-9307-889b5e60ad25",
"name": "data[1].text",
"type": "string",
"value": "={{ $json.data[1].text }}"
},
{
"id": "a408d1b7-7861-4df0-9f28-75c0bc8baac1",
"name": "data[2].text",
"type": "string",
"value": "={{ $json.data[2].text }}"
},
{
"id": "51ea0115-3609-4ef2-88d2-ee759f59efda",
"name": "data[3].text",
"type": "string",
"value": "={{ $json.data[3].text }}"
},
{
"id": "6e56c7db-2267-4b08-aa2b-a1f44f312f07",
"name": "data[4].text",
"type": "string",
"value": "={{ $json.data[4].text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "eb735ea3-8163-4690-9039-095cdc687c4c",
"name": "Check Null Values",
"type": "n8n-nodes-base.if",
"position": [
3400,
600
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "6f5351cc-3f1a-408f-900f-bcfcf70c92f3",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.data[0].firstName }}",
"rightValue": "[null]"
},
{
"id": "9771735c-9c4f-4395-aadd-918dd78760ba",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.data[0].summary }}",
"rightValue": "[null]"
},
{
"id": "d4fb6404-2b5f-4c7e-b4ad-0c84287cebc8",
"operator": {
"type": "array",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.data[1].data }}",
"rightValue": "[null]"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "0bc317fe-0a8f-436d-a556-ef6f506a204f",
"name": "Relevance Check",
"type": "n8n-nodes-base.if",
"position": [
4200,
180
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "deb56fcf-527e-4de4-a01c-bc085c9974ae",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "=true",
"rightValue": "true"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "bd03e4d8-4fa9-44bb-9e94-3412810ac54b",
"name": "Irrelevant Leads",
"type": "n8n-nodes-base.supabase",
"position": [
4240,
660
],
"parameters": {
"tableId": "C-Suite",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "status",
"fieldValue": "False"
}
]
},
"operation": "update"
},
"typeVersion": 1
},
{
"id": "33fc8056-3f9a-4329-9c5d-613f52a5e69f",
"name": "Successful Outreach",
"type": "n8n-nodes-base.supabase",
"position": [
5740,
700
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "email",
"keyValue": "=",
"condition": "eq"
}
]
},
"tableId": "C-Suite",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "status",
"fieldValue": "True"
}
]
},
"operation": "update"
},
"typeVersion": 1
},
{
"id": "475977b6-cc71-45f7-bc2b-cfd6141e8263",
"name": "OpenAI Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
4520,
740
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "gpt-4.1"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "57f33280-8434-4945-8e3b-24a27eb92c01",
"name": "Name",
"type": "n8n-nodes-base.set",
"position": [
3800,
480
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b48fcb7b-6e10-4b7b-83ba-0df4a2e0b734",
"name": "data[0].firstName",
"type": "string",
"value": "={{ $json.data[0].firstName }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "bc14615f-7af4-4958-8845-47d7a7be0de5",
"name": "History",
"type": "n8n-nodes-base.set",
"position": [
3800,
660
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "db6d425d-687b-43b9-bc65-6aea510721a3",
"name": "Fullposition",
"type": "string",
"value": "={{ $('LinkedIn Data').item.json.position }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b8d4ceb7-bdfd-4abc-a12d-15dee5eaf31c",
"name": "Merge2",
"type": "n8n-nodes-base.merge",
"position": [
4480,
240
],
"parameters": {},
"typeVersion": 3.1
},
{
"id": "401c61cf-8d1e-48a8-9f6e-e83e49e45a8f",
"name": "Aggregate2",
"type": "n8n-nodes-base.aggregate",
"position": [
4660,
240
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "999f524d-22f7-447a-930b-6b95ad12a90c",
"name": "Edit Fields1",
"type": "n8n-nodes-base.set",
"position": [
4840,
240
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "4d6e58bc-05b6-4751-b450-ead72648e40f",
"name": "Pain Point + Solution",
"type": "string",
"value": "={{ $json.data[0].output['Pain Point + Solution'] }}"
},
{
"id": "05211aa5-b572-41fe-bb8e-09a1cb29cdb7",
"name": "Fullposition",
"type": "string",
"value": "={{ $json.data[1].Fullposition }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6cb4c7db-1a41-4a0c-9ab8-6cdbd8a3c050",
"name": "All Done",
"type": "n8n-nodes-base.noOp",
"position": [
2480,
240
],
"parameters": {},
"typeVersion": 1
},
{
"id": "5e5fba3e-a950-4425-993d-b82f0b32d8db",
"name": "SendGrid",
"type": "n8n-nodes-base.sendGrid",
"position": [
5760,
500
],
"parameters": {
"subject": "={{ $('Aggregate').item.json.data[1].output.Subject }}",
"toEmail": "=",
"resource": "mail",
"contentType": "text/html",
"contentValue": "={{ $json.output }}",
"additionalFields": {}
},
"typeVersion": 1
},
{
"id": "bc32ff25-c629-487f-89e2-6311afa4a6ed",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
3740,
340
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "gpt-4.1"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "ffb55b9c-7480-4907-9bd0-5cc427b67b3d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2040,
-120
],
"parameters": {
"color": 4,
"width": 3960,
"height": 1160,
"content": "## Hyper-Personalised Mail Generator \n\n\n## 1. Add twilio for smtp(manages everything for you).\n## 2. Pay for rapid api otherwise the flow will fail after 20-25 scrapes in free tier.\n## 3. Pay for supabase if data is too much.\n## 4. Ensure that you have enough tokens in your openAI for your outreach volume.\n## 5. 7000-12000 total token consumption per run(avg).\n## 6. Give the linkedin id link as input"
},
"typeVersion": 1
},
{
"id": "db19ec1f-6a6b-4c17-b6ba-1f015d686084",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
2140,
600
],
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "1c8cb7dd-627d-49f9-a92a-d1c6b24a9a0d",
"name": "User Profiling according to Product",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
3780,
160
],
"parameters": {
"text": "={{ $json.data }}",
"options": {
"systemMessage": "="
},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": true,
"typeVersion": 1.9
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "37a86dac-74ed-41c2-99ab-615c0b5d9990",
"connections": {
"Code": {
"main": [
[
{
"node": "LinkedIn Posts",
"type": "main",
"index": 0
}
]
]
},
"Name": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Story": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Aggregate1",
"type": "main",
"index": 0
}
]
]
},
"Merge2": {
"main": [
[
{
"node": "Aggregate2",
"type": "main",
"index": 0
}
]
]
},
"History": {
"main": [
[
{
"node": "Merge2",
"type": "main",
"index": 1
}
]
]
},
"SendGrid": {
"main": [
[
{
"node": "Successful Outreach",
"type": "main",
"index": 0
}
]
]
},
"Aggregate": {
"main": [
[
{
"node": "HTML Modifier",
"type": "main",
"index": 0
}
]
]
},
"Aggregate1": {
"main": [
[
{
"node": "Check Null Values",
"type": "main",
"index": 0
}
]
]
},
"Aggregate2": {
"main": [
[
{
"node": "Edit Fields1",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields1": {
"main": [
[
{
"node": "Story",
"type": "main",
"index": 0
}
]
]
},
"Last 5 Posts": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"HTML Modifier": {
"main": [
[
{
"node": "SendGrid",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn Data": {
"main": [
[
{
"node": "Summery+First Name",
"type": "main",
"index": 0
}
]
]
},
"Required Data": {
"main": [
[
{
"node": "Supabase",
"type": "main",
"index": 0
}
]
]
},
"Apollo Scraper": {
"main": [
[
{
"node": "Required Data",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn Posts": {
"main": [
[
{
"node": "Last 5 Posts",
"type": "main",
"index": 0
}
]
]
},
"Relevance Check": {
"main": [
[
{
"node": "Merge2",
"type": "main",
"index": 0
}
],
[
{
"node": "Irrelevant Leads",
"type": "main",
"index": 0
}
]
]
},
"Irrelevant Leads": {
"main": [
[
{
"node": "All Done",
"type": "main",
"index": 0
}
]
]
},
"Check Null Values": {
"main": [
[
{
"node": "User Profiling according to Product",
"type": "main",
"index": 0
},
{
"node": "Name",
"type": "main",
"index": 0
},
{
"node": "History",
"type": "main",
"index": 0
}
],
[
{
"node": "All Done",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "User Profiling according to Product",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "HTML Modifier",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model2": {
"ai_languageModel": [
[
{
"node": "Story",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Summery+First Name": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Successful Outreach": {
"main": [
[
{
"node": "All Done",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Story",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "User Profiling according to Product",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "LinkedIn Data",
"type": "main",
"index": 0
},
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Apollo Scraper",
"type": "main",
"index": 0
}
]
]
},
"User Profiling according to Product": {
"main": [
[
{
"node": "Relevance Check",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
> 💛 Sticky Note: > This Hyperpersonalized Outreach n8n template automates AI‑powered B2B email campaigns by combining Apollo.io lead scraping, LinkedIn enrichment, GPT‑4 generation, and SendGrid delivery. Follow the setup steps below to get started in minutes!
Source: https://n8n.io/workflows/6039/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Autonomous Ai Crawler. Uses toolWorkflow, lmChatOpenAi, outputParserStructured, manualTrigger. Event-driven trigger; 38 nodes.
This workflow with AI agent is designed to navigate through the page to retrieve specific type of information (in this example: social media profile links).
The scoring approach is adapted from the open-source evaluations project RAGAS and you can see the source here https://github.com/explodinggradients/ragas/blob/main/ragas/src/ragas/metrics/answercorre
fomono_v5. Uses telegramTrigger, telegram, supabase, httpRequest. Event-driven trigger; 26 nodes.
The scoring approach is adapted from the open-source evaluations project RAGAS and you can see the source here https://github.com/explodinggradients/ragas/blob/main/ragas/src/ragas/metrics/answerrelev