怎样可以调用我的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()) `
Source: vanna-ai/vanna