fleet-memory/hindsight-docs/docs/developer/multilingual.md
Nicolò Boschi c65c6a9dc0
feat: support for multilingual content (#124)
* feat: support for multilingual content

* feat: support for multilingual content
2026-01-08 12:14:41 +01:00

5.8 KiB
Raw Blame History

sidebar_position
5

Multilingual Support

Hindsight automatically detects the language of your input and responds in the same language. This means facts, entities, and reflections are preserved in their original language without translation to English.

How It Works

graph LR
    A[Chinese Input] --> B[Language Detection]
    B --> C[Extract Facts in Chinese]
    C --> D[Chinese Entities]
    D --> E[Chinese Response]

When you retain content or reflect on a query, Hindsight:

  1. Detects the input language automatically from the content
  2. Extracts facts in the original language - preserving nuance and meaning
  3. Stores entities in their native script - 张伟 stays 张伟, not "Zhang Wei"
  4. Responds in the same language - queries in Chinese get Chinese answers

Retain with Non-English Content

When you retain content in any language, Hindsight extracts and stores facts in that same language.

Example: Chinese Content

from hindsight import Hindsight

hindsight = Hindsight()

# Retain Chinese content
hindsight.retain(
    bank_id="user-123",
    content="""
    张伟是一位资深软件工程师,在腾讯工作了五年。
    他专门研究分布式系统,并领导了公司微服务架构的开发。
    """,
    context="团队概述"
)

# Query in Chinese - get Chinese results
results = hindsight.recall(
    bank_id="user-123",
    query="告诉我关于张伟的信息"
)

# Facts are returned in Chinese:
# - 张伟是一位资深软件工程师,在腾讯工作了五年
# - 张伟专门研究分布式系统,并领导了公司微服务架构的开发

Example: Japanese Content

hindsight.retain(
    bank_id="user-123",
    content="""
    田中さんはソフトウェアエンジニアで、東京のスタートアップで働いています。
    彼女はPythonとTypeScriptが得意で、毎日コードレビューをしています。
    """,
    context="チームプロフィール"
)

# Query in Japanese
results = hindsight.recall(
    bank_id="user-123",
    query="田中さんについて教えてください"
)

Reflect with Non-English Queries

The reflect operation also respects the input language, generating thoughtful responses in the same language as the query.

Example: Chinese Reflection

# Store facts about team members (in Chinese)
hindsight.retain(
    bank_id="team-eval",
    content="张伟是一位优秀的软件工程师,完成了五个重大项目。他总是按时交付,代码整洁有良好的文档。",
    context="绩效评估"
)

hindsight.retain(
    bank_id="team-eval",
    content="李明最近加入团队。他错过了第一个截止日期代码有很多bug。",
    context="绩效评估"
)

# Reflect in Chinese
result = hindsight.reflect(
    bank_id="team-eval",
    query="谁是更可靠的工程师?"
)

# Response is in Chinese:
# "我认为张伟更可靠。张伟完成了五个重大项目,按时交付,代码质量高..."

Mixed Language Content

Hindsight handles mixed-language content gracefully, preserving both languages where appropriate.

Example: Chinese Text with English Company Names

hindsight.retain(
    bank_id="user-123",
    content="""
    王芳在Google北京办公室工作她是一名高级产品经理。
    之前她在Microsoft和Amazon工作过。
    她负责管理YouTube在中国市场的推广策略。
    """,
    context="员工资料"
)

# Facts preserve both languages:
# - 王芳在Google北京办公室工作担任高级产品经理
# - 王芳曾在Microsoft和Amazon工作过
# - 王芳负责管理YouTube在中国市场的推广策略

Supported Languages

Hindsight supports any language that your configured LLM can understand. This typically includes:

Language Script Example
Chinese (Simplified) 简体中文 张伟是软件工程师
Chinese (Traditional) 繁體中文 張偉是軟體工程師
Japanese 日本語 田中さんはエンジニアです
Korean 한국어 김철수는 개발자입니다
Arabic العربية أحمد مهندس برمجيات
Russian Русский Иван - разработчик
Spanish Español María es ingeniera
French Français Pierre est développeur
German Deutsch Hans ist Entwickler
And many more...

The actual language support depends on your LLM provider's capabilities.


Best Practices

1. Keep Content in One Language Per Retain Call

While mixed content works, keeping each retain call in a single language produces more consistent results.

2. Query in the Same Language as Your Content

For best results, query using the same language as your stored content. Cross-language queries (e.g., English query for Chinese content) may work but results can vary.

3. Consider Embedding Model Language Support

The default embedding model (BAAI/bge-small-en-v1.5) is English-optimized. For better multilingual semantic search, consider using a multilingual embedding model:

# In your .env file
HINDSIGHT_API_EMBEDDINGS_LOCAL_MODEL=BAAI/bge-m3

The bge-m3 model supports 100+ languages with better cross-lingual retrieval.


Technical Details

Multilingual support is implemented through LLM prompt instructions rather than external language detection libraries. This approach:

  • Requires no additional dependencies
  • Works with any LLM that supports multiple languages
  • Handles edge cases like mixed-language content naturally
  • Preserves semantic meaning better than rule-based translation

The LLM is instructed to:

  1. Detect the input language
  2. Extract all facts, entities, and descriptions in that same language
  3. Never translate to English unless the input is in English