#1080·vanna

怎样可以调用我的chromaDB向量库里训练的内容

Author: jiang-taosCreated Jan 28, 2026Updated Mar 5, 2026

我希望将表结构和一些字段的业务解释放在一个documen中写入chromaDB向量库,在提问时它能够检索到这些相关的内容作为上下文来编写sql,然而agent_memory内置的相似度检索计算出来的相似度比较低,即便是使用中文环境的embedding_function,相似度也仅有0.6,这种情况下写入的训练文档基本不起作用,我想知道这种情况如何解决? 我希望他能够通过我给的DDL表结构或者相关的说明去生成sql,其次再通过数据库中的表结构来判断

`"""测试 ChromaAgentMemory的文本记忆存储和检索功能"""

import asyncio from vanna.integrations.chromadb import ChromaAgentMemory from vanna.core.user import User from vanna.core.tool import ToolContext from chromadb.utils import embedding_functions import os os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'

async def test_memory_search():

# 创建支持中文的 embedding 函数
embedding_func = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
    device="cpu"
)
# 创建 ChromaAgentMemory
agent_memory = ChromaAgentMemory(
    collection_name="vanna_memory",
    persist_directory="/data/vanna_project/test/chroma_test_check",
    embedding_function=embedding_func  # ← 传入中文模型
)


# 2. 创建用户上下文
test_user = User(id="admin", email="[email protected]", group_memberships=["admin"])

# 3. 写入文档示例
print("=== 写入文档记忆 ===")
documen_examples = [
    '''
    [关键词: 数据库规则]
    inst_code字段代表数据来源平台,所有表如果存在inst_code字段,关联时需添加条件使其相等
    ''',
    
    '''
    [关键词: 订单流水表]
    表名:bi_analy_game_order
    [字段说明]
    status: 支付状态,2表示已支付,1表示未支付,3表示支付失败
    pay_time/pay_date: 支付时间/支付日期,pay_time为10位数字时间戳,pay_date为date格式
    amount: 流水金额,单位为分,一般统计时需折算成元
    reg_time/reg_date: 注册时间/注册日期,reg_time为10位数字时间戳,reg_date为date格式
    mem_id/username: 用户ID/用户名
    h5_id: 游戏项目ID,关联game表的app_id字段获取游戏信息
    reg_app_id: 注册包体id,关联game表的app_id字段获取注册包体
    pay_app_id: 支付包体id,关联game表的app_id字段获取支付包体

    [查询示例]
    查询订单流水、支付金额、充值金额等
    ''',

    '''订单流水'''
]
for doc in documen_examples:
    result = await agent_memory.save_text_memory(
        content=doc,
        context=ToolContext(
            user=test_user,
            conversation_id="test_conversation",
            request_id="test_request",
            agent_memory=agent_memory
        )
    )
    print(f"已保存记忆 ID: {result.memory_id}")

print(f"\n共写入 {len(documen_examples)} 条文档记忆\n")

# 4. 测试检索
print("=== 测试检索 ===")

test_queries = [
    "订单流水",
    "inst_code字段",
    "游戏ID"
]

for query in test_queries:
    print(f"\n查询: '{query}'")
    results = await agent_memory.search_text_memories(
        query=query,
        context=ToolContext(
            user=test_user,
            conversation_id="test_conversation",
            request_id="test_search",
            agent_memory=agent_memory
        ),
        limit=3,
        similarity_threshold=0.1  # 降低阈值看更多结果
    )

    if results:
        for r in results:
            print(f"  [排名{r.rank}] 相似度: {r.similarity_score:.3f}")
            print(f"  内容预览: {r.memory.content[:80]}...")
    else:
        print("  未找到相关结果")

if name == "main": asyncio.run(test_memory_search()) `