佛系一点。我这个人性格比较好,但这些年,由于生活的压力,性格也慢慢地发生了改变。这一段时间做头条号运营,开始对上号人联系不上,还可以理解,最不能接受的是,她主动联系我,我给她发码,前后不到5分钟,她就没音了,怎么说就是不理了,让我有点郁闷,但只拉黑了一个,放我两次鸽子的女孩。随着推广头条的顺利进行,性格也稳定了不少,对上号者少了兴奋,但会以更快的速度响应,因为就那几个动作,越来越熟练。对于联系我之后没音的,我也选择了原谅,立即把她取消置顶聊天,头条软件里的信息先放那,不再联系她。她哪天想通了会联系我,不联系的话,也没关系,也可能人家有别的事,咱也管不着。总之是来者欢迎,调戏我的也接受,就当增加了生活乐趣。
底部有张生活照片(头条号运营:大家想全托管上号的联系我哦,每天让你得个早餐钱,微信号: qhz_toutiao)【关键词】python、ragflow、设置会话、保存档案
描述:现在设置会话信息时,需要把宠物档案带过来,需要做一下。
开工:
20250512周一时间段:17:33-17:00测试用例如下:
def test_set_conversation(client):
log.info("test_expert_diagnosis")
'''
测试 设置会话时保存宠物档案信息
'''
json_data = {
"add_time": "2025-05-09 12:30:13",
"animal": "狗狗",
"animal_type": "澳大利亚牧牛犬",
"avatar": "",
"birthday": "2025-05-09",
"conversation_id": "b1210beb53d245199e3f9a8a93641237",
"dialog_id": "9cf3d9eaf77c11ef8dc500e003c42347",
"enable_search": false,
"id": "38",
"is_choosed": "0",
"is_deleted": "0",
"message": [
{
"role": "assistant",
"content": "你好"
}
],
"modify_time": "2025-05-09 12:30:13",
"name": "你好",
"neuter": "0",
"nick": "土豆",
"openid": "oi87O6xKvGO_LwalOFaXmJ8Yswi8",
"sex": "男",
"speical_time": "非特殊时期",
"vaccination": "已接种",
}
url = f"/v1/conversation/set"
resp = client.post(
url,
json=json_data,
headers={
"Content-type": "application/json",
"Authorization": "Bearer ragflow-UxOGYzZjUwYjMwOTExZWZiODc0MDI0Mm"
}
)
if not 200 <= resp.status_code < 300:
raise Exception(f"GET {url} status_code {resp.status_code}.")
# received_data = []
for chunk in resp.iter_encoded():
answer = chunk.decode('utf-8').strip()
log.info(f"\n\n answer: {answer} \n\n")
注:运行测试用例结果如下:
2025-05-12 17:45:59.874 | INFO | test_conversation_app.py:test_set_conversation:222 -
answer: {"code":401,"data":null,"message":"<Unauthorized '401: Unauthorized'>"}
注:这个是登录验证,需要先去掉。去掉之后,能创建成功,如下:
{
"code": 0,
"data": {
"create_date": "Mon, 12 May 2025 17:51:49 GMT",
"create_time": 1747043509207,
"dialog_id": "9cf3d9eaf77c11ef8dc500e003c42347",
"dispatch": null,
"id": "b93d467c2f1611f0a79457792f30f995",
"intention": null,
"is_new": false,
"message": [{
"content": "您好,我是您的私人宠物医生,有什么可以帮到您的吗?",
"role": "assistant"
}, {
"content": "你好",
"role": "user"
}],
"name": "你好",
"reference": [],
"update_date": "Mon, 12 May 2025 17:51:49 GMT",
"update_time": 1747043509207,
"user_id": null
},
"message": "success"
}
注:接下来,把保存档案放开,看有没有问题。
20250512周一时间段:17:54-19:00把保存档案信息放开,看看效果,报了个错,说是dialog_id没识别,在model中加入这个字段就好了,再次运行,能成功写入,但发现一个小问题,就是conversation_id不对,是原始的假的,数据库中并不存在,需要换成真的。
修改程序如下:

