当前位置:   article > 正文

使用 Elastic 和 Mistral 构建多语言 RAG(一)_multilingual rag

multilingual rag

作者:来自 Elastic Gustavo Llermaly

使用 Elastic 和 Mixtral 8x22B 模型构建多语言 RAG 应用程序。

Mixtral 8x22B 是性能最高的开放式模型,其最强大的功能之一是能够流利使用多种语言;包括英语、西班牙语、法语、意大利语和德语。

想象一下,一家跨国公司拥有不同语言的支持单和解决方案,并希望跨部门利用这些知识。目前,知识仅限于代理使用的语言。让我们解决这个问题!

在本文中,我将向你展示如何通过创建多语言 RAG 系统来测试 Mixtral 的语言能力。

你可以按照此笔记本此处复现本文的示例。

如果你想在自己的自托管 Elasticsearch 集群中完成下面的展示,请详细阅读文章  “使用 Elastic 和 Mistral 构建多语言 RAG(二)”。

步骤

  1. 创建嵌入端点
  2. 创建映射
  3. 索引数据
  4. 提出问题

创建嵌入端点

我们针对此示例的支持票(suport tickets)将以英语、西班牙语和德语提供。Mistral 嵌入模型不是多语言的(嵌入模型和大模型还不是一回事!),但我们可以使用 e5 模型生成多语言嵌入,因此我们可以索引不同语言的文本并将其作为单一来源进行管理,从而为我们提供更丰富的上下文。

要创建 e5 多语言嵌入,你可以使用 Kibana

或者 _inference API:

  1. PUT _inference/text_embedding/multilingual-embeddings
  2. {
  3. "service": "elasticsearch",
  4. "service_settings": {
  5. "model_id": ".multilingual-e5-small",
  6. "num_allocations": 1 ,
  7. "num_threads": 1
  8. }
  9. }

创建映射

对于映射,我们将使用 semantic_text 映射类型,这是我最喜欢的功能之一。它可以为你处理数据分块、生成嵌入和查询嵌入的过程!

  1. PUT multilingual-mistral
  2. {
  3. "mappings": {
  4. "properties": {
  5. "super_body": {
  6. "type": "semantic_text",
  7. "inference_id": "multilingual-embeddings"
  8. }
  9. }
  10. }
  11. }

我们将文本字段称为 super_body,因为它通过单一映射类型来处理块和嵌入。

索引数据

我们将用两种语言索引几张包含问题和解决方案的支持单,然后用第三种语言询问有关许多文档中的问题。

以下文档将添加到索引中:

1. 英语支持单:日历同步问题

Support Ticket #EN1234 Subject: Calendar sync not working with Google Calendar

Description: I'm having trouble syncing my project deadlines with Google Calendar. Whenever I try to sync, I get an error message saying "Unable to connect to external calendar service."

Resolution: The issue was resolved by following these steps:

  1. Go to Settings > Integrations
  2. Disconnect the Google Calendar integration
  3. Clear browser cache and cookies
  4. Reconnect the Google Calendar integration
  5. Authorize the app again in Google's security settings

The sync should now work correctly. If problems persist, ensure that third-party cookies are enabled in your browser settings.

2. 德语支持单:文件上传问题

Support-Ticket #DE5678 Betreff: Datei-Upload funktioniert nicht

Beschreibung: Ich kann keine Dateien mehr in meine Projekte hochladen. Jedes Mal, wenn ich es versuche, bleibt der Ladebalken bei 99% stehen und dann erscheint eine Fehlermeldung.

Lösung: Das Problem wurde durch folgende Schritte gelöst:

  1. Überprüfen Sie die Dateigröße. Die maximale Uploadgröße beträgt 100 MB.
  2. Deaktivieren Sie vorübergehend den Virenschutz oder die Firewall.
  3. Versuchen Sie, die Datei im Inkognito-Modus hochzuladen.
  4. Wenn das nicht funktioniert, leeren Sie den Browser-Cache und die Cookies.
  5. Als letzten Ausweg, versuchen Sie einen anderen Browser zu verwenden.

In den meisten Fällen lag das Problem an zu großen Dateien oder an Interferenzen durch Sicherheitssoftware. Nach Anwendung dieser Schritte sollte der Upload funktionieren.

3. 营销活动创意(噪音)

