


添加提示词
js针对用户的问题进行提示词优化,方便后面进行SQL查
询。必须输出一个严格的、格式正确的JSON对象,并且
只输出这个JSON,不能有任何其他解释、注释、
Markdown代码块标记或多余的文字。

然后加个aget策略

因为ollama没有Rerank类型,需要通过本地写一个python接口作为过度
pythonfrom fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import requests
import json
# 初始化 FastAPI 应用
app = FastAPI()
# Ollama 配置
OLLAMA_BASE_URL = "http://192.168.31.22:11434" # 你的 Ollama 地址
OLLAMA_RERANK_MODEL = "gpt-oss:20b" # 你在 Ollama 中运行的重排模型名称
# 定义 Dify 重排请求体格式
class DifyRerankRequest(BaseModel):
query: str
documents: list[dict] # 格式:[{"content": "文档内容"}, ...]
top_k: int = 5
# 定义 Dify 重排响应体格式
class DifyRerankResult(BaseModel):
index: int
relevance_score: float
class DifyRerankResponse(BaseModel):
results: list[DifyRerankResult]
@app.post("/api/rerank", response_model=DifyRerankResponse)
async def rerank(request: DifyRerankRequest):
try:
# 1. 构造 Ollama 的 prompt(让 BGE-Reranker 输出结构化评分)
docs_content = [doc["content"] for doc in request.documents]
prompt = f"""
请作为重排模型,根据查询文本与文档内容的相关性,为每个文档打分(0-1,保留4位小数)。
查询文本:{request.query}
文档列表:{json.dumps(docs_content, ensure_ascii=False)}
输出格式为 JSON 数组,仅包含分数,顺序与文档列表一致,不要其他内容。
"""
# 2. 调用 Ollama 的 /api/generate 接口
ollama_response = requests.post(
f"{OLLAMA_BASE_URL}/api/generate",
json={
"model": OLLAMA_RERANK_MODEL,
"prompt": prompt,
"stream": False, # 关闭流式输出
"temperature": 0.0 # 固定温度,避免随机
},
timeout=30
)
ollama_response.raise_for_status()
ollama_data = ollama_response.json()
scores = json.loads(ollama_data["response"].strip())
# 3. 处理评分,按分数降序排序,取 top_k
doc_with_scores = list(enumerate(scores)) # (index, score)
doc_with_scores.sort(key=lambda x: x[1], reverse=True)
top_docs = doc_with_scores[:request.top_k]
# 4. 构造 Dify 格式的响应
results = [
DifyRerankResult(index=doc[0], relevance_score=doc[1])
for doc in top_docs
]
return DifyRerankResponse(results=results)
except Exception as e:
raise HTTPException(status_code=500, detail=f"适配层错误:{str(e)}")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000) # 中间件运行在 8000 端口

本文作者:松轩(^U^)
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!