图1a-1
注:这个保存能成功,但出现了另一个问题,就是一个用户,创建多次会话,会出现多条宠物记录,实际上可能这些记录是重复的,所以,接下来,以dialog_id与animal_id进行验证,一个用户(一个dialog_id)可能存在多个宠物,就通过animal_id进行区分,至于拿着会话_id去找宠物时,看哪个宠物被选择(is_choose),就是说,会话id(conversation_id)与宠物不建立直接关联。
接下来,按这个思路进行修改。
20250512周一时间段:18:24-19:00接下来,做以dialog_id,animal_id为主的验证,以便更新宠物档案。
修改程序如下:
###保存宠物档案信息
if 'id' in ori_req and ori_req["id"]:
save_data = {
"id": get_uuid(),
"animal_id": ori_req["id"],
"animal": ori_req["animal"],
"animal_type": ori_req["animal_type"],
"avatar": ori_req["avatar"],
"birthday": ori_req["birthday"],
"dialog_id": ori_req["dialog_id"],
"is_choosed": ori_req["is_choosed"],
"is_deleted": ori_req["is_deleted"],
"neuter": ori_req["neuter"],
"nick": ori_req["nick"],
"openid": ori_req["openid"],
"sex": ori_req["sex"],
"speical_time": ori_req["speical_time"],
"vaccination": ori_req["vaccination"]
}
animal_info = AnimalService.query(animal_id=ori_req["id"], dialog_id=ori_req["dialog_id"])
if animal_info:
AnimalService.update_by_id(animal_info["id"], save_data)
else:
AnimalService.save(**save_data)
else:
log.info("save_data is None")
注:运行一下,看看效果。试了下,还可以,截图如下:

图1a-2
注:保存宠物档案信息完成,接下来,获取聊天时,获取宠物档案信息。
描述:现在保存和更新宠物档案信息做完了,接下来,是聊天时获取宠物档案信息。
开工:
20250512周一时间段:19:31-21:00写程序截图如下:

图1b-1
注:跑个测试用例,看下效果,测试用例如下:

图1b-2
注:测试效果还可以,接下来,修改es密码。
测试还可以
描述:接下来,修改下es密码,以免遭人攻击。
开工:
20250512周一时间段:23:53-01:00先查下资料,如下:
修改Elasticsearch集群中索引的密码
在Elasticsearch中,"索引密码"这个概念并不直接存在,因为Elasticsearch本身不提供索引级别的密码保护。不过,根据您的需求,可能有以下几种解释和对应的解决方案:
如果您想修改访问Elasticsearch集群的用户密码:
# 使用elasticsearch-users命令行工具
bin/elasticsearch-users passwd <username> -p <new-password>
# 或者通过API(需要管理员权限)
PUT _security/user/<username>/_password
{
"password": "newpassword"
}
注:用这个方法试试。效果如下:

图1c-1
注:这个方法看来是不行的,在程序中搞一下试试。效果如下:

