我正在将我的应用程序从 OpenAI API 迁移到 Claude API。我非常依赖的一个功能是
logprobs
参数,它返回生成文本中每个位置的标记概率和顶级标记。然而,Claude 并不直接提供此功能。
有了 OpenAI,我可以做到:
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "Hello!"}
],
logprobs=True,
top_logprobs=2
)
这里有解决方法吗?
我认为 API 中没有办法提取它。它们允许您使用 softmax 温度控制采样方式,但不直接暴露概率。我只采用经验抽样,当然效率不高,但有效
def estimate_probabilities(prompt, n_samples=100):
responses = []
for _ in range(n_samples):
response = anthropic. completions.create(
model="<your model of choice here>",
prompt=prompt,
temperature=1.0,
max_tokens_to_sample=1024
)
responses.append(response.content)
time.sleep(0.1)
unique_responses = set(responses)
probabilities = {
response: responses.count(response) / n_samples
for response in unique_responses
}
return dict(sorted(probabilities.items(), key=lambda x: x[1], reverse=True)
如果您需要像 OpenAI 一样在完成中级联许多令牌,您将需要相应地扩展我的代码