Q3 Marketing Campaign Ideas

  1. Social media contest: "Share Your Productivity Hack"

    • Users share tips using our software, best entry wins a premium subscription.
  2. Webinar series: "Mastering Project Management"

    • Invite industry experts to share insights using our tool.
  3. Email campaign: "Unlock Hidden Features"

    • Series of emails highlighting lesser-known but powerful features.
  4. Partner with a productivity podcast for sponsored content.

  5. Create a "Project Management Memes" social media account for lighter, shareable content.

4. Mitarbeiter des Monats (noise)

Mitarbeiter des Monats: Juli 2023

Wir freuen uns, bekannt zu geben, dass Sarah Schmidt zur Mitarbeiterin des Monats Juli gewählt wurde!

Sarah hat außergewöhnliche Leistungen in folgenden Bereichen gezeigt:

  • Kundenbetreuung: Sarah hat durchschnittlich 95% positive Bewertungen erhalten.
  • Teamarbeit: Sie hat maßgeblich zur Verbesserung unseres internen Wissensmanagementsystems beigetragen.
  • Innovation: Sarah hat eine neue Methode zur Priorisierung von Support-Tickets vorgeschlagen, die unsere Reaktionszeiten um 20% verbessert hat.

Bitte gratulieren Sie Sarah zu dieser wohlverdienten Anerkennung!

文档在 Elasticsearch 中的样子如下:

  1. {
  2. "took": 9,
  3. "timed_out": false,
  4. "_shards": {
  5. "total": 1,
  6. "successful": 1,
  7. "skipped": 0,
  8. "failed": 0
  9. },
  10. "hits": {
  11. "total": {
  12. "value": 2,
  13. "relation": "eq"
  14. },
  15. "max_score": 0.9155389,
  16. "hits": [
  17. {
  18. "_index": "multilingual-mistral",
  19. "_id": "1",
  20. "_score": 0.9155389,
  21. "_source": {
  22. "super_body": {
  23. "text": "\n _Support Ticket #EN1234_\n **Subject**: Calendar sync not working with Google Calendar\n\n **Description**:\n I'm having trouble syncing my project deadlines with Google Calendar. Whenever I try to sync, I get an error message saying \"Unable to connect to external calendar service.\"\n\n **Resolution**:\n The issue was resolved by following these steps:\n 1. Go to Settings > Integrations\n 2. Disconnect the Google Calendar integration\n 3. Clear browser cache and cookies\n 4. Reconnect the Google Calendar integration\n 5. Authorize the app again in Google's security settings\n\n The sync should now work correctly. If problems persist, ensure that third-party cookies are enabled in your browser settings.\n ",
  24. "inference": {
  25. "inference_id": "multilingual-embeddings",
  26. "model_settings": {
  27. "task_type": "text_embedding",
  28. "dimensions": 384,
  29. "similarity": "cosine",
  30. "element_type": "float"
  31. },
  32. "chunks": [
  33. {
  34. "text": "passage: \n _Support Ticket #EN1234_\n **Subject**: Calendar sync not working with Google Calendar\n\n **Description**:\n I'm having trouble syncing my project deadlines with Google Calendar. Whenever I try to sync, I get an error message saying \"Unable to connect to external calendar service.\"\n\n **Resolution**:\n The issue was resolved by following these steps:\n 1. Go to Settings > Integrations\n 2. Disconnect the Google Calendar integration\n 3. Clear browser cache and cookies\n 4. Reconnect the Google Calendar integration\n 5. Authorize the app again in Google's security settings\n\n The sync should now work correctly. If problems persist, ensure that third-party cookies are enabled in your browser settings.",
  35. "embeddings": [
  36. 0.0059651174,
  37. 0.0016363655,
  38. -0.064753555,
  39. 0.0093298275,
  40. 0.05689768,
  41. -0.049640983,
  42. 0.02504726,
  43. 0.0048340675,
  44. 0.08093895,
  45. ...
  46. ]
  47. }
  48. ]
  49. }
  50. }
  51. }
  52. }
  53. ]
  54. }
  55. }

问问题

现在,我们要用西班牙语提出一个问题:

  1. Hola, estoy teniendo problemas para ocupar su aplicación, estoy teniendo problemas para sincronizar mi calendario, y encima al intentar subir un archivo me da error.

预期是检索文档 #1 和 #2,然后将它们作为附加上下文发送给 LLM,最后得到西班牙语的答案。