图1c-2
注:接下来,查下解决方案。
20250512周一时间段:23:53-01:00这个错误表明您的 Elasticsearch 集群可能没有启用安全功能(X-Pack Security),或者您使用的 API 路径不正确。以下是解决方案:
确认 Elasticsearch 安全功能是否启用
在 elasticsearch.yml 配置文件中检查是否启用了安全功能:
xpack.security.enabled: true如果没有启用,您需要:
修改 elasticsearch.yml,添加:
xpack.security.enabled: true重启 Elasticsearch 集群。
运行密码设置工具:
bin/elasticsearch-setup-passwords interactive这会初始化所有内置用户(如 elastic、kibana_system 等)的密码。
启用节点加密后报错如下:
{"@timestamp":"2025-05-13T03:12:32.842Z", "log.level": "INFO", "message":"loaded module [x-pack-eql]", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"main","log.logger":"org.elasticsearch.plugins.PluginsService","elasticsearch.node.name":"zero3","elasticsearch.cluster.name":"ragflow-cluster"}
{"@timestamp":"2025-05-13T03:12:35.342Z", "log.level": "INFO", "message":"using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sdc)]], net usable_space [1.1tb], net total_space [1.7tb], types [ext4]", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"main","log.logger":"org.elasticsearch.env.NodeEnvironment","elasticsearch.node.name":"zero3","elasticsearch.cluster.name":"ragflow-cluster"}
{"@timestamp":"2025-05-13T03:12:35.342Z", "log.level": "INFO", "message":"heap size [30gb], compressed ordinary object pointers [true]", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"main","log.logger":"org.elasticsearch.env.NodeEnvironment","elasticsearch.node.name":"zero3","elasticsearch.cluster.name":"ragflow-cluster"}
{"@timestamp":"2025-05-13T03:12:35.400Z", "log.level": "INFO", "message":"node name [zero3], node ID [JKCTeIWhRZeJ08C9-5Db4Q], cluster name [ragflow-cluster], roles [ingest, data, master]", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"main","log.logger":"org.elasticsearch.node.Node","elasticsearch.node.name":"zero3","elasticsearch.cluster.name":"ragflow-cluster"}
{"@timestamp":"2025-05-13T03:12:37.879Z", "log.level":"ERROR", "message":"fatal exception while booting Elasticsearch", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"main","log.logger":"org.elasticsearch.bootstrap.Elasticsearch","elasticsearch.node.name":"zero3","elasticsearch.cluster.name":"ragflow-cluster","error.type":"org.elasticsearch.ElasticsearchSecurityException","error.message":"invalid SSL configuration for xpack.security.transport.ssl - server ssl configuration requires a key and certificate, but these have not been configured; you must set either [xpack.security.transport.ssl.keystore.path], or both [xpack.security.transport.ssl.key] and [xpack.security.transport.ssl.certificate]","error.stack_trace":"org.elasticsearch.ElasticsearchSecurityException: invalid SSL configuration for xpack.security.transport.ssl - server ssl configuration requires a key and certificate, but these have not been configured; you must set either [xpack.security.transport.ssl.keystore.path], or both [xpack.security.transport.ssl.key] and [xpack.security.transport.ssl.certificate]\n\tat org.elasticsearch.xcore@8.11.3/org.elasticsearch.xpack.core.ssl.SSLService.throwExceptionForMissingKeyMaterial(SSLService.java:686)\n\tat org.elasticsearch.xcore@8.11.3/org.elasticsearch.xpack.core.ssl.SSLService.validateServerConfiguration(SSLService.java:642)\n\tat org.elasticsearch.xcore@8.11.3/org.elasticsearch.xpack.core.ssl.SSLService.loadSslConfigurations(SSLService.java:627)\n\tat org.elasticsearch.xcore@8.11.3/org.elasticsearch.xpack.core.ssl.SSLService.<init>(SSLService.java:160)\n\tat org.elasticsearch.xcore@8.11.3/org.elasticsearch.xpack.core.XPackPlugin.createSSLService(XPackPlugin.java:502)\n\tat org.elasticsearch.xcore@8.11.3/org.elasticsearch.xpack.core.XPackPlugin.createComponents(XPackPlugin.java:342)\n\tat org.elasticsearch.server@8.11.3/org.elasticsearch.node.Node.lambda$new$17(Node.java:759)\n\tat org.elasticsearch.server@8.11.3/org.elasticsearch.plugins.PluginsService.lambda$flatMap$1(PluginsService.java:263)\n\tat java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273)\n\tat java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)\n\tat java.base/java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(AbstractList.java:722)\n\tat java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)\n\tat java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)\n\tat java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)\n\tat java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)\n\tat java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)\n\tat java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)\n\tat java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)\n\tat org.elasticsearch.server@8.11.3/org.elasticsearch.node.Node.<init>(Node.java:775)\n\tat org.elasticsearch.server@8.11.3/org.elasticsearch.node.Node.<init>(Node.java:344)\n\tat org.elasticsearch.server@8.11.3/org.elasticsearch.bootstrap.Elasticsearch$2.<init>(Elasticsearch.java:236)\n\tat org.elasticsearch.server@8.11.3/org.elasticsearch.bootstrap.Elasticsearch.initPhase3(Elasticsearch.java:236)\n\tat org.elasticsearch.server@8.11.3/org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:73)\n"}
ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/ragflow-cluster.log
ERROR: Elasticsearch exited unexpectedly, with exit code 1
admin@zero3 ragflow git:(v0.16.0-b) ➜
注:接下来,要配置下证书。
昨日数据来啦,昨日总收入:856.24,昨日总播放:901.8万,软件截图如下:

图1d-1
注:想要全脱管运营头条号的联系我,你出账号,我来运营,保你天天有钱花,咨询电话: 17701328814(微信同号),也可以加群先了解一下。

图1d-2
注:个人微信如下,欢迎骚扰。

图1d-3
拍摄于2026年2月2日,9:29:19,和二宝在门口玩,当时二宝三岁四个月。现在随着推广的进行,想明白了一些事情,首先,我这个副业,是为了挣钱,那开门做生意,什么样的客户都有,前提是不应该与客户置气,有句话说:客户虐我千百遍,我待客户如初恋。像那个叫“夏日暖洋洋”的客户,我又给她从黑名单里放出来了,哪天她愿意上号了,我还会热情相待,生意嘛,不讲感情,要理性,你来上号,我热情服务,不上号,来调戏我两下,我也接受,如果上号的多,不搭理她就行了,先服务意向强烈客户,再聊闲。

图1e-1
《本文完》