检索文档

为了检索相关文档,我们可以使用这个简短的查询,它将对嵌入进行搜索,并返回与问题最相关的支持票。

  1. GET multilingual-mistral/_search
  2. {
  3. "size": 2,
  4. "_source": {
  5. "excludes": ["*embeddings", "*chunks"]
  6. },
  7. "query": {
  8. "semantic": {
  9. "field": "super_body",
  10. "query": "Hola, estoy teniendo problemas para ocupar su aplicación, estoy teniendo problemas para sincronizar mi calendario, y encima al intentar subir un archivo me da error."
  11. }
  12. }
  13. }

关于参数设置的说明:size: 2 因为我们知道我们想要前 2 个文档。excludes 为了响应清晰。文档很短,因此每个文档的长度为一个块。

回答问题

现在我们可以使用 Python 库调用 Mistral 完成 API 来回答问题。

  1. from mistralai.client import MistralClient
  2. from mistralai.models.chat_completion import ChatMessage
  3. api_key = os.environ["MISTRAL_API_KEY"]
  4. model = "open-mixtral-8x22b"
  5. client = MistralClient(api_key=api_key)
  6. system_message = "You are a helpful multilingual agent that helps users with their problems. You have access to a knowledge base of different languages and you must answer in the same language the question was asked."
  7. user_message = """
  8. ## Question:
  9. Hola, estoy teniendo problemas para ocupar su aplicación, estoy teniendo problemas para sincronizar mi calendario, y encima al intentar subir un archivo me da error.
  10. ## Related knowledge:
  11. Support Ticket #EN1234 Subject: Calendar sync not working with Google Calendar...
  12. (the rest of the content of the document)
  13. \n
  14. Support-Ticket #DE5678 Betreff: Datei-Upload funktioniert nicht...
  15. (the rest of the content of the document)
  16. ANSWER:
  17. """
  18. messages = [
  19. ChatMessage(role="system", content=system_message),
  20. ChatMessage(role="user", content=user_message)
  21. ]
  22. chat_response = client.chat(
  23. model=model,
  24. messages=messages,
  25. )
  26. print(chat_response.choices[0].message.content)

答案是完美的西班牙语,而且切中要点!

答案是:

  1. Hola, me alegra que te hayas comunicado con nosotros. Parece que hay dos problemas distintos.
  2. En cuanto a la sincronización del calendario, puedes seguir estos pasos para resolver el problema:
  3. Ve a Configuración > Integraciones
  4. Desconecta la integración del Calendario de Google
  5. Borra la caché y las cookies del navegador
  6. Vuelve a conectar la integración del Calendario de Google
  7. Autoriza de nuevo la aplicación en la configuración de seguridad de Google
  8. Si sigues teniendo problemas, asegúrate de que las cookies de terceros están habilitadas en la configuración de tu navegador.
  9. En cuanto al problema de subir un archivo, hay varias cosas que puedes probar:
  10. Comprueba el tamaño del archivo. El tamaño máximo de carga es de 100 MB.
  11. Desactiva temporalmente el antivirus o el cortafuegos.
  12. Intenta cargar el archivo en modo incógnito.
  13. Si eso no funciona, borra la caché y las cookies del navegador.
  14. Como último recurso, prueba a usar un navegador diferente.
  15. En la mayoría de los casos, el problema se debe a archivos demasiado grandes o a interferencias causadas por software de seguridad. Al seguir estos pasos, deberías poder cargar el archivo correctamente.
  16. ¡Espero que esto te ayude a resolver tus problemas! Si tienes alguna otra pregunta, no dudes en preguntar.

结论

Mixtral 8x22B 是一个强大的模型,它使我们能够利用不同语言的数据源,能够回答、理解和翻译多种语言。这种能力——与多语言嵌入一起 —— 使你能够在数据检索和答案生成阶段获得多语言支持,完全消除语言障碍。

如果你有兴趣重现本文的示例,你可以在此处找到包含请求的 Python Notebook。

准备好自己尝试一下了吗?开始免费试用
Elasticsearch 集成了 LangChain、Cohere 等工具。加入我们的高级语义搜索网络研讨会,构建你的下一个 GenAI 应用程序!

原文:Building multilingual RAG with Elastic and Mistral — Search Labs

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/983738
推荐阅读
相关标签
  

闽ICP备14008679号